docs: closed-not-merged PR reconciliation rules (#51)
Documents and enforces rules for closed-not-merged PR reconciliation, direct-master-push prevention, and issue label cleanup. Rules added: - Explicit definitions for Merged, Landed, Closed-not-merged, and Reconciled. - A PR is done only when Gitea reports it merged or reconciliation proves content is present on master. - Direct push to master is forbidden except as a documented recovery exception. - PRs closed but not merged trigger the reconciliation process. - Branch and worktree cleanup is forbidden until merge or reconciliation is confirmed. - Final reports require PR metadata and Git content verification. Closes #51.
This commit is contained in:
@@ -10,6 +10,7 @@ Rules (llm-project-workflow):
|
||||
author → STOP.
|
||||
- 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. Verify authenticated identity + active profile.
|
||||
@@ -20,9 +21,9 @@ Steps:
|
||||
5. Confirm remote master now contains the merge commit.
|
||||
|
||||
Then run the cleanup template (worktree-cleanup.md):
|
||||
- close/release issue #<n>, remove status:in-progress
|
||||
- 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: reviewer identity, merge result + commit, cleanup done, issue closed.
|
||||
Handoff: reviewer identity, merge result + commit, cleanup done, issue closed, PR metadata state/merged flag/hash, remote master hash & Git content check.
|
||||
```
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Reconcile Closed-Not-Merged PR Prompt
|
||||
|
||||
You are reconciling PR `<pr-number>` in `<repo-name>` which is closed but `merged=false`.
|
||||
|
||||
Rules:
|
||||
|
||||
- Do not delete branches or worktrees before reconciliation is complete.
|
||||
- Compare the PR's exact content to remote `<default-branch>`.
|
||||
- Determine if the content is fully landed, partially landed, or not landed.
|
||||
|
||||
Workflow:
|
||||
|
||||
1. Verify the PR metadata says `state=closed` and `merged=false`.
|
||||
2. Fetch/prune and inspect remote `<default-branch>`.
|
||||
3. If fully landed: comment that it landed, remove `status:in-progress`, close issue, and clean up.
|
||||
4. If partially landed: reopen issue if needed, create corrective PR for missing pieces, do not clean up.
|
||||
5. If not landed: reopen issue/PR, do not clean up.
|
||||
|
||||
Final handoff:
|
||||
|
||||
- PR metadata (state, merged flag, hash)
|
||||
- Git content verification (remote master hash, expected content present or not)
|
||||
- reconciliation decision (fully/partially/not landed)
|
||||
- issue/label state repaired
|
||||
@@ -22,8 +22,7 @@ Act per case:
|
||||
- Local master ahead of remote: confirm the extra commits live on a branch
|
||||
pushed to <remote>, THEN git reset --hard <remote>/master. Verify with
|
||||
`git branch --contains <sha>` first.
|
||||
- PR closed but not merged: re-push the branch, reopen/replace the PR, let an
|
||||
eligible reviewer merge. Do not merge your own.
|
||||
- PR closed but not merged (`merged=false`): stop normal flow and use reconcile-closed-not-merged-pr.md instead.
|
||||
- Branch deleted before merge: recover commits from a local branch/reflog (or
|
||||
git fsck --lost-found), re-push, reopen the PR.
|
||||
- Unauthorized untracked file: do not commit it; leave pre-existing artifacts.
|
||||
|
||||
Reference in New Issue
Block a user