Plan-review handoff verification
Use this when a user provides or references an exit handoff for a GitHub issue parked in status:plan-review, especially after iterative adversarial review and approval-state drift cleanup.
Workflow
- Load the canonical planning skill (
issue-planning-mode) first.
- Read the handoff file and extract the asserted state surfaces:
- GitHub issue state and
status:* labels
.planning/plan-approved/<issue>.md marker state
docs/plans/README.md row status
- canonical provider review artifact paths and verdicts
- stated clean next action / do-not-do guidance
- Verify the live GitHub state with
gh issue view <issue> --json state,labels,title,url.
- Verify the local approval marker presence/absence.
- Search
docs/plans/README.md for the issue row and confirm the row status and note match the intended parked state.
- Read or scan the canonical
scripts/review/results/*plan-<issue>-<provider>.md artifacts and extract each verdict.
- Read the local plan header and scan the plan body for stale older rerun evidence (for example a review-artifacts line still saying
r11 MAJOR while canonical artifacts now say r16 MINOR).
- Report the operational state and next valid action. Do not implement, approve, recreate approval markers, or rewrite broad plan content unless the user explicitly asks.
Classification rules
- Operational surfaces are, in order: live GitHub status labels, local approval marker,
docs/plans/README.md row, canonical review artifacts.
- If those surfaces align to
status:plan-review with no approval marker and no fresh MAJOR verdicts, classify the issue as parked/exit-clean for user review.
- If the local plan header/body contains stale historical evidence while the operational surfaces are aligned, report it as non-blocking polish/drift. Do not treat it as approval or implementation authority.
- If a stale approval marker or
status:plan-approved label remains after fresh review evidence says the issue is back in review, perform the governance cleanup from issue-planning-mode instead of merely noting it.
Minimal verification command pattern
Use one script to reduce missed surfaces:
from hermes_tools import terminal, search_files, read_file
import os, json, re
issue = 2460
state = terminal(f"gh issue view {issue} --json state,labels,title,url", timeout=60)
marker_exists = os.path.exists(f".planning/plan-approved/{issue}.md")
readme = search_files(str(issue), target="content", path="docs/plans/README.md", output_mode="content")
for provider in ["Codex", "codex", "gemini"]:
path = f"scripts/review/results/2026-04-23-plan-{issue}-{provider}.md"
# read_file(path) and extract Verdict: APPROVE|MINOR|MAJOR
Then separately scan the plan file for stale older strings such as MAJOR, UNAVAILABLE, or older rerun IDs when the latest artifacts have advanced.
Output pattern
State the result as:
- GitHub issue state and live status labels
- Local approval marker state
- README row state
- Provider artifact verdicts
- Local plan file/header state
- Conclusion: exit-clean vs drift found
- Next valid action and prohibited action
Keep the response short and explicit: if parked for user approval, say no implementation should start yet.
1---2name: plan-review-handoff-verification3description: Verify a parked GitHub issue plan-review handoff across live labels, local markers, README rows, canonical review artifacts, and stale plan-body evidence before reporting next action.4---56# Plan-review handoff verification78Use this when a user provides or references an exit handoff for a GitHub issue parked in `status:plan-review`, especially after iterative adversarial review and approval-state drift cleanup.910## Workflow11121. Load the canonical planning skill (`issue-planning-mode`) first.132. Read the handoff file and extract the asserted state surfaces:14 - GitHub issue state and `status:*` labels15 - `.planning/plan-approved/<issue>.md` marker state16 - `docs/plans/README.md` row status17 - canonical provider review artifact paths and verdicts18 - stated clean next action / do-not-do guidance193. Verify the live GitHub state with `gh issue view <issue> --json state,labels,title,url`.204. Verify the local approval marker presence/absence.215. Search `docs/plans/README.md` for the issue row and confirm the row status and note match the intended parked state.226. Read or scan the canonical `scripts/review/results/*plan-<issue>-<provider>.md` artifacts and extract each verdict.237. Read the local plan header and scan the plan body for stale older rerun evidence (for example a review-artifacts line still saying `r11 MAJOR` while canonical artifacts now say `r16 MINOR`).248. Report the operational state and next valid action. Do not implement, approve, recreate approval markers, or rewrite broad plan content unless the user explicitly asks.2526## Classification rules2728- Operational surfaces are, in order: live GitHub status labels, local approval marker, `docs/plans/README.md` row, canonical review artifacts.29- If those surfaces align to `status:plan-review` with no approval marker and no fresh MAJOR verdicts, classify the issue as parked/exit-clean for user review.30- If the local plan header/body contains stale historical evidence while the operational surfaces are aligned, report it as non-blocking polish/drift. Do not treat it as approval or implementation authority.31- If a stale approval marker or `status:plan-approved` label remains after fresh review evidence says the issue is back in review, perform the governance cleanup from `issue-planning-mode` instead of merely noting it.3233## Minimal verification command pattern3435Use one script to reduce missed surfaces:3637```python38from hermes_tools import terminal, search_files, read_file39import os, json, re4041issue = 246042state = terminal(f"gh issue view {issue} --json state,labels,title,url", timeout=60)43marker_exists = os.path.exists(f".planning/plan-approved/{issue}.md")44readme = search_files(str(issue), target="content", path="docs/plans/README.md", output_mode="content")4546for provider in ["Codex", "codex", "gemini"]:47 path = f"scripts/review/results/2026-04-23-plan-{issue}-{provider}.md"48 # read_file(path) and extract Verdict: APPROVE|MINOR|MAJOR49```5051Then separately scan the plan file for stale older strings such as `MAJOR`, `UNAVAILABLE`, or older rerun IDs when the latest artifacts have advanced.5253## Output pattern5455State the result as:56571. GitHub issue state and live status labels582. Local approval marker state593. README row state604. Provider artifact verdicts615. Local plan file/header state626. Conclusion: exit-clean vs drift found637. Next valid action and prohibited action6465Keep the response short and explicit: if parked for user approval, say no implementation should start yet.