Thanks for taking the time. A few short conventions keep the project consistent.
CI runs four jobs. Match them locally before pushing:
cargo fmt --all --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo audit # honours .cargo/audit.tomlRun cargo fmt --all (without --check) to apply formatting. The --locked flag is mandatory — CI refuses to update Cargo.lock.
Commit messages and PR titles follow Conventional Commits:
feat: add new strategy hook
fix(reactor): handle empty event batch
chore(deps): bump tokio
Allowed verbs: feat, fix, chore, build, ci, docs, style, refactor, perf, test, revert. Optional scope in parentheses; ! after the scope signals a breaking change.
The PR title check is enforced by .github/workflows/conventional-commits.yml. Individual commits inside a PR are not enforced (PRs are squash-merged), but matching the convention there too makes git log more useful.
Dependabot opens weekly PRs (Monday 08:00 UTC) for cargo and github-actions. Patch bumps are grouped into a single PR per ecosystem; minor bumps land individually. Review the changelog before merging minors.
If you add a new direct dependency, prefer the existing [workspace.dependencies] table so all crates pick the same version. Default to --no-default-features for crates with optional TLS / runtime backends.
cargo audit is part of CI. When cargo audit reports a finding we cannot fix from this side of the dependency tree, add an entry to .cargo/audit.toml with:
- the fixed-version range cited from the advisory,
- the specific upstream blocker (which crate's bump is gated),
- an honest residual-risk note for the keeper's deployment shape — no rationalising.
Re-evaluate the entire ignore list on every stellar-rpc-client or soroban-sdk dependabot bump; most current ignores will clear when those move to rustls 0.22+.
Open an issue first for anything that touches the strategy contract, the engine/keeper boundary, or the metric vocabulary. These cost more to undo than they cost to discuss up front. Small fixes, doc edits, and dependency bumps can go straight to PR.