One fast tool replaces pip + virtualenv + pip-tools
Lint + format (Python)
Ruff
One tool, fast, growing rule coverage
Type checker
Pyright (strict)
Strictest available; structural typing aligns with Protocol ports
Test runner
pytest + pytest-asyncio
Python standard; --import-mode=importlib for src/ layout
HTTP test client
httpx
FastAPI's TestClient rides on it
Integration test isolation
testcontainers (Postgres)
Fresh Postgres per run; mirrors prod schema via Atlas
Import-boundary linter
tach
Enforces BC isolation at import time
Pre-commit
pre-commit
Hooks for lint, format, and type-check on commit
Local container runtime
Docker + docker-compose
Postgres + pgvector for local dev
CI
GitHub Actions
Repo on GitHub; standard
Docs site generator
MkDocs Material
Renders these docs, published to GitHub Pages. The version is pinned in exactly two places that must agree, .github/workflows/docs.yml and the MKDOCS variable in the Makefile; this row deliberately names no number, because a third copy is a third thing to drift