Skip to content

docs: retract claims the code does not establish; Req 21.19 is two-of-three - #723

Merged
cryptskii merged 1 commit into
mainfrom
docs/retract-unproven-receipt-claims-and-req-21-19
Aug 25, 2026
Merged

docs: retract claims the code does not establish; Req 21.19 is two-of-three#723
cryptskii merged 1 commit into
mainfrom
docs/retract-unproven-receipt-claims-and-req-21-19

Conversation

@cryptskii

Copy link
Copy Markdown
Collaborator

Step 2 of the frozen work order: stop asserting properties the code cannot support.

A verifier that believes it checked an advance when it checked a signature is the exact failure this subsystem exists to prevent — so each retraction names itself, next to the correction, rather than quietly rewording. Anyone who read the old text should be able to tell the claim was withdrawn.

What was retracted, and why

settlement_receipt_leaf.rs claimed a griefer "cannot manufacture one without actually paying the input", and that passing verification meant "the input was paid and the output taken".

Neither holds. trader_public_key, trader_genesis, trader_devid and post_root are all read out of the receipt, so a pass is a statement the receipt makes about itself. The cheapest tree satisfying the inclusion check has one leaf — and this module's own test fixture builds exactly that, so the honest construction and a forgery are byte-identical. No AttA is carried and the authority resolver is never invoked, so an attacker needs no real identity at all.

vault_reserve_inclusion.rs correctly diagnosed that an owner signing a digest of its own claim "adds authorship, not solvency" — then said its proof "closes that". It doesn't close it; it moves it up one level, because smt_root is still a value the owner chose. The header now says "narrows", and the two self-rooting defects are cross-referenced as symmetric: both sides of the market present self-rooted proofs.

What each mechanism still establishes — deliberately preserved

A retraction that overshoots into "this proves nothing" gets a working mechanism deleted by the next author. So both corrections say what survives:

  • The receipt is still the witness the composer wants against a trader running this software, and it does close the griefing attack it was built for.
  • The reserve proof is still strictly stronger than a bare signed digest, because the magnitudes come out of the proof rather than going in — a caller can no longer choose what the vault appears to hold.

Req 21.19

It specified three-of-five and beta four-of-five conformance vectors, contradicting the quorum-margin/ table two hundred lines earlier that #719 had already corrected to two-of-three. A table and a requirement disagreeing is worse than either being stale alone.

It now specifies two-of-three with the intersection argument recomputed: with one member unavailable, every later quorum consists of the two survivors, so a previously chosen quorum still intersects it in at least one member — and the beta profile carries no durability margin beyond that minimum.

Why #719 missed it: that sweep grepped digit forms (4/5|3/5|q = 4) and never matched the hyphenated words. This sweep covered both digit and word forms; the only surviving five-member mentions are the two deliberate historical notes.

Scope note — beyond the two files the plan named

Eleven sites called a composed state "the composed frontier", including dlv.composeVault — the observable the two-device hardware verdict used. Same class of overclaim: the fold terminates when the pointer listing it read is exhausted, that listing came from one member, and absence is indistinguishable from omission. The composed state is a valid prefix.

composeVault now says explicitly that two devices agreeing proves they derive the same successor from the same published artifacts — which is what the verdict actually checked — and not that the state is the latest.

Comments and messages only. No structural renames; those remain frontier-track work.

Verification

  • cargo test --locked --workspace --exclude dsm_storage_node -- --nocapture --test-threads=1: 63 suites / 0 failed / exit 0
  • make lint from the repo root: exit 0, 0 errors

…-three

Step 2 of the frozen work order. Three modules asserted properties their
code cannot support, and a verifier that believes it checked an advance when
it checked a signature is the exact failure this subsystem exists to prevent.
Each retraction NAMES itself, so a reader who saw the old text can tell the
claim was withdrawn rather than merely reworded.

settlement_receipt_leaf claimed a griefer "cannot manufacture one without
actually paying the input", and that passing verification meant the input was
paid and the output taken. Neither holds: trader_public_key, trader_genesis,
trader_devid and post_root are all read OUT OF THE RECEIPT, so a pass is a
statement the receipt makes about itself. The cheapest tree satisfying the
inclusion check has one leaf, and this module's own fixture builds exactly
that, so the honest construction and a forgery are byte-identical. No AttA is
carried and the authority resolver is never invoked, so an attacker needs no
real identity at all.

vault_reserve_inclusion correctly diagnosed that an owner signing a digest of
its own claim adds authorship rather than solvency, then said its proof
"closes that". It does not close it; it moves it up one level, because
smt_root is still a value the owner chose. Now says "narrows", and the two
self-rooting defects are cross-referenced as symmetric: both sides of the
market present self-rooted proofs.

What each mechanism DOES still establish is stated in both cases. The receipt
is still the witness the composer wants against a trader running this
software, and it does close the griefing attack it was built for; the reserve
proof is still strictly stronger than a bare signed digest, because the
magnitudes come out of the proof rather than going in. Retracting an
overclaim must not read as "this is worthless" — that gets a working
mechanism deleted by the next author.

Req 21.19 specified three-of-five and beta four-of-five conformance vectors,
contradicting the quorum-margin table two hundred lines earlier which #719
had already corrected to two-of-three. It now specifies two-of-three with the
intersection argument recomputed: with one member unavailable every later
quorum is the two survivors, so a previously chosen quorum still intersects
it in at least one member, and the beta profile carries no durability margin
beyond that minimum. #719 missed this by grepping digit forms only; the sweep
this time covered both digit and word forms.

Also corrected eleven sites calling a composed state "the composed frontier",
including dlv.composeVault, the observable the two-device hardware verdict
used. The fold terminates when the pointer listing it read is exhausted, that
listing came from one member, and absence is indistinguishable from omission
— so the composed state is a valid PREFIX. composeVault now says explicitly
that two devices agreeing proves they derive the same successor from the same
published artifacts, which is what the verdict checked, and not that the
state is the latest. Comments and messages only; no structural renames, which
remain frontier-track work.

workspace: 63 suites / 0 failed / exit 0. make lint: exit 0, 0 errors.
@cryptskii
cryptskii merged commit 16961be into main Aug 25, 2026
15 checks passed
@cryptskii
cryptskii deleted the docs/retract-unproven-receipt-claims-and-req-21-19 branch August 25, 2026 02:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant