Repository navigation
Generated artifacts converge with their authority: the reorg moved two of them and the registry still named the old directory - #9644
Merged
Conversation
…o of them and the registry still named the old directory #9637 moved stage0_crate_layout_generated.dag and stage0_crate_partition_generated.dag into dag/gunbc/stage0/ and did not update their ArtifactLocation rows, which still declared directory: "dag/gunbc". MEASURED, NOT INFERRED. Running the recipe the generated-artifact merge driver itself prints (generated_artifact_gate main_wet) on current main WRITES A FLAT DUPLICATE beside each real file, because the generator writes where the registry says. With the two rows corrected, the same command writes to dag/gunbc/stage0/ and produces no duplicate - verified by execution on a clean main worktree, both arms. WHY THIS IS NOT COSMETIC. Following the printed recipe on current main also rewrites .gitattributes down to the stale roster, deleting 43 rows including live merge=generated-artifact registrations. Anyone resolving a generated-artifact conflict right now silently drops that config. Three PRs are blocked behind exactly this. THREE PRE-EXISTING DRIFTS CONVERGE IN THE SAME COMMIT, because the generated-artifact phase adjudicates every rostered member and leaving any drifted keeps the lane red: - .gitattributes -41 rows. Every removed row names a file that DOES NOT EXIST, checked one by one: zero of 41 present. They are stale rows for authority-only plans whose markdown was deliberately deleted. - .gitignore +41 rows, the same 41 plans, ignored rather than expected on disk. - .githooks/pre-commit and .githooks/pre-push: the "GENERATED by" header now cites the post-reorg authority path. No hand-edited generated bytes: every artifact here is the generator's own output. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> ALSO: rustfmt drift on main, confirmed PRE-EXISTING and not caused by this change (this PR touches no .rs semantically). `cargo fmt --all --check` on a clean origin/main worktree fails at cli_run.rs:818 and :828 - two line-length reflows caused by #9637 lengthening the roadmap authority path strings. It is fixed here because the generated pre-push hook runs the fmt check and refuses, so this blocks EVERY push from a hooks-configured clone, not just this one.
briansrls
pushed a commit
that referenced
this pull request
Aug 28, 2026
DESIGN.md conflicted because both sides changed it. It is a GENERATED projection of
gunbc.design_document, so it was not hand-merged: the merged authority was regenerated with
generated_artifact_gate main_wet and the result taken whole.
VERIFIED IN BOTH DIRECTIONS, because a regeneration that silently drops one side's authority
looks identical to a correct one:
- 31 of 31 phrases unique to this branch (present in the branch's DESIGN.md, absent from main)
are in the regenerated file.
- every sampled phrase unique to main (present on main, absent from the merge base) is also
present.
- 162456 -> 165458 bytes, consistent with adding this branch's rows rather than replacing.
Regeneration churn OUTSIDE the conflicted path was deliberately NOT taken: .gitattributes,
.gitignore, .githooks and the stage0 generated .dag files are drifted on main for an unrelated
reason (#9637 moved two artifacts without updating their registry rows), and converging them
belongs to #9644, not to this PR.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Also carries the same two rustfmt reflows as #9644 (cli_run.rs, line-length only, caused by #9637
lengthening the roadmap authority paths). They are pre-existing on main, arrive here via the
merge, and the generated pre-commit hook refuses without them. Identical content to #9644, so the
two merge cleanly.
briansrls
pushed a commit
that referenced
this pull request
Aug 28, 2026
Two generated mirrors conflicted: v1_compiler_infer.rs and v1_compiler_infer_types.rs. The generated-artifact merge driver refused them by design - it leaves the ours side in the worktree with NO conflict markers and marks the path unmerged, because neither side's bytes are the projection of the MERGED authorities and picking a side drops the other's authority-derived content. So they were NOT hand-resolved. They are the output of claim_executor --required-regen over the merged .dag tree, installed from target/stage0-regen-candidate/src, and verified byte-identical to that candidate. CHECKED, because a regeneration that silently drops one side looks exactly like a correct one: this branch's subject is occurrence identity, and the regenerated mirrors carry 148 and 31 references to NodeOccurrenceIdentity/occurrence_identity respectively. No .dag file conflicted, so the authority merged cleanly and only its projection needed rebuilding. Carries the same two rustfmt reflows as #9644 (cli_run.rs, line-length only, from #9637 lengthening the roadmap authority paths): pre-existing on main, arriving here via the merge, and the generated pre-commit hook refuses without them. NOT INCLUDED, deliberately: main also carries generated-surface drift in v1_rt.rs and four drifted generated artifacts. Those are main's, not this branch's, and converging them here would hide them inside an unrelated PR. #9644 covers the artifact drift; v1_rt.rs is separate. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…le its mirror had been hand-edited main's build lane had TWO failing phases. The first commit closed generated-artifact (rostered=29 matches=29 drifted=0 absent=0, confirmed by CI on this PR). This closes the other: `regen FAIL generated surface drift: v1_rt.rs`. THE DRIFT WAS ONE DOC-COMMENT LINE, AND THE MECHANICAL FIX WOULD HAVE BEEN WRONG. committed mirror: per `ci-floor-fractal-gantt (plan doc deleted 2026-08-28)` authority emits: per `docs/plans/ci-floor-fractal-gantt.md` docs/plans/ci-floor-fractal-gantt.md does NOT exist on main. So a generated mirror had been hand-edited to record the deletion while src/v1/runtime_rust.dag kept emitting a citation to the deleted file. Installing the regen candidate - the obvious move, and what the merge driver's recipe leads you to - would have REVERTED that note and restored a citation to a file that is not there. The drift was the symptom; the hand-edit was the defect. So the repair is at the authority, and v1_rt.rs is NOT touched by this commit: once runtime_rust.dag emits the committed text, the mirror is already correct. TWO GENERATIONS, because runtime_rust.dag is itself mirrored: editing it drifts v1_compiler_runtime_rust.rs (1 line), and v1_rt.rs is emitted BY that mirror once compiled. So the first rebuild still emitted the old string. Installing the emitter mirror and re-running converges: first_generation_equal=true, no drift. VERIFIED: regen over the fixed tree reports first_generation_equal=true with no drift line, and the only paths changed are the authority and its own mirror. NOT DONE HERE, deliberately: DESIGN 3 would prefer citing the surviving plan carrier (gunbc.plans.ci_floor_fractal_gantt) over embedding a date in source. That is the better citation and it changes mirror bytes, so it is a separate judgment rather than part of a repair. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
briansrls
pushed a commit
that referenced
this pull request
Aug 28, 2026
… all of them (#9652) `cargo fmt --all --check` reports seven sites on pristine `a128026717`, so the generated pre-push hook refuses every push in the fleet regardless of what the pushing branch contains. A wall that everyone routinely bypasses with `--no-verify` has stopped being a wall, which is the cost this repairs — not the formatting itself. Measured as a controlled comparison, not inferred: same command on a detached worktree at `origin/main` with no local edits reproduces all seven, so the drift is wholly inherited. src/v1/stage0/src/cli_run.rs:818, :828, :43312 src/v1/stage0/src/bin/claim_executor.rs:1869 src/v1/stage0/src/bin/cssl_assemble.rs:17 src/v1/stage0/src/bin/effects_rest_transport_witness.rs:7, :13 Every change is a rustfmt line-wrap. No declaration is added, removed or renamed, and no expression changes meaning, so this adds no v1 seed growth surface. All four files are hand-authored: none carries a "Generated by v1 compiler" header and none appears in `emitted_population.rs`. That was checked first and deliberately, because tonight's build-lane outage was caused by hand-editing a generated projection — `v1_rt.rs` against `runtime_rust.dag` — and repairing a formatting complaint the same way would have reproduced it at four more sites. Scope covers all seven rather than the five with no owner. A partial sweep would leave `cargo fmt --all --check` non-empty and the hook still refusing, which unblocks nobody; the hook's predicate is the whole tree, not a site count. The `:818` and `:828` reflows are therefore the same repair #9639 carries (and #9644 carries identically, blob `a7e1307b9e`) — a deliberate byte-identical overlap on two of thirteen lines, not an independent judgement about them. `:43312` and the other four have no open PR. Found by snappy-dove-250, who hit the refusal pushing an unrelated two-file `.dag` change and correctly declined to absorb it into a convergence repair. Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Generated artifacts converge with their authority: the reorg moved two of them and the registry still named the old directory
#9637 moved stage0_crate_layout_generated.dag and stage0_crate_partition_generated.dag into
dag/gunbc/stage0/ and did not update their ArtifactLocation rows, which still declared
directory: "dag/gunbc".
MEASURED, NOT INFERRED. Running the recipe the generated-artifact merge driver itself prints
(generated_artifact_gate main_wet) on current main WRITES A FLAT DUPLICATE beside each real file,
because the generator writes where the registry says. With the two rows corrected, the same
command writes to dag/gunbc/stage0/ and produces no duplicate - verified by execution on a clean
main worktree, both arms.
WHY THIS IS NOT COSMETIC. Following the printed recipe on current main also rewrites
.gitattributes down to the stale roster, deleting 43 rows including live merge=generated-artifact
registrations. Anyone resolving a generated-artifact conflict right now silently drops that
config. Three PRs are blocked behind exactly this.
THREE PRE-EXISTING DRIFTS CONVERGE IN THE SAME COMMIT, because the generated-artifact phase
adjudicates every rostered member and leaving any drifted keeps the lane red:
zero of 41 present. They are stale rows for authority-only plans whose markdown was deliberately
deleted.
authority path.
No hand-edited generated bytes: every artifact here is the generator's own output.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
ALSO: rustfmt drift on main, confirmed PRE-EXISTING and not caused by this change (this PR touches
no .rs semantically).
cargo fmt --all --checkon a clean origin/main worktree fails atcli_run.rs:818 and :828 - two line-length reflows caused by #9637 lengthening the roadmap authority
path strings. It is fixed here because the generated pre-push hook runs the fmt check and refuses,
so this blocks EVERY push from a hooks-configured clone, not just this one.