Skip to content

Verify the declared MSRV in CI, and record the all-features floor - #72

Merged
Eliah Kagan (EliahKagan) merged 3 commits into
GitoxideLabs:mainfrom
EliahKagan:claude/run-ci/msrv
Aug 2, 2026
Merged

Eliah Kagan (EliahKagan) merged 3 commits into
GitoxideLabs:mainfrom
EliahKagan:claude/run-ci/msrv

Conversation

@EliahKagan

Copy link
Copy Markdown
Member

Written by Claude Opus 5 in Claude Code, on behalf of Eliah Kagan.

CI builds only on stable, so rust-version has never been exercised by a job. It is correct as it stands — cargo +1.85.0 check --locked --lib passes — but nothing would notice if that stopped being true.

This PR adds an msrv job that checks exactly what the declaration covers: the base crate. That scope is deliberate — the commit that set 1.85 records that the declared MSRV "covers the base crate, while optional feature combinations may require newer compilers through their optional dependencies". Raising rust-version to cover them would impose a higher floor on the default feature set, which builds fine on 1.85. So the job runs --lib with default features, reading the toolchain from cargo metadata so the version tested cannot drift from the manifest.

Enabling all features needs 1.88.0, above the declared MSRV. This PR also adds a second job, all-features-floor, that records and validates that figure.

Nothing has verified `rust-version` on an ongoing basis. CI builds on
`stable`, so the declared floor is never exercised by a job, and a
change that raised it would go unnoticed until a user hit it.

What the declaration covers is deliberately narrow. Commit 84f279d,
which chose 1.85, records the scope: the declared MSRV covers the base
crate, while optional feature combinations may require newer compilers
through their optional dependencies. This job checks that and no more:
the library alone, with default features, which is what was validated
at the time.

The toolchain is read from `cargo metadata`, so it cannot drift from
the manifest.

A bare `x.y` is expanded to `x.y.0`, so that the earliest patch
release the claim covers is the one tested. Passing the bare version
to `rustup toolchain install` would take the newest `x.y.z` instead,
which could hide a violation that only the initial release rejects.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
`rust-version` covers the base crate, so it says nothing about builds
that turn optional features on. Enabling all features needs a higher
floor, and nothing recorded that.

The value in this commit is 1.87.0, the newest release below 1.88, so
that CI shows this job failing when the recorded floor is wrong. A
check only ever seen to pass is not much of a check. The correct
value follows immediately, and this commit is expected to be red.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The failing `all-features-floor` job in the preceding commit validates
that 1.87.0 is not high enough. The passing job here validates that
1.88.0 is. Together they establish where the floor sits.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

Copilot AI 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.

Pull request overview

This PR strengthens CI by explicitly validating the crate’s declared Rust MSRV (from rust-version) and separately recording/enforcing a higher compiler “floor” required when building with --all-features, aligning CI checks with the project’s MSRV policy.

Changes:

  • Add an msrv CI job that reads rust-version via cargo metadata, installs that toolchain, and runs cargo check --locked --lib.
  • Add an all-features-floor CI job that installs a pinned toolchain version and runs cargo check --locked --all-features.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/ci.yml

@EliahKagan EliahKagan left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The MSRV situation in prodash was confusing me a little bit as I was checking over #71 before merging it, and I think having CI jobs to check compatibility with the declared MSRV, as well as to keep track of and validate the higher version intentionally required for some features, should help with that and also allow Dependabot PRs to be merged with greater confidence when CI is green. See 84f279d for background on how the MSRV is interpreted here.

I iterated on this several times to get it to what I think is a good state and to get the comments and commit message to a point where they were accurate and, I hope, clear. I plan to look this over one more time and see what the Copilot review says, and then merge it.

@EliahKagan
Eliah Kagan (EliahKagan) marked this pull request as ready for review August 2, 2026 03:57
@EliahKagan
Eliah Kagan (EliahKagan) merged commit 73700bd into GitoxideLabs:main Aug 2, 2026
9 checks passed
@EliahKagan
Eliah Kagan (EliahKagan) deleted the claude/run-ci/msrv branch August 2, 2026 03:57
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