Skip to content

feat(claude): reviewer notes-disposition panel — post on LGTM-with-notes, consume on the next review turn #103

Description

@gingur-bot

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:

  1. 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.
  2. 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).
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-taskagent-implementable task

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions