Repository navigation
Prose authored into the generated artifact is deleted by the next correct regeneration - #9456
Conversation
…rect 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>
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>
|
Verified and fixed in dd04d3d — review 56662 is correct.
Cause — not this change, and not the authorityBoth plan modules declare the same ten bare module-scope names ( That is exactly the defect #9393 repairs, and it is open. Until it lands, regenerating this path cannot produce a correct artifact. What I didRemoved the file rather than landing known-corrupt bytes — the same call as review 56457 on #9392, where sweeping unread projections into an unrelated repair was the error.
Stated gapThis leaves the tree not fully derived on one path. After #9393 lands, regenerating produces the correct The core repair in this PR is unaffected: the 1,295 bytes of orphaned — sent from merry-bear-547 |
…same two rows #9405 rewrote the CI and emit-stage rows in gunbc.design_document while this branch was rehoming orphaned prose into those same rows, so git could not merge them. Both sides carry real content and neither side was taken whole. The decisive measurement: main's DESIGN.md no longer contains the orphaned passages either. #9418 landed its emit-census result into the GENERATED file only, never into the authority; #9405 then edited the authority and regenerated, and the orphan was deleted as a side effect. That is the same mechanism this branch exists to repair, caught a second time on the same file while repairing the first. Resolution, per row: row 0 (CI) main's newer text is the base -- it adds the emitted-closure cargo phase and the partition-crate boundary. The lost repo_ruleset clause is re-inserted between two anchors that exist verbatim on both sides, so the splice is positional only, not editorial. row 4 (emit) main's newer text is the base -- it adds the "A REQUIRED PHASE NOW COMPILES AN EMITTED CLOSURE ... NARROWED RATHER THAN RETIRED" narrowing. Its "POPULATION: UNCOUNTED AND UNBOUNDED" clause is REPLACED, because it is stale rather than merely older: gunbc.emit_stage_blocking_population_census exists on main and carries census_run_invocation, and #9418 landed before #9405. A census was taken; the authority still said it had not been. Main's own new fact -- two specimens escaping by three distinct modes -- is preserved beside the census result. DESIGN.md is REGENERATED from the merged authority, never hand-merged. The generator was rebuilt from the composed tree first, because #9416 changed lambda type-variable binding in the compiler and regenerating with the old binary would not have been the generator that will execute here. Evidence: zero tokens lost against this branch's pre-merge DESIGN.md. Three lost against main -- `UNBOUNDED.`, `bound.` and `recording.` -- all punctuation-attached remnants of the two sentences deliberately rewritten above, with no content behind them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Merged main ( #9405 rewrote the same two Neither side was taken whole.
That replacement is the one editorial call, and it is evidence-backed rather than a preference.
Evidence
The two-sided check is what made this trustworthy: my first resolution passed against main and had silently dropped a whole sentence from my own side (the — sent from merry-bear-547 |
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>
|
Fixed in The merge commit Re-verified at identity grain rather than assumed:
Same corruption, same cause — the bare-name collision #9393 repairs. What I got wrong, since the mechanism will repeat for anyone elseI treated regeneration as safe because it is derived. But a derived operation cannot know that one of its outputs is deliberately uncommitted — It also sharpens why #9393 is worth merging ahead of this: while it sits open, every regeneration on any branch re-adds a document that presents one plan's content under another's authority, and nothing in the tree reports it.
— sent from merry-bear-547 |
…er regeneration Main advanced to 3bbd53c. The generated-artifact merge driver refused rather than picking a side on DESIGN.md -- correctly, since both sides changed it since the merge base and neither side's bytes are the projection of the merged authorities -- so the authority was hand-merged and the artifact regenerated. The authority conflict was one row this time. Enumerated at fragment grain rather than eyeballed: main contributes three `//gunbc/instruments:` label spellings, this branch contributes the rehomed repo_ruleset clause. Main's row is the base and the clause is re-inserted at an anchor present verbatim on both sides, so the splice stays positional. THE REGENERATION RE-ADDED THE CORRUPT PLAN AGAIN, and this time it was checked for. docs/plans/import-namespace-program.md renders v2_corpus_self_host's body under its own title, was deleted in dd04d3d, came back in 4ad6197's regeneration, was re-dropped in fbb863c after review 56834, and came back again here. main_wet writes all 72 committed artifacts unconditionally and has no notion of an artifact under repair, so this deletion is not durable across a regeneration and must be re-applied after every one until #9393 lands. That is a property of the interim state, not a defect in the gate. Evidence, and the occurrence check is the load-bearing half: zero tokens lost against this branch's pre-merge DESIGN.md, and the three lost against main are the same punctuation remnants of the deliberately rewritten POPULATION sentences recorded in 4ad6197. A SET-BASED token check cannot see a count reduction, so main's three `//gunbc/instruments:` occurrences were counted directly and all three survive -- `grep -c` reports 1 because DESIGN.md's rows are single enormous lines, which is exactly the kind of measurement that reads as loss when nothing was lost. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
CI is red here on two breaks inherited from Verified against main, not inferred from the log
The required floor resolves the whole corpus, so either error refuses the phase for every open PR regardless of its diff. That is why this shows up here. Both are being fixed elsewhere
This PR needs no change. It will go green on a re-run once those land. I am deliberately not pushing anything here: a no-op commit to trigger CI would cancel the running cycle and produce a second ~35-minute failure on the same inherited break. — sent from merry-bear-547 |
|
Do not merge this before #9393, and do not read a green CI here as evidence that the artifact population is consistent. I merged current main ( Worth recording, because it cost an hour and I nearly reasoned the other way: a re-run does not pick up a base repair. The blocking dependencyRunning the drift gate locally against this tree refuses: That is correct behaviour and it is not fixable from this branch. Two authorities genuinely conflict here:
Both are right. The file cannot be correctly present until the bare-name collision that corrupts it is repaired, which is exactly what #9393 does — its title names this file. So the ordering is a real dependency, not sequencing etiquette:
Why the CI signal cannot be trusted for this
Approvals on this PR were dismissed by the new head. I am not requesting re-review until step 2 above is done, since the tree will change again. — sent from merry-bear-547 |
`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>
Three conflicts, two kinds. `dag/gunbc/design_document.dag` is the
authority and needed a real resolution; `DESIGN.md` and `.gitattributes`
are its projections, which the merge driver left UNMERGED with the ours
side verbatim and no markers, because taking either side would drop the
other's authority-derived bytes. Those two are regenerated, never
hand-resolved, exactly as the driver's message instructs.
The authority conflict is the CI row — the paragraph this document
itself warns "collides with every unrelated edit to it". Both sides
edited it:
ours the repo_ruleset clause (THAT BOUNDARY MOVED): converge/verify
actuate the ruleset with a read-back, why the aggregation job
stays, and the honest rung — neither entry point is enrolled in
CI, so the class sits at mitigatable with enrolment as its
next-rung trigger
theirs a SIXTH required phase, `generated-artifact`, which takes the
drift gate OFF the unguarded list, plus the reusable finding
that its first reds were ABSENT rather than drifted
Resolved by splicing at sentence grain rather than picking a side:
95 ours + 100 theirs, 86 common, into 108. Every sentence unique to
either side is preserved, with ONE deliberate exception — ours' "WHAT IS
UNGUARDED IN THE MEANTIME" still listed the drift gates as unguarded,
which theirs supersedes by construction, since the sixth phase is
precisely what guards them. Keeping both would have left the document
asserting and denying the same fact.
Acceptance, executed on the merged tree:
idempotence 0 of 74 artifacts differ across two regeneration passes
drift gate 0 refusals, 74 artifacts read
both sides "THAT BOUNDARY MOVED" and "A SIXTH PHASE" each present
once in DESIGN.md and once in its authority
markers 0 in every conflicted path
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`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>
|
Fixed in Verified before acting, since the finding contradicted what I'd built:
The timing is the whole explanation, and it clears the regenerator:
So this is not a The part I want to own rather than explain away. DESIGN's One correction to something I said earlier on this PR: I wrote that a green here could not establish artifact consistency because After deletion: drift gate exits 0 with 0 refusals, and the diff no longer adds either path. — sent from merry-bear-547 |
DESIGN.mdon main carries 1,295 bytes that no.dagauthority produces. They were authored straight into the generated file:08d3c7aff81) — thebound-shaped closurefailure-mode entry, and two fragments of the emit-stage census receiptefc092566d9) — theTHAT BOUNDARY MOVEDrepo_rulesetclauseSo any correct regeneration deletes them. #9427 regenerated
DESIGN.mdduring a conflict resolution and lost them — that run was correct, and the loss was already sitting on main. This is the third orphaned-prose incident in this session; the generated artifact is writable, so prose lands there rather than in the authority and survives only until someone regenerates.Repair
Rehomed each passage into the authority that owns it, then regenerated:
gunbc.recurring_failure_mode— ordinary roster row betweenpositional_citationandauthority_substitutionTHAT BOUNDARY MOVED(line 147)gunbc.design_documentgunbc.design_documentLines 147 and 151 now come back byte-identical to what main had committed.
Drift in the other direction — the more useful finding
Regenerating showed the authorities already carried content the generated files did not:
diagnostic_name_mechanism_silent(3,445 chars) had never reachedDESIGN.mddocs/plans/files stale against their authoritiesBoth directions are the same missing wall:
GeneratedArtifactDriftGateexists and is dispatchable fromtools.ci_gates, but has no production caller, so nothing compares the generated tree against what the authorities produce.Evidence
DESIGN.md; the line-140 diff against main is one insert with zero deletionsv1_compiler_infer*had changed since my previous build, so an older binary would not have been trustworthyWhat is not claimed
This does not re-enroll the drift gate. That is a separate change under its own operator agreement. Until it lands the class sits at review diligence, and a fourth incident is writable today exactly as the first three were.