fix(oracle): RQ-66-BOTHWRONG (#1210) — un-stale the frozen-anchor mirror that reddened main for five merges (#1255) - #1256
Merged
Merged
Conversation
…ror that reddened main for five merges (#1255) `vcr_dec_001_graph_alloc_differential.py` keeps its own copy of the frozen codegen anchors, hand-synced from `crates/synth-cli/tests/frozen_codegen_bytes.rs`. Its own header says so. RQ-66-BOTHWRONG (#1249) correctly re-froze `flight_seam` 706 -> 718 in the Rust golden, with a written cause and an executing differential proving the new bytes correct. It did not know this second copy existed. MAIN WENT RED FOR FIVE CONSECUTIVE MERGES — 4a3f608 through 65d6df3, the release commit and its cold-review follow-up included: flight_seam.wasm e47705fd59f6 len=718 MISMATCH <-- VIOLATION: 1 check(s) failed. That is not a compiler regression. It is one source of truth moving and the other not. EXACTLY ONE OF THE FOUR mirrored anchors was stale, which is what makes this class dangerous — three kept agreeing, so nothing looked systemically wrong and the single divergence read as a codegen change: control_step.wasm 8b3f1f6fe3a4 in the golden: True flight_seam.wasm e7152735df88 in the golden: FALSE <-- stale flight_seam_flat.wasm 5a5d67577254 in the golden: True signed_div_const.wasm b277453b7829 in the golden: True Corrected, and the differential now passes end to end: OK: flag-off frozen; flag-on applies, RA-003 Consistent, no drift on non-applied, no growth on applied. THE STALE VALUE IS NOT THE DEFECT — THE MIRROR IS. CLAUDE.md's first invariant is "derive what you check against from the artifact you ship", and records that the same failure was invented locally three times before anyone named it. This is a fourth instance, sitting in a file whose own comment advertises a manual sync. The header now says the mirror is the defect and carries the one-line check that distinguishes a stale mirror from a real regression, because telling those apart from the failure message alone currently costs a full local reproduction. Filed as #1255; reading the goldens directly is the real fix. Refs #1210 #1255 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…d fix an alternate frame that a line shift had silently collapsed RQ-66-BOTHWRONG changed the selector and added 16 lines to arm_backend.rs. The mutation survey went red on main for five merges. None of it is a compiler defect; all of it is ledger staleness, and one piece is a real defect in this release's own work. 1. RE-ANCHORED 21 SHIFTED SITES. `reanchor` relocates by the stored `before` text, so the +16 shift resolved cleanly (1565:21 -> 1581:21, 1316:36 -> 1332:36, and so on). 2. RETIRED ONE SITE THAT NO LONGER EXISTS. `R3-direct/BOUND/select_with_stack.rs` mutated `if target_idx < block_labels.len()`. RQ-66-BOTHWRONG (#1215b) REPLACED that guard — it was the clamp that sent a function-level br_table to `0 < 0` when no block was open, silently skipping both the value landing and the branch. The site vanished because the code it targeted WAS the defect. `reanchor` reported NOT FOUND rather than relocating to a lookalike, which is right. Moved to a `retired` list with its reason rather than deleted, because deleting shrinks the denominator with no record; the tool has no first-class retired state, filed as #1257. 3. RE-MEASURED THE DROPMOV CHANGED-SET, 8 -> 9. Byte triage against a LIVE baseline. A first attempt diffed against the ledger's RECORDED baseline at ad52535a and got 33 — that folds in 46 entries of tree drift the survey itself warns about. The wrong REFERENCE, not a wrong operation. The ninth module is `i64_result_pair_1189.wat`, a fixture RQ-66-WATCHED ADDED this release, so the set grew because the CORPUS grew. `ci_subset.want_changed` carries its own copy and was re-pinned by pin-subset's own rule. 4. THE ALTERNATE SILENT-SUBSET FRAME HAD SILENTLY COLLAPSED. This is the real defect. `BORDERLINE_LOUD_IDS` was a frozenset of the literal id "R1-routing/GUARD/arm_backend.rs:1006:8". After the +16 shift the site is at :1022:8, the set matched NOTHING, and `is_loud_effect_1006_8_silent` degraded to `is_loud_effect` — reporting 6/15 under the 25 % alternate's name where it should report 5/16. No error, no warning. A set-membership test against a mutable key is a SILENT NO-OP when the key moves, which is the worst failure mode for a rule whose output is a published number. Every other part of the file anchors by `before` text precisely because line numbers move; this one consumer did not, so `reanchor` — the operation that keeps the ledger correct — is what broke it. Fixed by anchoring on the `before` text and region, and by REFUSING a zero-or-multiple match instead of returning an empty set. A miss now raises with the reason, because the defect was never the stale id (ids go stale routinely) — it was that a miss produced a plausible number. Restored: killed_loud 6 / silent_changed 15 -> 27 % primary alternate 5 / 16 -> 25 % named alternate 5. `survey_sampled` 38 -> 37 follows from the retirement, pinned with its provenance beside the number. 67/67 claims hold. status_evidence 0. MUTANTS-CI subset=10 controls=3 non-killed=7 failures=0 MUTANTS-REACH-WIDE entries=4 reached=4 unreached=0 Refs #1189 #1210 #1255 #1257 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
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.
Un-stales the frozen-anchor mirror that has reddened
mainfor five consecutive merges, and names the mirror itself as the defect.What happened
scripts/repro/vcr_dec_001_graph_alloc_differential.pykeeps its own copy of the frozen codegen anchors, hand-synced fromcrates/synth-cli/tests/frozen_codegen_bytes.rs. Its own header says so.RQ-66-BOTHWRONG (#1249) correctly re-froze
flight_seamfrom 706 to 718 bytes in the Rust golden, with a written cause and an executing differential proving the new bytes correct. It did not know this second copy existed.Red from
4a3f6080through65d6df39— the release commit and its cold-review follow-up included. Not a compiler regression: one source of truth moved and the other did not.Why it hid
Exactly one of four mirrored anchors was stale. Three kept agreeing, so nothing looked systemically wrong and the single divergence read as a codegen change rather than a bookkeeping gap.
control_step.wasm8b3f1f6fe3a4flight_seam.wasme7152735df88flight_seam_flat.wasm5a5d67577254signed_div_const.wasmb277453b7829After the fix
The stale value is not the defect — the mirror is
CLAUDE.md's first invariant is "derive what you check against from the artifact you ship", and records that the same failure was invented locally three times before anyone named it. This is a fourth instance, in a file whose own comment advertises a manual sync. Documenting a hand-sync doesn't make it safe; it just records where the next divergence will happen.
The header now says so, and carries the check that distinguishes the two failure modes:
A hash in the mirror that is absent from the golden is a stale mirror, not a regression — and telling those apart from the failure message alone currently costs a full local reproduction. Filed as #1255; reading the goldens directly is the real fix.
Related, found by the same incident
This oracle is not a required status check, and the merge ritual gating these merges counted only checks that had already reported fail. A pending non-required check was invisible to it. Replayed against #1249's own snapshot, five or more non-advisory oracles were still pending at merge time — the selector parity oracle among them. That gate has been corrected to block on pending, not just on red.
Refs #1210 #1255
🤖 Generated with Claude Code
https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L