Close Progress PR
Contract
Prereqs:
- •Run inside the target git repo with a clean working tree.
- •
gitandghavailable onPATH, andgh auth statussucceeds. - •Target PR body contains a
docs/progress/...link under## Progress(preferred; notNone), or you pass--progress-file, or the progress file contains the PR URL. - •If the progress is implemented via multiple PRs (stacked/split), run this on the final PR when the progress should be marked
DONE.
Inputs:
- •PR number (or current-branch PR).
- •Optional: progress file under
docs/progress/referenced by the PR (use--progress-filewhen PR body is missing/ambiguous). - •Optional:
--keep-branchto keep the remote head branch after merge.
Outputs:
- •Progress file finalized (
Status: DONE), moved todocs/progress/archived/, and indexed indocs/progress/README.md. - •PR merged (default merge commit) and head branch deleted (remote; best-effort).
- •PR body
## Progresslink patched to point to base branch (survives branch deletion).
Exit codes:
- •
0: success - •non-zero: missing progress link/file, validation failures, or git/gh command failures
Failure modes:
- •Deferred checklist items missing
Reason:(fail-fast). - •Unchecked checklist items containing invalid
~~(fail-fast; must be full-line- [ ] ~~...~~). - •Progress file cannot be located or moved (path mismatch, conflicts).
- •PR merge blocked (draft/checks failing/permissions).
- •PR is not progress-tracked (
## ProgressisNoneor missing); useclose-feature-prinstead.
Setup
- •Ensure
gh auth statussucceeds.
Key rule: Progress links must survive branch deletion
After merge, GitHub often deletes the head branch. Any PR body link like:
- •
https://github.com/<owner>/<repo>/blob/<head-branch>/docs/progress/...
will break.
Patch the PR body ## Progress link to point to the base branch (usually main) after merge:
- •
https://github.com/<owner>/<repo>/blob/<base-branch>/docs/progress/archived/<file>.md
Key rule: Planning PRs should link to the implementation PR
If the progress file references a planning PR (explicit - Planning PR: or a docs-only progress PR under Links -> PR), ensure that planning PR body includes:
- •
## Implementation PRs(preferred), or legacy## Implementation - •A link to this PR (append if missing; do not overwrite existing entries)
Workflow
- •Identify the PR number
- •Prefer current branch PR:
gh pr view --json number -q .number
- •Prefer current branch PR:
- •Preflight
- •Ensure working tree is clean:
git status --porcelain=v1should be empty - •Ensure checks pass (optional but recommended):
gh pr checks <pr> - •If PR body includes
Open Questionsand/orNext Stepsand they are not already- None, update them to the latest status before merge (resolve questions or confirm with the user, check off completed steps, link follow-ups).
- •Ensure working tree is clean:
- •Locate the progress file
- •Prefer parsing the PR body
## Progresslink and extractingdocs/progress/... - •If missing, fallback: search by PR URL inside
docs/progress/:- •
pr_url="$(gh pr view <pr> --json url -q .url)" - •
rg -n --fixed-string "$pr_url" docs/progress -S
- •
- •Prefer parsing the PR body
- •Finalize progress
- •Update the progress file:
- •Auto-defer unchecked checklist items under
## Steps (Checklist)by marking them~~...~~(excluding Step 4 “Release / wrap-up”)- •Pass:
- [x] ... - •Auto-fix:
- [ ] ...→- [ ] ~~...~~ - •Fail: unchecked item contains
~~but is not full-line- [ ] ~~...~~
- •Pass:
- •For intentionally deferred / not-do items (Steps 0–3), keep the checkbox unchecked, include an explicit
Reason:, and mark the item text with Markdown strikethrough (use- [ ] ~~like this~~) - •Set Status to
DONE - •Update the
Updateddate to today - •Set
Links -> PRto the PR URL - •Ensure
Links -> DocsandLinks -> Glossaryare Markdown links (not backticks) that resolve to existing files - •If there are no related docs for this PR, set
Links -> DocstoNone(do not guess a random file)
- •Auto-defer unchecked checklist items under
- •Move it to
docs/progress/archived/<file>.mdif not already archived - •Update
docs/progress/README.md(move row to Archived; keep Archived sorted newest-first byDate; set PR link to[#<number>](<url>); best-effort if table format differs)
- •Update the progress file:
- •Commit and push these changes to the PR branch
- •Merge and delete branch
- •Default merge method: merge commit
- •
gh pr merge <pr> --merge - •Best-effort delete remote head branch:
- •
git push origin --delete <headRefName>
- •
- •Post-merge: patch PR body links to base branch
- •Get base branch:
gh pr view <pr> --json baseRefName -q .baseRefName - •Update
## Progressto:- •
https://github.com/<owner>/<repo>/blob/<baseRefName>/docs/progress/archived/<file>.md
- •
- •Get base branch:
- •Post-merge: patch planning PR (when present)
- •Extract planning PR from the progress file (
Links -> Planning PRwhen present; otherwise infer from the pre-closeLinks -> PRif it points to a docs-only planning PR) - •Ensure the planning PR body contains:
- •
## Implementation PRs(preferred) or legacy## Implementation- •Includes
- [#<feature_pr_number>](<feature_pr_url>)(append if missing; do not overwrite existing entries)
- •Includes
- •
- •Extract planning PR from the progress file (
Optional helper script
- •Use
$CODEX_HOME/skills/workflows/pr/progress/close-progress-pr/scripts/close_progress_pr.shin this skill folder to run a deterministic version of steps 3–8. - •If
$CODEX_HOME/skills/workflows/pr/progress/close-progress-pr/scripts/close_progress_pr.shfails, attempt to fix the underlying cause (prefer fixing the script when it's a script bug, otherwise fix the documented prerequisites/workflow), re-run it, and explicitly report whether the fix succeeded.