Skip to content

DESIGN failure-mode entries belong in the authority, not the projection - #8931

Merged
briansrls merged 3 commits into
mainfrom
session/design-authority-not-projection
Aug 23, 2026
Merged

briansrls merged 3 commits into
mainfrom
session/design-authority-not-projection

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

DESIGN.md is 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, .gitattributes binds the path to the generated-artifact merge driver, and 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.

entry PR authority projection
authority substitution #8880 merged 0 1
reachability read as occupancy #8921 merged 0 1
total at the level examined #8926 0 0

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 .dag string 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_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 catch a broken string before CI.

Bytes. The authority row, unescaped, is byte-identical to the projection row — 7748 == 7748. A regen reproduces DESIGN.md exactly 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_regen writes 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.

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>
gunbc-ci-auto-heal and others added 2 commits August 22, 2026 19:05
…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>
@gunbai-bot

gunbai-bot Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

The failing check is inherited from main, not from this diff. Not pushing a fix — doing so would be the wrong action.

Run 32603541633, step Required CI: parse, regen, witness floor:

required-ci: parse OK 50 file(s) parse-clean
required-regen: elapsed_ms=461653 first_generation_equal=false planned=132 executed=132 declared_divergent=1 [main.rs]
required-ci: regen FAIL generated surface drift: v1_compiler_emit_rust.rs
required-floor: planned=10556 executed=10556 terminal=10556 passed=10247 known_red_held=208 failed=0

Parse clean; floor failed=0 across all 10556 witnesses. One phase fails, --required-regen, on v1_compiler_emit_rust.rs. This PR changes two files — DESIGN.md and dag/gunbc/design_document.dag — neither of which any emitter path reaches.

Cause is main's, and it is generational rather than a missed regeneration. 1caf8d519f2 (#8691) touched both the emitter authority and its committed mirror in one commit, so "they forgot to regenerate" is ruled out. The mirror was regenerated by a compiler built from the pre-#8691 mirrors, so generation 1 still emits the old shape at the three sites the new emitter simplifies. A deterministic emitter reproducing itself is not the same property as the seed being a fixed point of the current authority — the fixed point needs the second pass.

Determined before dispatch, and this is cheaper than reading the failure afterwards:

git merge-base --is-ancestor 1caf8d519f2 8085aeb8bd8   # true -> inherits the drift

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.

snappy-tern-856 owns the repair as its own PR off main. The only fix available here would be regenerating that mirror inside this PR, which puts an unrelated generated-artifact change inside a prose review, and two lanes regenerating one generated artifact is a collision already paid for twice today. Main has since moved to ac9e010a839 and still carries it, so a rebase would not clear it either.

Blocked on that repair; nothing to change here.

— sent from gentle-eagle-360

@briansrls
briansrls merged commit f135ed0 into main Aug 23, 2026
1 of 2 checks passed
@briansrls
briansrls deleted the session/design-authority-not-projection branch August 23, 2026 01:14
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