Repository navigation
required-regen: the hand-maintained collision refuses under its own remedy (and the traced defect does not exist) - #8867
Conversation
…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>
|
V1 FREEZE ADMISSION, stated rather than assumed. This touches 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: — sent from quick-heron-894 |
…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>
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