Skip to content

ci(variant): gate PRs on variant + binding soundness (REQ-263)#712

Merged
avrabe merged 1 commit into
mainfrom
feat/req-263-ci-variant-gate
Jul 16, 2026
Merged

ci(variant): gate PRs on variant + binding soundness (REQ-263)#712
avrabe merged 1 commit into
mainfrom
feat/req-263-ci-variant-gate

Conversation

@avrabe

@avrabe avrabe commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

What (v0.28 slice 3 — final variant P1, DD-076)

No CI gate exercised the project's variants/bindings — the committed-broken full-desktop.yaml shipped because nothing ran it. Adds a step to the existing Traceability job (reuses the binary the validate step already built — no extra compile):

  • rivet variant check --model --variant on every artifacts/variants/*.yaml — fails on UnknownFeature, unsolvable configs, etc.
  • rivet validate --model --binding --strict-variants on artifacts/bindings.yaml — dangling artifact IDs (REQ-258), unknown constraint feature names (REQ-259), and unknown attribute keys (REQ-261) all fail here.

set -euo pipefail ⇒ any broken variant/binding fails the PR. Runs on every PR (Traceability isn't paths-gated), so breakage can't slip through a non-Rust change.

Verification

Ran the gate's exact commands locally with a fresh binary: all 3 variants + the binding validation exit 0 on the current (fixed) repo; a broken variant exits 1 (per the earlier review). ci.yml parses.

This completes v0.28 (REQ-260/261/262/263) — the variant-hardening P1 silent-drops. Next: cut v0.28.0.

Refs: REQ-263, REQ-258/259/261, DD-076

🤖 Generated with Claude Code

No CI gate exercised the project's variants or bindings — the committed-broken
full-desktop.yaml (30+ nonexistent features) shipped precisely because nothing
ran it (DD-076). Add a step to the existing Traceability job (which already
builds + runs `rivet validate`, so no extra compile) that:
- solves every artifacts/variants/*.yaml against the feature model
  (`rivet variant check --model --variant`), failing on UnknownFeature etc.;
- validates artifacts/bindings.yaml with `validate --model --binding
  --strict-variants` — dangling artifact IDs (REQ-258), unknown constraint
  feature names (REQ-259), and unknown attribute keys (REQ-261) all fail here.

`set -euo pipefail` + non-zero exits mean any broken variant/binding fails the
PR. Runs on every PR (the Traceability job is not paths-gated) so variant
breakage can't slip in through a non-Rust change either.

Confirmed the gate's exact commands pass locally on the current variants
(dashboard-only/full-desktop/minimal-ci all exit 0; binding validation exit 0)
with a fresh binary, and ci.yml parses.

Refs: REQ-263, REQ-258, REQ-259, REQ-261, DD-076
@github-actions

Copy link
Copy Markdown

📐 Rivet artifact delta

Change Count
Added 0
Removed 0
Modified 1
Downstream impacted (depth ≤ 5) 0

Graph

graph LR
  REQ_263["REQ-263"]:::modified
  classDef added fill:#d4edda,stroke:#28a745,color:#155724
  classDef removed fill:#f8d7da,stroke:#dc3545,color:#721c24
  classDef modified fill:#fff3cd,stroke:#ffc107,color:#856404
  classDef overflow fill:#e2e3e5,stroke:#6c757d,color:#495057,stroke-dasharray: 3 3
Loading
Modified
ID Changes
REQ-263

📎 Full HTML dashboard attached as workflow artifact rivet-delta-pr-712download from the workflow run.

Posted by rivet-delta workflow. The graph shows only changed artifacts; open the HTML dashboard (above) for full context.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Rivet Criterion Benchmarks'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: 85f6ef1 Previous: 961f3a3 Ratio
store_lookup/100 1914 ns/iter (± 12) 1540 ns/iter (± 10) 1.24
store_lookup/1000 24760 ns/iter (± 541) 18884 ns/iter (± 207) 1.31
store_lookup/10000 353594 ns/iter (± 4407) 288063 ns/iter (± 3947) 1.23
store_by_type/100 95 ns/iter (± 0) 77 ns/iter (± 0) 1.23
store_by_type/1000 96 ns/iter (± 1) 75 ns/iter (± 1) 1.28
store_by_type/10000 95 ns/iter (± 5) 77 ns/iter (± 1) 1.23
diff/1000 723954 ns/iter (± 4546) 572672 ns/iter (± 5133) 1.26
query/100 1294 ns/iter (± 4) 969 ns/iter (± 10) 1.34
query/1000 14797 ns/iter (± 84) 12084 ns/iter (± 149) 1.22

This comment was automatically generated by workflow using github-action-benchmark.

@codecov

codecov Bot commented Jul 16, 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 aab1c32 into main Jul 16, 2026
30 checks passed
@avrabe
avrabe deleted the feat/req-263-ci-variant-gate branch July 16, 2026 05:24
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