Skip to content

Spec Completion Review

/flow-next:spec-completion-review confirms that, taken together, the implementations of every task in a spec actually satisfy the acceptance criteria.

This is not a code-quality review. That belongs to /flow-next:impl-review. Completion review answers one question: did the combined work meet the spec?

Run completion-review when every task in a spec is marked done, after any per-task /flow-next:impl-review has shipped, and before /flow-next:make-pr opens the PR. The reviewer re-reads the spec and verifies that the combined diff covers every R-ID - gaps that no individual task fully owned surface here.

Specifically:

  • Long-running spec where individual tasks were reviewed in isolation but no one checked the whole.
  • Spec where task descriptions drifted away from the original acceptance criteria during execution.
  • Any non-trivial spec before opening a PR for human review.

The work loop offers to run this automatically when all tasks complete. You can also invoke it manually at any time.

  • Every R-ID in the spec maps to evidence in the diff or the committed code.
  • No acceptance criterion is missing, half-implemented, or quietly dropped.
  • Boundaries and non-goals are respected.
  • Decisions captured during implementation are consistent with the spec’s decision context.

If an R-ID has no evidence, the review surfaces it as a gap - not as a stylistic finding.

When the project has a .flow/criteria.md, completion review is also the surface that judges it. Every G-ID in that file is judged against the whole implementation, on every backend, and each gets one status: met, violated, or n/a.

The verdicts land in the ordinary review receipt:

"criteria": [
{"id": "G1", "status": "met"},
{"id": "G3", "status": "violated", "note": "route added without contract regen"}
]

Every violation is also reported as a normal finding at reviewer-judged severity, so the findings list stays the one place to read detail. Per-task /flow-next:impl-review never judges criteria: the spec is the unit of compliance.

An invalid criteria file fails the review before a round is reserved (flowctl criteria prompt-block exits nonzero), so a typo’d bullet is a fix-and-re-run, not a silently rule-less review. No criteria file means no criteria content in the prompt and no criteria field in the receipt.

Full model: Standing Criteria.

Same resolution as the other review skills; the ladder is in Review backends.

With review.backend none this skill exits cleanly instead of running, which means nothing verifies R-ID coverage at the end of the spec. The in-host quality audit inside work is not a substitute: it reviews the diff when a change is large or risky, and it never walks the R-ID table. To keep this gate without a second CLI, use host. See What each layer costs.

VerdictMeaning
SHIPEvery R-ID covered. Safe to PR.
NEEDS_WORKOne or more R-IDs missing or under-delivered. Findings cite the R-ID and the gap.

A NEEDS_WORK verdict often means a new task, not a rewrite. Use /flow-next:plan or flowctl task create to add the missing work, then re-run.

A per-task review can confidently SHIP a task that delivered exactly what its description asked for, even when the task description itself missed something the spec required. Completion review re-grounds on the spec, not on the task list, so spec-level gaps stop hiding behind passing task reviews.

/flow-next:spec-completion-review fn-12-export-json-flag
Spec-level review (cross-model): does the sum of tasks implement the spec?
R1 export --json emits valid JSON covered (task .1, commit a1b2c3d)
R2 null-owner rows serialize covered (task .1 fix round, commit f7c8d9e)
R3 docs + tests covered (task .2, commit e4f5a6b)
No drift found between task done-summaries and the diff. VERDICT: SHIP

Task-level reviews check each tree; this gate checks the forest - drift hides in the gaps between tasks.

Recipes that compose with spec-completion-review in the cookbook:

  • Evidence-first - the R-ID-to-commit mapping it verifies is the same one the PR body will publish.
  • One-shot chains - chain it between “work” and “make the PR” in a single instruction.
Terminal window
/flow-next:make-pr <spec-id>