Skip to content

A plan's own scale receipt had rotted 83%, and regenerating it would have deleted 2198 characters of DESIGN.md - #9392

Merged
briansrls merged 1 commit into
mainfrom
session/merry-bear-547-plans
Aug 27, 2026
Merged

briansrls merged 1 commit into
mainfrom
session/merry-bear-547-plans

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

Two authority defects, found together because fixing the first surfaced the second.

1. The cli_run hollowing plan transcribed its own scale

gunbc.plans.cli_run_hollowing_plan §0 carried 26,773 lines / 976 fns, measured 2026-07-23. Live today: 48,979 / 1,545 — rotted ~83% while reading as current. That is precisely what DESIGN's 2026-08-24 ruling forbids (name the instrument, never transcribe its output), and a plan's own scale receipt is the worst place to break it: a reader sequencing Chunk F budgets against a file that no longer exists at that size.

The numbers are deleted, not updated — updating buys one correct reading and the same rot. §0 now names the instrument and keeps only the durable fact, which needs no magnitude: the file has grown at every measurement so far, because v1 lanes absorb host bridges faster than v2 lanes subsume them.

Five rows named mechanisms that no longer exist, which is premise contamination rather than staleness — a reader plans real work against them:

Row named Reality
gunbc.ci_floor_plan deleted by the 2026-08-15 floor cut
src/v2/workflow/ci_floor_plan.dag deleted by the same cut
regen_stage0 deleted at the root by the regen cut

The floor row is the one that mattered: it named claim_executor as the authority cli_run's floor runtime dissolves onto. That inverts the current direction — claim_executor is what this lane is deleting — so the row pointed backwards into a dying carrier. Each is re-pointed at its live successor with a note saying what died, so the correction cannot be mistaken for original text.

2. DESIGN.md carried 2,198 characters that no authority held

Regenerating deleted the clause landed 2026-08-26 — "AND THE TRIGGER MUST NAME THE CAPABILITY, NOT AN ARTIFACT THAT WOULD CONTRIBUTE TO ONE" — because it was authored into the generated artifact instead of gunbc.design_document.

It is rehomed into the authority at its original position, between the §4b(3) declared-drop sentence and meta-obligation (4). DESIGN.md regenerates byte-identical to main — nothing in the artifact changes; what changes is that the clause now has a home that reproduces it.

This is the second orphaned-prose incident in one evening (the first was 1,733 characters of the recurring-failure-modes dichotomy paragraph). Both were caught only by diffing regen output against main rather than trusting a clean exit, and the drift gate that would catch them is itself on the floor cut's unguarded list. There is an irony worth naming: the clause nearly lost is about declared drops being retired only by triggers that name the real capability, and it was unprotected because the mechanism protecting it is a declared drop with no re-add.

Separate subject, declared rather than hidden

The same regeneration converges three pre-existing drifts on main: .gitattributes gains the merge-driver bindings for two doc projections plus !merge for target_invocation_host.rs; two projections main lacks entirely are written; host-effect-orchestration.md gains a RunnerLocalHost variant. These are authority-ahead-of-artifact on main, not introduced here. Verified no prose is lost in any of them.

Verification

  • DESIGN.md byte-identical to main after the rehoming
  • Regeneration idempotent — a second run produces no further diff
  • The 83% figure is stated as a measurement at this commit, not a standing fact; the instrument named in §0 re-derives it

— sent from merry-bear-547

…have deleted 2198 characters of DESIGN.md

Two authority defects, found together because fixing the first surfaced the second.

ONE: the cli_run hollowing plan transcribed its own scale.

`gunbc.plans.cli_run_hollowing_plan` §0 carried `26,773 lines / 976 fns`,
measured 2026-07-23. Live today: 48,979 / 1,545 — the receipt had rotted by
roughly 83% while reading as current, which is exactly what DESIGN's 2026-08-24
ruling forbids (*name the instrument, never transcribe its output*). A plan's
scale receipt is the worst place to break that rule: a reader sequencing Chunk F
budgets against a file that no longer exists at that size.

The numbers are DELETED rather than updated — updating buys one correct reading
and the same rot. §0 now names the instrument (`wc -l` and the fn-count grep over
`origin/main:src/v1/stage0/src/cli_run.rs`) and keeps only the durable fact, which
needs no magnitude: the file has GROWN at every measurement so far, because v1
lanes absorb host bridges faster than v2 lanes subsume them.

Five rows also named mechanisms that no longer exist, which is premise
contamination rather than staleness — a reader plans real work against them:

  gunbc.ci_floor_plan                deleted by the 2026-08-15 floor cut
  src/v2/workflow/ci_floor_plan.dag  deleted by the same cut
  regen_stage0                       deleted at the root by the regen cut

