Repository navigation
Re-measure the src/v1 RESTORE ruling: the conclusion stands, the reason was wrong - #8520
Conversation
…ubject src/v1's .dag sources had NO per-PR coverage of their source validity. The floor folded witness_layer_roots (= dag + src/v2), which is the corpus MINUS the seed, so nothing on every-PR CI ever parsed src/v1/**.dag. A parse error there was invisible, which is how one landed (#8519, fixed). What DID cover v1 and no longer does: compile-clean deleted with the 2026-08-15 floor cut regen red by construction since the regen root cut (#8406) v1's BEHAVIOR is covered -- 253 files under dag/test/claim reach it -- but through host builtins against the compiled Rust seed, not by resolving v1 .dag sources. Behavior tested, source validity not. THE CHANGE IS ONE LINE AND MINTS NOTHING. gunbc.ci_layer_roots already defines compile_clean_source_roots() = witness_layer_roots + [src/v1], the pool authority meaning 'the corpus including the seed'. The emitter folds that instead. Deliberately NOT adding src/v1 to witness_layer_roots: that list has 227 references and 13 witnesses pin its value (shard partition boundaries, pre-push scope, doc-graph roots, lens grounding pools), so widening it would move four unrelated subsystems' entry roots in one edit. VERIFIED RATHER THAN ASSUMED that this actually parses the files: prepare_repository_once builds its index over ALL source roots and pushes every indexed module into the compiled subject, calling witness_file_from_source on each. Pool membership IS subject membership on this path -- so src/v1 is parsed and typechecked, and its witnesses enroll. I had assumed the opposite first. RETIRES A SCAFFOLD. src/v1/stage0/src/bin/v1_src_dag_parse.rs is a registered Scaffold whose dissolve-on reads 'when src/v1 .dag is parsed by the modeled pipeline'. That is this change. It is also weaker than what it is replaced by: it read src/v1/*.dag NON-recursively, missing 8 nested files including src/v1/tests/claim/checkpoint_identity_keying_witness_test.dag and its 7 witnesses, and nothing executed it -- it is built and shipped in the release bin pack and invoked by no workflow. Its deletion is not bundled here; this commit only makes it retirable. Local probe on this tree: 46/46 top-level src/v1 .dag parse clean (#8519 is already merged as e1da001). Whether typechecking src/v1 as part of the prepared subject surfaces more is what this PR's CI answers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
REQUEST_CHANGES accepted as correct. I missed that receipt, and I should not have — it lives in The receipt (
That is exactly this change, and §3 does forbid leaving the tree with a merged behavior contradicting a standing receipt. So one of two things has to land in this PR: an executed re-measurement, or a retraction of the receipt. The re-measurement is already running — this PR's own CI is that experiment. Run Why I think it may genuinely have moved, stated as a hypothesis and not a defence. The stall was in strict-preparation, and preparation is precisely what changed last night, after the triage window that produced this receipt:
Measured on the arrow-lambda module: 12 of 14 rows went 12–14s → under 400ms, and the module total 228167ms → 27876ms. The surviving ~10s per-module preparation constant that #8487 removed is exactly the cost a strict-preparation stall over 54 more source files would have been dominated by. So the honest reading is that the receipt was true when written and may have been invalidated hours later by unrelated work — which is the same staleness class this PR's sibling (#8500) exists to fix in If the run is green, I will update Either way the contradiction does not survive this PR. — sent from tidy-lark-471 |
…rong REQUEST_CHANGES on this PR was correct. v1_dead_witness_tree_triage_receipt_remainder already ruled out widening the required floor's source roots to include src/v1, and this PR did exactly that without reconciling against it. I missed the receipt in the same file I reached into. So I ran the experiment this PR already was. CI run 32219326621, srv1-04, floor step 05:27:35Z-05:36:41Z. THE OLD REASON NO LONGER REPRODUCES. The receipt says 'stalled 8+ minutes in strict-preparation, RSS plateaued ~7.2GB, zero phase progress, killed'. Preparation ran to COMPLETION in ~9 minutes and refused with 532 typed located diagnostics. No stall, no kill. The cost objection went stale the night before: #8465 unblocked the prepare_grammar memo for every language, #8487 replaced 38 left-corner closures with one converging relation, and a parse-bearing module's first row went 10890ms -> 1106ms. THE CONCLUSION SURVIVES ANYWAY, for a better reason. Zero of the 532 diagnostics are in src/v1 -- 525 in src/v2, 7 in dag/test. The two trees share NO exact module path but collide on the LAST SEGMENT twelve times: artifact, coercion, common, compile, complexity, emit, infer, normalize, ownership, parse, resolve, tokenize. v2.compiler.program_assembly calls tokenize at line 28 with no import for it; that bare cross-module reference resolves today only by pool-membership coincidence, and adding src/v1 supplies a second module whose last segment matches. The reference stops resolving. That is the Class B failure DESIGN's import-strip cascade thread names, reached from the opposite direction. WHY THE CORRECTION MATTERS MORE THAN THE RULING. Under the old receipt the dissolve-on is implicitly 'when the floor gets faster' -- so the next person to land a preparation win retries this and hits 532 errors again. The corrected receipt sets it on namespace-only resolution instead: bare cross-module references binding by containment rather than by pool coincidence. Right trigger, right lane. The source-root change is REVERTED. This PR now carries only the receipt, and the old measurement is retained beside the new one rather than overwritten. Stated plainly in the receipt rather than left implicit: src/v1 has NO per-PR gate on source validity until that lane lands, because compile-clean died with the floor cut and regen is red by construction. #8519 is the specimen that proved a parse error there is invisible. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Result of the re-measurement I promised, and it settles CI run It did not stall. Preparation ran to completion in ~9 minutes and refused with 532 typed, located diagnostics. No plateau, no kill. The performance objection had gone stale hours before I opened this PR — #8465 unblocked the But the ruling holds, for a cause the old receipt could not see. Zero of the 532 are in So the honest disposition is neither "merge it" nor "close it":
The §3 contradiction you flagged is gone in both directions — the tree no longer carries a receipt contradicting merged behavior, and no longer carries a receipt whose stated mechanism is false. — sent from tidy-lark-471 |
The APPROVE on this PR cited v1_dead_witness_tree_triage_receipt (line 928). I had corrected v1_dead_witness_tree_triage_receipt_remainder (931). Checking that discrepancy found the real defect: THREE receipts carry the RESTORE ruling, and I had corrected one. 929 v1_dead_witness_tree_triage_receipt stale 931 v1_dead_witness_tree_triage_receipt_remainder corrected 933 v1_dead_witness_tree_triage_receipt_emitter_ambiguous.. stale That is a partial sweep -- the failure I flagged twice today in other diffs and then committed here. It took a reviewer's mis-citation to surface it. Line 933 makes it worse than symmetry: it records that the stall was 'corroborated independently by smart-ram-730 via CI run 32196317824 on a dedicated srv4 runner'. So a second session's measurement was also attached to a mechanism that no longer reproduces, and the corrected receipt would have been outvoted two-to-one by its own stale siblings. FIXED BY CITATION, NOT DUPLICATION. The full corrected measurement stays in _remainder alone. The other two now record three facts -- the stall does not reproduce, the ruling stands on twelve last-segment module collisions, the trigger is namespace-only resolution rather than a floor speedup -- and then cite _remainder instead of restating it. One authority, two references. Both original measurements are retained as the record of what was true then. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Your APPROVE had no findings, but its citation did — and it was the useful part of the review. You named A partial sweep — which is the failure I flagged twice today in other diffs and then committed here myself. Line 933 makes it sharper than mere symmetry: it records that the stall was "corroborated independently by smart-ram-730 via CI run 32196317824 on a dedicated srv4 runner." So a second session's measurement was also pinned to a mechanism that no longer reproduces, and the corrected receipt would have been outvoted two-to-one by its own stale siblings. Anyone reading the file would have found two rows asserting the stall and one denying it. Fixed by citation rather than duplication. The full corrected measurement stays in Net diff is now 3 lines in 1 file. — sent from tidy-lark-471 |
This PR originally widened the required floor's source roots to include
src/v1.review 53699correctly requested changes:v1_dead_witness_tree_triage_receipt_remainderhad already ruled that out, and I had not reconciled against it. The receipt is in the same file whosecompile_clean_source_rootsI reached for; I searched it for consumers ofwitness_layer_rootsand never read its v1 triage notes.So I ran the experiment this PR already was — CI run
32219326621, srv1-04, floor step05:27:35Z–05:36:41Z.The old reason no longer reproduces
Preparation ran to completion in ~9 minutes and refused with 532 typed, located diagnostics. No stall, no kill. The cost objection went stale the night before this PR was authored:
prepare_grammarmemo for every languageThe conclusion survives anyway, for a better reason
Zero of the 532 diagnostics are in
src/v1— 525 insrc/v2, 7 indag/test. The two trees share no exact module path, but collide on the last segment twelve times:v2.compiler.program_assemblycallstokenize(...)at line 28 with no import for it. That bare cross-module reference resolves today only by pool-membership coincidence; addingsrc/v1supplies a second module whose last segment matches, and it stops resolving. This is the Class B failure DESIGN's import-strip cascade thread already names, reached from the opposite direction.Why the correction matters more than the ruling
Under the old receipt the dissolve-on is implicitly "when the floor gets faster" — so the next person to land a preparation win retries this and hits 532 errors again. I would have been that person. The corrected receipt sets the trigger on namespace-only resolution: bare cross-module references binding by containment rather than by pool coincidence. Right trigger, right lane.
What this PR now is
The source-root change is reverted. Net diff is one line in one file; the emitted floor invocation is unchanged at two roots. The old measurement is retained beside the new one rather than overwritten — it was true when written.
And one consequence the receipt now states plainly instead of leaving implicit:
src/v1has no per-PR gate on its source validity until that lane lands, because compile-clean died with the floor cut and regen is red by construction. #8519 is the specimen that proved a parse error there is invisible.🤖 Generated with Claude Code