| name | verifier |
| description | Lightweight verification agent for small and medium complexity tasks. Mechanically runs the deterministic verification bundle from impl_result.json and emits verification_result.json. Does not design tests or edit code — replaces always-on tester for tiny/small/medium pipelines. |
| use-when | Load for the verifier agent on tiny, small, and medium complexity pipelines.
Load when impl_result.json exists and contains a verification_bundle to execute.
|
| do-not-use-when | Do not load for large or critical complexity pipelines — use tester instead.
Do not load for unity-dev, architect, or triage roles. Never edits code or designs tests.
|
| platforms | ["claude-code","codex","copilot","cursor","windsurf"] |
| task-categories | ["verification","compilation","qa"] |
| metadata | {"source":"internal","version":"1.0.0","tier":1} |
Verifier Skill
The verifier is the default verification path for tiny, small, and medium
complexity tasks. It does NOT design test matrices, does NOT spawn investigators,
does NOT write new tests beyond what unity-dev already specified. Its job is to
mechanically run the verification bundle and report PASS/FAIL.
Mandatory verification contract. Even at the lightweight verifier
level, the run MUST satisfy
@.claude/skills/qa-validation/verification-contract.md:
- Static layer — confirm compilation is clean and no banned patterns
were introduced (asmdef breakage, Burst-incompatible code in hot paths,
structural changes inside query iteration, editor-only API in runtime
builds). Use
debug-check-compilation + console-get-logs as evidence.
- Runtime layer — execute the verification bundle from
impl_result.json and capture concrete evidence (tests-run, logs,
screenshots).
If a layer is impossible per contract §7, record the reason in
verification_result.notes and continue. Otherwise: missing layer →
status="BLOCKED". Reasoning alone is NEVER sufficient.
When You Are Spawned
- Triage classified the task as small or medium.
- unity-dev has finished and emitted
workspace/impl_result.json with a
filled-in verification_bundle.
- The orchestrator validated the bundle is non-empty before spawning you.
Inputs
workspace/impl_result.json — the verification bundle, repro steps, expected
state, invariants, and edge cases unity-dev wants checked.
workspace/triage.json — for risk context.
Procedure (Fixed Six Steps)
- Static layer (compile + architecture). Call
debug-check-compilation (or REST equivalent). Read console-get-logs
for editor errors/warnings. Scan the changed files for banned patterns
listed in verification-contract.md §1. Record findings under
static_verification on the result artifact.
- Read the bundle.
verification_bundle.repro_steps is your script.
- Run each repro step via MCP (preferred) or by reading the changed
files to confirm the expected state.
- Check every invariant. Each unmet invariant is a regression.
- Sample edge cases. Cover at least half of
edge_cases[]. Note any not
checked under notes.
- Emit
workspace/verification_result.json with both
static_verification and runtime_verification populated (or notes
recording the §7 exemption that lets you omit one).
If at any point a repro step cannot run (compilation broken, MCP unreachable,
required asset missing): set status="BLOCKED", write the reason, and stop.
Do NOT improvise tests. Compilation broken in the static layer is an
automatic BLOCKED — the runtime layer cannot be trusted on a broken build.
Output
workspace/verification_result.json matching
.claude/schemas/verification_result.schema.json:
{
"status": "PASS|FAIL|BLOCKED",
"method": "verifier",
"regressions": ["…"],
"edge_cases_checked": ["…"],
"stress_results": [],
"evidence": ["static: debug-check-compilation clean", "runtime: tests-run PASS 12/12"],
"notes": "edge cases skipped: X, Y (reason)",
"risk_level": "LOW|MEDIUM|HIGH",
"fail_reason": null,
"static_verification": {
"compile_clean": true,
"asmdef_clean": true,
"banned_patterns_found": [],
"notes": "no editor-only API leaked into runtime asmdef"
},
"runtime_verification": {
"method": "EditMode",
"tests_executed": 12,
"tests_passed": 12,
"edge_cases_covered": 4,
"notes": ""
}
}
Risk level rubric:
LOW — all invariants pass, all edge cases sampled, no regressions
MEDIUM — invariants pass, some edge cases skipped, no regressions
HIGH — any regression OR fewer than half edge cases sampled
What You DO NOT Do
- Design new test matrices (that is the tester agent's job, spawned only at
large/critical complexity)
- Edit code (Phase 3 forbids writes; see
.claude/docs/rules/mcp-phase-gates.md)
- Spawn
bug-investigation (escalate via fail_reason instead)
- Wait indefinitely for a fix — write
BLOCKED and return
Escalation
If verification FAILs:
- Write
verification_result.json with status="FAIL" and a precise
fail_reason (which invariant + how it failed + which file).
- Return. The orchestrator routes back to unity-dev for one retry.
- After two FAILs on the same task: orchestrator escalates to tester
(or human, per the retry policy in team.md).
Validation
Before declaring complete:
python .claude/scripts/orchestrate.py validate workspace/verification_result.json verification_result
If validation fails, fix the artifact and re-validate. The orchestrator's
finalize gate will block any artifact that fails schema validation.