The receipt is a spec.
Rust, Python, and Go each produce the same bytes.
The JouleClaw receipt — cascade-walk or policy-decision — is canonical det-CBOR (RFC 8949 §4.2.1) sealed in a COSE_Sign1 envelope (RFC 9052, EdDSA). Three reference implementations agree byte-for-byte on every vector below. That’s the contract that makes “receipt” a noun a third party can verify, not a format we promise to keep stable.
Two receipt families. One envelope.
The cascade receipt (schema "1")
and the policy receipt (schema "policy/1")
are siblings. Same canonical CBOR rules. Same COSE_Sign1
envelope. Same steward identity. The wire payload differs.
Both write into the same JSONL “unified log”; readers
dispatch on the jc_receipt tag.
jc_receipt: "1"
One per cascade walk. Carries input_hash,
tier, joules_uj,
tools_touched, claims,
citations, model_id,
intent. The thermodynamic record of one resolution.
jc_receipt: "policy/1"
One per policy evaluation. Carries agent,
action, decision,
audit_sequence, policy_version.
The auditable record of one deny-by-default check.
Policy-receipt vectors
Three canonical vectors across the policy-decision space — Allow with a named rule, Explicit deny with a named rule, and No-matching-allow (deny-by-default). Pick a tab; the receipt JSON, the canonical signed-core CBOR hex, and the COSE_Sign1 envelope hex below are the exact bytes all three implementations produce.
Allow — filesystem read of a workspace file under the read-workspace rule.
{
"action": {
"kind": "filesystem",
"mode": "read",
"path": "/workspace/notes.md"
},
"agent": "did:key:zAlpha",
"audit_sequence": 1,
"closed_at": "2026-06-02T12:00:00Z",
"decision": {
"kind": "allow",
"rule": "read-workspace"
},
"engine_id": "engine-A",
"id": "polrcpt-0001",
"jc_receipt": "policy/1",
"policy_version": 1,
"steward": "did:keri:EJ9testStewardAID000000000000000"
} aa6269646c706f6c726370742d30303031656167656e746e6469643a6b65793a7a416c70686166616374696f6ea3646b696e646a66696c6573797374656d646d6f646564726561646470617468732f776f726b73706163652f6e6f7465732e6d64677374657761726478296469643a6b6572693a454a397465737453746577617264414944303030303030303030303030303030686465636973696f6ea2646b696e6465616c6c6f776472756c656e726561642d776f726b737061636569636c6f7365645f617474323032362d30362d30325431323a30303a30305a69656e67696e655f696468656e67696e652d416a6a635f7265636569707468706f6c6963792f316e61756469745f73657175656e6365016e706f6c6963795f76657273696f6e01 d284582fa201270458296469643a6b6572693a454a397465737453746577617264414944303030303030303030303030303030a0590123aa6269646c706f6c726370742d30303031656167656e746e6469643a6b65793a7a416c70686166616374696f6ea3646b696e646a66696c6573797374656d646d6f646564726561646470617468732f776f726b73706163652f6e6f7465732e6d64677374657761726478296469643a6b6572693a454a397465737453746577617264414944303030303030303030303030303030686465636973696f6ea2646b696e6465616c6c6f776472756c656e726561642d776f726b737061636569636c6f7365645f617474323032362d30362d30325431323a30303a30305a69656e67696e655f696468656e67696e652d416a6a635f7265636569707468706f6c6963792f316e61756469745f73657175656e6365016e706f6c6963795f76657273696f6e015840eceb966d0bc3b90faa8ea33442a846712c66c995450125e1d71b709f24dea47e9fcabb1ad9b7eb110572ecf24b745b15dc20fb1399643167ee4d96d13ea4dc06 Reproduce
Every vector is signed under one published Ed25519 test key. Same seed as the JCR-1 cascade-receipt vectors, so a third party can cross-validate both receipt families with one key.
EdDSA (-8) did:keri:EJ9testStewardAID000000000000000 03a107bff3ce10be1d70dd18e74bc09967e4d6309ba50d5f1ddc8664125531b8 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f The wire shape and the COSE_Sign1 envelope rules are defined in SPEC.md §2 (cascade receipt), §7 (versioning), §8 (agent identity), §9 (policy engine), and §10 (policy receipt).