113 lines
3.6 KiB
Markdown
113 lines
3.6 KiB
Markdown
# Review-merge controller handoff schema
|
|
|
|
**Task mode:** `review-merge-pr`
|
|
|
|
End every review/merge run with a section titled exactly `Controller Handoff`.
|
|
Use this canonical field set. Do not omit fields — use `none` or
|
|
`not verified in this session` where appropriate.
|
|
|
|
Do not use legacy fields: `Pinned reviewed head`, `Scratch worktree used`,
|
|
`Workspace mutations`, `Mutations: None` (when mutations occurred).
|
|
|
|
```md
|
|
## Controller Handoff
|
|
|
|
- Task:
|
|
- Repo:
|
|
- Role:
|
|
- Identity:
|
|
- Active profile:
|
|
- Runtime context:
|
|
- Selected PR:
|
|
- Linked issue:
|
|
- Eligibility class:
|
|
- Queue ordering policy:
|
|
- Inventory pagination proof:
|
|
- Earlier PRs skipped:
|
|
- Candidate head SHA:
|
|
- Reviewed head SHA:
|
|
- Target branch:
|
|
- Target branch SHA:
|
|
- Already-landed gate:
|
|
- Author-safety result:
|
|
- Prior request-changes state:
|
|
- Review worktree used:
|
|
- Review worktree path:
|
|
- Review worktree inside branches:
|
|
- Review worktree HEAD state:
|
|
- Review worktree dirty before validation:
|
|
- Review worktree dirty after validation:
|
|
- Baseline worktree used:
|
|
- Baseline worktree path:
|
|
- Files reviewed:
|
|
- Validation:
|
|
- Official validation integrity status:
|
|
- Terminal review mutation:
|
|
- Review decision:
|
|
- Merge preflight:
|
|
- Merge result:
|
|
- Linked issue status:
|
|
- Main checkout branch:
|
|
- Main checkout dirty state:
|
|
- Main checkout updated:
|
|
- File edits by reviewer:
|
|
- Worktree/index mutations:
|
|
- Git ref mutations:
|
|
- MCP/Gitea mutations:
|
|
- Review mutations:
|
|
- Merge mutations:
|
|
- Cleanup mutations:
|
|
- External-state mutations:
|
|
- Read-only diagnostics:
|
|
- Blockers:
|
|
- Current status:
|
|
- Safe next action:
|
|
- Safety statement:
|
|
```
|
|
|
|
### Already-landed handoff overrides
|
|
|
|
When eligibility class is `ALREADY_LANDED_RECONCILE_REQUIRED`:
|
|
|
|
- Reviewed head SHA: `none`
|
|
- Review worktree used: `false`
|
|
- Review worktree path: `none`
|
|
- Review decision: `none`
|
|
- Merge result: `none`
|
|
|
|
Identity format: `username / profile` (not personal email unless required — #305).
|
|
|
|
### Queue-status-only runs (no selected PR)
|
|
|
|
When the run inventories the queue but selects no PR for review:
|
|
|
|
- Selected PR: `none`
|
|
- Already-landed gate, Author-safety result, Merge preflight: `not applicable` or `not run` — never `passed`
|
|
- Review worktree detail fields: `not applicable` or `none` when Review worktree used is `false`
|
|
- Blockers must not be `none` if the narrative says all open PRs are conflicted, blocked, or unverified
|
|
- Inventory pagination proof must cite final-page metadata, not default page-size assumptions
|
|
|
|
Verifier: `review_proofs.assess_queue_status_report()`.
|
|
|
|
Narrative final report and controller handoff must agree on eligibility class,
|
|
candidate/reviewed head SHA, mutation state, worktree usage, review decision,
|
|
terminal review mutation, merge result, and linked issue status.
|
|
|
|
### Proof-backed claims (#395)
|
|
|
|
Proof-sensitive claims must cite explicit command/tool evidence in the report
|
|
or structured MCP metadata — not narrative alone:
|
|
|
|
- **Inventory complete:** `has_more=false`, `is_final_page=true`,
|
|
`inventory_complete=true`, and/or `total_count` from `gitea_list_prs`.
|
|
- **Skipped earlier PRs:** merge-simulation command output, conflict file list,
|
|
or live `gitea_get_pr_review_feedback` / mergeability fields.
|
|
- **Baseline validation:** baseline worktree path, baseline target SHA,
|
|
dirty-before/after, exact command, exact result.
|
|
- **Master integration:** exact `git merge` / `git rebase` command and exit status.
|
|
- **Cleanup:** final `git worktree list` (or remove commands) proving session
|
|
worktrees were removed.
|
|
|
|
When a claim relies on prior-session blocker state or MCP metadata only, label
|
|
the proof source explicitly (`command`, `MCP metadata`, `prior blocker`,
|
|
`not checked`). Do not use `live proof` without that classification. |