Skip to content

feat(rivet): V-closure traceability gate + promote 16 lagging requirements (v0.6.0 D3) - #228

Open
avrabe wants to merge 1 commit into
mainfrom
feat/v-closure-gate
Open

feat(rivet): V-closure traceability gate + promote 16 lagging requirements (v0.6.0 D3)#228
avrabe wants to merge 1 commit into
mainfrom
feat/v-closure-gate

Conversation

@avrabe

@avrabe avrabe commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

First workstream of the v0.6.0 plan (#227) — sequenced first deliberately: until the completeness gate tells the truth, "is v0.6.0 cuttable?" isn't a question rivet can answer.

The drift

The release gate asks whether every approved/implemented artifact has its V closed. That's only answerable if requirement statuses track their verification artifacts — and they'd drifted. 16 requirements carried a verified VER-* while still reading implemented/proposed themselves:

REQ-DRV-{ADC,CAN,DAC,I2C,PWM,SPI,WDG,DMA,BREADTH,GPIO,TIMER}-001 · REQ-OS-{SYSCALL,EXEC,ISO,TRITRACK}-001 · REQ-DMA-ASYNC-001

The gate read all of them as not done. It erred safe — but it misreported, and nothing prevented recurrence.

The gate

tools/check-v-closure.py fails when a requirement's matching VER-* (paired by id) is verified while the requirement is not.

  • Red-tested: reported exactly those 16 and exited 1 before the fix.
  • Green after: V-closure traceability: OK — 22 REQ/VER pairs, no requirement lags its closed V.
  • Wired as .github/workflows/rivet-v-closure.yml on artifacts/ changes — same shape as the gale#214 WIT-drift gate.

The promotions were checked, not bulk-flipped

Each VER-* was read for real evidence before promoting: Kani harness counts (gpio 4/4, timer 3/3 — confirmed against the driver sources), Renode register-effect content-gates, silicon captures, and stated kill-criteria. REQ-DMA-ASYNC-001 (the one proposed → verified jump I trusted least) cites the concrete dma_poll_complete split-phase export, the FSM transition with barrier emission, an unchanged TCB, and its own kill-criterion.

rivet validatePASS (334 warnings, unchanged). The diff is exactly 16 status lines — nothing else touched.

🤖 Generated with Claude Code

…ments (v0.6.0 D3)

The release-completeness gate asks 'does every approved/implemented artifact have
its V closed?' — answerable only if requirement statuses track their verification
artifacts. They had drifted: 16 requirements carried a 'verified' VER-* while still
reading 'implemented'/'proposed' themselves — the whole verified driver suite
(adc/can/dac/i2c/pwm/spi/wdg/dma/breadth), gpio, timer, the syscall seam, the
executor, DMA-async, I-ISO and tri-track. The gate misreported them as not-done: it
erred safe, but it lied, and nothing stopped it recurring.

tools/check-v-closure.py fails when a requirement's matching VER-* is 'verified'
while the requirement is not (paired by id). Red-tested: it reported exactly those
16 before the fix and is green after. Each promotion was checked against the VER
artifact's evidence (Kani counts, Renode content-gates, silicon captures, stated
kill-criteria) — not bulk-flipped. rivet validate PASS (334 warnings, unchanged);
the diff is exactly 16 status lines.

Wired as .github/workflows/rivet-v-closure.yml on artifacts/ changes, so this class
of drift cannot recur silently — same shape as the gale#214 WIT-drift gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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