Skip to content

RQ-62-ROADMAPGATE (#1133): programme artifacts get their own status rules — P0/P1/P2 + floor, red-first on the two statusless VCR-WCET items - #1155

Merged
avrabe merged 3 commits into
mainfrom
chore/roadmapgate-1133
Sep 5, 2026
Merged

avrabe merged 3 commits into
mainfrom
chore/roadmapgate-1133

Conversation

@avrabe

@avrabe avrabe commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

RQ-62-ROADMAPGATE — the VCR roadmap's 39 artifacts get their own ruleset

Refs #1133

status_evidence_check.py enforced R0–R10 over artifacts/release-v* only, so the entire North Star programme file was subject to none of them — and VCR-WCET-001/VCR-WCET-002 carried no status key at all (visible to rivet's ARTIFACT_FLOOR, invisible to every rule and to any status-filtering consumer).

Which rules apply to programme artifacts, and why

Deliberately NOT a glob widening (per the artifact): R7/R8 need a release: field matching the filename — 38 of 39 roadmap items carry none by design until scoped; R4/R10 need a release window the roadmap has none of. Pointing the release ruleset at the roadmap would produce false reds.

What does generalize — measured true today for every artifact yaml in the repo — is enforced as three P-rules plus a floor, scanning every artifact-bearing yaml under artifacts/ (release files included):

Deliberately left out, stated not silent: R1–R3/R9 (done-when evidence) — programme items are long-lived records whose per-increment delivery is tracked by RQ-* release artifacts; backfilling 39 done-when signatures would itself be a hand-written mirror (the DECLARE_SINCE reasoning).

Red-first transcript (tree before the status fix)

FAIL P1 VCR-WCET-001: no `status` in artifacts/verified-codegen-roadmap.yaml — a missing status is unrepresentable in the lifecycle; rivet still counts the artifact (ARTIFACT_FLOOR) while every status-filtering consumer silently drops it (#1133)
FAIL P1 VCR-WCET-002: no `status` in artifacts/verified-codegen-roadmap.yaml — a missing status is unrepresentable in the lifecycle; rivet still counts the artifact (ARTIFACT_FLOOR) while every status-filtering consumer silently drops it (#1133)
status-evidence: 87 artifacts across 32 release files, 58 delivery commits matched, 35 done-when predicates evaluated, 8 release-scope archaeology checks (0 skipped), 2 failures
programme-status: 379 artifacts across 57 artifact files status-checked, 2 missing status, 0 illegal status
status-evidence-window: 1 delivery-shaped commits since v0.61.0 — 1 attributed, 0 issue-anchored delivery claims
EXIT=1

Both measured offenders flagged, and exactly those two — zero false reds across the other 377 artifacts, including the roadmap's 37 legitimately proposed/approved items with no release: key (and the one historical release: v0.24.0).

Green transcript (after the status fix)

status-evidence: 87 artifacts across 32 release files, 58 delivery commits matched, 35 done-when predicates evaluated, 8 release-scope archaeology checks (0 skipped), 0 failures
programme-status: 379 artifacts across 57 artifact files status-checked, 0 missing status, 0 illegal status
status-evidence-window: 1 delivery-shaped commits since v0.61.0 — 1 attributed, 0 issue-anchored delivery claims
EXIT=0

The two offenders: implemented, justified from content

Both describe landed, CI-gated work — WCET phases 1–3 (v0.46–v0.48) and phase 4 (#49) — with named wcet_bound_gate.rs fixtures, claims.yaml cycle-model pins and unicorn cross-checks, so draft/proposed/approved would deny shipped work. Not verified: the roadmap's own convention reserves that for Rocq-mechanized work (VCR-RA-001), and neither WCET bound is mechanized. The reasoning is written as a comment beside each status in the yaml.

Anti-vacuity

  • 9 new unit tests in test_status_evidence_check.py (60 total, all green): the measured two-offender corpus replay, null/empty status, illegal status, the no-false-reds negative direction, both P0 shapes, the floor, release-file P2 coverage, and a live-repo green anchor pinning checked >= 379.
  • Mutation-verified: disabling each of P0/P1/P2/floor kills at least one test (needle counted before each mutation; transcript in lane log).
  • CI step now greps the programme-status: summary line, so a checker edit that drops the P-rules (or glob rot scanning nothing) fails the pin, not just the exit code.

Gates

  • python3 scripts/status_evidence_check.py → exit 0
  • python3 scripts/test_status_evidence_check.py → exit 0 (60 tests)
  • python3 scripts/claim_check.py claims.yaml → exit 0
  • rivet: no artifacts added (statuses only), ARTIFACT_FLOOR untouched; local rivet validate diagnostics identical before/after (externals not synced locally)

🤖 Generated with Claude Code

https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

avrabe and others added 3 commits September 5, 2026 16:35
…ent earns — implemented, with the not-verified reason written beside it

Both describe landed, CI-gated work (WCET phases 1-3 v0.46-v0.48, phase 4
#49) with named wcet_bound_gate.rs fixtures, claims.yaml cycle-model pins
and unicorn cross-checks — so draft/proposed/approved would deny shipped
work. Not verified: the roadmap reserves that for Rocq-mechanized work
(VCR-RA-001), and neither WCET bound is mechanized.

Refs #1133

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
…s/ yaml must carry a legal lifecycle status; the roadmap file itself is pinned visible

Not a glob widening: R7/R8 assume a release: field and R4/R10 a release
window the programme has neither of, so pointing R0-R10 at the roadmap
would produce false reds. What does generalize is enforced repo-wide:
P1 (status present), P2 (status in
draft|proposed|approved|implemented|verified|accepted — rivet does not
enforce this enum, and a typo'd status on the release side silently
exits CLAIMING and defuses R2), P0 (the roadmap file must load and
contribute artifacts — the #1064 invisible shape on the programme's
single source of truth), plus a P-VACUOUS floor (379 at authoring).

Red-first: both measured offenders (VCR-WCET-001/002 statusless) flagged
with exit 1 before the previous commit; negative direction proven green —
zero false reds across the other 377 artifacts incl. the roadmap's 37
proposed/approved items with no release: key. Mutation-verified: killing
each of P0/P1/P2/floor reds at least one of the 9 new unit tests. CI grep
pins the programme-status summary line so a scan that stops running fails
loudly.

Refs #1133

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
… at the corpus-replay test, landed: PR #1155

The artifact's manual done-when demanded a gate proven RED against
VCR-WCET-001/002 and proven not to false-red on the roadmap's by-design
absent release: field — both transcripts are in PR #1155 and the corpus
replay is now a committed fixture (contains: signature), so the
definition of done has an in-repo gate-shaped signature instead of a
manual sentence.

Refs #1133

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

codecov Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@avrabe
avrabe merged commit f1b1e50 into main Sep 5, 2026
60 checks passed
@avrabe
avrabe deleted the chore/roadmapgate-1133 branch September 5, 2026 19:50
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