A lint policy copied fourteen times, and an MSRV nobody had run

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 Author
Bassam Ismail
Files count
0
Patches count
1