Contributing
Branch model
main— always shippablev2/...— long-lived feature branches for major rewritesfeature/...,fix/...— short-lived topic branches
PR target is main unless the work is part of an in-flight v2 effort.
Commit messages
Conventional-ish but not strict. The first line is a sentence; the body explains why. Examples from the history:
Add score-first mask generation to SAM3.1 video labeling pipelineexperiment: float16 DETR componentsexperiment: pre-compute NMS too — zero ML ops in timing loop
Code style
- Python: ruff handles everything. Don't fight it.
- TypeScript: ESLint + Prettier.
- No comments unless the why is non-obvious.
- No backwards-compat shims, dead code, or "future use" stubs. If it's not used now, it doesn't belong.
What we ship
- A change should land as one PR. Splitting a refactor into 12 PRs is just churn.
- A bug fix is a bug fix. Don't fold cleanups into it.
- No new docs files unless they earn their keep. Update existing pages first.
Testing expectations
- New endpoints: integration test that hits a real DB and asserts the happy path + at least one error path.
- New workflow blocks: unit test the
run()method against mock inputs. - UI changes: manual smoke test (open the page, do the thing); Playwright if it's a critical path.
Reviewing
PRs need one approving review. Reviewers should check:
- The change does what the description says
- Tests cover the new behavior
- No secrets, no commented-out code, no
console.log/printleft behind - Pre-commit passes locally (CI will catch it otherwise)