Envelope fields

Every record is a JSON object. These members may appear on any record type; each record type adds its own fields. ASR-100 Every record MUST have type (a string), seq (ASR-012) and id (ASR-018). ASR-101 A core record type MUST match ^[a-z][a-z0-9_]*$. A vendor record type MUST be a reverse-DNS name (ASR-056), followed by /, followed by a name matching ^[A-Za-z0-9][A-Za-z0-9_.-]*$. ASR-102 Producers MUST NOT write a core record type that the formatVersion they declare does not define. Undefined core type names are reserved for future versions.

Time

ASR-103 ts MUST describe the record’s own item and MUST come from the source, or, for a recorder, from the time it received the item (with tsSource: "recorder"). A producer MUST NOT copy a timestamp from one item to another, interpolate between items, or substitute the time of conversion. ASR-104 A producer MUST NOT round or truncate a native timestamp. When the source’s precision is coarser than the written form implies (minute- or day-precision values written with zero seconds), the producer MUST set tsPrecision. Microsecond and nanosecond precision MUST be preserved when the source has it. ASR-105 tsPrecision MUST be one of ns, us, ms, s, min, day. When ts did not come from a native per-item timestamp, the producer MUST set tsSource:
  • native: a timestamp the source stored for this item;
  • container: the time of a storage container that the source maintains for exactly this item (a row’s or file’s own time);
  • embedded_text: a time written inside the item’s content (for example a timestamp element in a prompt);
  • recorder: the time a recorder received the item.
ASR-106 observedAt is the time of capture. Readers MUST NOT use observedAt as the time an item occurred. When tsPrecision is absent, readers MUST NOT assume more precision than the digits written.

Root members

ASR-107 Producers MUST NOT write top-level members other than the envelope fields above, the fields defined for the record’s type in the declared formatVersion (for a vendor record type, the fields its owner documents), and _meta. Vendor data on core record types goes in _meta. ASR-108 Readers and storage tools MUST preserve top-level members they do not recognize in streams whose formatVersion has the same major version as the version they implement and a higher minor version. Validators MUST report an unrecognized top-level member as an error when the stream’s declared version does not define it. ASR-109 inferenceId on a record other than inference names the model call that produced it. Resolution follows the reference-resolution table. A missing call produces an availability warning, including when the stream does not claim the usage profile. ASR-110 turnId MUST come from a turn identifier or an explicit turn boundary recorded by the source. Producers MUST NOT synthesize turn IDs from message counts, prompt boundaries or timing.

native

native carries or points to the source record, for round-tripping and audit.
ASR-111 native MUST contain exactly one of record, ref or blob. ASR-112 Readers MUST NOT follow a native.ref outside the bundle, and MUST NOT fetch it from a network location.

Unknown record types

ASR-113 A reader that does not recognize a record type (a vendor type, a core type it does not implement, or a core type from a newer minor version) MUST treat the record as audit-only, MUST NOT fail because of it, and, when storing or rewriting the stream, MUST preserve it unchanged. ASR-114 Vendor record types are always audit-only: they never become context predecessors, never appear in the context view, and MUST NOT carry branchesFrom. ASR-115 idSource MUST be native or derived; idScope MUST be capture. Other values follow the open-enum rules (see Extensibility).

Record type catalog

“Context” is C for context-participating types and A for audit-only types (see Structure). Every type in the catalog is part of the one JSON Schema for this version. permission and input_request share the entity key requestId. An entity ref requestId=<value> that matches records of both types is ambiguous (ASR-064).

Extension rules in brief

The full rules are in Extensibility. In summary:
  • Vendor fields go in _meta, under keys of the form <reverse-dns>/<name>. The keys traceparent, tracestate and baggage are reserved for OpenTelemetry trace context.
  • Vendor record types are <reverse-dns>/<name> and are audit-only.
  • Vendor enum values start with _. The recommended form is _<reverse-dns>/<name>, as in Agent Client Protocol (ACP) v2.
  • Every enum is open. Unknown values, fields and types are preserved by storage tools.
  • No producer adds top-level members outside the specification (ASR-107).
  • A native fact that has no standard field goes where the agent’s registry entry documents: a _meta key on the nearest record, or a vendor record type (ASR-618).