Skip to content

Receipt formats and compatibility

Choose by the full document shape and producer, not its version string alone. Both Protect and decision receipts can carry seal_receipt v2. Ambiguous, duplicate or malformed discriminators must not be normalized by copying fields into another schema.

Family Producer and identifying shape Key and replay Limit
Protect v2 Seal Node gate; whole-receipt seal, commitments and recorded kernel inputs Separate receipt-signer public key; verifier-local decision replay No producer kernel identity; authority and occurrence not established
Spine v1 Older Node gate; receipt field seal.spine/v1 Separate receipt-signer public key; signature and bindings No kernel replay
Decision receipts Kernel/host family; signed configuration and request/decision bindings Config-signer trust anchor depends on profile; replay where the request can be reconstructed Unparseable input can yield reduced scope; unsigned/legacy shapes have their own refusal paths

The Protect normative contract accepts finite decimals in its supported range. At the pinned companion revisions in sources, the browser and kit still reject decimal arguments that the product contract permits. That is a checker compatibility gap, not an invalid producer receipt. String/integer examples passing do not close it. A separate canonicalization change is required before broader support can be claimed.

For exact structural validation, use format references. Preserve receipt bytes: duplicate keys, lossy JSON parsing and reserialization can erase evidence that the document validator needs.

Previous: Read receipt results. Up: Check receipts. Next: Keys and safe sharing.