verify · git:20261107.629412d · 2026-11-07 · sha256 942f850d538f4a29
verify git:20261107.629412dA
Immutable. This exact content never changes and is served at /api/v1/blob/942f850d538f4a29.
---
name: verify
description: Prove a built spex feature as a whole — spex verify runs fast_checks and every script test at this tree, tester subagents perform every session test (a browser through the bundled Playwright MCP, an API, a CLI) and record what they saw, and each failure goes to a decider (test, code or spec?) and then to the agent that owns the fix, round after round up to verify_rounds, with no question to the user. Use when the user says "verify", "spex verify", "test the feature", "run everything", or when a NEXT block names /spex:verify.
disable-model-invocation: true
allowed-tools: Bash(node ${CLAUDE_PLUGIN_ROOT}/scripts/spex.mjs *), Read(${CLAUDE_PLUGIN_ROOT}/skills/*/SKILL.md), Agent
---
# spex verify
`SPEX` = `node ${CLAUDE_PLUGIN_ROOT}/scripts/spex.mjs`, from the repo root.
`spex done` proved each task by its own tests. This stage proves the feature: every script
test at once, every session test performed, at the tree that ships. Your context holds the
round's results, never the code or a test body.
## Steps
1. `SPEX gate verify <dir>`: every task done, every `needs` met. Refused: relay the `fix`
text and stop. A `GATE-NEEDS` is the one thing a person gives (a token, a running
system), so name it as the NEXT block does.
2. `SPEX verify <dir>`: round n of `verify_rounds`. It runs `fast_checks`, one command per
driver for the scripts, the shell tests, and reads each session's evidence; a session
recorded at another tree is `stale`. `ok` and no session pending: step 6.
3. Sessions `pending` or `stale`: say `Perform: TS07 TS08 → 2 testers`, then start one
`spex:tester` per session, all in one message, each with one line: `<dir> TS07. Perform
it and record it.` A tester clicks (the Playwright MCP) or calls (an API, a CLI), never
edits, and records with `spex session`. When they return, `SPEX verify <dir>` again.
4. Failures (a script red, a session `fail`): `SPEX show <dir> --verify` prints each with
its claim, its file, the task behind it and the tail. One `spex:decider` for all of
them, one question each: `Qn — TSxx: is the test, the code or the spec wrong? A the test,
B the code, C the spec. Read the claim, the test at <file>, the code under <paths>, the
tail. The claim decides.` Route each verdict:
- A, the test: say `Fix test: TSxx → 1 test developer`; one `spex:test-developer` with
`<dir> TSxx: <what is wrong>`. A `blocked` return means the plan record is wrong: one
`spex:test-analyst` with `<dir> TSxx: <why>`, then the test developer again. A session
with a wrong plan goes to the test analyst at once.
- B, the code: append a task to `tasks.yaml` with `kind: fix`, `source: "TSxx: <tail>"`,
the record ids, `paths`, `context`, `instructions`, `done_when`, `status: todo`, and
append its id to that test's `covers` in `tests.yaml`: the proof exists, it now names
the fix too. Then read `${CLAUDE_PLUGIN_ROOT}/skills/develop/SKILL.md` and do its
Orchestrate here: the fix task is the wave. (With `tasks` in `approvals`, the NEXT
block asks a person to read the new task first; print it and stop.)
- C, the spec: the claim is wrong. Route it as `/spex:review` does for `spec-gap` (its
SKILL.md, step 5). The record goes back to `draft`: a person reads it at the gate, and
the test analyst re-plans its tests at `/spex:requirements`.
Then `SPEX verify <dir>` again: the next round.
5. Past `verify_rounds` (the `VERIFY-ROUNDS` warning): stop. `SPEX report` with
`--status blocked`, one `--concern` per failure with its verdicts. A person reads it.
6. `SPEX report <dir> verify --status <done|concerns|blocked> --summary "…"`: the rounds,
the scripts and sessions, one `--concern` per test rewritten or fix task added.
Never ask the user. A call these steps do not cover goes to one `spex:decider` with the
question, the options, your pick and the files that decide it; take its verdict and go on.
## Reply
At most 15 lines. `STATUS:` first, then one line per round: scripts green or red, sessions
pass, fail or pending, what was rewritten or fixed and by which agent. Last, the output of
`SPEX next <dir>`, as printed.
The NEXT block is copied as `SPEX next` printed it, the two rules included, never rewritten
into prose or shortened, and it does not count toward the line cap.