- What it does: checks a completed task against acceptance criteria and records the result with evidence.
- Use it when: implementation is done and you want an explicit PASS, FAIL, or partial verdict.
- Input:
TASK_ID, acceptance criteria sources, and the task protocol files. - Output:
verification.md, evidence artifacts, verification verdict, and recommended next status/follow-up bugs when criteria fail.
Goal
Independent-ish verification so we don’t “trust without verify”.
This is not the adversarial semantic pass.
If a task may satisfy AC/REQ while still being wrong in substance, follow with /red-verify / mb-red-verify.
Status Transition Modes
Status transitions have two modes.
Scheduler mode:
/autopilotand/autonomousown task status transitions.- Scheduler decides closure/failure/blocking eligibility.
/executereturns scoped implementation handoff; it does not close tasks./verifygives functional verdict/evidence; in scheduler mode it does not close/fail/block/promote./red-verifygives semantic verdict for T2/T3; in scheduler mode it does not close/fail/block/promote./mb-syncrecords/reconciles state after the scheduler-provided closure/failure/blocking decision. It does not decide closure itself.- T0/T1 scheduler closure may use compact evidence / functional PASS according to tier policy.
- T2/T3 scheduler closure requires
VERDICT: PASSplusSEMANTIC_VERDICT: semantic-passbefore scheduler marksdone. - T3 scheduler closure also requires exact markers
HUMAN_CHECKPOINT: doneandROLLBACK_RECOVERY_NOTE: present.
Manual mode:
- Expected T0/T1 simple flow:
/execute -> /verify. - Manual closure is allowed only when an explicit closure owner exists.
- T0/T1 may be marked
doneafter functionalVERDICT: PASSand completed evidence. - T2/T3 must not treat
/verify PASSalone as finaldone; run/red-verifyand requireSEMANTIC_VERDICT: semantic-passbefore final closure//mb-sync. - If required T2/T3
/red-verifyreturns anything other thansemantic-pass, leave closure pending or blocked, not done; optional T0/T1 red-verify does not make their normal verify-based closure stricter. semantic-concernin manual mode means do not trust the existingdonestate without human review / follow-up.- Do not mix scheduler mode and manual mode inside one task run.
- No persisted
modefield is used.
Inputs
TASK_ID(e.g.TASK-123)- Authoritative task record via
.memory-bank/tasks/index.jsonand.memory-bank/tasks/<TASK_ID>.task.json - Mandatory
tier: T0|T1|T2|T3in that task record - Links to acceptance criteria:
.memory-bank/features/FT-*and/or.memory-bank/requirements.md(REQ IDs)
- Link to protocol plan:
.protocols/<TASK_ID>/plan.md
If present, also use:
- linked authoritative SDD specs for any tier
verification_targetsnormative_inputsconstraintsinvariants- task record references to source artifacts
Authoritative SDD spec links are links in task richer fields or linked feature
spec_design_links that point to .memory-bank/spec-index.md,
.memory-bank/tech-specs/, .memory-bank/architecture/,
.memory-bank/contracts/, .memory-bank/domains/, .memory-bank/states/,
.memory-bank/adrs/, .memory-bank/testing/, or .memory-bank/runbooks/.
Preconditions
- Implementation is done and gates were run (or failures recorded).
.memory-bank/tasks/index.jsonlists the target task record, and the indexed.task.jsonvalidates the requestedTASK_ID.- Authoritative verification routing is only
task.tier; the oldrisk/risk.levelmodel is invalid.
Required outputs
T0/T1: verification may be recorded in compact.protocols/<TASK_ID>/run.md.T2/T3: update (or create).protocols/<TASK_ID>/verification.mdusing:./references/shared-protocols-verification-template.md
- Store evidence in
.tasks/<TASK_ID>/:- logs, screenshots, videos, reproduction steps
- Add completed evidence entries to the task record
verifyfield;evidence_requiredandverification_targetsremain requirements/targets, not proof by themselves. - Before any command sets
status: done, the task recordverifyfield must contain completed verification/evidence entries.
Status ownership
mb-verifyowns verification evidence andVERDICT: PASS|FAIL|NEEDS-CLARIFICATION.- When invoked by
/autopilotor/autonomous, it must not close the task, setstatus: done, setstatus: failed, block dependents, or promote dependents. It reports a recommended next status to the scheduler. - In standalone/manual mode, it may mark a
T0/T1taskdoneafter functionalVERDICT: PASSonly with explicit closure ownership. - For
T2/T3,mb-verifyrecords functional evidence and closure recommendation, but final closure requiresmb-red-verifysemantic-pass first.
Process
1) Prime only what you need
Read:
.memory-bank/tasks/index.json- indexed
.memory-bank/tasks/<TASK_ID>.task.json .protocols/<TASK_ID>/context.md.protocols/<TASK_ID>/plan.md.protocols/<TASK_ID>/progress.md- acceptance criteria source docs
.memory-bank/spec-index.mdand all linked authoritative SDD specs when the task record or linked feature contains SDD spec links, for any tier
Before verifying, validate the authoritative task record:
- the task is present in
.memory-bank/tasks/index.json - the indexed record
idmatchesTASK_ID - required fields for verification are present (
status,feature,reqs,depends_on,gates,verify) tieris present; if missing, stop- for
T2/T3, linked SDD specs are present in task richer fields, featurespec_design_links, orspec-index.md; if absent, stop and route back to/spec-improveor/spec-auto
Do not block T0 / T1 only because SDD spec links are absent.
If the authoritative task record is missing or invalid, stop and report the issue instead of verifying from protocol docs alone.
Priority:
- linked authoritative SDD specs for any tier, when present
- explicit
Verification Targets - explicit
Normative Inputs - classic feature acceptance criteria and RTM
- evidence in
.tasks/<TASK_ID>/
Missing richer fields or absent SDD spec links must not block verification of a
classic T0 / T1 task.
2) Verify acceptance criteria
For each AC / REQ:
- run the smallest meaningful check
- prefer deterministic checks (tests/CLI) over “looks OK”
- record what you did and link the evidence
If the task changes UI or browser behavior:
- prefer Playwright / agent-browser / CDP-driven verification
- capture screenshots/videos/traces when useful
- store artifacts in
.tasks/<TASK_ID>/ - do not use “I clicked around manually” as the main evidence when browser automation is available
3) Verdict
If anything fails:
- set
VERDICT: FAIL - create a bug doc in
.memory-bank/bugs/BUG-<short>.md - add a follow-up
.task.jsonand update.memory-bank/tasks/index.json(if needed) - recommend current task
status: failed - in scheduler mode, do not block downstream dependents directly; return that recommendation to the scheduler
If all pass:
VERDICT: PASS- add completed verification/evidence entries in
verify - apply status by tier:
- scheduler mode: recommend the scheduler decision; do not close/fail/block/promote
- manual mode: may set
T0/T1status: doneafter functionalVERDICT: PASSwith explicit closure ownership; forT2/T3, leave closure pending/red-verifySEMANTIC_VERDICT: semantic-pass
- in scheduler mode, final
T2/T3closure is eligible only after/red-verify/mb-red-verifyreturnssemantic-pass
4) Sync recommendations
- Record RTM/feature lifecycle recommendations for
/mb-sync - Do not independently perform scheduler closure or dependent block/promotion
Definition of done
- Verification output exists and is evidence-backed: compact
run.mdfor eligibleT0/T1, fullverification.mdforT2/T3. - PASS verification has updated RTM/task evidence;
T2/T3tasks are not closed until/red-verify/mb-red-verifyproducessemantic-pass. - FAIL tasks have a bug doc and next steps.