The canonical ship checklist. Mirrors the BLOCKING rules in RULES.md but ordered as a runbook.
If any step fails, the PR stays in draft until fixed.
- Branch name follows
feat/,fix/,chore/,docs/,ci/,refactor/. - Reference an issue in the PR body:
Closes #N,Fixes #N, orRelated to #N. CI gate:.github/workflows/pr-issue-link.yml.
git diff --stat origin/main...HEADZero diff → close the branch. Don't ship a no-op.
pnpm -F @vllnt/ui exec eslint <changed files>
pnpm -F @vllnt/ui exec tsc --noEmit --project tsconfig.build.jsonAll four must be green at HEAD:
pnpm -F @vllnt/ui lint
pnpm -F @vllnt/ui exec tsc --noEmit --project tsconfig.build.json
pnpm build
pnpm test:onceTouched-file passes alone are not ship-OK. If tsc is red package-wide, the PR is red package-wide.
For UI behavior changes:
pnpm -F @vllnt/ui test:visualPlus, paste in the PR body one of:
- The exact verification command + its output, or
- A screenshot / recording from the current head.
Bare ticked checkboxes don't count.
pnpm -F @vllnt/ui exec tsx scripts/check-story-coverage.ts
pnpm -F @vllnt/ui exec tsx scripts/verify-stories.tsThese also run in CI (storybook.yml). Run them locally first.
After your final push, rewrite the PR body so it matches the current head:
- Validation commands actually run on this commit.
- Screenshots / recordings from this commit.
- CI status as-of-now.
- Listed components match the actual diff.
Stale claims block ship.
If the change is user-facing, add an entry under [Unreleased] in packages/ui/CHANGELOG.md. Group as Added / Changed / Fixed / Deprecated / Removed.
Only after steps 1–7 pass:
gh pr readyWatch CI through to green. If a check fails:
- Diagnose the root cause (don't bypass with
--no-verifyoreslint-disable). - Push a fix commit on the same branch.
- Re-run step 6.
If Codex CLI is available + OPENAI_API_KEY is set, run it and include findings.
If not available, omit the section entirely. Don't paste "Codex unavailable" boilerplate. (R7)
- ❌ "Targeted lint/tests passed; package-wide is red on pre-existing issues" → fix or escalate, don't normalize.
- ❌ Marking ready with stale PR body claims.
- ❌ Marking ready with zero diff vs
main. - ❌ Empty
## Manual verificationsection. - ❌ Skipping visual regression for "just a style tweak."
- ❌ Suppressing lint/typecheck errors instead of fixing the source.