fx

Identity

  • Names: com.vercel.fx; short alias fx.
  • Native format: fx-event-log-v3: authority.json, events.jsonl, commit.<log_generation>.json. Session-manifest schema 3 differs from event-envelope schema 1.
  • Session ID: authority.session_id, checked against session_started.payload.id and commit watermark session_id. The native timestamp/nanosecond/random ID needs no namespace.
  • Commit contract: Validate generation, framing, contiguous native sequence, terminal event ID and exact committed-byte watermark. Bytes after the watermark are not events or gaps. Defer capture while pending markers are present. Validate and project the same unchanged bytes, then recheck sidecars. The pinned reducer verifies replacement chunk IDs/order/lengths/checksums and final state identity.
  • Notes: Committed events retain sequence order; canonical history/current state follow as snapshots. Compacted summaries have unknown extent. Keep numeric signals raw and non-UTF8 bytes native with an explicit content loss. Model preferences and permission rules are configuration, not served-model or approval-request evidence. Inspect marked secret answers in every decoded replacement, including superseded states; exclude encoded secret-bearing chunks too.

Position basis

Use only positions established by the stated format and mapping evidence. Current-state rows without transcript positions go at the end, as the snapshot tail. A protocol commit boundary takes precedence over physical EOF; uncommitted bytes are not a gap.

Destinations

fx: native facts without a standard field

  • Entity keys and links: Audit identity derives from (log_generation, event_id, projection slot). The pinned reducer appends one turn per history_turn_committed and replaces history at state_replacement_committed. Appended-turn identity derives from its event; replacement turns use capture-scoped positions. Native tool IDs join result tool_call_id only when unique. Work IDs and recovery counts are not turn IDs.
  • Lineage: Directory containment and last_subagent_work_id do not qualify child identity, parent, fork, copies or root.

Usage

Select one report per native accounting identity only when this entry establishes that identity. Keep unjoinable or overlapping reports as native evidence. Declare incomplete semantic coverage. Schema defaults and placeholder zeros are not reported usage. Backend inclusion rules require evidence; do not infer them from a model name.

Lane and unassigned facts

Facts without established session ownership use manifest _meta["com.vercel.fx/unassigned"] with the common shape. Selection may retain these facts with any session subset, including an empty subset, but must not imply session ownership. State the selection policy in the export report.

Losses

Declare every applicable loss under ASR-157. Missing model rendering, accounting joins, lineage or exact context boundaries remain losses when this entry does not qualify them. Unknown ownership is not itself lost data. Omitted unassigned facts use a documented vendor loss or report, not a new core category.

Evidence

Basis: source-verified and observed: fx 0.0.6, commit 79666393e5f613c85f2f0b4b65475f1addd55379, transactional schema 3, with sanitized native tool-free/read-file captures and authored protocol tests. Schema 4 conversation logs and legacy snapshot stores are separate formats. Evidence applies only to the named formats and explicit mappings above. A real capture covers only exercised behavior. A no-model writer probe covers persistence, not model or tool execution. Authored tests do not qualify an agent version. Unlisted formats and link mappings remain unqualified.