- Lint and format pass (
ruff) - Type check passes (
ty) - Tests pass and new behavior is covered
- Build succeeds (
uv build) if packaging or build config changed - Repo metadata stays consistent across the three surfaces (GitHub description, pyproject
description, profile blurb) if this touches packaging