For the full human guide see .github/CONTRIBUTING.md.
Nightly Rust toolchain (rust-toolchain.toml) — required for cargo fmt
unstable options.
Tools are provided by nix via direnv. Do not install tools globally.
If you need a new tool, add it to the devshell in flake.nix so
others can reproduce.
Every commit must pass CI independently.
Commit messages follow the seven rules:
- Separate subject from body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how
Fast (every commit):
cargo fmt --all -- --check
cargo clippy --all-targets --keep-going --all-features -- -D warnings
codespellFull (before push):
./contrib/lint.sh
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features \
--document-private-items
./contrib/test_local.sh
nix fmt -- --ci
codespellPer-crate scripts: {crate}/contrib/test.sh, {crate}/contrib/lint.sh.
CI tests both Cargo-minimal.lock and Cargo-recent.lock. After any
dependency change:
bash contrib/update-lock-files.shAdd to PR body: Disclosure: co-authored by <agent-name>
Do not add Co-Authored-By in commits.