open-standards/jcp/conformance
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 01128aed3e
Some checks failed
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Failing after 6m0s
jcp: the hold's life gets a published log and a second reader, and the profile spans it
Five receipt members added in the last two days — `held_minor`,
`known_through`, `captures`, `reclaims`, `refunded_minor` — had no published
vector and no independent reader. By this repository's own bar that means their
canonical form was pinned by nothing but the implementation that wrote them.

`conformance/v1/lifecycle.json` is one hash-chained log holding the life of a
money hold: a hold captured in part and then reclaimed past its deadline, a
hold captured and settled, a spend refunded by its issuer, a refund refused to
its subject, and a point that states its revocation marker on some receipts and
not others. It publishes the joules, gross money and refunds a reader must
restore. `verify_lifecycle.py` reads it by the specification's rules, sharing
no code with the reference implementation, and restored the same ledger on its
first run. Its selftest re-reads the log with each rule broken — restoring a
captured hold's whole reservation, restoring a reclaimed hold's money,
subtracting a refund from the gross debit — and requires every one refused, so
a pass means the log distinguishes the rules. It runs in CI beside the replay
reader, and a Rust test reads the committed pack through the library.

Regenerating the vectors produced exactly one new file. Every existing pack
came out byte-identical, which is independent confirmation that none of the
receipt changes altered a published vector.

The x402 profile now spans the lifecycle, and this is where our side differs
from the wire it rides: **every capture seals its own measurement.** A stream
paid per chunk gets a receipt per chunk, each committing to that draw's amount
and the energy metered since the last — so a dispute over the third step has
the third step's evidence, not one total sealed afterwards. `capture`,
`reclaim` and `refund` are on the profile; ingest reads `auth-capture` and
`batch-settlement` and takes the capture deadline from the requirement; and the
refund goes through the runtime's rule, so the agent cannot refund itself.

Co-Authored-By: Claude <[email protected]>
2026-11-10 15:24:37 -05:00
..
v1 jcp: the hold's life gets a published log and a second reader, and the profile spans it 2026-11-10 15:24:37 -05:00
verify_lifecycle.py jcp: the hold's life gets a published log and a second reader, and the profile spans it 2026-11-10 15:24:37 -05:00
verify_replay.py jcp §4.6: a restart no longer hands back a standing grant's firings 2026-11-07 09:47:46 -05:00