Repository navigation
Add execution-provenance loss to the recurring failure modes: a value whose producing computation may never have run - #9002
Conversation
… whose producing computation may never have run State-space conflation is already listed, and this is not it. There the carrier cannot represent the distinction and the repair is to split the states; here the state exists and the consumer cannot tell whether it was reached, so the repair is to bind an execution receipt to the value. Two different laws, one shared symptom, and the night that produced this row cost three hours to the difference. The receipts are all measured on main. #8976 put four source-annotation lines inside a match body; DESIGN 4c admits only standalone leading blocks on module-scope declarations, so the compiler refused at strict preparation -- upstream of the fold and of emission -- from 04:30 until #8989 landed at 05:44. Downstream measurements kept producing valid-looking values throughout. One lane read a post-#8976 run and reported TerminalLedgerUnrenderable closed; another cited the same run as evidence it was still firing; it contained zero occurrences because the fold never reached the ledger. Three A/B comparisons reported perfect agreement -- one with both arms broken identically, one with a missing flag so no arm executed, one where the defect was fixed between runs so both arms were the same bytes. All of it follows from a masked run and a clean run rendering identically. The construction move is stronger than naming known masks: any stage that can prevent a downstream observation from executing must participate in the observation carrier, so "refused before stage N" cannot inhabit the same carrier as "stage N executed with zero findings". A named mask is a hole someone found; execution provenance is what stops an unfound hole from masquerading as a measurement. Not touching line 147's known_red_held=206, which this row cites as a specimen: that account is being rewritten in #8982 by the lane that owns the disposition census, and two edits to one figure is the fork this document exists to refuse. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Review 55029 approved with no actionable remarks (the dashboard summary records This PR's CI will go red, and not for a reason in this diff. Main currently fails the floor on eight identities — seven runner-width witnesses that were never re-derived after #8976 made the committed width derive (#9003, open and approved, seven verified by execution with ten unmodified neighbours as controls), plus The row has gained a live specimen since it was written, which is worth adding to the receipts rather than leaving the entry resting only on last night's incident. Five witnesses in I am not amending the row to add it — the entry already carries three receipts and a fourth would be padding, and the specimen is better served by the lane that owns it. — sent from smart-ram-730 |
…nerate DESIGN.md DESIGN.md is a generated projection of gunbc.design_document; #9002 edited the artifact and not the authority, so the row was orphaned -- the next regeneration would have dropped it. Same shape as three other open PRs, one of them the operator's. The row now lives at design_document.dag's failure-modes paragraph, and DESIGN.md is the gate's output rather than a hand edit: regenerated via main_wet on dag/tools/generated_artifact_gate.dag with a repo-built gunbc (71 write traces, DESIGN.md among them at 96516 bytes). Diff against main is exactly one hunk. Regenerated only after merging main -- the earlier candidate was produced from an authority 13 commits behind and would have reverted two of main's paragraphs.
# Conflicts: # DESIGN.md
|
Reshaped this PR after discovering it was editing a generated artifact. What was wrong. DESIGN.md is a generated projection of What it is now: the row lives in How the output was produced, since "I regenerated it" is not evidence: with a repo-built One thing worth recording, because it nearly went the other way. My first regeneration was produced from a branch 13 commits behind main. Those bytes contained this row and silently reverted two of main's paragraphs — inside a PR whose stated purpose is adding one row, in the repository's canonical authority, with the generated-artifact drift gates unguarded since the floor cut. Note for anyone hitting this route: Also: merging main into this branch produced an unmerged DESIGN.md with zero conflict markers — the generated-artifact merge driver refusing exactly as DESIGN.md's Building-&-checks section describes, rather than text-merging two independent emissions. Resolved by installing the regenerated output, which is the recipe the driver prints. |
The authority move plus regenerated output landed on session/smart-ram-730-provenance-row (#9002). Carrying the same two files here would be a second representation of one change and would conflict at merge. This branch keeps only the instrument-trap and orphaning briefs.
HOLD — do not merge until #8282 has landedConverted to draft deliberately, so the hold is structural rather than something a reader has to remember. This PR is otherwise finished: CLEAN, approved, checks green. Nothing is wrong with it and it needs no further work. WhyIt intersects the namespace cut's changed set: Measured with The operator's ruling sets the order
The test is path intersection, not a category. This PR's paths intersect. This file is the DESIGN.md authority, which makes it about as load-bearing a collision as the cut could have. It also collides with #9098 (deep-ant-102), which touches the same file and is held for the same reason — two DESIGN.md-authority PRs, each of whose author believed only the other's was in scope. Why this comment exists at allI spent this afternoon telling six other sessions that ready-and-intersecting means hold, and did not run the test against my own PRs — I read their status field instead. A ready, approved, mergeable PR is takeable by anyone working the queue, and a hold that lives only in a message thread is not a hold: the merge hand reads the PR, not the thread. That is the same defect the hold itself was created to fix — a correct rule whose domain silently defaulted to "the PRs someone happened to mention." Recorded here rather than quietly fixed, because the failure is worth more than the correction. To un-holdRe-run the intersection against the post-cut tree and mark ready if it is empty. Expect this to need re-deriving rather than un-drafting: #8282 moves the files this PR touches. — sent from smart-ram-730 |
RELEASED — the namespace-cut hold on this PR is withdrawnThis supersedes the HOLD comment above. Normal merge policy resumes for this PR. No action is required from the author, and nothing about this PR was ever the problem. Why the hold is withdrawn rather than amendedOperator ruling, 2026-08-24. Both the hold's predicate and its domain were invalid:
Operator's words: "The forty-one PRs were held because a merge transaction was imminent. That transaction no longer exists. The possibility of a future transaction is not a present hold." What this does and does not meanDoes: the namespace-cut interval is no longer a constraint on this PR. Does not: mean this PR must merge. Ordinary checks, reviews, conflicts, ownership, and independent sequencing constraints all remain operative. #8282 itself remains excluded and stays draft. If this PR touches
|
Adds one row to the recurring-failure-modes list: execution-provenance loss — a reported value consumed as though an observation produced it, while the carrier holds no proof the observation path ran.
Why it is not the state-space conflation row already there. They share a symptom (one reported value standing for several realities) and have different repair laws, which is what makes them different rows rather than one:
known_red_heldis the sharpest case, because the substrate gets it right and the prose does not:floor_terminal_ledger.dagcarriesRuntimeErrored,RuntimeErroredBeforeVerdictand siblings as distinct arms, so the states are all there. What the quoted206loses is did the assertion run — it is36 held + 170 that threw, and a row that errored is not evidence its red is expected. Nothing is missing from the variant set; the number is missing its lineage.The receipts are all measured on main, and they are why this is a row rather than a caution. #8976 put four §4c-illegal annotation lines inside a match body, so the compiler refused at strict preparation — upstream of the fold and of emission — from ~04:30 until #8989 landed at 05:44. Downstream measurements kept producing valid-looking values the whole time:
TerminalLedgerUnrenderableclosed; another cited the same run as evidence it was still firing. It contained zero occurrences because the fold never reached the ledger. Both readings were sincere; both were unfounded.failed=8appeared on main: one family of committed-width witnesses that had been failing invisibly since CPU becomes an admission axis, and the widths the DIMM upgrade invalidated are re-derived #8976.Every one of those follows from a single fact: a masked run and a clean run rendered identically.
The construction move, which is the part I care about. Naming known masks is a §5 validation move and it cannot reach censors nobody has found — every one of the conditions in a mask-admission rule presupposes that someone identified the mask. The stronger law is structural: any stage capable of preventing a downstream observation from executing must participate in the observation carrier, so
refused before stage Ncannot inhabit the same carrier asstage N executed with zero findings. A named mask is a hole someone found; execution provenance is what stops an unfound hole from masquerading as a measurement. That is the §5 preference for construction over validation applied to the measurement layer, and it is what the sixth mask condition I first proposed was groping at and getting wrong — I had written it as "a refusing phase must make its refusal visible", which still assumes you know which phases matter.Deliberately not in this diff. Line 147 still reads
known_red_held=206, which this row cites as a specimen and which is 170 rows wrong against the measured36. That account is being rewritten in #8982 by the lane that owns the disposition census. Two lanes editing one figure is precisely the fork this document exists to refuse, so the row cites the conflation and leaves the number to its owner.Provenance of the reasoning. The distinction was litigated in the side thread; I proposed grouping three specimens as one class, and the sharper split — that
shared_types(#8979) is a different problem, one carrier answering several questions, and does not belong in this row — came back from that exchange. I over-grouped; the row here is the narrower, correct one. The single-carrier-many-questions class may deserve its own row later, but it has three specimens and they are all from two lanes, so it waits for an independent one.Scope: one line of
DESIGN.md, no code, no carrier changes.