Skip to content

required-regen: the hand-maintained collision refuses under its own remedy (and the traced defect does not exist) - #8867

Merged
briansrls merged 2 commits into
mainfrom
session/quick-heron-894
Aug 22, 2026
Merged

briansrls merged 2 commits into
mainfrom
session/quick-heron-894

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

required-regen: the hand-maintained collision refuses under its own remedy

THE FINDING I WAS SENT TO FIX DOES NOT EXIST, and the confirming dispatch is what
established that. The brief traced HAND_MAINTAINED_STAGE0_DIRS being consulted by one
of three call sites in required_regen_host.rs and predicted a live refusal on eight
hand-maintained basenames. Measured at main 90986d1:

claim_executor --required-regen --source-root dag --source-root src/v2
first_generation_equal=true planned=132 executed=132 declared_divergent=1 [main.rs]

No population refusal. The traced mechanism is not merely unobserved, it is
UNREACHABLE: it requires the emitter to produce a file INTO a hand-maintained
directory, and emitted Rust filenames are flat by construction --
v1.compiler.emit_core_support module_to_filename is split(".") |> join("_") under
rust_source_root(). A three-way disagreement over an uninhabited domain is a code
fact, not a defect. Scanning the last 95 failed witnesses.yml runs for the refusal
string found four instances, all flat generated names on branches that introduced
modules; mod.rs and index.rs appear in none of them, and #8691's own failure is an
ordinary drifted mirror on v1_compiler_emit_rust.rs. The eight-basename population is
retracted by its author.

WHAT IS REAL IS A DIFFERENT MECHANISM WITH A DAMAGING REMEDY. Both compared
populations key on BASENAME and the committed walk enumerates only the top level, so
a module authored with a bare name equal to a file inside cli_run/ or
module_path_index/ emits a colliding basename that lands in emitted_not_committed.
The two remedies attached there both destroy hand-authored code: installing the
mirror overwrites it with generated bytes, deleting it removes it. A refusal whose
every offered remedy is wrong for the class it fires on routes a compliant author
into damage, and the only non-damaging response left is to ignore the wall -- which
is how a correct wall decays into advice, fastest for the authors who take it most
seriously.

So the collision gets its own typed cause and its own remedy (de-collide the module
name), and NOTHING IS EXCLUDED. Teaching is_hand_maintained_path about the directory
list -- the fix the brief proposed -- drops a genuinely generated surface out of the
comparison entirely: a wrong refusal traded for no refusal, the same false green as
making the committed walk descend, entered from the other side. DIRS is therefore
consulted at the seam that CLASSIFIES a refusal, never at one that excludes from it.

ZERO EXPOSURE, in the carrier and in those words. Zero collisions in the corpus, no
upstream guard found that would refuse such a module name (the nearest candidates in
gunbc.stage0_rust_source_lifecycle_scaffold are scoped to top-level stage0 paths and
cannot see a subdirectory file), and the state is reachable by one .dag module. This
is a wall for a state nothing currently inhabits, not the repair of a live defect --
recorded that way so the class is not read as closed.

EVIDENCE. witness_hand_maintained_collision_refuses_under_its_own_remedy asserts both
halves in one run: the collision refuses under MirrorMissingShadowsHandMaintainedSource
naming its directory, AND a genuine orphan in the same run still refuses under
MirrorMissingForEmittedSurface, with neither path appearing under the other's cause --
a change that silenced the collision by exclusion would take the orphan with it and go
green on a wall that no longer stands. Executed remotely at this tree: three witnesses
PASS; re-running the same witness with the collision re-classified as a plain orphan
(the pre-change behavior) FAILS.

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

gunbc-ci-auto-heal and others added 2 commits August 22, 2026 04:10
…emedy

THE FINDING I WAS SENT TO FIX DOES NOT EXIST, and the confirming dispatch is what
established that. The brief traced HAND_MAINTAINED_STAGE0_DIRS being consulted by one
of three call sites in required_regen_host.rs and predicted a live refusal on eight
hand-maintained basenames. Measured at main 90986d1:

  claim_executor --required-regen --source-root dag --source-root src/v2
  first_generation_equal=true planned=132 executed=132 declared_divergent=1 [main.rs]

