open-standards/jcp/jcp-rs
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
..
conformance/v1 jcp: JCR-1 receipts bind their payload — jcp/2 + version dispatch (SPEC §8, C23) 2026-07-18 03:04:19 -04:00
crates 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
Cargo.lock jcp-wire: a caller-signed challenge, and endpoint evidence bound to the answer 2026-10-21 10:26:42 -04:00
Cargo.toml Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00