This is the checklist a PR must satisfy to get merged into test. Maintainers
use it during review.
- PR is opened against
test, notmain. - The branch name has a meaningful prefix:
feat/,fix/,docs/,refactor/,chore/,ci/,test/,perf/.
- PR title follows Conventional Commits.
Example:
feat(engine): add pagination to the trades endpoint. - Description explains what changed and why, not just the diff.
- Linked issue if one exists (
Closes #123).
- One logical change per PR. Don't bundle unrelated refactors.
- Public API / interface changes are called out explicitly in the description.
- Breaking changes use
!in the title and aBREAKING CHANGE:footer.
- Follows the project's structure and conventions (see architecture.md).
- No new direct dependencies without a one-line justification in the PR.
- No secrets, credentials, or large binaries committed.
- New behavior has tests; bug fixes have a regression test.
- Lint + tests pass locally (the same commands CI runs):
cd engine && uv run ruff check . && uv run pytestcd web && npm run lint && npm run build.
- If you changed an engine API endpoint or model, the OpenAPI schema and
generated TypeScript types are regenerated and committed:
cd engine && uv run python export_openapi.pycd web && npm run gen:api. - Any DB schema change ships an Alembic migration.
- README / docs updated if user-facing behavior changed.
-
CHANGELOG.mdupdated under[Unreleased]if notable.
- All required checks are green.
- No skipped jobs without an explanation in the PR.
- Maintainers merge with a merge commit (not squash). The PR title becomes
the merge commit message (so it must be a valid Conventional Commit), and
every commit on the branch is preserved on
test. - The automated
test → mainPR picks the change up on the next green run.