The floor row is the one that mattered: it named `claim_executor` as the authority
that cli_run's floor runtime dissolves ONTO. That inverts the current direction —
`claim_executor` is what the move-off-claim-executor lane is deleting — so the row
pointed backwards into a dying carrier. Each is re-pointed at its live successor
and carries a note saying what died, so the correction cannot be mistaken for the
original text.

TWO: DESIGN.md carried 2198 characters that no authority held.

Regenerating the projections deleted the clause landed 2026-08-26 — "AND THE
TRIGGER MUST NAME THE CAPABILITY, NOT AN ARTIFACT THAT WOULD CONTRIBUTE TO ONE" —
because it was authored into the generated artifact instead of
`gunbc.design_document`. It is rehomed into the authority at its original position,
between the §4b(3) declared-drop sentence and meta-obligation (4), and DESIGN.md
regenerates BYTE-IDENTICAL to main. Nothing in the artifact changes; what changes
is that the clause now has a home that reproduces it.

This is the second orphaned-prose incident in one evening (the first was 1,733
characters of the recurring-failure-modes dichotomy paragraph). Both were caught
only by diffing regen output against main rather than trusting a clean exit — and
the drift gate that would catch them is itself on the floor cut's unguarded list.
The clause nearly lost is about declared drops being retired only by triggers that
name the real capability; it was unprotected because the mechanism protecting it
is a declared drop with no re-add.

Also included, and it is a SEPARATE SUBJECT declared rather than hidden: the same
regeneration converges three pre-existing drifts on main — `.gitattributes` gains
the merge-driver bindings for two doc projections plus `!merge` for
`target_invocation_host.rs`, two projections main lacks entirely are written, and
`host-effect-orchestration.md` gains a `RunnerLocalHost` variant. These are
authority-ahead-of-artifact on main, not introduced here. Verified no prose is lost
in any of them.

Regeneration verified idempotent: a second run produces no further diff.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Finding confirmed, and it is worse than a duplicate — it is a compiler defect producing silently wrong generated output. The two files are removed from this PR. (review 56457)

Verification

sed -n '2,114p' import-namespace-program.md | md5sum  ->  96b5cceeb1f3795236f779f810e4527d
sed -n '2,114p' v2-corpus-self-host.md      | md5sum  ->  96b5cceeb1f3795236f779f810e4527d

Byte-identical bodies; only line 1 (title) and line 115 (dissolution trigger) differ. Exactly as reported.

But the authority is correct — so this is not an authoring duplicate

dag/gunbc/plans/import_namespace_program.dag section_1 reads:

1. The end state — "The import concept does not exist." Not narrowed, not simplified — absent.

That is a genuine, correct import/namespace program. The projection instead contains v2_corpus_self_host's section_1:

1. The goal, and what it buys — "v2 compiles the entire v2 corpus, and the emitted Rust builds."

So nobody copy-pasted a body. The generator resolved section_1 to the wrong module's function. Both authorities landed in the same commit (#9352, 1e8e94ba11d), both define module-scope status_block / section_1 … section_9, and one module's definitions won globally for both projections. The per-module Plan record fields — title and dissolution trigger — are uniquely named, which is precisely why those two lines are the only ones that survived correctly. That pattern is the signature of the defect, not a coincidence.

This is the name-resolution hole DESIGN §4b already documents as an open structural gap — "a census-AMBIGUOUS type name resolves by silent last-import-wins instead of refusing" — here firing on function names, and its output is not a refusal but a plausible-looking document with the wrong contents. That is the fabricated-plausible-output failure (§5) in the generated-artifact path.

What I changed

Both files are removed from this PR. They are produced by the regeneration, so declining to land them leaves the tree un-converged — and that is the correct state: converging it would mean committing bytes I have now measured to be wrong. Landing a known-corrupt authority projection because "regen produced it" is exactly the reasoning this repo's generated-artifact discipline exists to refuse.

The .gitattributes merge-driver rows for those two paths stay, because that file is itself generated and regeneration re-adds them. They are inert while the paths are absent.

On your second finding

import-namespace-program.md:115 naming current_landing_order "step 5" with no such symbol in the file is a true observation about a false artifact. The line-115 trigger is the one part of that file that came from its own authority, and its referent lives in the authority module, not in the projection body — which is only visible because the surrounding 113 lines are the wrong document. I have not repaired it here: with the body corrupted, the resolvable-trigger question cannot be answered against this artifact at all. It should be re-checked once the projection is correct.

Not claimed

I have not fixed the resolver defect, and I am not filing this as done. What this PR now contains is unchanged from its stated subject — the stale receipt, the five dead-mechanism rows, and the DESIGN.md rehoming — minus two files that should never have been swept in with them. The defect is on main since #9352 and needs its own lane; I will raise it separately rather than widen a planning PR into a compiler fix.

Thank you for catching it. I swept those two files in as "pre-existing drift the same command produces" and did not read their contents.

