contribute

Get from landing to first PR.

The gate is strict — and that's a selling point. Here's exactly what CI expects.

the gate — all three must pass
mypy src tests
ruff format --check .
pytest # full suite
 
⚠ Classic trap: mypy src alone passes locally and fails CI. You must include tests.

Start here

Grab a good first issue — pulled live from the GitHub API.

Branch off develop, never main.

Design records live in docs/specs/ — read the spec before changing a subsystem.

CONTRIBUTING.md → Code of Conduct → Security · coordinated disclosure →