The main branch contains current work. The legacy branch is under
long-term maintenance and may receive active work.
cargo +nightly fmt- formatcargo clippy -p <crate> --all-features --all-targets- lint with featurescargo clippy -p <crate> --no-default-features --all-targets- lint withoutcargo t -p <crate>- test specific crate
Pre-push: clippy (both feature sets where applicable) + fmt. Never use cargo check/build.
These checks apply before any push — new commits, rebases, cherry-picks, etc.
A Claude hook in .claude/settings.json runs .claude/hooks/pre-push.sh
before every git push. The push is blocked if any check fails. The checks:
cargo +nightly fmt -- --checkcargo clippy --workspace --all-targets --all-features -- -D warningscargo clippy --workspace --all-targets --no-default-features -- -D warningsRUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps
Clippy and doc warnings are hard failures.
- Functional combinators over imperative control flow
let elsefor early returns, avoid nesting- No glob imports; group imports from same crate; no blank lines between imports
- Private by default,
pub(crate)for internal,pubfor API only; neverpub(super) thiserrorfor library errors,eyrefor apps, neveranyhowtracingfor instrumentation: instrument work items not long-lived tasks;skip(self)on methods- Builders for structs with >4 fields or multiple same-type fields
- Tests: fail fast with
unwrap(), never returnResult; unit tests inmod tests - Rustdoc on all public items with usage examples; hide scaffolding with
# // SAFETY:comments on all unsafe blocks
All crates use signet- prefix. Features exist in:
signet-blobber:test-utilssignet-node-config:test_utils
Other crates (signet-node, signet-node-types, signet-rpc, signet-db, signet-block-processor, signet-genesis, signet-node-tests) have no feature flags — lint with --all-features only.