Summary
cargo clippy --all-targets --all-features -- -D warnings — the CI-style gate — already fails on
a clean checkout with clippy 1.96. CI does not see it yet because dtolnay/rust-toolchain@stable
is still on an older stable. The moment the GitHub runner's stable reaches 1.96, the Linting job
goes red on every branch and every open PR simultaneously.
Reproduced on main-derived branches at clippy 1.96 (ac68faa20c, 2026-05-25):
error: could not compile `helios-auth` (lib) due to 2 previous errors
error: could not compile `helios-auth` (lib test) due to 2 previous errors
error: could not compile `helios-fhir-gen` (build script) due to 3 previous errors
error: could not compile `helios-fhir` (build script) due to 3 previous errors
error: could not compile `helios-hfs` (build script) due to 2 previous errors
error: could not compile `helios-serde-support` (lib) due to 2 previous errors
The 12 lints
Two rules, five files, none of them recently touched:
| File |
Lines |
Rule |
crates/auth/src/jwks/fetcher.rs |
90, 165 |
collapsible_if |
crates/fhir-gen/build.rs |
29, 30, 31 |
collapsible_if |
crates/fhir/build.rs |
31, 32, 33 |
collapsible_if |
crates/hfs/build.rs |
34, 35 |
collapsible_if |
crates/serde-support/src/lib.rs |
161, 162 |
doc list item without indentation |
Clippy 1.96 extended collapsible_if to if let chains, which earlier versions did not flag. The
suggested rewrite is the let-chain form this codebase already uses elsewhere, e.g.:
// crates/auth/src/jwks/fetcher.rs:165
if let Some(val) = directive.strip_prefix("max-age=")
&& let Ok(secs) = val.trim().parse::<u64>()
{
return Some(Duration::from_secs(secs));
}
That form requires edition 2024 / Rust 1.88+, and the workspace MSRV is already 1.90, so no MSRV
change is needed.
Why this is worth doing before the runner updates
- All 12 are mechanical, and the fix is confined to five files that no open PR modifies — so it can
land as one small PR with near-zero conflict surface. Waiting means fixing it while every branch
is red.
- Until then, the CI-style gate cannot pass locally, so a red clippy result is not evidence that
a given change is at fault. That is a real drag on local pre-flight checks: contributors have to
hand-verify their own crate with cargo clippy -p <crate> --all-targets --all-features and grep
the log for the files they touched.
Suggested fix
- Apply the 12 mechanical rewrites.
- Consider pinning the toolchain so local and CI agree, rather than tracking
stable on both sides
and drifting again. A rust-toolchain.toml at the workspace root would do it; there is none
today, and the workflows use dtolnay/rust-toolchain@stable.
Where it came from
Hit while running the required pre-merge checks for #503 (PR #512), whose own files are clean under
--all-features.
Summary
cargo clippy --all-targets --all-features -- -D warnings— the CI-style gate — already fails ona clean checkout with clippy 1.96. CI does not see it yet because
dtolnay/rust-toolchain@stableis still on an older stable. The moment the GitHub runner's stable reaches 1.96, the Linting job
goes red on every branch and every open PR simultaneously.
Reproduced on
main-derived branches at clippy 1.96 (ac68faa20c, 2026-05-25):The 12 lints
Two rules, five files, none of them recently touched:
crates/auth/src/jwks/fetcher.rscollapsible_ifcrates/fhir-gen/build.rscollapsible_ifcrates/fhir/build.rscollapsible_ifcrates/hfs/build.rscollapsible_ifcrates/serde-support/src/lib.rsClippy 1.96 extended
collapsible_iftoif letchains, which earlier versions did not flag. Thesuggested rewrite is the let-chain form this codebase already uses elsewhere, e.g.:
That form requires edition 2024 / Rust 1.88+, and the workspace MSRV is already 1.90, so no MSRV
change is needed.
Why this is worth doing before the runner updates
land as one small PR with near-zero conflict surface. Waiting means fixing it while every branch
is red.
a given change is at fault. That is a real drag on local pre-flight checks: contributors have to
hand-verify their own crate with
cargo clippy -p <crate> --all-targets --all-featuresand grepthe log for the files they touched.
Suggested fix
stableon both sidesand drifting again. A
rust-toolchain.tomlat the workspace root would do it; there is nonetoday, and the workflows use
dtolnay/rust-toolchain@stable.Where it came from
Hit while running the required pre-merge checks for #503 (PR #512), whose own files are clean under
--all-features.