Repository navigation
ci(release): gate intra-workspace version-pin desync at PR time (#145) - #200
Merged
Merged
Conversation
v0.7.0's tag broke release.yml + publish-to-crates-io.yml because [workspace.package].version was bumped while every crates/*/Cargo.toml path-dep pin + MODULE.bazel still carried the old version — cargo refused to resolve (recovered by the 23-pin sweep in #143). The pin sweep was a manual, forgettable step. Add scripts/check_version_pins.py + a `Version Pin Sweep` CI job that fails at PR-merge time if [workspace.package].version drifts from any intra-workspace `{ path = "../x", version = "Y" }` pin or MODULE.bazel's module(version=...). Makes the v0.7.0-class desync structurally uncatchable-too-late rather than caught at tag-push. The script doubles as a local pre-tag check (run from repo root, exits non-zero listing every offending pin). Verified: passes at the current 0.11.11; catches an injected 0.11.10 path-dep desync with a file:line message. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
avrabe
added a commit
that referenced
this pull request
Oct 8, 2026
…surement THE ASK IS SIX WORDS AT SIX PCs, NOT THREE SLOTS. Derived from the module's own disassembly, digests verified against the thread (c.wasm d854e5bb…, c.loom.wasm 791ab6b5…), each of the three gravity blocks reads TWO operands and the slots carried forward from v0.81 are only the MULTIPLICANDS: pc 0x2498 -> offset 940 ADDEND [sp,#200] @0x2490 MULTIPLICAND [sp,#152] @0x2494 pc 0x24c4 -> offset 936 ADDEND [sp,#216] @0x24bc MULTIPLICAND [sp,#232] @0x24c0 pc 0x24f0 -> offset 944 ADDEND [sp,#192] @0x24e8 MULTIPLICAND [sp,#208] @0x24ec Two independent reasons three words could not answer the lane's question. A wrong ADDEND and a wrong MULTIPLICAND are INDISTINGUISHABLE in the stored result, so sampling only the multiplicands cannot name which operand is wrong. And these are general-purpose spill homes, not dedicated operand slots: [sp,#152] is referenced 130 times in this object, [sp,#208] 34, [sp,#232] 20 — so "the value of [sp,#152]" names no single value and each word must be sampled AT THE PC OF ITS OWN LOAD. WHAT THIS LANE DID NOT OBTAIN, STATED PLAINLY IN THE ARTIFACT. The runtime values were NOT measured: qemu-system-arm and qemu-arm are both absent on the release machine and the reporter's repository is not cloned here, so the image cannot be executed. A request naming the six PCs was DRAFTED AND NOT SENT — it is correspondence with an external reporter, surfaced to the maintainer rather than posted by the loop. The thread stands at ten comments and this release added none. THE REFUTING COMMAND HELD: the shipped oracle still reports the lowering FAITHFUL (9 assertions, 0 failures) with every refuted mechanism injectable, so v0.81's refutation stands and the premise is intact. THREE INSTRUMENT ERRORS, RECORDED RATHER THAN BURIED. A first grep reported FOUR materializations of 9.81f; truncation by `head -8` hid five, and the real count is NINE. A first store-offset attribution gave {932, 940, 936} and briefly made the carried claim look wrong; the scan window began BEFORE its own anchor and picked up the preceding block's `addw`. Forward-only scanning gives 940, 936, 944 — CONFIRMING the carried claim. The brief was right and the first measurement was not. Also corrected in the artifact: the done-when now demands all six words at their six PCs, and the sentence calling three words "the whole lane" is gone. AND R14 — LANDED BY THIS RELEASE'S OWN CLOSEARM LANE — NOW GOVERNS THIS ARTIFACT. The verdict is PARTIAL, because the lane refined the measurement and did NOT name the defect, and `leading_verdict` classifies it so from the prose rather than from a token chosen to please the gate. PARTIAL is in the INCOMPLETE set, the status is claiming (R4-lane requires that once the delivery commit is on main), so R14 demands that the ISSUE's fate be DECLARED: `issue-scope: outlives`, the truthful value, because #1436 is still open and still unexplained. No `disposition:` — R11 forbids one beside a claiming status. PROVEN LOAD-BEARING, not assumed: with the declaration the gate is rc=0 with zero R14 findings; with `issue-scope` stripped it is rc=1 on `R14 RQ-82-JESSDIVERGE4: verified-by opens PARTIAL while status implemented claims the outcome holds, and no issue-scope says what that means for the ISSUE`; restored, rc=0. In v0.81 this declaration depended on an operator remembering it. It is now mechanical. Refs #1436 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
avrabe
added a commit
that referenced
this pull request
Oct 8, 2026
…surement THE ASK IS SIX WORDS AT SIX PCs, NOT THREE SLOTS. Derived from the module's own disassembly, digests verified against the thread (c.wasm d854e5bb…, c.loom.wasm 791ab6b5…), each of the three gravity blocks reads TWO operands and the slots carried forward from v0.81 are only the MULTIPLICANDS: pc 0x2498 -> offset 940 ADDEND [sp,#200] @0x2490 MULTIPLICAND [sp,#152] @0x2494 pc 0x24c4 -> offset 936 ADDEND [sp,#216] @0x24bc MULTIPLICAND [sp,#232] @0x24c0 pc 0x24f0 -> offset 944 ADDEND [sp,#192] @0x24e8 MULTIPLICAND [sp,#208] @0x24ec Two independent reasons three words could not answer the lane's question. A wrong ADDEND and a wrong MULTIPLICAND are INDISTINGUISHABLE in the stored result, so sampling only the multiplicands cannot name which operand is wrong. And these are general-purpose spill homes, not dedicated operand slots: [sp,#152] is referenced 130 times in this object, [sp,#208] 34, [sp,#232] 20 — so "the value of [sp,#152]" names no single value and each word must be sampled AT THE PC OF ITS OWN LOAD. WHAT THIS LANE DID NOT OBTAIN, STATED PLAINLY IN THE ARTIFACT. The runtime values were NOT measured: qemu-system-arm and qemu-arm are both absent on the release machine and the reporter's repository is not cloned here, so the image cannot be executed. A request naming the six PCs was DRAFTED AND NOT SENT — it is correspondence with an external reporter, surfaced to the maintainer rather than posted by the loop. The thread stands at ten comments and this release added none. THE REFUTING COMMAND HELD: the shipped oracle still reports the lowering FAITHFUL (9 assertions, 0 failures) with every refuted mechanism injectable, so v0.81's refutation stands and the premise is intact. THREE INSTRUMENT ERRORS, RECORDED RATHER THAN BURIED. A first grep reported FOUR materializations of 9.81f; truncation by `head -8` hid five, and the real count is NINE. A first store-offset attribution gave {932, 940, 936} and briefly made the carried claim look wrong; the scan window began BEFORE its own anchor and picked up the preceding block's `addw`. Forward-only scanning gives 940, 936, 944 — CONFIRMING the carried claim. The brief was right and the first measurement was not. Also corrected in the artifact: the done-when now demands all six words at their six PCs, and the sentence calling three words "the whole lane" is gone. THE CLAIM SHAPE WAS WRONG ON THE FIRST PUSH, AND CI CAUGHT IT. This artifact first went out as `status: implemented` with `issue-scope: outlives` and a PARTIAL verdict. #1487 reddened on `Claim Check` — a REQUIRED context — because `verdict_prose_check` reds an INCOMPLETE prose verdict beside a claiming status with no `disposition`, while R11 FORBIDS a disposition beside a claiming status. `LEGAL_BESIDE_CLAIMING` has exactly ONE member, `REFUTED`, so A LANE THAT NARROWS HAS NO LEGAL CLAIMING VERDICT AT ALL. The gates permit a strictly safer shape and nothing pointed at it: status: proposed disposition: partial landed: <the increment> issue-scope: OMITTED R4-lane satisfied by `landed:` — its own message is a disjunction, "flip the status OR record the increment" R11 satisfied: a `disposition` IS present beside a NON-claiming status R12 `outlives` beside non-claiming would RED, so `issue-scope` is omitted verdict_prose incomplete + non-claiming passes; no carve-out needed R14 status not claiming, so out of population R3 cannot fire on a `manual:` done-when Under this shape #1436 is NEVER placed in the authorised close set at all, where the claiming shape authorises retirement and then relies on `issue-scope` to take it back. That is a better answer to #1484 than the rule this release shipped for it, and R14 is looser than its sibling: it accepts any of the 7 INCOMPLETE tokens given a declaration, where `verdict_prose` accepts 1 — a conjunction defect introduced by the fix for conjunction defects, recorded rather than quietly corrected. AND THE PRE-PUSH CHECK THAT MISSED IT: CHECK4's squash simulation runs 2 scripts (`merge_gate`, `status_evidence`); the `Claim Check` job runs 33. A green CHECK4 is a true statement about a narrower subject. This push is verified against the artifact-gate subset of that job, with CI's own flags. Refs #1436 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
avrabe
added a commit
that referenced
this pull request
Oct 8, 2026
…surement THE ASK IS SIX WORDS AT SIX PCs, NOT THREE SLOTS. Derived from the module's own disassembly, digests verified against the thread (c.wasm d854e5bb…, c.loom.wasm 791ab6b5…), each of the three gravity blocks reads TWO operands and the slots carried forward from v0.81 are only the MULTIPLICANDS: pc 0x2498 -> offset 940 ADDEND [sp,#200] @0x2490 MULTIPLICAND [sp,#152] @0x2494 pc 0x24c4 -> offset 936 ADDEND [sp,#216] @0x24bc MULTIPLICAND [sp,#232] @0x24c0 pc 0x24f0 -> offset 944 ADDEND [sp,#192] @0x24e8 MULTIPLICAND [sp,#208] @0x24ec Two independent reasons three words could not answer the lane's question. A wrong ADDEND and a wrong MULTIPLICAND are INDISTINGUISHABLE in the stored result, so sampling only the multiplicands cannot name which operand is wrong. And these are general-purpose spill homes, not dedicated operand slots: [sp,#152] is referenced 130 times in this object, [sp,#208] 34, [sp,#232] 20 — so "the value of [sp,#152]" names no single value and each word must be sampled AT THE PC OF ITS OWN LOAD. WHAT THIS LANE DID NOT OBTAIN, STATED PLAINLY IN THE ARTIFACT. The runtime values were NOT measured: qemu-system-arm and qemu-arm are both absent on the release machine and the reporter's repository is not cloned here, so the image cannot be executed. A request naming the six PCs was DRAFTED AND NOT SENT — it is correspondence with an external reporter, surfaced to the maintainer rather than posted by the loop. The thread stands at ten comments and this release added none. THE REFUTING COMMAND HELD: the shipped oracle still reports the lowering FAITHFUL (9 assertions, 0 failures) with every refuted mechanism injectable, so v0.81's refutation stands and the premise is intact. THREE INSTRUMENT ERRORS, RECORDED RATHER THAN BURIED. A first grep reported FOUR materializations of 9.81f; truncation by `head -8` hid five, and the real count is NINE. A first store-offset attribution gave {932, 940, 936} and briefly made the carried claim look wrong; the scan window began BEFORE its own anchor and picked up the preceding block's `addw`. Forward-only scanning gives 940, 936, 944 — CONFIRMING the carried claim. The brief was right and the first measurement was not. Also corrected in the artifact: the done-when now demands all six words at their six PCs, and the sentence calling three words "the whole lane" is gone. THE CLAIM SHAPE WAS WRONG ON THE FIRST PUSH, AND CI CAUGHT IT. This artifact first went out as `status: implemented` with `issue-scope: outlives` and a PARTIAL verdict. #1487 reddened on `Claim Check` — a REQUIRED context — because `verdict_prose_check` reds an INCOMPLETE prose verdict beside a claiming status with no `disposition`, while R11 FORBIDS a disposition beside a claiming status. `LEGAL_BESIDE_CLAIMING` has exactly ONE member, `REFUTED`, so A LANE THAT NARROWS HAS NO LEGAL CLAIMING VERDICT AT ALL. The gates permit a strictly safer shape and nothing pointed at it: status: proposed disposition: partial landed: <NAMES THE DELIVERING PR> issue-scope: OMITTED R4-lane satisfied by `landed:` — its own message is a disjunction, "flip the status OR record the increment" — BUT ONLY IF the text names the PR the gate DERIVES. MEASURED, after this lane red on it: `_acknowledge` takes `PR_NUMBER.findall(subject)[-1]` with `PR_NUMBER = r"\(#(\d+)\)"` — the LAST PARENTHESISED number in the squash subject, which is the one the SQUASH APPENDS, i.e. THIS PR — and requires it in `landed_prs(fields)`. My first `landed:` named #1436, the ISSUE, and satisfied nothing. And no local run could have told me: R4-lane needs a DELIVERY COMMIT ON MAIN, so it cannot fire in the checkout at all — only in CHECK4's squash simulation. The local "ALL PASS" was a true statement about a tree with no delivery commit. R11 satisfied: a `disposition` IS present beside a NON-claiming status R12 `outlives` beside non-claiming would RED, so `issue-scope` is omitted verdict_prose incomplete + non-claiming passes; no carve-out needed R14 status not claiming, so out of population R3 cannot fire on a `manual:` done-when Under this shape #1436 is NEVER placed in the authorised close set at all, where the claiming shape authorises retirement and then relies on `issue-scope` to take it back. That is a better answer to #1484 than the rule this release shipped for it, and R14 is looser than its sibling: it accepts any of the 7 INCOMPLETE tokens given a declaration, where `verdict_prose` accepts 1 — a conjunction defect introduced by the fix for conjunction defects, recorded rather than quietly corrected. AND THE PRE-PUSH CHECK THAT MISSED IT: CHECK4's squash simulation runs 2 scripts (`merge_gate`, `status_evidence`); the `Claim Check` job runs 33. A green CHECK4 is a true statement about a narrower subject. This push is verified against the artifact-gate subset of that job, with CI's own flags. Refs #1436 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
avrabe
added a commit
that referenced
this pull request
Oct 8, 2026
…surement (#1487) THE ASK IS SIX WORDS AT SIX PCs, NOT THREE SLOTS. Derived from the module's own disassembly, digests verified against the thread (c.wasm d854e5bb…, c.loom.wasm 791ab6b5…), each of the three gravity blocks reads TWO operands and the slots carried forward from v0.81 are only the MULTIPLICANDS: pc 0x2498 -> offset 940 ADDEND [sp,#200] @0x2490 MULTIPLICAND [sp,#152] @0x2494 pc 0x24c4 -> offset 936 ADDEND [sp,#216] @0x24bc MULTIPLICAND [sp,#232] @0x24c0 pc 0x24f0 -> offset 944 ADDEND [sp,#192] @0x24e8 MULTIPLICAND [sp,#208] @0x24ec Two independent reasons three words could not answer the lane's question. A wrong ADDEND and a wrong MULTIPLICAND are INDISTINGUISHABLE in the stored result, so sampling only the multiplicands cannot name which operand is wrong. And these are general-purpose spill homes, not dedicated operand slots: [sp,#152] is referenced 130 times in this object, [sp,#208] 34, [sp,#232] 20 — so "the value of [sp,#152]" names no single value and each word must be sampled AT THE PC OF ITS OWN LOAD. WHAT THIS LANE DID NOT OBTAIN, STATED PLAINLY IN THE ARTIFACT. The runtime values were NOT measured: qemu-system-arm and qemu-arm are both absent on the release machine and the reporter's repository is not cloned here, so the image cannot be executed. A request naming the six PCs was DRAFTED AND NOT SENT — it is correspondence with an external reporter, surfaced to the maintainer rather than posted by the loop. The thread stands at ten comments and this release added none. THE REFUTING COMMAND HELD: the shipped oracle still reports the lowering FAITHFUL (9 assertions, 0 failures) with every refuted mechanism injectable, so v0.81's refutation stands and the premise is intact. THREE INSTRUMENT ERRORS, RECORDED RATHER THAN BURIED. A first grep reported FOUR materializations of 9.81f; truncation by `head -8` hid five, and the real count is NINE. A first store-offset attribution gave {932, 940, 936} and briefly made the carried claim look wrong; the scan window began BEFORE its own anchor and picked up the preceding block's `addw`. Forward-only scanning gives 940, 936, 944 — CONFIRMING the carried claim. The brief was right and the first measurement was not. Also corrected in the artifact: the done-when now demands all six words at their six PCs, and the sentence calling three words "the whole lane" is gone. THE CLAIM SHAPE WAS WRONG ON THE FIRST PUSH, AND CI CAUGHT IT. This artifact first went out as `status: implemented` with `issue-scope: outlives` and a PARTIAL verdict. #1487 reddened on `Claim Check` — a REQUIRED context — because `verdict_prose_check` reds an INCOMPLETE prose verdict beside a claiming status with no `disposition`, while R11 FORBIDS a disposition beside a claiming status. `LEGAL_BESIDE_CLAIMING` has exactly ONE member, `REFUTED`, so A LANE THAT NARROWS HAS NO LEGAL CLAIMING VERDICT AT ALL. The gates permit a strictly safer shape and nothing pointed at it: status: proposed disposition: partial landed: <NAMES THE DELIVERING PR> issue-scope: OMITTED R4-lane satisfied by `landed:` — its own message is a disjunction, "flip the status OR record the increment" — BUT ONLY IF the text names the PR the gate DERIVES. MEASURED, after this lane red on it: `_acknowledge` takes `PR_NUMBER.findall(subject)[-1]` with `PR_NUMBER = r"\(#(\d+)\)"` — the LAST PARENTHESISED number in the squash subject, which is the one the SQUASH APPENDS, i.e. THIS PR — and requires it in `landed_prs(fields)`. My first `landed:` named #1436, the ISSUE, and satisfied nothing. And no local run could have told me: R4-lane needs a DELIVERY COMMIT ON MAIN, so it cannot fire in the checkout at all — only in CHECK4's squash simulation. The local "ALL PASS" was a true statement about a tree with no delivery commit. R11 satisfied: a `disposition` IS present beside a NON-claiming status R12 `outlives` beside non-claiming would RED, so `issue-scope` is omitted verdict_prose incomplete + non-claiming passes; no carve-out needed R14 status not claiming, so out of population R3 cannot fire on a `manual:` done-when Under this shape #1436 is NEVER placed in the authorised close set at all, where the claiming shape authorises retirement and then relies on `issue-scope` to take it back. That is a better answer to #1484 than the rule this release shipped for it, and R14 is looser than its sibling: it accepts any of the 7 INCOMPLETE tokens given a declaration, where `verdict_prose` accepts 1 — a conjunction defect introduced by the fix for conjunction defects, recorded rather than quietly corrected. AND THE PRE-PUSH CHECK THAT MISSED IT: CHECK4's squash simulation runs 2 scripts (`merge_gate`, `status_evidence`); the `Claim Check` job runs 33. A green CHECK4 is a true statement about a narrower subject. This push is verified against the artifact-gate subset of that job, with CI's own flags. Refs #1436 Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
avrabe
added a commit
that referenced
this pull request
Oct 8, 2026
… — the ask was pointing at the wrong three words THE ASK WAS POINTING AT THE WRONG THREE WORDS. This artifact planned to obtain the runtime values of [sp,#152], [sp,#208] and [sp,#232]. Disassembling ekf@0.10.0#estimate shows all three are the MULTIPLICAND of a `x 9.81`, in three copies of one shape: vldr s8,[sp,#<accum>] ; vldr s9,[sp,#<slot>] ; movw/movt ip=0x411CF5C3 vmov s10,ip ; vmul.f32 s11,s9,s10 ; vadd.f32 s9,s8,s11 ; str -> linmem so each is the gravity DIRECTION and the OTHER operand is an accumulator. Pairs, with the hand-read block at 0x24a4 as the extractor's positive control: ([sp,#200],[sp,#152])->+940 ([sp,#216],[sp,#232])->+936 ([sp,#192],[sp,#208])->+944. AND THE REPORTER'S PUBLISHED TICK-1 WORDS FIT ONE MECHANISM EXACTLY. If the three ACCUMULATORS read zero, only gravity survives: down becomes 0 + 1.0*9.81, integrated as 9.81*0.001, whose f32 bits are 0x3C20BA20 — BIT-IDENTICAL to the vel-d measured on Renode, QEMU and i.MX RT1176 alike. North/east become exact zeros, which is what was measured, while wasmtime's non-zero north/east come from that same accumulator. pos-d fits (g*dt)*dt/2 to 5 significant figures. Four of four published words, one cause. HYPOTHESIS THREE, RECORDED AS A FALSIFIABLE PREDICTION RATHER THAN A CAUSE. The first two were refuted, both claims about STATE; this is about the translational computation, which is where that refutation pointed, and it does not contradict the quaternion agreeing. Measured: the expression shape and the arithmetic fit. NOT measured: any runtime value. AN EMPTY POSITIVE CONTROL WAS THE FINDING, TWICE. (a) Searching the object for the constant as a 4-byte LE pattern returned zero — and so did the controls, 1.0 and 0.001. synth materializes f32 constants as movw/movt pairs and Thumb-2 scatters a 16-bit immediate across i:imm3:imm8, so the pattern never appears contiguously. Reconstructing pairs finds +9.81 at 5 sites, -9.81 at 2, controls at 34 and 18. (b) The pairing extractor first returned ZERO triples because its window began one instruction too late and saw one of the two vldrs; caught only because the block had been read by eye first as a control. DISCLOSED, not glossed: lowered with synth 0.82.0 while the reporter ran 0.77.0, and 0.82.0 is NOT byte-compared against 0.77.0 for this module. Partial stability evidence: all three inherited slot offsets reproduce here ([sp,#152] 82 sites, [sp,#208] 32, [sp,#232] 20). The correspondence therefore gives a version-robust instruction-pattern locator and marks addresses as orientation. Inputs verified against the committed SHA256SUMS before use. A first compile without the reporter's own flags was REFUSED with a diagnostic naming #1041, which is the refusal working. Rule 4 binds: no oracle was hardened in #1436's name. The reply is DRAFTED AND SURFACED for approval, not posted from this lane. Refs #1436 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
avrabe
added a commit
that referenced
this pull request
Oct 9, 2026
…nly lanes, four refutations, none claiming (#1503) * v0.83 FIRSTTOKEN2 (#1476): the widening is refused again, and this time because the hole it would close is EMPTY v0.82 refused three widenings by weighing a cost against a benefit. This re-measures the trade the refuting command asks about and finds the BENEFIT SIDE IS ZERO — a stronger refusal than v0.82's, not a repeat of it. THE HOLE HAS NO INSTANCES AT THIS TREE. `unclassified_lead` — the function that makes #1476's hole nameable — returns a token for ZERO artifacts. Its own docstring records the measured escapes as NOT LANDED, DONE, NOT-DELIVERED and CLOSED; none of the four is present any more. A DERIVED ZERO IS A REFUSAL AND NOT A PASS, so the detector was PAIRED-CONTROLLED before the zero was believed. POSITIVE 4/4: fed the four openings its docstring names, it returns each one. NEGATIVE 4/4: fed `PARTIAL,`, `DELIVERED,`, `THE MEASUREMENT` and `MEASURED`, it returns None for all four. SO THE TRADE IS 33 DROPPED TO CLOSE 0. Variant 3, stated precisely because the count depends on the statement: drop any artifact whose FIRST SENTENCE of verified-by contains a negator (NOT|NO|NEVER|WITHOUT|CANNOT|NEITHER|NOR). Over the checker's own population plus this release's five delivered artifacts, 33 of 85. No widening is justified by an empty hole. AND THE DROP COUNT MOVED, confirming the non-adoptability argument from a second direction. v0.82 measured 27 of 78 at afa59b5 and observed the count moving with the SENTENCE SCOPE; it also moves with the TREE. A population that changes with a parsing choice and with the commit is not a population. A FIRST ATTEMPT WAS WRONG IN THIS REPO'S RECORDED WAY. It reimplemented the lookup as "LEAD matched but the phrase is in no set" and reported THIRTEEN escapes. Every one was a false positive: LEAD prefers a TWO-WORD run and `unclassified_lead` falls back to the FIRST word, so `IMPLEMENTED PER` is correctly out of scope. The hand-rolled version measured the regex; the script's function measures the rule. Thirteen became zero with the right instrument. THIS RELEASE'S OWN FIVE DELIVERED ARTIFACTS WERE PUT THROUGH THE GATE — the check this lane could most easily have skipped. All five in population, zero red verdicts, zero escapes. One scare recorded: run from a branch cut off origin/main the same scan showed four of them `lead=None` and apparently OUT of population; the cause was the branch, not the artifacts — on main those files are still the PLAN versions with no verified-by at all. AND THE POPULATION FIGURE IS QUOTED FROM THE GATE'S OWN PRINTED LINE, not computed. A first write gave three hand-derived numbers and all three were unstable for reasons unrelated to the tree: 80 became 81 the moment this artifact gained its own verified-by, and 577 became 575 under a one-line change to my helper's type filter. The fix was to stop producing them and read the instrument's output. #1476 STAYS OPEN as the record of why no wider rule is adoptable. Refs #1476 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L * v0.83 SWEEP (#1373): the board CAN answer "is this still broken?" — and for the pinned set the answer is YES, which refutes verify-and-close as a strategy MAINTAINER-REQUESTED mid-release: reduce the open-issue count as far as evidence allows. The plan was a verify-and-close sweep over the 54 open issues. THAT PLAN IS REFUTED AS A STRATEGY, with numbers, and the refutation is the deliverable. THE PINS ANSWER THE QUESTION #1373 SAYS THE BOARD CANNOT. #1428 established that all six non-empty KNOWN*/PINNED* tables are exact in BOTH directions — they go RED when a pinned defect is FIXED. So a PASSING differential is positive evidence the defect is STILL LIVE. Re-measured against this release's binary: false_reject_1229_differential PASS — 130 false-rejections of valid WASM invalid_accept_1207_differential PASS — 38 wrongly-accepted invalid modules aarch64_operand_class_1231_diff PASS — 4 operand-class confusions ra003_join_1230_differential PASS — 3 remaining declines Closing any of those as "verified fixed" would be a FALSE closure of a CI-proven live defect — strictly worse than leaving the count where it is. #1447 RE-RUN AND REPRODUCING EXACTLY: (if (result T)) with no params and two constant arms gives i32 COMPILES, i64 COMPILES, f32 DECLINED, f64 DECLINED, with the diagnostic unchanged — including "function too complex" about a zero-parameter two-constant module. Stays open. The misleading clause is a cheap separate fix and is deliberately NOT done here: a diagnostic correction is not progress on the capability gap. #1085 VERIFIED CLOSEABLE, recorded rather than closed. R7 is labelled `# ---- R7 git archaeology (#1085)`, landed in b2abf95 whose first tag is v0.61.0, carries class R7EvidenceRelease whose docstring records that disabling R7 kills at least one test, and runs live at 84 archaeology checks / 0 skipped / 0 failures. Closure cites a TAGGED release, so it waits for v0.83.0. #1448 IS AN HONEST NON-RESULT. A hand-written approximation of its bisection DECLINED IN BOTH ARMS where the issue reports 1 compiling and 2 declining. That does not refute the issue and is not evidence about it — the module is mine, not the reporter's, and a disagreement between my approximation and a measured bisection means MY module is wrong. #1448 has no committed repro, which is exactly why it cannot be cheaply re-verified. THE UNPINNED REMAINDER carries each figure WITH ITS GLOB, because one moved while this was being written: 16 of 54 have a name-matched repro under scripts/repro/*; "named anywhere" is 30 over scripts/repro/* + crates/*/tests/*.rs + crates/*/src/*.rs, and a first pass over a wider recursive set gave 29. The population is a property of the glob, not of the board. The directional claim is unaffected. AND AN INSTRUMENT USED FOR THIS TRIAGE WAS TOO CRUDE TO TRUST, recorded so it is not re-used: a census mapping each issue to "the first tag containing the newest commit mentioning it" dated #1085 to v0.64.0, where the IMPLEMENTING commit gives v0.61.0. The newest mention is not the fix. Refs #1373 Refs #1428 Refs #1085 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L * v0.83 WIDEFILE6 (#1439): the newly-accepted function disassembled — no VABS is emitted, and sign cannot come from reassociation THE RETRY WAS APPLIED LOCALLY AND THE RUNG LANDS. v0.78's pool-grow retry for stage 3, mirroring stage 2, re-applied on a scratch tree (NEVER committed; restored byte-identically, diff -q IDENTICAL, tripwire green again at 10/10). The 60-local right-leaning shape compiles — 1956 bytes — and wide60_declines_and_the_ladder_dies_on_the_wide_file_rung_1426 FIRED exactly as built: "IF THIS FIRED, THE RUNG LANDED". AND THE DIFFERENTIAL NAMED AS THIS DEFECT'S ORACLE NEVER RUNS THE SHAPE. With the retry applied it reports "PASS: 70 emulations bit-identical to wasmtime". That PASS is TRUE ABOUT THE WRONG SUBJECT: F32_EXPORTS is ["live13","live14","live16","live24"], tops out at 24 locals, folds LEFT, and every entry compiles on an EARLIER rung — live24 on vfp-frame-locals+pool-grow, bit-exact since v0.78. The newly-accepted function is in no export list. The tripwire's own message predicted this: "a compile-only green here says nothing about the bytes". THE ABS HYPOTHESIS IS REFUTED BY THE EMITTED CODE, not only by encoding reachability. Over the function's 1956 bytes, sliding by a HALFWORD rather than assuming alignment: ZERO VABS.F32, ZERO VMOV.F32 reg-reg, ZERO VNEG.F32. POSITIVE CONTROL, which is why the zero means anything: the same scanner finds VABS.F32 twice in a 74-byte abs/copysign module. AND SIGN CANNOT COME FROM REASSOCIATION — proven, not assumed. sign(a*b) is the XOR of the signs and XOR is commutative, so a product's sign is invariant under any reordering; overflow destroys magnitude associativity and leaves sign alone. Measured in f32 with infinity saturation over the exact 60-factor chain, forward vs fully reversed, params +/-0.5/1/2/3: got ^ want == 0 every time. It also explains the signature — the chain OVERFLOWS after ~25 factors, and two infinities of opposite sign differ in exactly the sign bit with bit-identical magnitudes, which is v0.78's observation verbatim. THE MULTIPLY MULTISET IS INTACT: VMUL.F32 appears 119 times against 119 f32.mul in the source, so none is dropped or duplicated. (Spill-traffic counts were taken and are NOT quoted: those masks returned nothing on the control, so they are UNPROVEN.) SURVIVING CLASS, now the only one in this family: a WRONG OPERAND — a spill/reload reading the wrong frame slot — which substitutes a value without changing the instruction count or the sign algebra. Last on v0.81's candidate list, never tested, now the sole survivor. BOTH REFUTING COMMANDS REFUTED THEIR OWN EXPECTATIONS, and one was malformed in this release's exact shape. `git log -S"pool grow retry" | wc -l` expected 0 and returns 5 — and -S is a PICKAXE, matching every commit where the count CHANGED, so it cannot speak about HEAD. Worse, all five commits are the artifact commits themselves: the phrase lives ONLY in release-v0.81/-v0.82/-v0.83 YAML prose and zero times in code, so the instrument was counting the commits that wrote the artifacts carrying it. Replaced with `git grep` at HEAD, which says 0 — the claim was true, the command could not establish it. And the emitter count is 4 not 3 under `-- crates/`, because a test asserts the constant; the pathspec is part of the command, and `crates/*/src/*` gives 3 while `:(glob)crates/*/src/**` gives 0 — a wrong pathspec looks exactly like a passing refutation. Encoder line numbers RE-DERIVED at this commit: 2012 (F32Abs A32), 6366 (F32Abs Thumb-2), 7354 — which is NOT an F32Abs emitter but sits inside encode_thumb_f32_copysign. The v0.81 figures 1992/6322/7310 had all moved. Fixture denominator re-measured because two records disagreed: 130 f32.mul (plus 15 f64.mul), zero abs/copysign/neg in both widths. A durable note carried 71 since v0.81; never true — the fixture has ONE commit (0ec9dc7, v0.60) and `git show <rev>:<path>` gives 130 at every revision. The cause is NOT named, so the retry STAYS OUT and the tripwire STAYS ARMED. Refs #1439 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L * v0.83 JESSDIVERGE5 (#1436): the gravity triple read out of the object — the ask was pointing at the wrong three words THE ASK WAS POINTING AT THE WRONG THREE WORDS. This artifact planned to obtain the runtime values of [sp,#152], [sp,#208] and [sp,#232]. Disassembling ekf@0.10.0#estimate shows all three are the MULTIPLICAND of a `x 9.81`, in three copies of one shape: vldr s8,[sp,#<accum>] ; vldr s9,[sp,#<slot>] ; movw/movt ip=0x411CF5C3 vmov s10,ip ; vmul.f32 s11,s9,s10 ; vadd.f32 s9,s8,s11 ; str -> linmem so each is the gravity DIRECTION and the OTHER operand is an accumulator. Pairs, with the hand-read block at 0x24a4 as the extractor's positive control: ([sp,#200],[sp,#152])->+940 ([sp,#216],[sp,#232])->+936 ([sp,#192],[sp,#208])->+944. AND THE REPORTER'S PUBLISHED TICK-1 WORDS FIT ONE MECHANISM EXACTLY. If the three ACCUMULATORS read zero, only gravity survives: down becomes 0 + 1.0*9.81, integrated as 9.81*0.001, whose f32 bits are 0x3C20BA20 — BIT-IDENTICAL to the vel-d measured on Renode, QEMU and i.MX RT1176 alike. North/east become exact zeros, which is what was measured, while wasmtime's non-zero north/east come from that same accumulator. pos-d fits (g*dt)*dt/2 to 5 significant figures. Four of four published words, one cause. HYPOTHESIS THREE, RECORDED AS A FALSIFIABLE PREDICTION RATHER THAN A CAUSE. The first two were refuted, both claims about STATE; this is about the translational computation, which is where that refutation pointed, and it does not contradict the quaternion agreeing. Measured: the expression shape and the arithmetic fit. NOT measured: any runtime value. AN EMPTY POSITIVE CONTROL WAS THE FINDING, TWICE. (a) Searching the object for the constant as a 4-byte LE pattern returned zero — and so did the controls, 1.0 and 0.001. synth materializes f32 constants as movw/movt pairs and Thumb-2 scatters a 16-bit immediate across i:imm3:imm8, so the pattern never appears contiguously. Reconstructing pairs finds +9.81 at 5 sites, -9.81 at 2, controls at 34 and 18. (b) The pairing extractor first returned ZERO triples because its window began one instruction too late and saw one of the two vldrs; caught only because the block had been read by eye first as a control. DISCLOSED, not glossed: lowered with synth 0.82.0 while the reporter ran 0.77.0, and 0.82.0 is NOT byte-compared against 0.77.0 for this module. Partial stability evidence: all three inherited slot offsets reproduce here ([sp,#152] 82 sites, [sp,#208] 32, [sp,#232] 20). The correspondence therefore gives a version-robust instruction-pattern locator and marks addresses as orientation. Inputs verified against the committed SHA256SUMS before use. A first compile without the reporter's own flags was REFUSED with a diagnostic naming #1041, which is the refusal working. Rule 4 binds: no oracle was hardened in #1436's name. The reply is DRAFTED AND SURFACED for approval, not posted from this lane. Refs #1436 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L * v0.83 artifacts2: stamp `landed:` with the delivering PR (#1503) on all four lanes R4-lane and R15 both red on the unstamped branch, four failures from one cause: FIRSTTOKEN2 and SWEEP carried `landed: PENDING-PR-STAMP`, which names neither a PR nor an issue. R15 states the remedy itself — "Name BOTH the issue and the delivering PR" — and that is the arm taken here rather than flipping status, because a CLAIMING status would authorise closing #1476 and #1373. Read R4-lane's message as the disjunction it is. WIDEFILE6 and JESSDIVERGE5 are restamped too. Their `PR #1501` / `PR #1502` become FALSE the moment they land via a different PR, so this is a correction for accuracy and not a concession to consolidating them. Each `landed:` value was read in FULL before editing: the prose describes the FINDING, not the PR mechanics, so the leading number was the only stale token. Verified after the edit, not before it: status_evidence_check.py rc=0, 0 failures, printed count == printed list issue-scope: 0 issue(s) authorised for closure, 1 held by `outlives` all four still `status: proposed` with no `issue-scope:` — non-claiming closer-keyword scan over the new prose: zero adjacencies, control firing The print-order fix that makes the first line trustworthy arrived with #1500: this same tree printed 2 failures while counting 4 on the previous base. Refs #1476, Refs #1373, Refs #1439, Refs #1436 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L --------- 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.
Summary
Closes #145. Adds a CI gate that makes the v0.7.0-class pin desync uncatchable-too-late.
v0.7.0's tag broke
release.yml+publish-to-crates-io.ymlbecause[workspace.package].versionwas bumped while everycrates/*/Cargo.tomlpath-dep pin +MODULE.bazelstill carried the old version — cargo refused to resolve (recovered by the 23-pin sweep in #143). The sweep was a manual, forgettable step (this bit me twice this week, caught only by ritual discipline).What this does (Option C from the issue)
scripts/check_version_pins.py— parses[workspace.package].versionand checks it against every intra-workspace{ path = "../x", version = "Y" }pin andMODULE.bazel'smodule(version=...). Exits non-zero listing every offendingfile:lineon mismatch.Version Pin SweepCI job — runs the script on every PR/push. A divergent pin now fails at merge time, not at tag-push.The script doubles as a local pre-tag check (run from repo root).
Verified
Falsification
Closed wrong if a
[workspace.package].versionbump can still merge with a stale path-dep pin or MODULE.bazel version. Follow-up (issue's Option B, deferred): an ergonomicbump_workspace_versionhelper that performs the sweep in one pass.🤖 Generated with Claude Code