.agents/skills/code-changes/references/verify.md
Verification is never delegated downward and runs on the final, merged state of the change. It has two halves: the project's quality gates, and functional proof. Both are the coordinator's own work by default.
Tests passing is necessary, not sufficient. Run the real flow and confirm concrete outputs: render the prompt, execute the command, hit the endpoint. Record the actual values observed — the final report quotes them as evidence, not adjectives.
Exercise the flow the way the user will reach it, not only the way the harness reaches it: the built artifact rather than the dev server, a cold start rather than the running process, the entry point they actually open. When a dev server or file watcher is in play, restart it before judging behavior — a stale bundle produces confident, wrong verification.
When the user said they will do the manual validation, state exactly what they should check and what the expected result is.
Running the gates and the functional proof stays with the coordinator. If the result is ambiguous, or the change is high-blast-radius (migrations, security, irreversible operations), get the strongest available model to judge the evidence before declaring done — see escalate.md.
Documentation changes ship in the same change as the code they describe. Check for every user-visible behavior change:
Pick the destination by what actually broke, not by default:
Never weaken a gate, skip a linter, or delete a test to get to green.
There is no memory across turns other than what is written down, so the count must be carried as text, not tracked mentally. Every time Verify fails, state explicitly in the report handed to the next phase: the attempt number for this task, what broke, and the destination chosen. "The same task" means the same originating user request — a revised diagnosis on a Phase 1 bounce is still the same task; it does not reset the count.
On the second consecutive failure for that task — regardless of whether cycle 1 and cycle 2 went to the same destination — stop cycling before sending it back a third time. Escalate the specific question (why the fix isn't landing, or why the root cause keeps missing) to Escalation tier. See escalate.md.
If the cycle that follows the escalation answer also fails, do not escalate again and do not send it back a fourth time. Stop the loop entirely and report to the user: the two prior attempts, the escalation question and answer, and the latest failure evidence. Continuing to cycle past that point means the workflow itself isn't converging on this task, and that decision belongs to the user, not to another escalation call.