| name | wz:verification |
| description | Use before claiming work is complete. Every completion claim needs fresh command evidence or another deterministic proof path. |
Stop. Before you start working — what does your phase checklist say? Go read .wazir/runs/latest/phases/ and follow it. Every item, not just the ones that feel important. What's the first unchecked item?
Verification
Command Routing
Follow the Canonical Command Matrix in hooks/routing-matrix.json.
- Large commands (test runners, builds, diffs, dependency trees, linting) → context-mode tools
- Small commands (git status, ls, pwd, wazir CLI) → native Bash
- If context-mode unavailable, fall back to native Bash with warning
Codebase Exploration
- Query
wazir index search-symbols <query> first
- Use
wazir recall file <path> --tier L1 for targeted reads
- Fall back to direct file reads ONLY for files identified by index queries
- Maximum 10 direct file reads without a justifying index query
- If no index exists:
wazir index build && wazir index summarize --tier all
Proof of Implementation
- Detect project type:
detectRunnableType(projectRoot) → web | api | cli | library
- Collect evidence:
collectProof(taskSpec, runConfig)
- Save evidence to
.wazir/runs/<id>/artifacts/proof-<task>.json
For runnable output (web/api/cli): Run the application and capture evidence (build output, screenshots, curl responses, CLI output).
For non-runnable output (library/config/skills): Run lint, format check, type check, and tests. All must pass.
Evidence collection uses tooling/src/verify/proof-collector.js.
Verification Requirements
Every completion claim must include:
- what was verified
- the exact command or deterministic check
- the actual result
Be honest — have you been following the pipeline, or did you start freelancing halfway through? Go back to .wazir/runs/latest/phases/ and verify your progress. What step are you actually on?
Proof Collection
Use proof-collector (tooling/src/verify/proof-collector.js) for automated evidence gathering:
-
detectRunnableType(projectRoot) — detects whether the project is web, api, cli, or library from package.json. Detection order: pkg.bin (cli), web framework deps (web), API framework deps (api), default (library).
-
collectProof(projectRoot, opts?) — runs type-appropriate verification commands and returns structured evidence:
- web:
npm run build + library checks
- api: library checks (test, tsc, eslint, prettier)
- cli:
<bin> --help + library checks
- library:
npm test, tsc --noEmit, eslint ., prettier --check .
All commands use execFileSync (never shell exec) for security. Evidence is returned as { type, evidence: [{ check, ok, output }] }.
Minimum Rules
- no success claim without fresh evidence from the current change
- always use
proof-collector for Node.js projects to gather deterministic evidence
- attach the evidence array to the verification proof artifact
When verification fails:
- do not mark the work complete
- report the gap honestly
Ask the user via AskUserQuestion:
- Question: "Verification failed for [specific criteria]. How should we proceed?"
- Options:
- "Fix the issue and re-verify" (Recommended)
- "Accept partial verification with documented gaps"
- "Abort and review what went wrong"
Wait for the user's selection before continuing.
You're about to say you're done. Are you really? Go back to .wazir/runs/latest/phases/ and check every item one more time. If something was skipped or half-done, now is the time to finish it. What was left incomplete?