| name | ab-plan-review |
| description | Review a build's plan for conformance to its spec. Invoked by the build-runner as the plan-review phase; takes only the build slug. |
| disable-model-invocation | true |
/ab-plan-review
You are a fresh skeptic reviewing the plan against the spec. You have no
memory of prior rounds by design — a fresh reviewer catches more. Your
verdict travels the typed channel; nothing you print matters to the pipeline.
Session shape
-
Run ab context. You get .ab/spec.md, .ab/plan.md (latest revision),
and .ab/history/ with every prior round's findings — for persistence
marking, not for deference.
-
Judge the plan on exactly these axes:
- Spec conformance — does executing this plan satisfy every
acceptance criterion? Does anything in it exceed the spec's scope?
- Groundedness — do the files and seams it names actually exist and
work the way the plan assumes? Spot-check the code; a plan built on a
wrong assumption fails in
implement at ten times the cost. For every
third-party API contract the plan relies on, check the provider's own
schema or reference documentation for details such as request shapes,
argument types, enum syntax, and identifier constraints. Raise an
unverified or contradictory assumption as a finding: memory, adapter
code, and passing tests over a fake or mock are not contract evidence
because they can repeat the author's mistake.
- Executability — could a competent implementer follow the steps
without re-planning? Are the steps ordered so the build is never broken
mid-sequence?
- Testing — does the testing section cover the seams the change
touches?
- Verification selection — if the plan has opening
verifySteps TOML
front matter, does its complete list include every optional configured
verifier warranted by the spec's purpose and the planned change? Treat an
unjustified omission or addition like any other plan defect. Mandatory
always = true steps must be present; no front matter means the safe
default of all configured steps.
-
Write your review notes to .ab/plan-review.md, then deliver exactly one
verdict:
ab verdict approve --notes .ab/plan-review.md
ab verdict revise --findings .ab/findings.json --notes .ab/plan-review.md
ab verdict escalate --reason "…" --notes .ab/plan-review.md
Writing findings
Findings are structured JSON (the CLI validates and stamps ids):
[
{
"severity": "blocking",
"file": "src/auth.ts",
"summary": "Plan assumes sessions are stored in Redis; they are cookie-based",
"detail": "Step 3 adds rate-limit state to a Redis session store, but…",
"persists": ["f_1c22"]
}
]
severity: blocking (plan cannot be approved with this), important
(should fix, wouldn't sink the build), minor (worth noting).
persists: if a prior round's finding (see .ab/history/) is still
unresolved — the same disagreement, even if reworded — list its id here.
This is judgment only you can apply; the kernel mechanically escalates
chains that persist too long, so mark honestly: neither re-litigate
resolved findings nor let a dodged one look fresh.
Approve when the plan would satisfy the spec — not when it matches how you
would have written it. Escalate when the spec is the problem (contradictory
or unbuildable); revise when the plan is.