Thanks for contributing. The best changes here are small, explicit, tested, and
easy to review. AGENTS.md holds the full repository guidelines —
this document is the short path through them.
Install a stable Rust toolchain with Rust 2024 support (see rust-version in
Cargo.toml for the minimum supported version), initialize the vendored
submodules, then run the four checks CI runs:
git submodule update --init --recursive
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo build --all-targets --all-features
cargo test --all-featuresThe bundled example should also run:
cargo run --example basic- Branch from
main— never commit directly to it. If you use theworktreehelper, work insideworktrees/<slug>. - Put each feature area in its own module directory:
mod.rsfor the module root and public surface,types.rsfor substantial types,test.rsfor module-local unit tests. Integration tests belong intests/. - Add a specific variant to the crate error type rather than encoding new failure context into a message string.
- Add or update tests with every behavior change, covering the failure paths.
- Document public items, including
# Errorsand# Panicssections. - Update
README.mdanddocs/in the same commit when behavior, the public API, or usage changes.
Do not add blanket #[allow(...)] attributes, mark tests #[ignore], or relax
lints to get a green run. Fix the cause, or raise the blocker in the pull
request.
Check whether the standard library or an existing dependency already covers the
need. If not, add it with a caret range, only the features you need, gated
behind a Cargo feature when optional, and with a comment saying why it exists.
Run cargo deny check all if you have cargo-deny installed; CI runs it
regardless.
-
cargo fmt --all -- --check -
cargo clippy --all-targets --all-features -- -D warnings -
cargo build --all-targets --all-features -
cargo test --all-features - tests added or updated for behavior changes
- documentation updated for public API, architecture, or usage changes
- the pull request is focused on one logical change
Open pull requests ready for review rather than as drafts, unless the work genuinely must not merge yet — say in the body what has to happen first.
Use concise, imperative subjects scoped to one logical change:
Add retry policy to the client
Document the error taxonomy
Avoid mixing formatting, refactors, and behavior changes unless they are
inseparable. Never commit secrets; .env is git-ignored and new variables are
documented in .env.example with placeholder values.
Good issues include the version or commit, the toolchain, the relevant module or API, a minimal reproduction, the expected and actual behavior, and the commands run. Feature requests should explain the workflow they unlock and the public API shape they imply.
Do not report vulnerabilities through public issues. Follow the process in SECURITY.md.