Accept PR
Input: PR number or URL (required). Default merge mode: rebase.
- Guardrails
- Must end on
main (or repo default branch if no main).
git status -sb clean before/after. No uncommitted changes.
- If PR is draft, has conflicts, or base branch !=
main: stop + ask.
- If PR is from a fork and you can’t push: stop + ask.
- Capture context
START_BRANCH="$(git branch --show-current)"
gh pr view <PR> --json number,title,author,baseRefName,headRefName,isDraft,mergeable,maintainerCanModify
- Skim:
gh pr view <PR> --comments and gh pr diff <PR>
- Checkout + suggested fixes
gh pr checkout <PR>
- Apply fixes (and tests if needed). Keep edits minimal; follow repo conventions.
- Ensure change/feature/regression is well-tested. If no tests exist, do the manual checks the repo expects and note it.
- Commit with explicit paths (no
git add .), then push: git push origin HEAD
- Changelog (and thank contributor)
- Edit
CHANGELOG.md (or project changelog file).
- Add entry under the top “Unreleased”/latest section (match existing style).
- Include PR + thanks, e.g.:
- <short change> (#<num>) — thanks @<author>
- Commit + push changelog if it changed.
- Lint
- Run repo linter/gate (prefer existing scripts; fix until green).
- If there’s no obvious lint target, search:
rg -n "lint|biome|eslint|swiftlint|ruff" package.json Makefile scripts -S
- Merge (then delete PR branch)
- Prefer rebase merge:
gh pr merge <PR> --rebase --delete-branch
- If rebase is disallowed, fallback to repo preference (
--merge or --squash).
- Sync
main + exit clean
git checkout main || git checkout "$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')"
git pull --ff-only
- Verify merged:
gh pr view <PR> --json mergedAt,mergeCommit
git status -sb (clean) + ensure you’re on main.