docs(dlv): the trader fence's own prose contradicted Ruling V3, and it misled a reader - #819
Merged
Merged
Conversation
…t misled a reader `trader_fence.rs` said acceptance through ordinary DSM bilateral advancement was "the only thing that consumes a committed fence", and that Class K "releases it only when that exact successor is accepted". 2c-C4 Ruling V3 says the opposite: the terminal event fires only on a verdict that certifies, and its name "must not tempt anyone to move release beside the advance outcome". Market fence release is unreachable until 2c-D, by construction. The prose did precisely what V3 warned against. Deriving the 5c-2 Step 2 sequence from source, I concluded the advance itself released the fence; this banner is where that reading came from. An adversarial re-read against the frozen amendment caught it. No behaviour changes. The pure transition is already correct: V3 governs who may EMIT SuccessorAccepted, not what next_state does once it exists. Only the prose that conflated the precondition with the trigger is rewritten. Also corrects the banner's wiring status, which read as though the advancement gate were live. `permits_successor` and its SDK wrapper `active_verdict` have zero production callers, the bilateral advance path consults no fence at all, and the only live reader of the table is the composition overlay, which merely reports occupancy and is explicitly not fail-closed. Wiring is 5c-2 Step 5. dsm lib: 7 trader_fence tests pass. make lint green; production safety checks green.
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.
What
dsm/src/dlv/trader_fence.rscarried prose that contradicts a frozen ruling merged in #801.The module said acceptance through ordinary DSM bilateral advancement was "the only thing that consumes a committed fence", and that Class K "releases it only when that exact successor is accepted".
2c-C4 Ruling V3 says the opposite:
§7's gate table agrees:
fence release requires may_certify().Why it matters
The prose did exactly what V3 warned against. Working the 5c-2 Step 2 ordering from source, I derived a sequence in which the ordinary advance released the fence, and traced that reading back to this banner. An adversarial re-read against the frozen amendment caught it before any of it was implemented.
This is the same defect class as the 2c-C2
peer_lineage.rscomment that certified an absence: normative prose in a core module asserting something the frozen document denies.No behaviour change
The pure transition is already correct. V3 governs who may emit
SuccessorAccepted, not whatnext_statedoes once the event exists. Only the prose conflating the precondition with the trigger is rewritten. No transition, no test and no signature is touched.Acceptance is now stated as necessary but not sufficient: the precondition is the accepted successor, the gate is
C3Verdict::may_certify, and market release is unreachable until 2c-D.Also: the wiring status was misleading
The banner read as though the advancement gate were live. It is not:
permits_successorhas zero production callers; its only call sites are its own unit tests.active_verdictlikewise has zero non-test callers.Wiring the gate is 5c-2 Step 5, after admission routing and
TA_B. The banner now says so, and tells the reader not to mistake the frozen predicate for a live gate.Verification
cargo test --locked -p dsm trader_fence— 7 tests, all pass.make lintat repo root on pinned 1.98.0 — passed.bash ci/production_safety_checks.sh— all checks passed, including TLA+.