No population refusal. The traced mechanism is not merely unobserved, it is
UNREACHABLE: it requires the emitter to produce a file INTO a hand-maintained
directory, and emitted Rust filenames are flat by construction --
v1.compiler.emit_core_support module_to_filename is split(".") |> join("_") under
rust_source_root(). A three-way disagreement over an uninhabited domain is a code
fact, not a defect. Scanning the last 95 failed witnesses.yml runs for the refusal
string found four instances, all flat generated names on branches that introduced
modules; mod.rs and index.rs appear in none of them, and #8691's own failure is an
ordinary drifted mirror on v1_compiler_emit_rust.rs. The eight-basename population is
retracted by its author.

WHAT IS REAL IS A DIFFERENT MECHANISM WITH A DAMAGING REMEDY. Both compared
populations key on BASENAME and the committed walk enumerates only the top level, so
a module authored with a bare name equal to a file inside cli_run/ or
module_path_index/ emits a colliding basename that lands in emitted_not_committed.
The two remedies attached there both destroy hand-authored code: installing the
mirror overwrites it with generated bytes, deleting it removes it. A refusal whose
every offered remedy is wrong for the class it fires on routes a compliant author
into damage, and the only non-damaging response left is to ignore the wall -- which
is how a correct wall decays into advice, fastest for the authors who take it most
seriously.

So the collision gets its own typed cause and its own remedy (de-collide the module
name), and NOTHING IS EXCLUDED. Teaching is_hand_maintained_path about the directory
list -- the fix the brief proposed -- drops a genuinely generated surface out of the
comparison entirely: a wrong refusal traded for no refusal, the same false green as
making the committed walk descend, entered from the other side. DIRS is therefore
consulted at the seam that CLASSIFIES a refusal, never at one that excludes from it.

ZERO EXPOSURE, in the carrier and in those words. Zero collisions in the corpus, no
upstream guard found that would refuse such a module name (the nearest candidates in
gunbc.stage0_rust_source_lifecycle_scaffold are scoped to top-level stage0 paths and
cannot see a subdirectory file), and the state is reachable by one .dag module. This
is a wall for a state nothing currently inhabits, not the repair of a live defect --
recorded that way so the class is not read as closed.

EVIDENCE. witness_hand_maintained_collision_refuses_under_its_own_remedy asserts both
halves in one run: the collision refuses under MirrorMissingShadowsHandMaintainedSource
naming its directory, AND a genuine orphan in the same run still refuses under
MirrorMissingForEmittedSurface, with neither path appearing under the other's cause --
a change that silenced the collision by exclusion would take the orphan with it and go
green on a wall that no longer stands. Executed remotely at this tree: three witnesses
PASS; re-running the same witness with the collision re-classified as a plain orphan
(the pre-change behavior) FAILS.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`shadows.insert(basename, home)` was LAST-WRITE-WINS across HAND_MAINTAINED_STAGE0_DIRS.
One basename hand-authored under two hand-maintained directories -- `mod.rs` being the
obvious candidate, since it is the name most likely to appear in two module directories
at once -- would refuse while naming only ONE of them. Nothing is laundered (the line
still stops), but the remedy printed could send the author to the wrong file, which is
the failure this variant exists to prevent, one notch quieter. Finding: smart-ram-730 on
this PR.

The carrier field is a LIST rather than the host de-duplicating into a string, so the
extra homes are representable at the seam that owns the fact: with a single-home field,
the host has no correct choice to make and last-write-wins is the only shape available.
Homes are sorted host-side so the refusal text is a function of the collision and not of
the roster's authoring order.

Executed at this tree, remote: the collision witness now carries a two-home row and
asserts its exact rendering ("mod.rs (hand-maintained under cli_run, module_path_index)")
alongside the single-home row, and the genuine-orphan separation half is unchanged and
still holds. Both witnesses PASS.

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

gunbai-bot Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

