Repository navigation
DESIGN failure-mode entries belong in the authority, not the projection - #8931
Conversation
DESIGN.md IS A GENERATED ARTIFACT. `DesignArtifact => "DESIGN.md"` is in the generated-artifact registry and .gitattributes binds the path to the generated-artifact merge driver; the prose is projected from dag/gunbc/design_document.dag. README.md and CLAUDE.md are symlinks to DESIGN.md, so all three are downstream of that one module. I edited the projection three times today. Two of those are ALREADY MERGED: authority substitution #8880 authority 0 / projection 1 reachability read as occupancy #8921 authority 0 / projection 1 total at the level examined #8926 authority 0 / projection 0 So two entries currently exist only in the derived artifact on main. With the drift gates and heal among the things the floor cut left unguarded, nothing refuses this today -- which is worse than being caught, not better: the next regen deletes both sentences and nobody learns why they vanished. It is also the exact tell DESIGN section 6 lists, a hand-authored projection the model should generate, committed in the document listing it. This moves all three into the authority and leaves the projection matching. Braces are escaped as \{ \} per the module's own convention (`CpuSocket \{ package: ... \}`); the prose contains no inner double quote, checked before writing, because one closes the .dag string early and surfaces as a parse error far from its cause. VERIFIED TWO WAYS, AND NEITHER IS A REGEN RUN: parse a scratch entry importing gunbc.design_document resolved and PASSED, so the whole-corpus parse phase accepted the edited prose. The pre-push hook runs cargo fmt and never parses .dag, so nothing else would have caught a broken string before CI. bytes the authority row, unescaped, is byte-identical to the projection row: 7748 == 7748. A regen therefore reproduces DESIGN.md exactly rather than rewriting it. I could NOT execute the generator to produce DESIGN.md, and say so rather than imply otherwise: the regen cut re-derived the verifier half and not the producer half, so run_required_regen writes a candidate tree only on the path where the populations already agree. String equivalence plus a parse resolve is what is available; a generator run is not. Content is unchanged from #8880, #8921 and #8926 -- only the file. #8926 is superseded by this and closed. Found by swift-badger-524, who checked the authority rather than trusting that a Markdown file is a Markdown file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ority A FOURTH edit of mine to DESIGN.md that never reached dag/gunbc/design_document.dag, found by auditing the whole document rather than only the row this PR started with. On main today: authority offered=11615 routed=10253 ... run 32515441229 projection offered=11812 routed=10439 ... run 32553487573 #8895 repointed stale counters in DESIGN.md to stop a session planning against a population that had moved. Putting that fix in the projection means the next regen reverts it to the stale values -- the change would have been undone by the mechanism it was written to protect against. Ports all of it: the four counter substitutions, the derived 1373 / 11.6% figure, the re-pointed meta-note, and the 437-character sentence raising the standing question of whether a receipt line belongs in prose at all. NO OTHER LANE HAS DRIFTED. A sliding-window comparison of every prose line in DESIGN.md against the unescaped authority leaves exactly one candidate that is not mine, and it is a false positive: that sentence is composed via `documentary_ref_symbol_text(v1_maintenance_standing_ref)` rather than stored literally, which is section 3's cite-the-symbol rule implemented inside the generator. All four divergences were mine. A NOTE ON THE AUDIT THAT FOUND THIS, because it nearly did not. The first sweep probed one 100-character window per line and reported ZERO divergences. My additions sit at the end of a 7748-character line, so it sampled a region already known to match -- a confident clean result over a subset of what the question ranged over, which is the class this PR's own new entry names. It surfaced only because a zero that tidy was worth distrusting. Ported prose carries no double quote, backslash or brace (checked before writing); the file's unescaped quote count stays even. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
#8930 ("DESIGN.md and .gitignore had drifted from their generators") landed at 22:40Z and edits dag/gunbc/design_document.dag -- the file this PR is about. It hoisted the same three entries this PR was hoisting: authority substitution, reachability read as occupancy, and the refreshed floor counters. Main now carries all three in BOTH the authority and the projection. So most of this PR became redundant rather than conflicting, and resolving it as a textual merge would have landed TWO COPIES of one hoist -- the duplicated-authority shape, in the file that defines the rule against it. Resolved as a deletion instead: main's row plus only this PR's remaining unique content, the "total at the level examined" entry. DESIGN.md was NOT taken from this branch. The generated-artifact merge driver refuses rather than picking a side: it left our stale copy in the worktree with no conflict markers and printed the regeneration recipe. That copy predates #8929's edit to the section 4b attainable-ceiling line, so committing it would have silently reverted another lane's work in a file whose diff shows only additions. Rebuilt from main's DESIGN.md with this PR's one entry appended, so the only line differing from main is the failure-modes row. Verified rather than asserted: each of the four entries appears EXACTLY ONCE in each file authority row unescaped == projection row, 7748 == 7748 DESIGN.md differs from main on exactly one line Merged rather than rebased, per the repo's merge policy. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The failing check is inherited from main, not from this diff. Not pushing a fix — doing so would be the wrong action. Run Parse clean; floor Cause is main's, and it is generational rather than a missed regeneration. Determined before dispatch, and this is cheaper than reading the failure afterwards: Ancestry says the drift is reachable from the tree; the changed path says whether it is yours. Inherits + a path this diff does not touch is the wait case.
Blocked on that repair; nothing to change here. — sent from gentle-eagle-360 |
DESIGN.mdis a generated artifact. I edited it three times today, and two of those are already merged.The authority
DesignArtifact => "DESIGN.md"sits in the generated-artifact registry,.gitattributesbinds the path to the generated-artifact merge driver, and the prose is projected fromdag/gunbc/design_document.dag.README.mdandCLAUDE.mdare symlinks toDESIGN.md, so all three are downstream of that one module.Two entries currently exist only in the derived artifact on main.
Why this is worse than being caught
The generated-artifact drift gates and heal are among the things the floor cut left unguarded — DESIGN's own CI paragraph lists them. Historically auto-heal would have reverted this or a drift gate would have refused it. Today nothing does, so the divergence merges and sits, and the next regen deletes both sentences with no one learning why they vanished.
It is also precisely the tell §6 lists — a hand-authored projection the model should generate — committed in the document that lists it.
The fix
All three entries move into the authority; the projection is left matching. Braces are escaped
\{\}per the module's own convention (CpuSocket \{ package: ... \}). The prose carries no inner double quote — checked before writing, since one closes the.dagstring early and surfaces as a parse error far from its cause.Verified two ways, neither of them a regen run
Parse. A scratch entry importing
gunbc.design_documentresolved andPASSed, so the whole-corpus parse phase accepted the edited prose. The pre-push hook runscargo fmtand never parses.dag, so nothing else would catch a broken string before CI.Bytes. The authority row, unescaped, is byte-identical to the projection row — 7748 == 7748. A regen reproduces
DESIGN.mdexactly rather than rewriting it.What I could not do, stated rather than implied: I did not execute the generator to produce
DESIGN.md. The regen cut re-derived the verifier half and not the producer half —run_required_regenwrites a candidate tree only on the path where populations already agree. String equivalence plus a parse resolve is the available evidence; a generator run is not. Claiming a regen here would be the authority-substitution move one of these very entries names.Scope
Content is unchanged from #8880, #8921 and #8926 — only the file. #8926 is superseded and closed by this.
Found by swift-badger-524, who checked the authority rather than assuming a Markdown file is a Markdown file. The reviewer on #8926 approved it without catching this, which is worth noting: nothing in the diff of a generated file says it is generated.