Skip to content

feat(schemas): vv-coverage — repo-status type for V&V technique tracking (#188)#232

Draft
avrabe wants to merge 1 commit intomainfrom
feat/issue-188-vv-coverage-schema
Draft

feat(schemas): vv-coverage — repo-status type for V&V technique tracking (#188)#232
avrabe wants to merge 1 commit intomainfrom
feat/issue-188-vv-coverage-schema

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented Apr 28, 2026

Refs: #188 (sub-issue #1 of the proposed decomposition in the 2026-04-26 triage comment).

Summary

First in-scope cut at the V&V coverage matrix story (#188). Introduces a single new schema, vv-coverage, with one artifact type, repo-status, designed as the source-of-truth shape consumed by:

Filed as a draft because two follow-up sub-issues (#188 #2 + #3) need to land before this schema has a real consumer. The shape itself is the contract those follow-ups depend on; merging it early gives them a stable target.

Acceptance-criteria mapping (#188 sub-issue #1)

AC bullet (proposed in 2026-04-26 triage comment) Where it landed
Schema fields for techniques_applied, techniques_gated_in_ci on a repo-level artifact schemas/vv-coverage.yamlrepo-status.techniques-applied (required, list<string>), repo-status.techniques-gated-in-ci (optional, list<string>)
Schema lints Embedded in rivet-core/src/embedded.rs; cargo test -p rivet-core --test schema_agent_pipelines exercises every entry in SCHEMA_NAMES
rivet validate clean (no new diagnostics) Identical to origin/main: 6 errors / 62 warnings, all pre-existing in spar-external
Snapshot of typed shape 9 integration tests in rivet-core/tests/vv_coverage_schema.rs covering required/optional, list-typing, schema name registration, extends: [common]

Out of scope

These bullets from #188 cannot be addressed by this PR and are tracked for follow-ups:

The agent-pipelines block is intentionally not added; sub-issue #1 is shape-only and the pipeline would have nothing to fire on yet.

Why kebab-case fields

Project convention (tool-name, safety-level, cve-id, mutation-score, etc. across the existing schemas). The original issue body uses techniques_applied; this PR matches the in-tree style. If a hard rename is preferred, say the word and I'll switch.

Verification

  • cargo test -p rivet-core --lib — 857 pass
  • cargo test -p rivet-core --test vv_coverage_schema — 9 pass (new)
  • cargo test -p rivet-core --test schema_agent_pipelines — 5 pass (iterates SCHEMA_NAMES; new entry round-trips)
  • cargo test -p rivet-core --test supply_chain_schema — pass (regression sanity for the neighbouring schema)
  • cargo fmt --all -- --check — clean
  • rivet validate — identical to origin/main: Result: FAIL (6 errors, 62 warnings, 0 broken cross-refs) — same six SPAR-* errors in the external fixture, no new diagnostics

Test plan

  • New schema parses + registers in SCHEMA_NAMES
  • repo-status declares repo, techniques-applied, techniques-gated-in-ci with the documented required/optional shape
  • cargo fmt --check clean, rivet validate baseline unchanged
  • CI green
  • Maintainer confirms field naming convention (techniques-applied vs techniques_applied)
  • Follow-up sub-issues filed for rivet coverage --matrix, aggregator, dashboard

Trailers

Per CLAUDE.md, the commit carries:

Implements: REQ-010
Refs: #188, #184

(Schema change → REQ-010. #184 is the V&V coverage initiative hub.)


Generated by Claude Code — issue-triage agent run 2026-04-28.


Generated by Claude Code

Introduces `schemas/vv-coverage.yaml` and registers it as a built-in
schema. Defines a single artifact type, `repo-status`, capturing:

  - `repo` (required) — canonical `owner/name` join key
  - `techniques-applied` (required, list<string>) — V&V techniques
    present in the repo
  - `techniques-gated-in-ci` (optional, list<string>) — subset that
    blocks merge or release
  - `notes` (optional, text) — free-form coverage commentary

The split between "applied" and "gated-in-ci" is the load-bearing
distinction the cross-repo coverage matrix renders: the matrix shows
drift between "we have the technique" and "the technique enforces".

Sub-issue #1 of #188; the matrix CLI surface (`rivet coverage --matrix`)
and the cross-repo aggregator land in follow-up PRs.

Recommended technique identifiers documented in the schema description
(verus / kani / rocq / lean / aeneas / mirai / proptest / loom / miri /
asan / tsan / lsan / fuzz / mutation / criterion / differential /
rivet-validate / cargo-deny / cargo-audit / semver-check). Authors may
use identifiers outside this set; the aggregator surfaces unknowns
rather than rejecting them.

Verification:
- 9 new integration tests in `rivet-core/tests/vv_coverage_schema.rs`
  (schema loads, parses, registered in SCHEMA_NAMES, declares
  `repo-status` with the three documented fields, required/optional
  shape matches the aggregator contract, both technique fields are
  `list<string>`, schema extends `common`).
- `cargo test -p rivet-core --lib` — 857 pass.
- `cargo test -p rivet-core --test schema_agent_pipelines` — 5 pass
  (this suite iterates over SCHEMA_NAMES; new entry round-trips).
- `cargo fmt --all -- --check` — clean.
- `rivet validate` diagnostics identical to origin/main (6 pre-existing
  errors in the spar-external fixture, 62 warnings — unchanged).

Refs: #188
Refs: #184

Implements: REQ-010
@github-actions
Copy link
Copy Markdown

📐 Rivet artifact delta

No artifact changes in this PR. Code-only changes (renderer, CLI wiring, tests) don't touch the artifact graph.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 28, 2026

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.

2 participants