Thanks for your interest in contributing! This document explains how we work. The full
engineering rules live in CLAUDE.md — this is the human-friendly summary.
mainis protected. Never push to it directly. Every change lands via pull request with a passing CI run and at least one approving review.- One logical change per PR. Keep them focused and reviewable.
- Document as you go. A PR isn't done until its docs are (see below).
- Be kind. See the Code of Conduct.
git clone https://github.com/zoza1982/cairn.git
cd cairn
cargo build --workspace
cargo test --all-featuresThe Rust toolchain version is pinned in rust-toolchain.toml.
- Open or claim an issue describing the change. For non-trivial design, write an RFC in
docs/rfcs/and get feedback before building. - Branch off
main:git switch -c feat/short-summary(types:feat|fix|docs|refactor|test|chore|perf|ci|build). - Make the change with tests and docs.
- Run local checks (all must pass):
cargo fmt --all cargo clippy --all-targets --all-features -- -D warnings cargo test --all-features cargo doc --no-deps - Run the review gates on your diff before requesting human review: a bug analysis pass and a code review pass (and a security review for anything touching secrets/auth/crypto/exec). Address findings or track them in an issue.
- Open a PR and fill out the template completely.
- Get review + green CI, then squash-merge. Delete your branch.
We use Conventional Commits: type(scope): summary.
feat(s3): add multipart upload with resumable parts
fix(vault): never log decrypted master key
docs(adr): record decision to use WASM for plugins
| You changed… | You must also… |
|---|---|
| Any code | Write a complete PR description |
| A feature / behavior | Update README.md/docs/ and add a CHANGELOG.md entry |
| Public API or modules | Add rustdoc (///, //!) |
| Architecture | Add an ADR in docs/adr/ |
| A non-trivial design | Add an RFC in docs/rfcs/ first |
| A bug | Add a regression test + CHANGELOG.md entry |
Never file security issues publicly. Follow SECURITY.md for private disclosure. Never commit secrets — this is a secrets-handling tool and we hold a high bar.
By contributing, you agree your contributions are dual-licensed under Apache-2.0 OR MIT.