All checks were successful
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 15m30s
SPEC 4.5 required a point spending through the two-phase path to count its own open holds, and said its peers could not count them because a statement does not carry them. The channel had no two-phase path at all, so the first was unreachable and the second left work in flight at one point invisible to every other. - Channel::hold reserves as the runtime sizes a hold and refuses one larger than the channel has left once peers' stated spend and holds are counted; settle_hold settles it. A point counts its own open holds in every decision. - A statement carries held_uj, apart from spent_uj: what the point's open holds reserve now. It may go down between statements, as holds settle; spent_uj still may not. Absent when zero, so a statement with nothing in flight keeps its bytes. - Peers count a stated hold as committed. A channel whose points state themselves after every operation never commits past its budget across all of them, given honest settlements: a randomised test of three points holds to that, and fails when holds are left out of statements. - SPEC 4.5 rewritten to match; C17 checks a hold stated and counted, a second hold refused at the peer, and a settled hold leaving the count. Runtime::hold_bound_chained is public, so a channel can size a hold before placing it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
20 lines
431 B
TOML
20 lines
431 B
TOML
[package]
|
|
name = "jcp-channel"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
|
|
[dependencies]
|
|
jcp-schema = { workspace = true }
|
|
jcp-grant = { workspace = true }
|
|
jcp-runtime = { workspace = true }
|
|
ed25519-dalek = { workspace = true }
|
|
serde = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
serde_json = { workspace = true }
|
|
|
|
[lints]
|
|
workspace = true
|