Thanks for your interest in contributing. This project is early and the data model/API surface is still changing, so it's worth opening an issue to discuss larger changes before investing time in a PR.
Follow the Setup section of the README. In short:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -r requirements-dev.txt
cp .env.example .env
docker compose up -d postgres
alembic upgrade headruff check . # lint
pytest # tests (needs postgres up)If you changed any SQLAlchemy models, generate a migration:
alembic revision --autogenerate -m "describe the change"requirements.in / requirements-dev.in are the source of truth (loose,
hand-edited); requirements.txt / requirements-dev.txt are fully pinned
lockfiles generated from them, for reproducible installs. Don't hand-edit
the .txt files — edit the .in file and recompile:
pip install uv # one-time, any Python version
uv pip compile requirements.in -o requirements.txt --python-version 3.12
uv pip compile requirements-dev.in -o requirements-dev.txt --python-version 3.12 --constraint requirements.txtThen reinstall (pip install -r requirements.txt -r requirements-dev.txt) and
run the test suite before committing the regenerated lockfiles alongside your
.in change.
- Keep PRs focused — one logical change per PR is easier to review.
- Add or update tests for behavior you change.
- Use the PR template; link the issue it addresses if there is one.
- Security-sensitive changes (auth, access control, document storage) get extra scrutiny — see SECURITY.md for the project's security model.
Use the issue templates under .github/ISSUE_TEMPLATE/. For security
vulnerabilities, see SECURITY.md instead of opening a public
issue.
This project follows the Code of Conduct. By participating, you're expected to uphold it.