Contribution Date
Contribution Project
Contribution Details
A lint policy copied fourteen times, and an MSRV nobody had run
Three structural things, found by looking at the manifests rather than the code.
**The lint policy was copied into every member, and had already drifted twice.**
`dam-backup` carried no `[lints]` at all — so `forbid(unsafe_code)` and the clippy
denials simply did not apply there, and nothing failed to say so. It happens to have
no unwraps today, which is exactly why nobody noticed the guard was missing rather
than satisfied. Now one `[workspace.lints]` and `workspace = true` in fifteen
manifests, so a crate cannot silently opt out by being added without the block.
`dam-pipeline` keeps its own copy, because its drift was deliberate: `expect_used` is
denied there rather than warned. Cargo has no partial override, so changing one entry
means restating the table — worth it for the worker, where every stage runs unattended
and an `expect` that fires takes down a process nobody is watching, with a panic where
a retry or a dead-lettered job belonged. The comment says that now, so the next reader
does not "tidy" it into the shared block.
**`rust-version` claimed 1.88 and nothing had ever tried it.** Plausible — let-chains
stabilised in 1.88 and this workspace uses twelve — so it read as considered. Actually
running `cargo +1.88 check --workspace` refuses outright: sqlx 0.9 requires 1.94.0. No
part of this ever built on 1.88. Corrected to the verified value.
The reason a wrong MSRV survives is that cargo checks it on every build, so it feels
tested: it constrains what cargo *accepts*, not what the dependency tree needs, and
being wrong in the permissive direction is silent.
**Plus a `rust-toolchain.toml`,** which is the gap that produced today's first-ever CI
failure. The lint job floated on `stable` while everything else was pinned, and a
clippy lint released after the code was written turned a red build into a mystery.
`.mise.toml` pins the same version for mise users; rustup reads this one for everybody
else, so `git clone && cargo build` gets the compiler this was written against. Its
`components` list matters as much as the channel — rustup's minimal profile ships
neither `cargo-fmt` nor `cargo-clippy`, which is the other half of that same CI
failure.
**And fifteen crate descriptions,** taken from each crate's own module docs rather than
invented, because every one of them already described itself in `lib.rs` and the
manifest was the only place that did not know.
Contribution Issue Link
Files count
0
Patches count
1