Turn review-plan's silent auto-apply into a guided conversation: walk the developer through every team finding, let them Accept, Modify, or Reject each one, and gate the whole analysis behind an opt-out --skip-analysis flag so power users and background runs stay fast.
Read and implement all steps in the plan at docs/plans/add-review-findings-walkthrough.html — Add an interactive findings walkthrough + --skip-analysis flag to review-plan
Run as workflow — launch parallel subagents
Run a workflow to implement the plan at docs/plans/add-review-findings-walkthrough.html — Add an interactive findings walkthrough + --skip-analysis flag to review-plan
add-review-findings-walkthrough.html
docs/plans/add-review-findings-walkthrough.html
Context
The review-plan skill runs a seven-reviewer Agent Team, synthesizes their findings into an “Inline Edits to Apply” table (Step 6), then writes those edits straight into the plan (Step 7). The developer never sees the findings before they land — the only control today is the coarse “review only” vs “update in place” toggle at Step 2.
This plan inserts a developer-in-the-loop walkthrough between synthesis and integration. By default the skill presents an ask-first gate offering to walk through the findings; the developer can decline at the prompt. If they proceed, each finding is triaged individually — Accept, Modify, or Reject — and only the kept edits flow into Step 7. A new --skip-analysis flag bypasses the gate entirely for power users, and because background mode already suppresses every AskUserQuestion, it implies --skip-analysis so unattended runs never block.
The change is contained to the review-plan skill and its synthesis template, plus the usual documentation and version ripple. No other plugin or review pipeline is touched in this plan.
Files to Modify
.claude-plugin/marketplace.jsonmodified bump plan-agent 1.11.0 → 1.12.0- kit/plugins/plan-agent/
CHANGELOG.mdmodified add 1.12.0 entryREADME.mdmodified document --skip-analysis + walkthroughkit/plugins/plan-agent/skills/review-plan/SKILL.mdmodified flag parse, Step 6b, Step 7 wiringkit/plugins/plan-agent/skills/review-plan/references/output-template.mdmodified Source/Rationale column + Triage Outcome
Diagram
Synthesize findingsWalkthrough & AnalysisIntegrate in place| Invocation / mode | Gate prompt | Walkthrough | Edits applied |
|---|---|---|---|
/plan-agent:review-plan plan.html | Shown | If accepted at gate | Accepted / modified only |
| Gate declined (“Review only”) | Shown | Declined — sets review-only mode | None — Team Review appended only |
| Gate “Apply all” | Shown | Bypassed by choice | All proposed (current behavior) |
… --skip-analysis | Skipped | Never runs | All proposed (current behavior) |
… --triage-top 3 | Shown | Top 3 individually, rest batch-accepted | Accepted / modified only |
… --background | Skipped | Never runs (implied) | All proposed |
| Review-only output mode | Skipped | Nothing to triage | None |
Steps
--skip-analysis and --triage-top <N> flags in review-plan/SKILL.md.
Verify
--background detection: detect a --skip-analysis token (set skip_analysis = true) and a --triage-top <N> token (capture the integer N; default unset = full per-finding triage), strip both before further parsing, and state that background_mode == true forces skip_analysis = true. Re-read SKILL.md and confirm all of these are present.## Background mode section.
Verify
## Background mode stating --skip-analysis is implied and the Step 6b walkthrough never runs unattended. Confirm the bullet names --skip-analysis and references Step 6b.Step 6b — Walkthrough & Analysis between Synthesize (Step 6) and Integrate (Step 7).
Verify
### Step 6b defines: (a) skip when skip_analysis, background_mode, or output_mode == "review only"; (b) the ask-first gate (AskUserQuestion: “Walk through findings” / “Apply all” / “Review only”) — choosing “Review only” sets output_mode = "review only", so Step 7 appends the Team Review without applying any edits; declining the gate is not equivalent to --skip-analysis; (c) a per-finding triage loop over the “Inline Edits to Apply” rows, batched ≤4 findings per AskUserQuestion call, each Accept / Modify / Reject; (d) Modify marks the finding for a single post-walkthrough edit pass (not inline free-text) where the developer revises the kept edits in the plan directly; (e) --triage-top <N> caps individual triage to the N highest-risk findings and batch-accepts the remainder (default unset = full per-finding; ignored when the walkthrough is skipped); (f) it produces an accepted_edits list (accepted as-is + revised-modified) consumed by Step 7. Confirm all of these appear.accepted_edits and record triage outcomes.
Verify
accepted_edits when the walkthrough ran. The full-table fallback (current behavior) fires only when the walkthrough was bypassed — --skip-analysis, background mode, or the “Apply all” gate choice. Declining the gate (“Review only”) is not a fallback case: it sets output_mode = "review only", so Pass 1 is skipped entirely and Pass 2 still appends the Team Review. Step 7 Pass 2 (the appended Team Review <details>) gains a triage-outcome summary listing accepted / modified (with revised content) / rejected findings. Confirm the fallback clause, the declined-gate clause, and the triage record are all documented.output-template.md with a Source / Rationale column and a Triage Outcome subsection.
Verify
references/output-template.md: the “Inline Edits to Apply” table has a Source / Rationale column (reviewer + why), and a “Triage Outcome” subsection placeholder exists beneath it for Step 7 Pass 2 to fill.--skip-analysis and the walkthrough in the plan-agent README.
--background is already documented.Verify
--skip-analysis and --triage-top <N> to the review-plan invocation examples and a short subsection describing the ask-first gate, per-finding triage, the post-walkthrough edit pass, and the background-implies-skip rule. grep -n "skip-analysis" kit/plugins/plan-agent/README.md returns the new example and description.1.12.0 and add a CHANGELOG entry.
marketplace.json value is what ships.Verify
.claude-plugin/marketplace.json change plan-agent version 1.11.0 → 1.12.0 (minor: new flag + new interactive step). Add a ## 1.12.0 entry to kit/plugins/plan-agent/CHANGELOG.md covering the walkthrough, the gate default, the --skip-analysis and --triage-top flags, per-finding triage with a post-walkthrough edit pass, and the background interaction. Confirm marketplace.json parses as valid JSON and the CHANGELOG's top entry is ## 1.12.0.Tests
--skip-analysis bypasses
File: tests/fixtures/review-plan-sample.html (small fixture plan with at least two known findings)
Type: smoke test (agent-driven — prose-skill behavior has no automated unit runner)
Asserts: Run A — /plan-agent:review-plan tests/fixtures/review-plan-sample.html presents the ask-first gate; choosing “Walk through findings” and rejecting one finding leaves that edit out of the plan body while recording it in the appended Team Review. Run B — the same command with --skip-analysis shows no gate and applies every proposed edit (current behavior preserved).
Run: /plan-agent:review-plan tests/fixtures/review-plan-sample.html then /plan-agent:review-plan tests/fixtures/review-plan-sample.html --skip-analysis
File: tests/review-plan-skill.test.mjs (new) — static assertions over the skill text
Targets: kit/plugins/plan-agent/skills/review-plan/SKILL.md
Key cases: file contains --skip-analysis; contains a Step 6b heading; contains accepted_edits; the ## Background mode section mentions --skip-analysis as implied. (e.g. grep -q -- '--skip-analysis' && grep -q 'Step 6b' && grep -q 'accepted_edits')
File: tests/marketplace-version.test.mjs (new) — also enforced by the .claude/settings.json auto-validation hook
Targets: .claude-plugin/marketplace.json — JSON validity + the plan-agent version field
Key cases: file parses as JSON; plan-agent version === "1.12.0"; the value is strictly higher than main's 1.11.0. (e.g. python3 -c "import json; m=json.load(open('.claude-plugin/marketplace.json')); assert [p['version'] for p in m['plugins'] if p['name']=='plan-agent'][0]=='1.12.0'")
Acceptance Criteria
Verification
Drive the updated skill against tests/fixtures/review-plan-sample.html three ways. (1) Default: confirm the ask-first gate appears; decline it and confirm no edits are applied but the Team Review is still appended; re-run, accept the gate, then Reject one finding and confirm it is absent from the plan body yet present in the appended triage record, while an Accepted finding does land. (2) --skip-analysis: confirm no gate appears and every proposed edit is applied (matching today's behavior). (3) --background: confirm zero interactive prompts and update-in-place is used. Finally, run python3 -c "import json; json.load(open('.claude-plugin/marketplace.json'))" and assert the plan-agent version reads 1.12.0, and grep -n "1.12.0" kit/plugins/plan-agent/CHANGELOG.md returns the new entry.
Completion Checklist
Completion Report
- Deviation — version bump landed as 2.0.0 → 2.1.0
- The plan stated a plan-agent
1.11.0→1.12.0bump, butmainhad already shipped plan-agent2.0.0(therefine-promptrename) before implementation began. The bump therefore landed as2.0.0→2.1.0(minor); the CHANGELOG entry andtests/marketplace-version.test.mjstarget2.1.0. - Note — objective smoke test is agent-driven
- The objective smoke test is provided as a fixture (
tests/fixtures/review-plan-sample.html) with documented Run A / Run B commands. It is agent-driven and requires an interactive developer session to execute, per this plan's own Tests section.