Skip to content

fix(ci): Kani PR-smoke + Mutation shard + Verus log upload#209

Merged
avrabe merged 2 commits intomainfrom
fix/ci-timeout-and-verus-log
Apr 25, 2026
Merged

fix(ci): Kani PR-smoke + Mutation shard + Verus log upload#209
avrabe merged 2 commits intomainfrom
fix/ci-timeout-and-verus-log

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented Apr 25, 2026

Summary

Fix three CI jobs that were either failing or unobservable on run 24936025203:

  • Kani Proofs (CANCELLED at 45m15s): split into a pull_request-only --only-codegen smoke (~5 min) and a push to main-only full run. The 27-harness full suite was overrunning the 45 min budget mid-CBMC-unwind on every PR. The workflow comment at line 400 already described this approach as the planned fix.
  • Mutation Testing rivet-core (CANCELLED at 55m01s): shard the 3677-mutant rivet-core corpus across 4 matrix arms (rivet-core x {0,1,2,3}/4). Each shard now has ~15-20 min of work inside the 45 min budget. rivet-cli keeps its single-arm hard-gate behaviour.
  • Verus Proofs (FAILS, log invisible): unconditionally upload bazel-testlogs/verus/rivet_specs_verify/test.log as the verus-test-log artifact via if: always(). Without this we cannot see why the SMT obligations are failing from the GitHub UI.

Changes

  • .github/workflows/ci.yml:
    • mutants: matrix uses include: with explicit shard and shard_id fields (slash-free shard_id keeps cache key + artifact name valid).
    • kani: step list gated by github.event_name / github.ref.
    • verus: adds an always-on Upload Verus test log step covering both bazel-out/*/testlogs/... and bazel-testlogs/... paths with if-no-files-found: warn.

Test plan

  • CI runs without YAML / actionlint failures
  • Kani Proofs job completes in <10 min on this PR (smoke path only)
  • All 5 Mutation Testing matrix arms appear; rivet-cli is the hard gate, rivet-core arms are continue-on-error
  • On Verus failure, the verus-test-log artifact is downloadable from the run page

Constraints respected

  • Workflow-only diff; no Rust / artifact changes bundled
  • Rocq job left untouched (covered by a separate PR)

Trace: skip

avrabe added 2 commits April 25, 2026 22:29
Three CI fixes in one workflow PR:

- Kani: split into PR-only --only-codegen smoke (~5 min) and main-only
  full run. Resolves 45m15s timeout cancellations on PRs while keeping
  full verification nightly. The workflow comment at line 400 already
  named this as the planned approach.

- Mutation rivet-core: shard into 4 (rivet-core x {0,1,2,3}/4) so each
  arm fits in ~15-20 min instead of timing out at 55+ min on the
  3677-mutant corpus. rivet-cli stays single-arm.

- Verus: always-upload bazel test.log as `verus-test-log` artifact.
  Required for debugging spec failures from the GitHub UI; without it
  the test log is invisible and we have to guess at SMT errors.

Diagnosed by parallel research agents in REQ-004 follow-up sweep.

Trace: skip
The vertical-aligned `rivet-cli,  shard:` tripped yamllint's
`commas: too many spaces after comma` rule on line 316. Use a
single space; we lose the column alignment but unblock the gate.

Trace: skip
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

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: 141305d Previous: c7d5664 Ratio
validate/10000 15032857 ns/iter (± 1063041) 11852513 ns/iter (± 526632) 1.27

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

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 25, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@avrabe avrabe merged commit f1a8e3f into main Apr 25, 2026
21 of 27 checks passed
@avrabe avrabe deleted the fix/ci-timeout-and-verus-log branch April 25, 2026 22:10
avrabe added a commit that referenced this pull request Apr 25, 2026
Verus's lemma_div_is_ordered signature requires int args:
  fn lemma_div_is_ordered(x: int, y: int, z: int)

But `covered * 100` and `total * 100` are `nat * int` (since covered
and total are nat), so the call failed with E0308:

  expected `int`, found `nat`
  at rivet-core/src/verus_specs.rs:249:13 (covered * 100, total * 100)

Surfaced via the bazel test.log artifact upload (PR #209) — without it
the Verus failure was just "FAIL in 0.4s" with no detail.

Cast both products as int explicitly. The third argument `total as int`
was already correctly cast.

Verifies: REQ-004
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