— sent from merry-bear-547

@gunbai-bot
gunbai-bot Bot force-pushed the session/merry-bear-547-plans branch from 2271edb to 19e01e9 Compare August 27, 2026 02:29
@briansrls
briansrls merged commit f3efdfa into main Aug 27, 2026
3 checks passed
@briansrls
briansrls deleted the session/merry-bear-547-plans branch August 27, 2026 03:57
@briansrls
briansrls restored the session/merry-bear-547-plans branch August 27, 2026 04:07
@gunbai-bot gunbai-bot Bot mentioned this pull request Aug 27, 2026
6 tasks
@gunbai-bot
gunbai-bot Bot deleted the session/merry-bear-547-plans branch August 27, 2026 04:54
@briansrls
briansrls restored the session/merry-bear-547-plans branch August 27, 2026 05:38
gunbai-bot Bot pushed a commit that referenced this pull request Aug 27, 2026
review 56662 on #9456 found docs/plans/import-namespace-program.md carrying
almost entirely the v2-corpus-self-host plan despite its own title and its own
authority at gunbc.plans.import_namespace_program. Verified, and the finding is
correct.

The cause is not this change. Both plan modules declare the same ten bare
module-scope names -- status_block and section_1 through section_9 -- and the
resolver collapses same-named module-scope fns into one global slot, so
import_namespace_program_body() calls section_N and reaches
v2_corpus_self_host's definitions. Measured at identity grain: the
import_namespace authority's own section_3 text ("3. The landing order, and why
grammar is last") appears zero times in its rendered output, while
v2_corpus_self_host's section_3 appears in both files.

That is the defect #9393 repairs, and it is open. Until it lands, regenerating
this path cannot produce a correct artifact, so the file is removed from this
change rather than landed corrupt -- the same call as review 56457 on #9392,
where sweeping unread projections into an unrelated repair was the error.

docs/plans/v2-corpus-self-host.md is KEPT, and the distinction is measured
rather than assumed: its rendered body contains its own authority's section_3,
so it is the module the collapsed slot resolves to and its output is correct.
Dropping it too would remove a correct artifact to look consistent.

This leaves the tree not fully derived on one path, which is a real and stated
gap: after #9393 lands, regenerating produces the correct
import-namespace-program.md and it should be committed then.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Aug 27, 2026
…rect regeneration (#9456)

* Prose authored into the generated artifact is deleted by the next correct regeneration

DESIGN.md carried 1,295 bytes that no .dag authority produces. They were
authored straight into the generated file by #9418 (the bound-shaped-closure
failure mode, and two fragments of the emit-stage census receipt) and #9404
(the repo_ruleset boundary clause), so every correct regeneration deletes
them. tidy-wolf-288's #9427 regenerated DESIGN.md during a conflict
resolution and lost them; that run was correct and the loss was pre-existing
on main. This is the third orphaned-prose incident in this session, which is
what makes it a class rather than three accidents: the generated artifact is
writable, so prose lands there instead of in the authority and survives only
until someone regenerates.

Rehomed each passage into the authority that owns it -- the failure-mode
entry into gunbc.recurring_failure_mode as an ordinary roster row between
positional_citation and authority_substitution, the two bullets into
gunbc.design_document -- then regenerated. DESIGN.md now reproduces all three
passages from source, and lines 147 and 151 come back byte-identical to what
main had committed.

Regenerating also exposed drift in the other direction, which is the more
useful finding: the authorities already carried content main's generated
files did not. gunbc.recurring_failure_mode's diagnostic_name_mechanism_silent
entry (3,445 chars) had never reached DESIGN.md, three docs/plans files were
stale against their authorities, and two were never committed at all. Both
directions are the same missing wall -- GeneratedArtifactDriftGate exists and
is dispatchable from tools.ci_gates, but has no production caller, so nothing
compares the generated tree to what the authorities produce.

Measured: zero tokens lost from DESIGN.md, zero deletions in the line-140
diff against main. The three token differences in two plan docs are authority
rewrites main had not regenerated, not drops.

This does not re-enroll the drift gate; that is a separate change under its
own operator agreement, and until it lands the class stays at review
diligence -- a fourth incident is writable today exactly as the first three
were.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Do not commit a generated plan that renders another module's body

review 56662 on #9456 found docs/plans/import-namespace-program.md carrying
almost entirely the v2-corpus-self-host plan despite its own title and its own
authority at gunbc.plans.import_namespace_program. Verified, and the finding is
correct.

The cause is not this change. Both plan modules declare the same ten bare
module-scope names -- status_block and section_1 through section_9 -- and the
resolver collapses same-named module-scope fns into one global slot, so
import_namespace_program_body() calls section_N and reaches
v2_corpus_self_host's definitions. Measured at identity grain: the
import_namespace authority's own section_3 text ("3. The landing order, and why
grammar is last") appears zero times in its rendered output, while
v2_corpus_self_host's section_3 appears in both files.

