review · git:20261105.9da51a7 · 2026-11-05 · sha256 c2a8824a16d9dba5

review git:20261105.9da51a7A

Immutable. This exact content never changes and is served at /api/v1/blob/c2a8824a16d9dba5.

---
name: review
description: Review a finished spex feature from its diff, read only — a spec verdict per requirement (met, partial, missing, contradicts, cannot-verify, plus unrequested changes) and a quality verdict with blocking findings only — and route each finding into a fix task, a question, a test fix or the deferred list. Use when the user says "review", "spex review", "verify the feature", or after the last task is done.
disable-model-invocation: true
allowed-tools: Bash(node ${CLAUDE_PLUGIN_ROOT}/scripts/spex.mjs *)
---

# spex review

`SPEX` = `node ${CLAUDE_PLUGIN_ROOT}/scripts/spex.mjs`, from the repo root.

## Steps

1. `SPEX gate review <dir>`; if refused, report which tasks are not done and stop.
2. `SPEX show <dir> --review`. It writes the diff to `.spex/review/<feature>-<n>.diff` and
   prints the requirements, the tasks, the boundaries and the deferred list. If it refuses
   with `REVIEW-DIFF-BIG`, review per task: `SPEX show <dir> --review --task T01`, one task
   at a time. Read the diff file. Do not explore the codebase and do not rerun the tests:
   `spex run` already did, and the evidence is in `.spex/evidence/`.
3. Spec verdict, one line per requirement: `met`, `partial`, `missing`, `contradicts`, or
   `cannot-verify` when the diff cannot show it. Then list `unrequested` changes: code no
   requirement asked for. The implementer's report is a claim, not evidence; only the diff
   and the evidence count.
4. Quality verdict: blocking findings only — a bug, a security hole, data loss, a broken
   boundary, a signature that differs from `produces`. Style is not blocking.
5. Route every finding. Append only; never rewrite or reorder what exists.
   - `patch`: append a task to `tasks.yaml` with `kind: fix`, `source: "<finding>"`, the
     requirement ids, `paths`, `context`, `instructions`, `done_when`, `status: todo`.
   - `spec-gap`: the records do not cover a case. Append a question to `questions[]` with
     options and a recommendation; `clarify` owns the change.
   - `test-bug`: a test asserts the wrong thing. Name the scenario (`REQ-…/AC-n`) and what is
     wrong, for `/spex:tests --fix`. Do not edit the test.
   - `defer`: ask the user; only on a yes append to `deferred[]` (`finding`, `why`, `by`).
   If nothing is found, `tasks.yaml` stays byte for byte the same.
6. `SPEX check <dir>`; fix errors by their `fix` text.
7. `SPEX report <dir> review --status <done|concerns> --summary "…"`, one `--concern` per
   finding, one `--question` per spec gap. `done` means clean; `concerns` means findings
   were routed. The round count is on the first line of the show output; past
   `review_rounds`, stop and hand the feature to a person.

## Reply

At most 15 lines. `STATUS:` first. Then the spec verdict (one line per requirement), the
unrequested changes, the blocking findings with their route, and the deferred items.