open-standards/jcp/jcp-rs/crates
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 022ac1e086
Some checks failed
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
jcp §8.1: a hold through a chain counts on every link; check 9's refusal under a hold stated exactly
Review of the live-hold change found the chained two-phase path could not
place a hold. §8.1 counts a hold against every grant it names, a chained
hold's chain_ids included, but Runtime::hold takes one grant, and
authorize_chained / charge_chained placed none, so a point deciding
chained calls concurrently still decided each against the whole remainder.

jcp-runtime: Runtime::hold_chained authorizes as authorize_chained does
and places one hold naming every link in the same step. Its held_uj is
the most any link has left, since charge_chained saturates each link at
its own ceiling, and it counts against every link, so a sibling
delegate's call through a held root is refused as the holder's own next
call is. Runtime::settle_chained replaces it with each link's own debit.
authorize_chained, authorize_chained_for and charge_chained now say they
place and settle no hold. hold_bound says that sealing its figure beside
an allow from authorize or authorize_flow, rather than through hold, is
not counted live and breaks §8.1 wherever another decision can come
before the charge.

jcp-receipt: ReceiptLog::append_hold_chained and append_settle_chained
seal a chained hold with chain_ids and held_uj, and its settle naming the
hold. The replay already read held_uj over chain_ids.

SPEC: §8.1 no longer says every other call under a hold is refused. Check
9 refuses every other two-phase call and every one-shot call that would
debit anything, where no earlier check refuses it first; a one-shot call
costing 0 is still allowed. It states the chained figure and that a
sibling through a held ancestor is refused. §4.5's Statement.spent_uj is
cumulative µJ debited, never a hold, and "tunable" now covers only the
settled part of the exposure: work in flight under a hold at a point is
bounded by what that point's own decision left, which no cadence shortens.
The C14 bullet says a hold counts from the step that allows its call. The
C16 bullet covers a chained hold.

Tests: a runtime test holds through a chain and refuses a sibling
delegate, the delegate's next call and the root's holder, then settles to
each link's own debit. A receipt test seals a chained hold and its
settle, and checks the replay restores held_uj on every link, and then
each link's debit. C16 checks the same live and on replay.

Changelog: none
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-07 10:46:50 -05:00
..
jcp-a2a Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-action-receipt Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-bridge jcp §8.1: a restart no longer hands back money or a tainted wallet 2026-11-07 09:47:46 -05:00
jcp-channel jcp §8.1: a hold through a chain counts on every link; check 9's refusal under a hold stated exactly 2026-11-07 10:46:50 -05:00
jcp-cite Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-cli Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-conformance jcp §8.1: a hold through a chain counts on every link; check 9's refusal under a hold stated exactly 2026-11-07 10:46:50 -05:00
jcp-efficiency Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-energy The public IOReport status variants say what they mean under the 3-tick cap 2026-11-07 08:30:52 -05:00
jcp-flow Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-gateway jcp §8.1: an unsettled hold counts against the budget a decision is made from, live as on replay 2026-11-07 10:31:17 -05:00
jcp-grant jcp §4.6: a restart no longer hands back a standing grant's firings 2026-11-07 09:47:46 -05:00
jcp-intercept Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-orchestrate Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-policy Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-prompt Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-receipt jcp §8.1: a hold through a chain counts on every link; check 9's refusal under a hold stated exactly 2026-11-07 10:46:50 -05:00
jcp-runtime jcp §8.1: a hold through a chain counts on every link; check 9's refusal under a hold stated exactly 2026-11-07 10:46:50 -05:00
jcp-schema Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-threshold Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-trace Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
jcp-wire jcp §8.1: a crash cannot refund a debit 2026-11-07 07:48:56 -05:00
jcp-x402 Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00