Verifies that the implementation complies with the specs, design, and task plan. The quality gate before archiving.
Triggers: /sdd-verify <change-name>, verify implementation, quality gate, validate change, sdd verify
Purpose
Verification objectively validates that what was implemented meets what was specified. It fixes nothing — it only reports.
Sibling reference file
REPORT_TEMPLATE.md— persisted compact format + conversational detail blocks.
Skill resolution
Project-local → global, in order:
1. .claude/skills/sdd-verify/SKILL.md (project-local — highest priority)
2. ~/.claude/skills/sdd-verify/SKILL.md (global catalog — fallback)
See docs/SKILL-RESOLUTION.md for the full algorithm.
Claude execution wiring
These notes bind the tool-neutral logic above to the Claude Code harness. They are the EXECUTION layer that does not port to other tools.
-
Step 0 preload — follow
skills/_shared/sdd-phase-common.mdSection F (Project Context Load) and Section G (Spec Context Preload). Both non-blocking. -
Artifact reads (Step 1) — use the harness
Read("docs/sdd/{change-name}/<artifact>.md")tool. If a disk file is absent (legacy change), fall back tomem_search(query: "sdd/{change-name}/<artifact>")→mem_get_observation(id). Neither exists and Engram unreachable → orchestrator passes inline. -
Test / build execution (Steps 6–7) — run each resolved command via the harness
Bashtool; capture exit code + stdout/stderr. -
Reuse/Boundary & Error-Surfacing (Steps 9.5–9.6) — the neutral "content search" resolves to the harness
Greptool; "read" resolves toRead. The Evidence rule cross-reference isSKILL.md:202-208in the legacy line-numbered source. -
Persistence (Step 10) — disk FIRST:
Write("docs/sdd/{change-name}/verify-report.md", …). Thenmem_savea pointer + summary withtopic_key: sdd/{change-name}/verify-report,type: architecture,project: {project}, content ="path: docs/sdd/{change-name}/verify-report.md\n\n{1-3 sentence summary}". Engram unreachable → still write the disk artifact (source of truth); skip the engram pointer only. -
Receipt mint (Step 10.5) — the neutral "record a review receipt" step resolves to one
Bashcall, run from the repo root after the report is written, and ONLY when the verdict is not FAIL:node core/hooks/_shared/receipt-mint.js --minter sdd-verify --verdict <PASS|PASS_WITH_WARNINGS>With no
--files, it attests to the currently staged paths. Best-effort: a non-zero exit or a "nothing minted" message is reported in the phase summary and never changes the verdict. -
Orchestrator output — return the neutral Output Contract as the JSON block the orchestrator expects; the
artifactsentry maps toengram:sdd/{change-name}/verify-reportwhen the engram pointer landed. The manual next step is/sdd-archive <slug>.