just init # install all deps (including dev extras)
just doctor # verify your environment- Create a feature branch from
main - Make your changes
- Run quality gates:
just check - Commit with a descriptive message
- Open a pull request
All of these must pass before merging:
just fmt # format code with ruff
just lint # lint with ruff
just typecheck # type check with mypy (strict mode)
just test # run all tests with pytestRun them all at once with just check.
- Formatter: ruff (100 char line length)
- Linter: ruff (E, F, I, N, W, UP rules)
- Type checker: mypy (strict —
disallow_untyped_defs) - Imports: sorted by isort (via ruff), first-party =
myapp
Use the scaffold command:
just scaffold myserviceThis creates the full service directory structure with all required files. Then customize the generated schemas, API, CLI, and storage adapters.
See docs/extending.md for the full guide.
- Every service has its own
tests/directory - Tests use
tmp_pathfixtures for isolation — no shared state - Run a single service's tests:
just test src/myapp/services/example/tests/ - Run with coverage:
just cov
Use conventional-style prefixes:
feat:new featurefix:bug fixdocs:documentation onlystyle:formatting (no logic change)refactor:code restructuringtest:adding or updating testschore:maintenance tasks
GitHub Actions runs the same quality gates (just check) on every push and PR, across Python 3.11, 3.12, and 3.13. Formatting fixes are auto-committed on PRs.