64 lines
3.7 KiB
Markdown
64 lines
3.7 KiB
Markdown
# Template: merge a PR (eligible merger only)
|
|
|
|
Copy, fill the `<...>` fields, and paste as the task prompt.
|
|
|
|
```text
|
|
Task: merge PR #<pr> for issue #<n> if it is eligible and checks pass.
|
|
|
|
Load the canonical workflow first:
|
|
`skills/llm-project-workflow/workflows/review-merge-pr.md` (task mode: review-merge-pr).
|
|
Final report schema: `schemas/review-merge-final-report.md`.
|
|
|
|
Rules (llm-project-workflow):
|
|
- Only an eligible, NON-author merger merges. If authenticated user == PR
|
|
author → STOP.
|
|
- Review and merge are separate workflow roles. A reviewer approval is not merge authorization.
|
|
- Do not merge unless the PR is open, mergeable, and its checks/review pass.
|
|
- No force-merge, no bypassing branch protections.
|
|
- If the PR is closed but `merged=false`, STOP and run reconciliation. Do not clean up.
|
|
|
|
Steps:
|
|
1. Identity Checklist: Before claiming/working on merge, verify and state:
|
|
- Required identity/profile for this task: merger (allowed to merge PRs)
|
|
- Current authenticated identity (from whoami): <username>
|
|
- Target task role: merger identity (must NOT be the PR author)
|
|
*If the current identity does not match the required role (or is the PR author), STOP. Relaunch/switch to the correct profile first.*
|
|
2. Verify authenticated identity + active profile.
|
|
3. Confirm PR #<pr>: author (not you), state open, mergeable, review approved. Check if PR body uses `Closes #N` or `Fixes #N`; if it uses `Implements #N` or `Refs #N`, manual closing will be needed in step 29.
|
|
4. Capability evidence (#179): cite the exact gitea_resolve_task_capability
|
|
output (or runtime context) proving merge_pr is allowed — a bare
|
|
"capability checks passed" claim is downgraded.
|
|
5. Final live-state recheck (#179), immediately before the merge mutation —
|
|
re-read the live PR and prove:
|
|
- PR still open
|
|
- live head SHA still equals the pinned/reviewed head SHA
|
|
- base branch unchanged
|
|
- no undismissed REQUEST_CHANGES / blocking review state remains
|
|
If any recheck fails → STOP, re-pin, re-validate.
|
|
6. If any gate fails → STOP and report.
|
|
7. Merge with explicit confirmation (e.g. confirmation="MERGE PR <pr>"),
|
|
pinning the reviewed head SHA (expected_head_sha) and, where supported,
|
|
the changed-file set.
|
|
8. Confirm remote master now contains the merge commit (or the expected changes if squash merged).
|
|
*Note: Gitea PR "closed" state is NOT equivalent to "merged". Do not assume a closed PR succeeded without verifying the actual landed changes.*
|
|
|
|
Then run the cleanup template (worktree-cleanup.md):
|
|
- Verify expected file/commit presence on master (post-merge file-presence verification):
|
|
- Run: git fetch <remote> --prune; git checkout master; git pull <remote> master --ff-only
|
|
- Verify that the expected files added/modified in the PR are present on master (or absent if deleted).
|
|
- Alternatively, verify with: git log --oneline -- <expected-file> or git merge-base --is-ancestor <pr-head-sha> master
|
|
- close/release issue #<n>, remove status:in-progress (if it cannot be removed, report why)
|
|
- delete remote branch, remove local branch + worktree folder
|
|
- fetch/prune; confirm main checkout is clean and current (0 0).
|
|
|
|
Handoff: end with a section titled exactly `Controller Handoff` per SKILL.md
|
|
§K (long form — a merge is always high-risk), including the merger role
|
|
fields (Selected PR, Merger eligibility, Pinned reviewed head, Review
|
|
decision, Merge result, Linked issue status, Cleanup status) plus: merge
|
|
commit, PR metadata state/merged flag/hash, remote master hash, and the
|
|
post-merge verification method used & verification results. Reports missing
|
|
the handoff are downgraded (review_proofs.assess_controller_handoff).
|
|
|
|
Review and merge are separate workflow roles. A reviewer approval is not merge authorization.
|
|
```
|