Repository navigation
fix(rivet): RQ-64-FLOORPROSE was scoped from a wrong premise — corrected before any work was done - #1178
Merged
Conversation
…ted before any work was done
I filed this artifact claiming the emulation floor moves in lockstep across
THREE files, the third being `RQ-63-FLOOREQ.yaml`'s `verified-by:` prose,
which "goes stale silently" because nothing checks it. I measured it before
implementing. Both halves are wrong.
CLASSIFIED BY FRAMING, not counted:
claims.yaml 1 the verbatim pin LIVE, gated
.github/workflows/ci.yml 1 the enforced value LIVE, gated
RQ-63-FLOOREQ.yaml 3 one RED-FIRST TRANSCRIPT of a mutation test
THE LOCKSTEP IS TWO FILES. And the artifact's three mentions are a record of
a measurement that was actually executed — "with the OLD floor the mutation
was EXIT=0; with the new one, EXIT=1" — true forever as a statement about
what was run at v0.63. It does not go stale; it becomes HISTORICAL, which is
what a `verified-by:` is for. The rule the artifact itself proposed — an
artifact records what was true when it shipped — the transcript already met.
Implementing the fix would have DELETED A LEGITIMATE MEASUREMENT RECORD to
satisfy a rule it already satisfied.
WHAT SURVIVES, and it is smaller:
- The merge cost was real (all four v0.63 rebases conflicted on the floor,
the largest merge cost of the release) but on the TWO LIVE files. The
artifact copy never caused a conflict. Two files that must agree exactly
IS the design — that is RQ-63-FLOOREQ's equality — not a defect.
- A dated transcript is unambiguous; an undated one is merely correct. A
reader at v0.70 cannot tell at a glance whether `324845` is the value THEN
or NOW. Fixed by saying "AT v0.63" beside it, which this commit does —
instead of deleting the record.
Artifact rewritten to state all of the above and downgraded should -> could.
The wrong premise is kept in the description rather than silently replaced,
because the error is the transferable part.
HOW IT HAPPENED: the artifact was written from a `grep` for the literal.
A grep returns OCCURRENCES and cannot return FRAMING — three hits in one file
read as three copies; they were one transcript. A count is not a diagnosis,
which is v0.63's own "a blocker count is not a reach estimate" one domain
over, and I filed the artifact one day after publishing that finding.
Refs #910
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! |
avrabe
added a commit
that referenced
this pull request
Sep 7, 2026
…LOORPROSE's corrected premise (#1178) #1178 landed while this lane was in flight and refuted the premise the rejection cited: v0.63's floor conflicts sat on the two LIVE files (ci.yml, claims.yaml), never on an artifact transcript, and FLOORPROSE's verified-by was a dated record, not a stale copy. The rejection still holds — equality-pinning would turn every citing topic artifact into one more LIVE file in exactly that set — but is now stated on the measured premise, and FLOORPROSE's surviving rule ("say 'at v0.63' beside it") is named as S1 stated for one file. The field-prose scan cites its own measured instances (TR-005, VER-001/002) instead. Refs #1085 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
Sep 7, 2026
…S2, red-first on VCR-REACH-002 + the proof-count class (23 → 0 undated) (#1182) * RQ-64-SCOPEGAP (#1085): unscoped artifacts get a staleness rule — S1/S2, red-first 23 undated across 13 artifacts, 0 after The 293 artifacts with no `release:` (not 124 — that is the non-claiming subset) were checked for a legal status and nothing else. Survey: 104 carry a figure token; every genuinely stale one has ONE shape, a repo-derived proof count restated as undated present-tense fact (VG-002 / ARCH-004 / SWVER-005 / TR-005 "188 Qed / 52 Admitted" from 2026-03, kernel recount 630 / 2; VER-001 "39 Qed"; VER-002 "95 Qed"; undated increment-log sentences) — plus the reported VCR-REACH-002 title ("1.6% AArch64 acceptance", superseded by v0.63's 20.2 % ladder). VG-009 is NOT a drifted instance: its only "1.6" is the substring of "41.6 %", a line-coverage figure explicitly "measured at v0.54.0". A rule that flagged it would be a false red on correctly dated history, so none does; the correction is recorded beside the finding in the artifact. Decision (a), narrowed to the decidable: an unscoped artifact is a RECORD that cites a moving figure only as dated history (version / #issue / ISO date in the same sentence) or names the derivation. (b) `release: backlog` rejected — mislabels the requirements base and buys no rule (every R-rule presumes a window these items lack); (c) strip numbers rejected on the survey — most figures are thresholds or a verification record's own result; "pinned" as equality rejected — it is the lockstep copy RQ-64-FLOORPROSE measured as v0.63's largest merge cost. S1: undated `N Qed` / `N Admitted` in an unscoped artifact's description or field prose is red (message names the live status.json value; verdict is dated-or-not, never equality). S2: an undated measured figure (percent, N/M, derived count, N modules) in a TITLE is red. Exempt by construction: version-shaped `release:`, version-named topic files, release-v*/ files. S-VACUOUS floor 34 pins citations scanned. ci.yml pins `programme-staleness: ... 0 undated`. Red-first on the untouched tree: 23 undated citations across 13 artifacts, exit 1 (S2 on VCR-REACH-002 and VG-002 titles; S1 on the rest). After dating every figure from its own increment header (never an invented date) and naming the derivation where the number was only a mirror: 34 scanned, 0 undated, exit 0. 12 new unit tests, all nine mutations killed. rivet validate unchanged at 40 errors; claim_check 59/59. Residual, stated: description-level percentages are not judged — a threshold ("shall achieve at least 80%") and a measurement are not mechanically separable (six threshold percentages would be false reds). Refs #1085 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L * RQ-64-SCOPEGAP (#1085): restate the equality-pin rejection on RQ-64-FLOORPROSE's corrected premise (#1178) #1178 landed while this lane was in flight and refuted the premise the rejection cited: v0.63's floor conflicts sat on the two LIVE files (ci.yml, claims.yaml), never on an artifact transcript, and FLOORPROSE's verified-by was a dated record, not a stale copy. The rejection still holds — equality-pinning would turn every citing topic artifact into one more LIVE file in exactly that set — but is now stated on the measured premise, and FLOORPROSE's surviving rule ("say 'at v0.63' beside it") is named as S1 stated for one file. The field-prose scan cites its own measured instances (TR-005, VER-001/002) instead. Refs #1085 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L * RQ-64-SCOPEGAP (#1085): record landed: PR #1182 Refs #1085 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L * RQ-64-SCOPEGAP (#1085): pin the staleness scan's population as an EQUALITY, not a floor — S-DRIFT both directions, ledger-pinned, churn measured Review on #1182 (coordinator): the population half of the S-VACUOUS guard was a LOWER BOUND pinned at live (34). It did red on lost reach — rotting the Qed pattern dropped the scan to 13 and the in-script floor fired (S-VACUOUS, exit 1, `1 failures` on the CI-pinned line) — but it could not see a citation landing WITHOUT its bump, and the ci.yml grep alone (`[1-9][0-9]*`) would have passed 13. RQ-63-FLOOREQ one surface over: a lower bound cannot see declared drifting. Measured before choosing equality: the citation count across v0.56.0 .. v0.63.0 was 30, 30, 30, 31, 31, 31, 31, 32 — two moves in seven release intervals — so equality costs a one-line bump every few releases, not constant churn. (Also measured: `undated` sat at 21-23 for all eight releases; the class is at least six months old.) STALENESS_CITATIONS = 34, red in BOTH directions (S-DRIFT): BELOW is lost reach, ABOVE is an unbumped landing; equal is green. claims.yaml SYNTH-STATUS-EVIDENCE-STALENESS-CITATIONS-1085 pins the constant's line verbatim AND count-eq pins that the `!=` check is still wired, so a value moved without the ledger or a check weakened back to `<` both red claim_check (transcript: 59/60 each). ci.yml comment states where the population half is enforced; the grep keeps asserting the scan ran and the undated half is zero. Transcripts (real checker, file restored after each): Qed pattern rot -> 13 scanned, FAIL S-DRIFT ... BELOW the declared 34, exit 1 declared 33 -> 34 scanned, FAIL S-DRIFT ... ABOVE the declared 33, exit 1 live -> 34 = 34, exit 0 72 tests OK; 10/10 mutations killed (new: equality disabled, equality weakened to `<`). claim_check 60/60. rivet unchanged (40 errors). Refs #1085 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>
avrabe
added a commit
that referenced
this pull request
Sep 7, 2026
…g it: a LIVE pinned value may not be restated in release-artifact prose (#1185) The artifact's own `verified-by` said the check "should be added rather than promised". This adds it. `check_live_floor_prose()` DERIVES the live floor from ci.yml's `--exact-emulation-floor N` and fails if any `artifacts/release-v*/` file restates that literal. ci.yml greps the emitted `floor-prose:` summary, so the rule cannot silently stop running. THE RULE IS ABOUT THE LIVE VALUE, NOT THE DIGITS — the distinction the premise correction in #1178 turns on. The floor is enforced as an EQUALITY between exactly TWO files (ci.yml and claims.yaml) which move together in the PR that moves the floor. A third copy in prose is in no lockstep and rots the moment the floor moves. But a SUPERSEDED floor quoted as dated history cannot rot, and RQ-63-FLOOREQ's transcript of a red-first run "AT v0.63" must stay legible. RED-FIRST, THREE CONSTRUCTED DIRECTIONS, each executed: 1. live floor planted in an artifact -> EXIT 1, naming the exact file:line. 2. RQ-63-FLOOREQ's three occurrences of the superseded value -> EXIT 0. The dated transcript is untouched, as the corrected premise demanded. 3. THE RULE BLINDED (gate flag renamed to `--min-emulation-floor`) -> EXIT 1, "THIS rule went blind", summary `live floor UNDERIVABLE`. It refuses to pass when it cannot see its subject, rather than reporting a clean tree. A zero-population glob fails the same way. AND A FOURTH NOBODY HAD TO CONSTRUCT: the rule fired on its own author. The first draft of the artifact's `verified-by` quoted the live floor as a literal while describing the measurement, and the checker went red naming that exact line. The obvious way to write the field WAS the defect. Recorded in the artifact rather than exempted, and the number is now cited by its derivation. Verified: status_evidence exit 0 with `floor-prose: 50 release artifacts scanned, ... restated 0 times` matching the ci.yml grep; claim_check 61/61; ci.yml parses; rivet at main's baseline. Refs #910 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.
I filed this artifact yesterday claiming the emulation floor moves in lockstep across three files —
ci.yml,claims.yaml, andRQ-63-FLOOREQ.yaml'sverified-by:prose — and that the third "goes stale silently" because nothing checks it.I measured before implementing. Both halves are wrong.
Classified by framing, not counted
claims.yaml.github/workflows/ci.ymlRQ-63-FLOOREQ.yamlThe lockstep is two files, not three. And the artifact's three mentions are a record of a measurement that was actually executed — "with the OLD floor the mutation was EXIT=0; with the new one, EXIT=1" — which is true forever as a statement about what was run at v0.63.
It does not go stale. It becomes historical, which is exactly what a
verified-by:is for. The rule this artifact itself proposed — an artifact records what was true when it shipped — the transcript already satisfied.Implementing my own fix would have deleted a legitimate measurement record to satisfy a rule it already met.
What survives, and it is smaller
The merge cost was real; the diagnosis was off by one. All four v0.63 lane rebases did conflict on the floor — the largest merge cost of the release — but on the two live files. The artifact copy never caused a conflict. Two files that must agree exactly is the design (that is
RQ-63-FLOOREQ's equality), not a defect to remove.A dated transcript is unambiguous; an undated one is merely correct. A reader at v0.70 meets
324845and cannot tell at a glance whether it is the value then or now. Fixed by saying "AT v0.63" beside it — which this PR does, instead of deleting the record.The artifact is rewritten to state all of this, keeps the wrong premise in its description rather than silently replacing it, and is downgraded
should → could.How the error happened — the transferable part
The artifact was written from a
grepfor the literal. A grep returns occurrences and cannot return framing: three hits in one file read as three copies; they were one transcript.That is v0.63's own finding — a blocker count is not a reach estimate — one domain over. I filed this artifact one day after publishing that. Knowing a lesson and applying it in a new domain are separate acts, which is why the wrong premise stays on the record.
Gates:
status_evidence_check0 ·claim_check0 ·rivet validateat main's 40-error baseline (delta 0).Refs #910
🤖 Generated with Claude Code
https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L