# Contributing to `sealed`
- Ensure you're using Rust 1.71.0 to develop and test.
This is required because we test macro error messages, which are not stable across
compiler versions. Pinning the version everyone uses when developing `sealed` was the
solution I found. If you know of a better solution,
[let me know](https://github.com/jmg-duarte/sealed-rs/issues/new)!
- If you're adding new functionality, add tests to the new functionality and existing
ones, ensuring they all play nice with each other!
- If you're fixing existing functionality, start by adding a minimal reproducible
example as a test and fix the code until you achieve the desired behavior.
- `README.md` is generated from the crate-level docs in `src/lib.rs` using
[`cargo-rdme`](https://github.com/orium/cargo-rdme). If you change the doc comments
at the top of `src/lib.rs`, run `cargo rdme` (`cargo install cargo-rdme` if you don't
have it) to regenerate the README, and commit the result. CI checks the two stay in
sync via `cargo rdme --check`.
- `Cargo.toml`'s `version` and `rust-version` are the source of truth for the crate
version and MSRV. If you bump either, also update every place it's echoed
(`rust-toolchain`, this file, `.github/workflows/ci.yml`, and the MSRV badge /
`sealed = "x.y"` example in `src/lib.rs`'s doc comment). Run
`.github/scripts/check-versions.sh` to verify they all agree; CI runs it too.
Have fun!