An LGTM review with non-blocking notes currently strands them in the review body. Give each note a one-tap follow-up path: a multi-select disposition panel on the PR, consumed by the next review turn (fired by tick → wake → assignment).
Context: this task comes from ask #98. Depends on its sibling tasks (draft-as-review-signal; wake edited-path PR carve-out) — implement last. Implement after #96 merges.
Changes to actions/claude.review/prompt.md:
- Posting (LGTM-with-notes path only): after the LGTM review +
gh pr ready + operator review request, post ONE conversation-tab panel comment on the PR as the turn's last action — the anchored <!-- claude:action-panel --> marker; per non-blocking note (numbered N1, N2, … with the note text inline) two boxes: - [ ] **N<i>: file as follow-up ask** and - [ ] **N<i>: address in this PR**; "tick all that apply, then Submit" copy; final - [ ] **Submit** — tick last to send your selection. Panel copy must state that merging the PR closes the window. Skip the panel entirely when the task issue is missing or closed — notes stay in the review body.
- Consumption (reconcile, before anything else): when the newest bot panel on the PR is live and ticked, this turn is a disposition turn — handle it and do NOT produce a fresh review:
- Notes ticked "file as follow-up ask" → create one well-formed ask issue per note on this repo (label
claude-ask), self-contained: PR + task links, the note text, file pointers, why it was deferred. Issue creation only — never code.
- Notes ticked "address in this PR" (both boxes ticked on one note → fix in PR wins) → re-assign the bot on the task issue (remove-then-add, like wake's assign step) — fires a normal implement turn. The reviewer never writes code.
- Defuse the panel (PATCH marker →
<!-- claude:action-panel:done -->), and the static record MUST preserve each note's text and disposition verbatim (✔ N1 — fix in PR: <note text> / ✔ N2 — filed as ask: #<n>) — the implement turn reads this record as its work order.
- End state: any fix-in-PR disposition → leave the PR draft (the kickoff drafted it; draft is the merge guard while the fix is pending). Ask-only dispositions → restore ready (
gh pr ready): the LGTM stands.
- End with one PR comment recording actions taken (asks filed with links; implement turn fired). PR merged/closed before consumption → moot; nothing fires (accepted window).
- Hard limits section: add the explicit disposition-path carve-out to "never assign / never label / never create issues" — re-assigning the bot on the task issue and creating labeled follow-up asks are allowed there and only there.
Changes to actions/claude.implement/prompt.md:
4. New reconcile branch: when the turn was fired for a notes disposition — the task's PR carries a <!-- claude:action-panel:done --> disposition record with fix-in-PR notes newer than your last activity — that record is the work order. Follow the existing follow-up-turn mechanics (merge base first, surgical fixes, push, summary comment). If a disposition note cannot be fixed this turn, file it as a follow-up ask (same well-formed shape as above) and say so in the summary.
Acceptance criteria:
- LGTM-with-notes review is followed by a disposition panel matching the format above; plain LGTM (no notes) and blocking-findings reviews post no panel; missing/closed task issue posts no panel.
- Panel tick + Submit → exactly one review turn (the wake carve-out task's mechanics) that: files well-formed asks for "ask" ticks, re-assigns the bot on the task issue for "fix" ticks, defuses the panel preserving note text + dispositions, sets the correct end state (draft iff any fix-in-PR), posts one recording comment, and submits no review.
- Both-boxes-ticked note is treated as fix-in-PR.
- Implement prompt contains the disposition work-order branch including the file-the-ask fallback.
- Prompt-only change set: no workflow or action.yml edits in this task.
An LGTM review with non-blocking notes currently strands them in the review body. Give each note a one-tap follow-up path: a multi-select disposition panel on the PR, consumed by the next review turn (fired by tick → wake → assignment).
Context: this task comes from ask #98. Depends on its sibling tasks (draft-as-review-signal; wake edited-path PR carve-out) — implement last. Implement after #96 merges.
Changes to
actions/claude.review/prompt.md:gh pr ready+ operator review request, post ONE conversation-tab panel comment on the PR as the turn's last action — the anchored<!-- claude:action-panel -->marker; per non-blocking note (numbered N1, N2, … with the note text inline) two boxes:- [ ] **N<i>: file as follow-up ask**and- [ ] **N<i>: address in this PR**; "tick all that apply, then Submit" copy; final- [ ] **Submit** — tick last to send your selection. Panel copy must state that merging the PR closes the window. Skip the panel entirely when the task issue is missing or closed — notes stay in the review body.claude-ask), self-contained: PR + task links, the note text, file pointers, why it was deferred. Issue creation only — never code.<!-- claude:action-panel:done -->), and the static record MUST preserve each note's text and disposition verbatim (✔ N1 — fix in PR: <note text>/✔ N2 — filed as ask: #<n>) — the implement turn reads this record as its work order.gh pr ready): the LGTM stands.Changes to
actions/claude.implement/prompt.md:4. New reconcile branch: when the turn was fired for a notes disposition — the task's PR carries a
<!-- claude:action-panel:done -->disposition record with fix-in-PR notes newer than your last activity — that record is the work order. Follow the existing follow-up-turn mechanics (merge base first, surgical fixes, push, summary comment). If a disposition note cannot be fixed this turn, file it as a follow-up ask (same well-formed shape as above) and say so in the summary.Acceptance criteria: