# Contributing

Run the local gates before sending changes:

```powershell
cargo fmt --check
cargo test --locked
cargo clippy --locked --all-targets --all-features -- -D warnings
cargo doc --locked --no-deps
```

Receipts are part of the public contract. Add or rename fields deliberately, and cover behavior changes with CLI tests.

The runner-image manifest schema under `src/manifest.rs` is part of the public contract too. Schema-version-1 fields are additive; breaking changes require advancing `schema_version`. The crate does not ship a baked-in catalog of hosted-runner images — the manifest is the expectation, and the tool verifies whether a host/image matches what that manifest declares.
