Skip to content

RQ-64-SCOPEGAP (#1085): unscoped artifacts get a staleness rule — S1/S2, red-first on VCR-REACH-002 + the proof-count class (23 → 0 undated) - #1182

Merged
avrabe merged 4 commits into
mainfrom
feat/scopegap-1085
Sep 7, 2026
Merged

RQ-64-SCOPEGAP (#1085): unscoped artifacts get a staleness rule — S1/S2, red-first on VCR-REACH-002 + the proof-count class (23 → 0 undated)#1182
avrabe merged 4 commits into
mainfrom
feat/scopegap-1085

Conversation

@avrabe

@avrabe avrabe commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

RQ-64-SCOPEGAP (#1085) — what obligations does an artifact with no release: carry?

Answer, measured then enforced: an unscoped artifact is a RECORD. It may cite a measured, moving figure only as dated history (a version / #issue / ISO date in the same sentence) or by naming the derivation instead of the number. Enforced in status_evidence_check.py as S1/S2, red-first on the live corpus, CI-pinned.

The survey (the number that drove the choice)

population count
artifacts with no version-shaped release: 293 of 400 (not 124 — 124 is the NON-CLAIMING subset; 169 more are implemented/verified)
of those, carrying a figure token (%, N/M, N unit) 104
genuinely stale — a REPO-DERIVED proof count restated as undated present-tense fact 8 artifacts: VG-002 / ARCH-004 / SWVER-005 / TR-005 "188 Qed / 52 Admitted" (2026-03 numbers; kernel recount 630 / 2), VER-001 "39 Qed", VER-002 "95 Qed", VCR-ISA-001 "9 admits", VCR-X86-001 "630 Qed" (equal today, undated)
the reported acceptance drift 1: VCR-REACH-002's TITLE ("1.6% AArch64 acceptance", undated present tense over a description already dated by #1017)
rest of the 104 threshold/ABI constants in requirements (at least 80%, 64 KiB) or measured results that ARE a verification record's content (13/13, 338/338)

Negative finding — VG-009 is not a drifted instance. Its only "1.6" is the substring of 41.6 %, a LINE-COVERAGE figure the artifact frames as "measured at v0.54.0" (unchanged since #918). A rule that flagged it would be a false red on correctly dated history — the exact framing error the brief warns about — so none does. The correction is recorded in the artifact beside the original finding, not edited into it. _release.yaml's plan comment still names VG-009; coordinator's call whether to amend it.

So the class is real, but it is not "two acceptance figures": it is one acceptance title plus a proof-count class of eight, all one shape.

Decision and rejections

  • (a) staleness rule — CHOSEN, narrowed to what is mechanically decidable (proof counts in prose, any measured figure in a title).
  • (b) release: backlog — rejected: mislabels the requirements base (BR-001 is the trace root, not backlog work) and buys no rule — every R-rule presumes a release window or evidence scoping these items lack; the false-red argument RQ-62-ROADMAPGATE already made.
  • (c) narrative files, strip numbers — rejected on the survey: most of the 104 figures are load-bearing thresholds or a verification record's own result. Stripping evidence to prevent staleness is backwards.
  • "pinned" read as equality with the live derivation — rejected: it turns every citing topic artifact into one more LIVE file that must move with the number. fix(rivet): RQ-64-FLOORPROSE was scoped from a wrong premise — corrected before any work was done #1178 (FLOORPROSE's correction) measured v0.63's largest merge cost on exactly the LIVE files (ci.yml, claims.yaml); equality would grow that set. FLOORPROSE's surviving rule — "say 'at v0.63' beside it" — is S1 stated for one file.

The rules

  • S1 — undated N Qed / N Admitted / N admits in an unscoped artifact's description or any prose-valued fields: entry is red. The message names the live status.json value so the reader sees the drift; the VERDICT is dated-or-not, never equality.
  • S2 — an undated measured figure (percentage, N/M ratio, derived count within three words of its unit, N modules) in a TITLE is red — the title is what every listing renders and is always read as present tense.
  • Exempt by construction: a version-shaped release:, a version-named topic file (sys-verification-v0.60.yaml records what was true at v0.60), and release-v*/ files (R7/R8's surface).
  • S-VACUOUS floor (34 citations) + ci.yml pins programme-staleness: … 0 undated.
  • Stated residual: description-level percentages are NOT judged — a threshold ("shall achieve at least 80%") and a measurement are not mechanically separable, and six threshold percentages in the requirements base would be false reds. Human-reviewed.

Red-first transcript

Untouched tree: exit 1, 23 undated citations across 13 artifacts, 32 scanned
S2 on the titles of VCR-REACH-002 (1.6%) and VG-002 (52 VFP/float admits); S1 on VG-002 ×3, ARCH-004 ×2, SWVER-005, SWVER-020, SWVER-021, TR-005, VER-001 ×2, VER-002 ×2, VCR-SEL-001 ×2, VCR-ISA-001 ×3, VCR-WASM-001 ×2, VCR-X86-001. VG-009: not flagged.

After corrections: exit 0, 34 scanned, 0 undated. Every date added comes from the artifact's own increment header (2026-07-07 / 2026-07-08 / v0.45 / v0.48 / 2026-07-17 / 2026-03-17 by git log -S); none invented. Where a number was only a mirror of a derived value (ARCH-004, TR-005, VER-001/002 coverage) the derivation is named instead. VG-002's superseded note says the gap MOVED (VFP admits closed over axiomatized float semantics, per coq/STATUS.md), not that it vanished. VCR-REACH-002 keeps its dated 1.6 % and gains the v0.63 ladder (20.2 % on the 243-module reachable corpus — a different denominator, not a trend).

Two of the 23 (VCR-WASM-001) were dated only by the ADJACENT sentence — the rule's known strictness; fixed by inline dating, stated here rather than softened into a "nearby anchor" heuristic that would let a version six sentences up date a count.

Verification

Refs #1085

🤖 Generated with Claude Code

https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

avrabe added a commit that referenced this pull request Sep 7, 2026
Refs #1085

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
@avrabe

avrabe commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Gate finding addressed: the population half is now an EQUALITY (commit 4)

Where the 34 actually lived. It was in the PR — STALENESS_FLOOR = 34 in scripts/status_evidence_check.py, enforced in-script exactly like PROGRAMME_FLOOR/DELIVERY_FLOOR: an S-VACUOUS failure sets exit 1 and puts 1 failures on the status-evidence: line the CI grep pins at 0 failures$. Transcript on the committed code, Qed pattern rotted so it never matches:

FAIL S-VACUOUS: only 13 figure citations scanned across 293 unscoped artifacts (floor 34) — ...
status-evidence: ... 1 failures
programme-staleness: 293 unscoped artifacts, 13 figure citations scanned, 0 undated
EXIT=1

So the shipped floor was 34, not 10 — but you were right on the substance twice over: (1) the ci.yml regex alone would have accepted 13, and nothing in the PR said the population half was enforced elsewhere; (2) a floor pinned at live cannot see the ABOVE direction at all. FLOOREQ's wording applies. I did not argue back.

Churn, measured before choosing equality (check_unscoped replayed over artifacts/ reconstructed at each tag):

tag unscoped citations undated
v0.56.0 263 30 21
v0.57.0 265 30 21
v0.58.0 265 30 21
v0.59.0 269 31 22
v0.60.0 270 31 22
v0.61.0 291 31 22
v0.62.0 291 31 22
v0.63.0 293 32 23
HEAD 293 34 0

Two moves in seven release intervals — equality costs a one-line bump every few releases, not churn. Side finding: undated sat at 21–23 for all eight releases; the class is at least six months old, and it was never a status problem.

What changed. STALENESS_CITATIONS = 34, S-DRIFT red in both directions (BELOW = lost reach, ABOVE = a citation landed without its bump). claims.yaml gains SYNTH-STATUS-EVIDENCE-STALENESS-CITATIONS-1085: a verbatim pin on the constant's line and a count-eq on the != check, so the two ways to quietly defuse it both red the ledger. The ci.yml grep keeps asserting "the scan ran, undated is zero" and its comment now says where the population half is enforced — deliberately not a third live copy of the number (FLOORPROSE's two-live-files finding).

Proof it discriminates (real checker / real claim_check, file restored after each):

=== pattern rot: Qed never matches (scan drops below)
    EXIT=1
    FAIL S-DRIFT: 13 figure citations scanned across 293 unscoped artifacts, BELOW the declared 34 — the scan lost reach ...
=== declared value one below live (a citation landed without its bump)
    EXIT=1
    FAIL S-DRIFT: 34 figure citations scanned across 293 unscoped artifacts, ABOVE the declared 33 — a citation landed without its same-PR bump ...
=== live
    EXIT=0   programme-staleness: 293 unscoped artifacts, 34 figure citations scanned, 0 undated

=== constant moved without the ledger (34 -> 33)      claim_check EXIT=1  FAIL SYNTH-STATUS-EVIDENCE-STALENESS-CITATIONS-1085  59/60
=== equality quietly weakened to `<`                   claim_check EXIT=1  FAIL SYNTH-STATUS-EVIDENCE-STALENESS-CITATIONS-1085  59/60

72 tests OK; 10/10 mutations killed (two new: equality disabled, equality weakened to <); rivet unchanged at 40 errors.

Same shape, not fixed here (your call): PROGRAMME_FLOOR = 379 against a live 400 and DELIVERY_FLOOR = 28 against a live 67 are lower bounds with 21 and 39 of slack — the delivery-commit scan could lose more than half its matches and stay green. Both predate this PR; flagging rather than widening scope.

Rebase status: origin/main is still 7b8b7e36; #1179/#1181 have not landed, so no ci.yml conflict yet. When they do I'll resolve hunk by hunk keeping all sides and re-derive any cumulative counter on the merged tree.

avrabe added a commit that referenced this pull request Sep 7, 2026
…ALITY, 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
avrabe added a commit that referenced this pull request Sep 7, 2026
…` matched `41.6 %`

The plan comment asserted that VG-009 and VCR-REACH-002 both still state
aarch64 accepts 1.6 %. Only the second is true.

VG-009's only "1.6" is the tail of "41.6 %", a line-coverage figure for
synth-backend-riscv/src/backend.rs, framed "measured at v0.54.0" — correctly
dated history, and untouched since #918. Flagging it would have been a false
red on a properly dated citation.

Measured and reported by the RQ-64-SCOPEGAP lane, which was briefed with
explicit permission to return a negative result and used it. The claim was
mine: it came from a grep for `1.6`, which returns OCCURRENCES and cannot
return FRAMING. Same failure that produced v0.62's devirtualization claim,
and the correction is left visible beside the original rather than edited
away — the scoping error is the same shape the artifact is about.

The real population the artifact should have named is larger and of a
different kind: eight artifacts restating the repo's own proof counts as
undated present-tense fact ("188 Qed / 52 Admitted", six months stale
against a number CLAUDE.md itself count-eq-pins).

`chore` deliberately, not `fix`: naming RQ-64-SCOPEGAP in a delivery-shaped
subject would oblige R4 to find that artifact's status flip in THIS PR, and
it belongs to #1182.

Verified: rivet validate at main's 40-error baseline, 0 broken cross-refs;
status_evidence_check exit 0.

Refs #1085

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
@codecov

codecov Bot commented Sep 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

avrabe and others added 4 commits September 7, 2026 13:02
…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
…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
Refs #1085

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
…ALITY, 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
@avrabe
avrabe force-pushed the feat/scopegap-1085 branch from 3d66c9b to f1b4b31 Compare September 7, 2026 11:02
@avrabe
avrabe merged commit 32098c7 into main Sep 7, 2026
61 checks passed
@avrabe
avrabe deleted the feat/scopegap-1085 branch September 7, 2026 11:58
avrabe added a commit that referenced this pull request Sep 7, 2026
…` matched `41.6 %`

The plan comment asserted that VG-009 and VCR-REACH-002 both still state
aarch64 accepts 1.6 %. Only the second is true.

VG-009's only "1.6" is the tail of "41.6 %", a line-coverage figure for
synth-backend-riscv/src/backend.rs, framed "measured at v0.54.0" — correctly
dated history, and untouched since #918. Flagging it would have been a false
red on a properly dated citation.

Measured and reported by the RQ-64-SCOPEGAP lane, which was briefed with
explicit permission to return a negative result and used it. The claim was
mine: it came from a grep for `1.6`, which returns OCCURRENCES and cannot
return FRAMING. Same failure that produced v0.62's devirtualization claim,
and the correction is left visible beside the original rather than edited
away — the scoping error is the same shape the artifact is about.

The real population the artifact should have named is larger and of a
different kind: eight artifacts restating the repo's own proof counts as
undated present-tense fact ("188 Qed / 52 Admitted", six months stale
against a number CLAUDE.md itself count-eq-pins).

`chore` deliberately, not `fix`: naming RQ-64-SCOPEGAP in a delivery-shaped
subject would oblige R4 to find that artifact's status flip in THIS PR, and
it belongs to #1182.

Verified: rivet validate at main's 40-error baseline, 0 broken cross-refs;
status_evidence_check exit 0.

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
…` matched `41.6 %`

The plan comment asserted that VG-009 and VCR-REACH-002 both still state
aarch64 accepts 1.6 %. Only the second is true.

VG-009's only "1.6" is the tail of "41.6 %", a line-coverage figure for
synth-backend-riscv/src/backend.rs, framed "measured at v0.54.0" — correctly
dated history, and untouched since #918. Flagging it would have been a false
red on a properly dated citation.

Measured and reported by the RQ-64-SCOPEGAP lane, which was briefed with
explicit permission to return a negative result and used it. The claim was
mine: it came from a grep for `1.6`, which returns OCCURRENCES and cannot
return FRAMING. Same failure that produced v0.62's devirtualization claim,
and the correction is left visible beside the original rather than edited
away — the scoping error is the same shape the artifact is about.

The real population the artifact should have named is larger and of a
different kind: eight artifacts restating the repo's own proof counts as
undated present-tense fact ("188 Qed / 52 Admitted", six months stale
against a number CLAUDE.md itself count-eq-pins).

`chore` deliberately, not `fix`: naming RQ-64-SCOPEGAP in a delivery-shaped
subject would oblige R4 to find that artifact's status flip in THIS PR, and
it belongs to #1182.

Verified: rivet validate at main's 40-error baseline, 0 broken cross-refs;
status_evidence_check exit 0.

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
…the suite ran on (#1186)

* fix(ci): RQ-64-DEPS (#965) — the MINORHOLD exit exists but says nothing about the tree the suite ran on

The artifact's original premise ("the hold has no exit") was too strong. The
workflow states one at dependabot-auto-merge.yml:20 — "a hold is a delay, never
a block: merge a held bump BY HAND once the FULL suite is green ... the
discriminator is CI, not a maintainer's read of the diff." That criterion is
correct. The premise is corrected in the artifact rather than edited away, the
third premise correction this release and the same discipline RQ-64-FLOORPROSE
got.

What the exit omitted is everything about the TREE THE SUITE RAN ON, which is
what made it unusable in practice:

1. Base freshness is part of "green". #1106/#1107/#1110 each showed exactly one
   red — `Rivet Federated Graph (advisory)` — which is GREEN on main, measured
   on trees whose merge-base was four days and one release stale. Neither that
   red nor a green would have attributed anything to the bump.

2. The refresh mechanism can be permanently gone. Those three each carry a human
   `Merge branch 'main' into dependabot/...` commit, and dependabot refuses to
   rebase a branch with foreign commits — it said so on all three at 06:05Z.
   Merging main into a dependabot branch to freshen it is the move that destroys
   the ability to freshen it. Now written down, because it is not obvious and it
   is not reversible.

3. A bump nobody evaluates needs a disposition. These accumulated for a week
   because nothing required an answer. "Still open" is not a disposition.

None of this loosens the hold — 0.x-minor is breaking under semver and the
ordeal 0.9->0.12 hang cost days. It makes the exit precise enough to use, which
is what keeps a hold a delay rather than an accumulator.

Verified: claim_check 59/59 (the MINORHOLD count-eq patterns are untouched —
the added text deliberately avoids them), workflow parses, rivet validate at
main's 40-error baseline with 0 broken cross-refs.

Refs #965

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

* chore(rivet): correct the v0.64 plan's VG-009 claim — a grep for `1.6` matched `41.6 %`

The plan comment asserted that VG-009 and VCR-REACH-002 both still state
aarch64 accepts 1.6 %. Only the second is true.

VG-009's only "1.6" is the tail of "41.6 %", a line-coverage figure for
synth-backend-riscv/src/backend.rs, framed "measured at v0.54.0" — correctly
dated history, and untouched since #918. Flagging it would have been a false
red on a properly dated citation.

Measured and reported by the RQ-64-SCOPEGAP lane, which was briefed with
explicit permission to return a negative result and used it. The claim was
mine: it came from a grep for `1.6`, which returns OCCURRENCES and cannot
return FRAMING. Same failure that produced v0.62's devirtualization claim,
and the correction is left visible beside the original rather than edited
away — the scoping error is the same shape the artifact is about.

The real population the artifact should have named is larger and of a
different kind: eight artifacts restating the repo's own proof counts as
undated present-tense fact ("188 Qed / 52 Admitted", six months stale
against a number CLAUDE.md itself count-eq-pins).

`chore` deliberately, not `fix`: naming RQ-64-SCOPEGAP in a delivery-shaped
subject would oblige R4 to find that artifact's status flip in THIS PR, and
it belongs to #1182.

Verified: rivet validate at main's 40-error baseline, 0 broken cross-refs;
status_evidence_check exit 0.

Refs #1085

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

* fix(ci): RQ-64-DEPS (#965) — record the plain-text requirement for dependabot commands, measured by probe

`@dependabot recreate` inside BACKTICKS is silently ignored. Measured
2026-09-07: three held PRs sat unchanged for over half an hour after a
backticked command; the identical command posted UNFORMATTED on #1106 was acted
on within minutes, and #1107/#1110 followed once reposted plain.

Worth writing down for two reasons. The failure is indistinguishable from "the
bot is slow", which is how it was misdiagnosed here. And the only reason it
became a measurement rather than a guess is that the plain form was probed on
ONE PR before being repeated on all of them — the difference between a
controlled test and three identical shots in the dark.

Refs #965

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

* chore(release): RQ-64-DEPS (#965) — record PR #1186 in landed:, status stays proposed (half the done-when)

R4 is satisfied by fields.landed rather than a status flip, deliberately: the
exit condition landed but the four held PRs have no disposition yet, and
claiming `implemented` on half a criterion is the shape this release keeps
finding in other people's gates.

Refs #965

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant