Repository navigation
ci(fuzz): check the fuzz crates' lockfiles with --locked - #1456
Conversation
The stack-auth and stack-kms fuzz lockfiles had not been updated since those crates moved to vitaminc 0.8, so they recorded none of its 0.8 crates. cargo-fuzz has no --locked flag, so the regression job resolved the missing versions afresh on every run, built against whatever was newest (vitaminc 0.8.1 by then, where the workspace pins 0.8.0), and passed. Regenerate both lockfiles, with every crate the workspace lockfile also pins at the workspace's version, and add a fuzz-lockfiles job that resolves each packages/*/fuzz crate with cargo metadata --locked. It runs on pull requests, the nightly schedule and manual dispatch. Claude-Session: https://claude.ai/code/session_01MrxG73fnX1p7oiizh3GRG5
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Mutation testing (cargo-mutants,
|
cipherstash-agent
left a comment
There was a problem hiding this comment.
Review attestation for 320b488: automated /code-review medium, with the findings cross-checked against the PR head and the existing PR feedback (company-skills:cross-check-review-findings).
Critical / blocking issues: none.
Findings: none. The review raised five candidate findings. None was confirmed as a defect at head, so none is posted as an inline comment.
- The unlocked fuzz builds and the check-only design are the stated, intentional approach in the PR description.
- The
packages/*/fuzz/Cargo.tomlglob fails loudly if it matches nothing, so it cannot pass silently. - The regenerated lockfiles carry two
vitaminclines (0.5.1 and 0.8.0). The PR description already documents this, and I found no evidence it breaks the build.
Non-blocking notes:
- A new fuzz crate outside
stack-auth,stack-kmsandstack-encryptwould not trigger this workflow onpull_request(see thepathsfilter), though the glob in the new job would pick it up on the schedule. - The
changeset-botwarning is expected for a CI-only change.
Generated by Claude Code
Summary
Two fuzz crates' lockfiles were out of date, and nothing noticed. This PR regenerates them and adds a CI check so it cannot happen silently again.
Problem
Each
packages/*/fuzz/crate is its own Cargo workspace with its ownCargo.lock. Whenstack-authandstack-kmsmoved tovitaminc0.8, the two fuzz lockfiles that depend on them were not updated. They recorded onlyvitaminc0.5.1, not the 0.8 crates the fuzz builds now need.cargo-fuzzhas no--lockedflag. Without it, Cargo quietly fills in whatever a lockfile is missing, choosing the newest compatible versions, and carries on. So the fuzz regression job resolvedvitaminc0.8.x afresh on every run, built against whatever was newest that day (0.8.1, while the workspace pins 0.8.0), and passed. The job was green, but it was not building the versions we review and commit.Checked: on
next,cargo metadata --lockedfails for both crates withcannot update the lock file … because --locked was passed. Onmainboth pass.Changes
packages/stack-auth/fuzz/Cargo.lock,packages/stack-kms/fuzz/Cargo.lock: regenerated. Every crate the workspaceCargo.lockalso pins is at the workspace's version, so the wholevitaminc0.8 family is at 0.8.0, not the newer 0.8.1 a fresh resolve picks..github/workflows/fuzz.yml: a newfuzz-lockfilesjob runscargo metadata --lockedon everypackages/*/fuzz/Cargo.toml, and reports a stale lockfile as an error annotation on that file. It is a check rather than a flag on the builds, the same split protect-ffi uses (--lockedon the check, not the build). It runs on pull requests, on the nightly schedule (so staleness on the default branch fails a run too), and on manual dispatch.Verification
cargo metadata --lockedpasses for all three fuzz crates (stack-auth,stack-kms,stack-encrypt).pnpm run test:scripts: 83 files, 1446 tests passed. That suite includes the workflow structure checks (mise cache image, setup and paths-filter parity).Not changed
The root workspace still carries two
vitamincversions, 0.5.1 and 0.8.0. Our crates use 0.8.0. 0.5.1 comes fromcts-common0.43.0, which is published fromcipherstash/cipherstash-suite, and fromzerokms-protocolthrough it. One version across the board needs acts-commonrelease onvitaminc0.8 first.https://claude.ai/code/session_01MrxG73fnX1p7oiizh3GRG5