That is the defect #9393 repairs, and it is open. Until it lands, regenerating
this path cannot produce a correct artifact, so the file is removed from this
change rather than landed corrupt -- the same call as review 56457 on #9392,
where sweeping unread projections into an unrelated repair was the error.

docs/plans/v2-corpus-self-host.md is KEPT, and the distinction is measured
rather than assumed: its rendered body contains its own authority's section_3,
so it is the module the collapsed slot resolves to and its output is correct.
Dropping it too would remove a correct artifact to look consistent.

This leaves the tree not fully derived on one path, which is a real and stated
gap: after #9393 lands, regenerating produces the correct
import-namespace-program.md and it should be committed then.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Re-drop the corrupt generated plan the merge regeneration re-added

review 56834 is correct and this is my defect. Commit dd04d3d deleted
docs/plans/import-namespace-program.md because it renders
gunbc.plans.v2_corpus_self_host's body under its own title. The merge in
4ad6197 regenerated every artifact via main_wet, which writes all 72
committed artifacts unconditionally, so the file came back and the merge
silently reverted a deliberate deletion.

Re-verified at identity grain rather than assumed: the file carries
v2_corpus_self_host's section_3 text and ZERO occurrences of
import_namespace_program's own section_3. Same corruption, same cause -- the
bare-name collision #9393 repairs, where both plan modules declare
status_block and section_1..section_9 and the collapsed global slot sends
import_namespace_program_body() to the other module's definitions.

WHAT I GOT WRONG, because the mechanism will repeat for anyone else: I treated
regeneration as safe because it is derived, and a derived operation cannot
know that one of its outputs is deliberately not committed. main_wet has no
notion of an artifact under repair. So the deletion is not durable across a
regeneration and must be re-applied after every one until #9393 lands. That is
a property of this interim state, not of the gate.

docs/plans/v2-corpus-self-host.md stays: it is the module the collapsed slot
resolves to, its rendered body contains its own authority's section_3, and
dropping a correct artifact to look symmetrical would remove real content.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Regenerate the projection that #9393 made materializable

`docs/plans/import-namespace-program.md` was emitted carrying
`v2-corpus-self-host`'s entire body — the bare-name collision #9393
repaired. Reviews 56662 and 56834 required it be deleted rather than
committed corrupt, which left the drift gate legitimately refusing on
this branch for an absent expected artifact.

With #9393 on main the projection materializes through the repaired
route, so the file is regenerated and committed. It is the only artifact
whose bytes changed: the other 71 regenerate byte-identical.

Evidence it took the repaired route, not merely that the file exists:

  size          15996 -> 10852 bytes (15996 was v2-corpus-self-host's
                15974, which is what the collision was)
  headings      "Plan — the import/namespace program" + its own 7
                sections; zero overlap with v2-corpus-self-host's
  first 400B    distinct digest from v2-corpus-self-host

Acceptance, all executed against the composed tree:

  regeneration is idempotent   0 of 76 artifacts differ across two passes
  read-only gate               0 findings, 76 artifacts read
  discriminating RED           perturbing DESIGN.md makes the gate refuse,
                               so the green is not vacuous; restored
                               byte-identical afterwards

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Drop two plan markdowns their carriers forbid (review 57000)

`gunbc.plans.import_namespace_program` and `gunbc.plans.v2_corpus_self_host`
both declare `projection: PlanIsAuthorityOnly`. Neither markdown exists on
main. This PR was adding both. Deleted, not regenerated — the .dag carriers
already own the prose.

WHY IT HAPPENED, since the timing is the whole of it and it was not a
regenerator defect:

  22:23:43Z  I regenerate. The carrier then said EMIT, and main_wet
             correctly wrote docs/plans/import-namespace-program.md.
  22:46:26Z  #9415 lands PlanIsAuthorityOnly for both carriers, in the
             same change that enrols the generated-artifact phase.
  later      I merge main. The post-merge regeneration correctly writes
             NEITHER file — main_wet honours the ruling. But `git add -A`
             preserved the leftovers from the pre-ruling pass.

So the work was right when done and the base moved under it. The
regenerator is not at fault and needs no change.

The review's deeper point is the one worth recording. DESIGN's
generated-artifact adjudication says: before a new adjudicator's first red
is closed by producing the thing it says is missing, establish that the
thing was ever supposed to exist. The gate's red here was ABSENT, not
DRIFTED, and I closed it by producing the file — the exact move that
paragraph forbids. I merged that sentence into DESIGN.md myself while
resolving the CI-row conflict and did not apply it to my own diff.

Verified after deletion:

  drift gate    exit 0, 0 refusals
  main          neither path present, so the diff no longer adds them

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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