Reconciles the Joule Code receipt with JCR-1, the signed-receipt format shared
across the Transaction Science family, so a Joule Code receipt verifies under the
family's existing JCR-1 tooling (and its cross-language Python/Go verifiers)
instead of a bespoke preimage. v0.1 -> v0.2 wire change.
- SPEC 6.1: the receipt's signed form is now a JCR-1 envelope — canonical
det-CBOR (RFC 8949 4.2.1, length-first key order) of the "joule-code/1"
profile, inside a COSE_Sign1 envelope (RFC 9052, EdDSA alg -8); steward in kid.
- joule-code-receipt: new jcr1 module (canonical CBOR + COSE_Sign1, vendored
from the JCR-1 reference algorithm — no JouleClaw dependency, keeping the lean
lib self-contained) + Receipt::to_jcr1_wire / seal / verify_envelope. Removed
the bespoke sign/verify. A test pins the canonical encoder byte-for-byte
against a published JCR-1 conformance vector.
- Conformance C3 vectors regenerated as JCR-1 COSE_Sign1 envelopes; the harness
verifies the envelope and that its payload is the receipt's canonical core.
- spec/receipt.md, CHANGELOG (0.2.0), READMEs, workspace version -> 0.2.0.
Verified: the conformance harness passes the whole pack with no skips;
cargo test --workspace green; vanity scanner clean.
Co-Authored-By: Claude Opus 4.8 <[email protected]>