Pull Request Standards
Overview
Standards for creating, reviewing, and merging pull requests. All pull requests must pass CI checks, receive at least one approving review, have no unresolved blocking comments, include tests for new features, and update documentation as needed. These rules keep the main branch stable and the review process predictable.
Rules
No Direct Commits to main
Direct commits to main are forbidden. All changes land via pull request. This is a hard project rule — see CLAUDE.md <never> block. Never use --no-verify or any other hook-bypass flag to push past this constraint. Fix the underlying failure instead.
Write Clear PR Titles
Use the same type(scope): description format as commit messages. The title should be a concise summary of the change.
Correct
Incorrect
Write Complete PR Descriptions
Use the format prescribed by .github/PULL_REQUEST_TEMPLATE.md. GitHub auto-fills this when you open a PR — fill in each section. Do not improvise the structure.
Correct
The Summary uses bullets, not prose. The Testing section is a checklist — tick each box once you've run it. If the change does not need version-bump tracking, also confirm a changeset is included (see Include a Changeset When Bumping Versions).
Follow Review Process
Authors and reviewers share responsibility for keeping PRs moving. Authors self-review before requesting feedback and respond within 24 hours. Reviewers provide constructive, timely reviews within 24-48 hours.
Use this checklist when reviewing:
Include a Changeset When Bumping Versions
The repo uses Changesets. CI runs pnpm changeset status --since=origin/main (.github/workflows/ci.yml) — a PR that adds user-facing changes to any published package without a changeset will fail CI.
Add one with:
Pick the affected packages and bump type (patch / minor / major), then commit the generated file under .changeset/. Doc-only or internal-tooling PRs that don't ship to npm can skip this.
Use Squash and Merge
All PRs use Squash and Merge as the merge strategy. This combines all commits into one, keeps main branch history clean, and preserves the PR discussion link. The PR title becomes the squashed commit message — it must follow Commit Standards (type(scope): description).
Before merging, verify:
- All CI checks pass (including
changeset status) - At least one approval
- No unresolved comments
- Branch is up to date with main