docs(sofi): 2c-C is four amendments, and the walker has been violating Req 15.3 - #781
Merged
Merged
Conversation
…g Req 15.3 A four-dimension source audit found ~26 open decisions in what was chartered as one amendment, four dimensions that are separable in fact rather than in presentation, and section 2 framework extensions required before the economic classes can be expressed at all. 0x001E field 3 is 256 x 32 bytes with no count prefix and the registry has no fixed-count-array type. So 2c-C ships as four, in dependency order: C1 framework and namespace, C2 the verification substrate (addressing, SMT, quorum and register resolution, P0-P6), C3 ValidDlvSuccessor, C4 the TA_B closure walk. C4 consumes C3 as well as C1 and C2, because TA_B verification relies on ValidDlvSuccessor wherever the accepted successor is a DLV continuation. C2 answers how the primitives work, C3 what a valid DLV continuation is, C4 how those compose - different failure modes, so they do not share a review cycle. Three rulings recorded. Protobuf bytes never carry protocol identity. The economic register cell's identity, the quorum comparison operand and AuthorityEvidenceV1's content address are all prost today, which section 2.10 forbids. These are nonconformances, not precedent. A CCB identity is mandatory; a new top-level class is not - an object with independent addressing gets a class, a canonical operand contained in another object gets its encoding defined there. Clean cut, no dual resolver, no prost fallback, and the transitive identity cut is enumerated rather than avoided. A "canonical transport protobuf" tier was rejected: it rebuilds the ambiguity 2.10 removed. One quorum rule, with q committed in authenticated state. Four shipped Rust rules disagree for every n != 3, and the economic root register's threshold is committed in no signed object, so a foreign verifier cannot derive it - two verifiers with different local configuration reach different conclusions about one lineage. The DLV side already has the pattern: authenticated V_n carries storage_set and quorum. Protocol gets exactly one q rule, authenticated state commits the q this instance used, and the beta profile stays restricted to n=3 q=2 even after the general function is specified. Live defects recorded so the sub-amendment that reaches each one fixes it rather than codifies it. The foreign-verifier walk violates Requirement 15.3. Rev 15 puts the re-hash obligation on the consumer: every Class K consumer must re-hash returned bytes against the requested address before decoding. peer_lineage.rs re-hashes ONE of four objects - the manifest at :355-358 - while the authority evidence (:365), the transition witness (:409) and the successor evidence (:414) are fetched by address with no comparison. The trait's own doc at :60-62 claims the opposite: "the walker re-checks the address anyway - a fetcher cannot substitute bytes." It can, for three of the four. The economic namespace has no declarative burn channel: schema::BURNED and is_burned are referenced zero times under dsm/src/economic/. The (0x0026,1) and (0x0027,1) burns ARE enforced structurally by exact-envelope matching, so the gap is the record, not enforcement. Two files declare a scope narrower than their contents, and one test still asserts 0x0031 is the next free class after 2c-B allocated it - that one fails loudly rather than rotting quietly. Also corrects this programme's own framing: ValidDlvSuccessor is reconciliation, not invention. Rev 15 section 6.1 already enumerates the successor checklist, section 8 the encumbrance rules, section 13 the iteration-budget decrement, and section 4.1 already forecloses advancing the owner authority position. C3 opens with that reconciliation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why 2c-C decomposes
A four-dimension source audit found what was chartered as one amendment carries ~26 open
decisions — 2c-A had seven rulings, 2c-B had four — across four dimensions that are separable in
fact, not merely in presentation. It also found that §2 framework extensions are required before
the economic classes can be expressed at all:
0x001Efield 3 is 256 × 32 bytes with no countprefix, and the registry has no fixed-count-array type.
C4 consumes C3, not only C1 and C2 —
TA_Bverification relies onValidDlvSuccessorwhereverthe accepted successor is a DLV continuation. C2 answers how the primitives work, C3 what a valid
DLV continuation is, C4 how those compose. Different failure modes, so they do not share a review
cycle.
Three rulings
Protobuf bytes never carry protocol identity. The economic register cell's identity, the quorum
comparison operand and
AuthorityEvidenceV1's content address are all prost today, which §2.10forbids. Recorded as nonconformances, not precedent. A CCB identity is mandatory; a new
top-level class is not — an object with independent addressing gets a class, a canonical operand
contained in another object gets its encoding defined there. Clean cut, no dual resolver, and the
transitive identity cut is enumerated rather than avoided. A "canonical transport protobuf" tier was
rejected: it rebuilds the ambiguity §2.10 removed.
One quorum rule, with
qcommitted in authenticated state. Four shipped Rust rules disagree forevery
n ≠ 3, and the economic root register's threshold is committed in no signed object — so twoverifiers with different local configuration reach different conclusions about one lineage. The DLV
side already has the pattern: authenticated
V_ncarriesstorage_setandquorum. Protocol getsone rule, authenticated state commits the
qthis instance used, and beta stays restricted ton=3, q=2even after the general function is specified.Live defects recorded
The foreign-verifier walk violates Requirement 15.3. Rev 15 puts the re-hash obligation on the
consumer — "Every Class K consumer must re-hash returned bytes and compare the result with the
requested canonical address before decoding."
peer_lineage.rsre-hashes one of four: themanifest at
:355-358, while the authority evidence (:365), the transition witness (:409) andthe successor evidence (
:414) are fetched by address with no comparison. The trait's own doc at:60-62claims the opposite — "the walker re-checks the address anyway — a fetcher cannotsubstitute bytes." It can, for three of the four. This is a violation of an existing requirement,
not a rule 2c-C invents.
The economic namespace has no declarative burn channel.
schema::BURNEDandis_burnedarereferenced zero times under
dsm/src/economic/. The(0x0026,1)/(0x0027,1)burns areenforced structurally by exact-envelope matching, so the gap is the record, not enforcement — worth
stating precisely, because the first draft of this finding had it backwards.
Two stale scope headers, and one stale test assertion.
ccb/mod.rsscopes itself to "exactlythe classes
c_ndepends on" over a seven-row table while allocating substrate, economic andreserved numbers;
economic/decode.rs:15-18disclaims the manifest while decoding it. Anddsm/tests/economic_root_primitives.rs:692still asserts0x0031is "the next free class" — atest, so it fails loudly rather than rotting quietly.
A correction to this programme's own framing
ValidDlvSuccessoris reconciliation, not invention. Rev 15 §6.1 already enumerates thesuccessor checklist, §8 the encumbrance rules, §13 the iteration-budget decrement, and §4.1 already
forecloses advancing the owner authority position. Earlier framing treated C3 as a blank sheet. C3
now opens with that reconciliation.
Two further corrections are recorded: Req 6.10/6.13 does not contradict the shipped quorum
helper — the disagreement is among four Rust rules — and part of the walk is already normative
in the parent decomposition's §1.2–§1.3, so C4 completes it rather than starting from nothing.
Verification
Every live-defect citation was opened and confirmed before it was written down. Two did not
reproduce as reported and were corrected rather than shipped: the stale-comment path was
dsm/tests/, notdsm/src/economic/, and theccb/mod.rsscope claim is a section header over atable rather than a single line. One reported finding was inverted — the economic burns are
enforced, and only the record is missing.
Documentation only. Each sub-amendment states its own two closure statuses; this document claims
neither.