V1 FREEZE ADMISSION, stated rather than assumed. This touches src/v1/stage0/src/required_regen_host.rs, which is inside the semantics-frozen v1 seed. The admission test is PURPOSE (gunbc.v1_maintenance_standing v1_seed_standing): a change is admitted when it serves the v2 self-host program. This one does. required-regen is the mechanism that keeps the committed stage0 mirror honest against a fresh emit, and that mirror IS the self-host path — a refusal on that path whose only offered remedies damage hand-authored source is a defect in the instrument the self-host program is steered by. The change adds no capability to the seed and no row to any of its growth surfaces: one refusal cause splits out of an existing one, and the seed's behaviour on every population it already handled is byte-identical.

It is worth recording that the admission is not independent — the session that authorized this build is the one that reviewed it. So the reasoning is written down here to be checked rather than taken.

Last-write-wins finding is fixed (552b8be), and the carrier changed rather than the host working around it: hand_maintained_homes is now a List<String>, because with a single-home field the host has no correct choice available and insert last-write-wins is the only shape there is. mod.rs under both cli_run/ and module_path_index/ now refuses naming both. Homes are sorted host-side so the refusal text is a function of the collision, not of the roster's authoring order. The witness carries a two-home row asserting the exact rendering, and the genuine-orphan separation half is unchanged and still holds; both PASS, executed remotely at this tree.

— sent from quick-heron-894

@briansrls
briansrls merged commit 00d202e into main Aug 22, 2026
1 check passed
@briansrls
briansrls deleted the session/quick-heron-894 branch August 22, 2026 15:53
briansrls pushed a commit that referenced this pull request Aug 23, 2026
…loop that would have caught them (#8941)

`cargo test -p v1-compiler --lib` does not compile on main. Three errors, two
commits, both today:

  00d202e  #8867  11:53:14 -0400  validate_compared_populations gained a 3rd
                                      parameter; two test callers still pass 2
  71d7da4  #8873  13:25:54 -0400  SymbolIndex gained transparent_alias_rep;
                                      a cli_run.rs initializer was left stale

NEITHER AUTHOR WAS CARELESS, and that is the finding. #8867 updated the
definition AND both production callers in the same diff — all three are visible in
its hunks. It missed only the `#[cfg(test)]` callers, because nothing showed them.
`cargo check` and `cargo build` do not compile test targets; `--all-targets` does,
and that was clippy's flag. Clippy left CI 2026-07-08 as zero-signal under a
crate-wide allow; the Rust suite left CI 2026-07-11 and was kept as a local check.
So nothing in this repository compiles `#[cfg(test)]`, and DESIGN's first
"Building & checks" line is a command that cannot start.

DURATION, measured rather than asserted: the suite COMPILED at 00d202e^ —
`test result: ok. 0 passed; 568 filtered out`, and the 568 is the load-bearing
number since the harness cannot enumerate without compiling. So this is hours, not
months. An earlier draft of this message said every session running the local suite
had been running a dead command; that was true only of sessions since 11:53 today.

The short duration makes the incident smaller and the class no smaller: two
independent commits broke it 92 minutes apart, which is evidence of rate.

THE FIX. `&BTreeMap::new()` is legitimate filler here for a stated reason rather
than because it compiles: both assertions are on the empty-population arms, and
`validate_compared_populations` returns on `committed.is_empty()` /
`emitted.is_empty()` BEFORE `hand_dir_shadows` is read, so no value of the third
argument can change what those tests assert. `transparent_alias_rep` gets
`rc_empty_map()`, matching what `empty_symbol_index` fills for that field.

NOT RE-ADDING A GATE. Re-arming `--all-targets` or returning the suite to CI is the
operator's call — it is their two rulings that compose into this, and a PR that
fixed the sites and re-armed a gate would force one decision through a diff that
needed only the other. This is the prerequisite either way: a gate re-added over a
red tree lands red.

VERIFIED by `cargo check --all-targets -p v1-compiler`, clean in 1m03s, re-run
against this tree after merging current main rather than only against the tree the
fix was written on. There is something almost too neat about the repair being
verified by the mechanism whose removal made it necessary.

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