I recently built cargo-semver-checks, a linter that ensures crates adhere to semantic versioning. This is why and how I built it. Fearless development is a key theme throughout Rust. "If it compiles, it works", fearless concurrency, etc. But there's one aspect of Rust (and nearly all other languages) that isn't entirely fearless yet: cargo update, upgrading the versions of the project's dependenci