
Sdd Verify
- 44 installs
- 1 repo stars
- Updated July 19, 2026
- fearovex/claude-config
sdd-verify is an agent skill that formats and persists a multi-dimension verification report with tool execution evidence for a spec-driven change.
About
sdd-verify is the report-template and output contract for Step 10 of the fearovex SDD workflow. Solo builders and small teams use it when an agent has finished implementing a named change and you need a repeatable verification artifact instead of a vague “looks good.” The skill separates what gets saved to engram (compact markdown report with verdict, dimension status, tool runs, and issues) from richer conversational detail blocks that stay in the thread. It expects you to record real commands and exit codes, including SKIPPED when no test runner exists, so downstream reviewers and future you can trust the verdict. It fits agentic spec-driven development where memory persistence matters and you want PASS, PASS WITH WARNINGS, or FAIL to be citable on the detail page.
- Six-dimension summary table: Completeness, Correctness, Coherence, Testing, Test Execution, Build
- Mandatory Tool Execution section with command, exit code, and PASS/FAIL/SKIPPED per row
- Compact verify-report persisted via mem_save with topic_key sdd/{change-name}/verify-report
- Per-dimension detail blocks shown in chat only—not duplicated in the persisted artifact
- CRITICAL vs WARNINGS issue buckets with explicit None when clean
Sdd Verify by the numbers
- 44 all-time installs (skills.sh)
- Ranked #1,246 of 2,153 Testing & QA skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 24, 2026 (Skillselion catalog sync)
npx skills add https://github.com/fearovex/claude-config --skill sdd-verifyAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 44 |
|---|---|
| repo stars | ★ 1 |
| Security audit | 2 / 3 scanners passed |
| Last updated | July 19, 2026 |
| Repository | fearovex/claude-config ↗ |
What it does
Run a structured SDD verification pass and emit a PASS / PASS WITH WARNINGS / FAIL report with dimension scores and tool execution results before you treat a change as done.
Who is it for?
Best when you're running numbered SDD workflows and want engram-persisted verify reports after implementation.
Skip if: Ad-hoc manual QA without the parent SDD skill chain or when you only need a one-off lint without a change name and project scope.
When should I use this skill?
SDD workflow reaches Step 10 and you need to verify a named change and persist verify-report output.
What you get
You get a dated verification report with verdict, six dimension statuses, mandatory tool execution rows, and CRITICAL/WARNING issues saved under sdd/{change-name}/verify-report for the next review or release step.
- Compact verification report markdown for engram
- Conversational per-dimension detail blocks
- Verdict PASS / PASS WITH WARNINGS / FAIL
By the numbers
- Six verification dimensions in the summary table
- Mandatory Tool Execution section even when tests are SKIPPED
Files
sdd-verify
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.
---
Process
Step 0 — Preload
Follow skills/_shared/sdd-phase-common.md Section F (Project Context Load) and Section G (Spec Context Preload). Both non-blocking.
Step 1 — Load all artifacts
Read in this order:
- Tasks —
mem_search(query: "sdd/{change-name}/tasks")→mem_get_observation(id). Engram unreachable → orchestrator passes inline. - Spec — same pattern with
sdd/{change-name}/spec. - Design — same pattern with
sdd/{change-name}/design. - Code files created/modified.
Step 2 — Completeness check
Count total tasks vs completed. Emit Completeness block from REPORT_TEMPLATE.md.
Severity:
- Incomplete core logic tasks → CRITICAL.
- Incomplete cleanup/docs tasks → WARNING.
Step 3 — Correctness check (specs)
For each requirement in the spec: 1. Look for evidence in the code that it is implemented. 2. For each Given/When/Then scenario:
- GIVEN handled (precondition/guard)?
- WHEN implemented (action/endpoint)?
- THEN verifiable (correct result)?
Emit Correctness + Scenario Coverage blocks from REPORT_TEMPLATE.md.
Step 4 — Coherence check (design)
Verify design decisions were followed. Emit Coherence block from REPORT_TEMPLATE.md.
Step 5 — Testing check
Verify test presence and scenario coverage. Emit Testing block from REPORT_TEMPLATE.md.
Step 6 — Run tests
Three-level priority model. Check config.yaml at project root in order:
Level 1 — `verify_commands` (highest priority, checked first):
- Present → use the listed commands in order; do NOT check levels 2–3; for each command run via Bash, capture exit code + stdout/stderr; record in
## Tool Executionwith source label"verify_commands (config level 1)". - Absent → proceed to Level 2.
verify_commands is NOT additive — it overrides all lower levels. Commands are assumed non-destructive; the user is responsible for this.
Level 2 — `verify.test_commands` (when Level 1 is absent):
verify.test_commands shape | Behavior |
|---|---|
| Not a list | WARNING: "verify.test_commands is not a list — treating as absent". Fall through to Level 3. |
Empty list [] | Treat as absent. Fall through to Level 3 (prevents silent zero-command success). |
| Non-empty list | Use commands in order; record source label "verify.test_commands (config level 2)". Skip Level 3. |
Level 3 — auto-detection (only when 1 and 2 are absent or invalid). First match wins:
| Priority | File | Condition | Command |
|---|---|---|---|
| 1 | package.json | scripts.test exists | npm test (or yarn test if yarn.lock, pnpm test if pnpm-lock.yaml) |
| 2 | pyproject.toml / pytest.ini / setup.cfg | pytest indicators present | pytest |
| 3 | Makefile | test target exists | make test |
| 4 | build.gradle / gradlew | file exists | ./gradlew test |
| 5 | mix.exs | file exists | mix test |
| — | none of the above | — | Skip with WARNING |
Execution: run via Bash, capture exit code (0 = pass) + stdout/stderr, record runner name + command + exit + failure summary.
Error handling:
| Condition | Report | Status |
|---|---|---|
| Command not executable (deps missing, etc.) | "Test Execution: ERROR — [error message]" | WARNING |
| Tests run but some fail | Report failure count + failing test names if parseable | (varies) |
| No test runner detected | "Test Execution: SKIPPED — no test runner detected" | WARNING |
Save the full test output for Steps 8 and 9.
Step 7 — Build & type check
Detect and execute build/type-check command.
Config overrides (checked before auto-detection):
| Key | Behavior |
|---|---|
verify.build_command (string) | Use as build/type-check command. Skip auto-detection for build. |
verify.build_command (non-string) | WARNING "verify.build_command is not a string — treating as absent". Fall back to auto-detection. |
verify.type_check_command (string) | Use as type-check command. Skip auto-detection for type check. |
verify.type_check_command (non-string) | WARNING. Fall back to auto-detection. |
Both overrides are independent — one can be set without the other.
Build command auto-detection (when override absent or invalid). First match wins:
| Priority | File | Condition | Command |
|---|---|---|---|
| 1 | package.json | scripts.typecheck exists | npm run typecheck |
| 2 | package.json | scripts.build exists | npm run build |
| 3 | tsconfig.json | file exists + TypeScript in devDependencies | npx tsc --noEmit |
| 4 | Makefile | build target exists | make build |
| 5 | build.gradle / gradlew | file exists | ./gradlew build |
| 6 | mix.exs | file exists | mix compile --warnings-as-errors |
| — | none of the above | — | Skip with INFO |
Execution: run via Bash, capture exit code, capture error output.
Error handling:
| Condition | Report | Status |
|---|---|---|
| Command not executable | "Build/Type Check: ERROR — [error message]" | WARNING |
| Build fails | "Build/Type Check: FAILING" + error output in detail | (varies) |
| No build command detected | "Build/Type Check: SKIPPED — no build command detected" | INFO |
Step 8 — Coverage validation (optional)
Active ONLY when coverage.threshold is configured. Advisory only — never CRITICAL, never blocks.
1. Read config.yaml for coverage.threshold (e.g., coverage: { threshold: 80 }). 2. Not configured → "Coverage Validation: SKIPPED — no threshold configured". 3. Configured:
- Parse coverage % from Step 6 test output.
- Actual ≥ threshold →
"Coverage: [X]% (threshold: [Y]%) — PASS". - Actual < threshold →
"Coverage: [X]% (threshold: [Y]%) — BELOW THRESHOLD". Status WARNING.
4. Cannot parse coverage data → "Coverage Validation: SKIPPED — could not parse coverage from test output". Status WARNING.
Step 9 — Spec Compliance Matrix
Cross-reference every Given/When/Then scenario from the change's spec files against verification evidence.
1. Read all spec content from the active persistence mode (same source as Step 1). 2. Extract every Given/When/Then scenario. 3. For each scenario, cross-reference against:
- Code implementation evidence from Step 3 (Correctness).
- Test results from Step 6 — when tests were executed.
4. Assign a compliance status per scenario (see status definitions in REPORT_TEMPLATE.md).
Emit the matrix using the template from REPORT_TEMPLATE.md. The matrix MUST include scenarios from ALL spec domains affected by the change.
Step 10 — Create verify-report.md
Evidence rule — applies to every criterion in the report:
A criterion MUST only be marked [x] when: 1. A tool command was run and its output confirms the criterion, OR 2. The user provided an explicit evidence statement.
Neither met → leave [ ] with "Manual confirmation required — no tool output available". Abstract reasoning or code inspection alone MUST NOT suffice to mark [x].
The ## Tool Execution section is mandatory in every report — even when skipped. When skipped: "Test Execution: SKIPPED — no test runner detected".
Persistence — call mem_save with topic_key: sdd/{change-name}/verify-report, type: architecture, project: {project}, content = full persisted-compact markdown from REPORT_TEMPLATE.md. Do NOT write any file.
Engram unreachable → skip persistence; return report content inline only.
Conversational output — the full detail sections (Completeness, Correctness, Coherence, Testing, Spec Compliance Matrix, Coverage Validation, SUGGESTIONS) are presented in the conversational response using the detail-block templates from REPORT_TEMPLATE.md. The user must see the full analysis; only the persisted artifact is compact.
---
Verdict criteria
| Verdict | Condition |
|---|---|
| PASS | 0 critical, 0 warnings |
| PASS WITH WARNINGS | 0 critical, 1+ warnings |
| FAIL | 1+ critical |
Severities
| Severity | Description | Blocks archiving |
|---|---|---|
| CRITICAL | Requirement not implemented, main scenario not covered, core task incomplete | Yes |
| WARNING | Edge case without test, design deviation, pending cleanup task, test execution failure | No |
| SUGGESTION | Optional quality improvement | No |
| SKIPPED | Step preconditions not met (no test runner, no build command, no coverage config) — does NOT count toward verdict | No |
| INFO | Informational note (e.g., no build command detected) — does NOT count toward verdict | No |
Verdict calculation: only the four original dimensions (Completeness, Correctness, Coherence, Testing) plus Test Execution and Spec Compliance contribute CRITICAL/WARNING. SKIPPED and INFO statuses do NOT count toward verdict. Preserves identical verdict behavior for projects without test infrastructure.
---
Output to orchestrator
{
"status": "ok|warning|failed",
"summary": "Verification [change-name]: [verdict]. [N] critical, [M] warnings.",
"artifacts": ["engram:sdd/{change-name}/verify-report"],
"test_execution": {
"runner": "[detected runner or null]",
"command": "[command or null]",
"exit_code": "[0/1/N or null]",
"result": "PASS|FAILING|ERROR|SKIPPED"
},
"build_check": {
"command": "[command or null]",
"exit_code": "[0/1/N or null]",
"result": "PASS|FAILING|ERROR|SKIPPED"
},
"compliance_matrix": {
"total_scenarios": "[N]",
"compliant": "[N]",
"failing": "[N]",
"untested": "[N]",
"partial": "[N]"
},
"next_recommended": ["sdd-archive (if PASS or PASS WITH WARNINGS)"],
"risks": ["CRITICAL: [description if any]"]
}After the report:
Continue with archive? Reply **yes** to proceed or **no** to pause.
_(Manual: `/sdd-archive <slug>`)_---
Rules
- ONLY report — fix nothing during verification.
- Read real code — do NOT assume something works because the file exists.
- Objective: report what IS, not what should be.
- Evaluate documented deviations in
tasks.mdwith context. - A FAIL is information for improvement, not a personal failure.
- Run tests if possible (via Bash). Report actual results.
## Tool Executionis mandatory in every report — even when skipped. When skipped state:"Test Execution: SKIPPED — no test runner detected".- A criterion marked
[x]MUST have verifiable evidence: tool output OR explicit user evidence statement. Abstract reasoning or code inspection alone MUST NOT suffice. - Test command resolution: Level 1 (
verify_commands) > Level 2 (verify.test_commands) > Level 3 (auto-detection). Each level consulted ONLY when all higher levels are absent or invalid. - Empty
verify.test_commands: []falls through to auto-detection — NEVER treated as zero-command success. verify.build_commandandverify.type_check_commandoverride their auto-detected commands when present AND strings. Non-string values emit WARNING and fall back to auto-detection.
sdd-verify — Report Templates
Reference file consumed by SKILL.md Step 10. Contains the persisted-to-engramcompact format and the per-dimension detail blocks emitted to the
conversational output.
Persisted to engram (compact)
Saved via mem_save with topic_key: sdd/{change-name}/verify-report, type: architecture, project: {project}. Only this content is persisted.
# Verification Report: [change-name]
Date: [YYYY-MM-DD]
Verdict: PASS / PASS WITH WARNINGS / FAIL
## Summary
| Dimension | Status |
|-----------------|---------------------------------|
| Completeness | OK / WARNING / CRITICAL |
| Correctness | OK / WARNING / CRITICAL |
| Coherence | OK / WARNING / CRITICAL |
| Testing | OK / WARNING / CRITICAL |
| Test Execution | OK / WARNING / CRITICAL / SKIPPED |
| Build | OK / WARNING / SKIPPED |
## Tool Execution
| Command | Exit Code | Result |
|---------------|-----------|----------------------|
| [command] | [code] | [PASS/FAIL/SKIPPED] |
## Issues
### CRITICAL
- [issue description]
[or: "None."]
### WARNINGS
- [issue description]
[or: "None."]The ## Tool Execution section is mandatory even when skipped. When skipped: "Test Execution: SKIPPED — no test runner detected".
Conversational output (NOT persisted)
These detail blocks are shown to the user only — they do NOT go in the persisted artifact. They cover Steps 2–9 of the audit and give the user full visibility.
Completeness block
### Completeness
| Metric | Value |
|----------------------|-------|
| Total tasks | [N] |
| Completed tasks [x] | [M] |
| Incomplete tasks [ ] | [K] |
Incomplete tasks:
- [ ] [number and description of each one]Correctness block
### Correctness (Specs)
| Requirement | Status | Notes |
|-------------|--------------------|---------------------------------------|
| [Req 1] | ✅ Implemented | |
| [Req 2] | ⚠️ Partial | Missing 401 error scenario |
| [Req 3] | ❌ Not implemented | Endpoint /auth/refresh does not exist |
### Scenario Coverage
| Scenario | Status |
|------------------------------------|--------------------------------------|
| Successful login | ✅ Covered |
| Failed login — incorrect password | ✅ Covered |
| Failed login — user does not exist | ⚠️ Partial — implemented but no test |
| Expired token | ❌ Not covered |Coherence block
### Coherence (Design)
| Decision | Followed? | Notes |
|---------------------|---------------|----------------------------------------|
| Validation with Zod | ✅ Yes | |
| JWT with RS256 | ⚠️ Deviation | HS256 used. Dev documented in tasks. |
| Repository pattern | ✅ Yes | |Testing block
### Testing
| Area | Tests Exist | Scenarios Covered |
|---------------------|-------------|-------------------|
| AuthService.login() | ✅ Yes | 3/4 scenarios |
| AuthController | ✅ Yes | Happy paths only |
| JWT Middleware | ❌ No | — |Spec Compliance Matrix
## Spec Compliance Matrix
| Spec Domain | Requirement | Scenario | Status | Evidence |
|-------------|--------------------|-----------------|------------|------------------------------------------------|
| [domain] | [requirement name] | [scenario name] | COMPLIANT | [evidence description] |
| [domain] | [requirement name] | [scenario name] | FAILING | [failing test name or output] |
| [domain] | [requirement name] | [scenario name] | UNTESTED | No test coverage found |
| [domain] | [requirement name] | [scenario name] | PARTIAL | [which clauses are covered and which are not] |Compliance statuses:
| Status | Meaning | Criteria |
|---|---|---|
| COMPLIANT | Fully implemented and verified | Code implements scenario + test passes (or code inspection confirms when no test runner exists) |
| FAILING | Implemented but test fails | Code implements scenario + corresponding test fails |
| UNTESTED | Implemented but no test coverage | Code implements scenario + no test covers this scenario (only when a test runner exists but no test covers it) |
| PARTIAL | Partially implemented | Code covers some but not all THEN/AND clauses of the scenario |
When no test runner exists: matrix is still produced using code inspection evidence from Step 3. Scenarios verified by code inspection only receive COMPLIANT or PARTIAL (never UNTESTED — code evidence was checked).
Suggestions block
### WARNINGS (should be resolved):
- [description]
[or: "None."]
### SUGGESTIONS (optional improvements):
- [description]
[or: "None."]Related skills
How it compares
Structured verification artifact for SDD Step 10—not a generic test-runner skill or an MCP server.
FAQ
Who is sdd-verify for?
Developers using fearovex claude-config SDD who want agents to close changes with a consistent verify report and memory persistence.
When should I use sdd-verify?
At Ship/testing when a named change is ready for sign-off: after build work, before merge or deploy, as Step 10 of the SDD flow.
Is sdd-verify safe to install?
It defines report templates and persistence shape; review the Security Audits panel on this Prism page and treat mem_save and shell commands in your SDD stack as sensitive.