Contributing
Branching model
devis the working branch. Feature work and PRs targetdev.mainis a release branch. It only receives promotion merges fromdev(therelease: vX.Y.Zcommits you see).- Do not branch new feature work from
main— always branch fromorigin/dev.
git fetch origin
git checkout -b feat/my-feature origin/dev
# ... work ...
git commit -s -m "feat: my feature" # -s for DCO sign-off
git push -u origin feat/my-feature
gh pr create --base dev
Tests
# Backend unit tests
apps/backend/.venv/bin/pytest tests/ -m "not slow"
# Frontend typecheck
npm -w apps/frontend-web run typecheck
# Postgres acceptance (needs docker)
apps/backend/.venv/bin/pytest tests/postgres/ -m postgres -v
CI runs all of these on every PR. Don't ship red.
Style
- Python:
ruff check apps/backend testsmust pass - TypeScript: ESLint + Prettier (no custom rules; defaults work)
- Commits follow Conventional Commits (
feat:,fix:,chore:,docs:,refactor:,test:) - DCO sign-off required (
git commit -s)
What we welcome
- Bug fixes with a regression test
- New provider integrations (open an issue first to align on the abstraction)
- Documentation improvements
- Performance work backed by a benchmark
What we'll redirect
- Big architectural pivots — open an issue and let's design first
- Adding new top-level features — open an issue, we'll roadmap it
- Adding telemetry or analytics — we don't, by policy
Code of Conduct
See CODE_OF_CONDUCT.md. Be kind, assume good faith, escalate to maintainers if you encounter problems.