ywai/skills/sdd-verify/SKILL.md
Validate that implementation matches specs, design, and tasks. Trigger: "verify", "verificar", "validate", "check implementation", "quality gate", "sdd verify", "revisar cambio", "/sdd:verify".
npx skillsauth add Yoizen/dev-ai-workflow sdd-verifyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a sub-agent responsible for VERIFICATION. You compare the actual implementation against the specs, design, and tasks to find gaps, mismatches, and issues. You are the quality gate.
From the orchestrator:
proposal.md contentdesign.md contenttasks.md content (with completion status)engram | openspec | none)Read and follow skills/_shared/persistence-contract.md for mode resolution rules.
engram: Read and follow skills/_shared/engram-convention.md. Artifact type: verify-report. Retrieve all prior artifacts (proposal, spec, design, tasks, apply-progress) via 2-step recovery.openspec: Read and follow skills/_shared/openspec-convention.md. Create verify-report.md in the change directory.none: Return the full verification report inline. Do NOT create any project files.Verify ALL tasks are done:
Read tasks.md
├── Count total tasks
├── Count completed tasks [x]
├── List incomplete tasks [ ]
└── Flag: CRITICAL if core tasks incomplete, WARNING if cleanup tasks incomplete
This step is MANDATORY — do not skip it. Attempt all checks and report each result.
Build command detection:
openspec/config.yaml → rules.verify.build_command
package.json → "scripts.build"
Makefile → "build" target
Otherwise → skip build check
Test command detection:
openspec/config.yaml → rules.verify.test_command
openspec/config.yaml → rules.apply.test_command
package.json → "scripts.test"
pytest.ini / pyproject.toml → pytest
Makefile → "test" target
Otherwise → skip test run
Coverage threshold:
openspec/config.yaml → rules.verify.coverage_threshold (default: 0 = disabled)
AUTOMATED CHECKS (attempt all — report result for each):
├── Linter: e.g., npm run lint, ruff check, biome check
├── Type checker: e.g., tsc --noEmit, mypy, dotnet build
├── Build: {detected build_command}
├── Tests: {detected test_command} — run ALL tests, not just new ones
└── Coverage: if threshold > 0, check coverage report against threshold
If a command cannot be determined, mark that check as ⏭ Skipped and note why. NEVER mark a check as Skipped just to avoid running it.
For EACH spec requirement and scenario, build a behavioral compliance matrix.
A requirement is COMPLIANT only if ALL of the following are true:
FOR EACH REQUIREMENT in specs/:
├── Search codebase for implementation evidence
├── Search test files for tests covering each SCENARIO
├── Cross-reference with test results from Step 2b
└── Classify as:
✅ COMPLIANT — implemented + tested + test passed
⚠️ PARTIAL — implemented but test missing or test failed
❌ NOT COMPLIANT — not implemented
⏭ SKIPPED — intentionally deferred (must be noted in proposal/tasks)
Verify design decisions were followed:
FOR EACH DECISION in design.md:
├── Was the chosen approach actually used?
├── Were rejected alternatives accidentally implemented?
├── Do file changes match the "File Changes" table?
└── Flag: WARNING if deviation found (may be valid improvement)
SECURITY AUDIT:
├── Are there hardcoded secrets, keys, or passwords?
├── Is user input validated/sanitized before use?
├── Are new dependencies from trusted sources?
├── Are new API endpoints properly authenticated/authorized?
└── Flag: CRITICAL for security issues, WARNING for best-practice gaps
REGRESSION CHECK:
├── Do existing tests still pass? (from Step 2b full test run)
├── Are there breaking changes to public APIs or interfaces?
├── Do file deletions leave dangling imports/references?
└── Flag: CRITICAL for regressions, WARNING for potential issues
mem_save with topic_key: sdd/{change-name}/verify-reportopenspec/changes/{change-name}/verify-report.md## Verification Report
**Change**: {change-name}
**Persistence**: {engram (ID: #{id}) | openspec (path) | none (inline)}
### Completeness
| Metric | Value |
|--------|-------|
| Tasks total | {N} |
| Tasks complete | {N} |
| Tasks incomplete | {N} |
{List incomplete tasks if any}
### Automated Checks
| Check | Result | Details |
|-------|--------|--------|
| Linter | ✅ Pass / ❌ Fail / ⏭ Skipped | {details if failed or reason if skipped} |
| Type Check | ✅ Pass / ❌ Fail / ⏭ Skipped | {details if failed} |
| Build | ✅ Pass / ❌ Fail / ⏭ Skipped | {error details or reason if skipped} |
| Tests | ✅ X passed / ❌ Y failed / ⏭ Skipped | {failing test names or reason if skipped} |
| Coverage | ✅ X% (≥ threshold) / ❌ X% (< threshold) / ⏭ Disabled | |
### Spec Compliance Matrix
| Requirement | Implemented | Tests Exist | Tests Pass | Status |
|------------|-------------|-------------|------------|--------|
| REQ-XXX-001: {name} | ✅ / ❌ | ✅ / ❌ | ✅ / ❌ / ⏭ | ✅ COMPLIANT / ⚠️ PARTIAL / ❌ NOT COMPLIANT |
| REQ-XXX-002: {name} | ✅ / ❌ | ✅ / ❌ | ✅ / ❌ / ⏭ | ... |
| NFR-001: {name} | ✅ / ❌ | ✅ / ❌ | ✅ / ❌ / ⏭ | ... |
**Scenario Coverage:**
| Scenario | Spec Req | Test Exists | Test Passed | Status |
|----------|----------|-------------|-------------|--------|
| {scenario name} | REQ-XXX-001 | ✅ | ✅ | ✅ COMPLIANT |
| {scenario name} | REQ-XXX-002 | ✅ | ❌ | ⚠️ PARTIAL |
| {scenario name} | REQ-XXX-003 | ❌ | ⏭ | ❌ NOT COMPLIANT |
### Coherence (Design)
| Decision | Followed? | Notes |
|----------|-----------|-------|
| {Decision name} | ✅ Yes | |
| {Decision name} | ⚠️ Deviated | {how and why} |
### Security & Regression
| Check | Status | Notes |
|-------|--------|-------|
| Hardcoded secrets | ✅ None / ❌ Found | {details} |
| Input validation | ✅ OK / ⚠️ Gaps | {details} |
| Auth on new endpoints | ✅ OK / ⚠️ Missing | {details} |
| Breaking changes | ✅ None / ⚠️ Found | {details} |
| Dangling references | ✅ None / ⚠️ Found | {details} |
### Issues Found
**CRITICAL** (must fix before archive):
{List or "None"}
**WARNING** (should fix):
{List or "None"}
**SUGGESTION** (nice to have):
{List or "None"}
### Verdict
{PASS / PASS WITH WARNINGS / FAIL}
{One-line summary of overall status}
| Situation | Action | |-----------|--------| | Cannot run automated checks (no test infra) | Perform manual code review only; note as limitation; mark all checks ⏭ Skipped with reason | | Tests fail but failure is pre-existing | Mark as WARNING (not CRITICAL); note the test was already failing before this change | | Cannot find implementation for a requirement | Search thoroughly (file search + grep); if truly missing, mark ❌ NOT COMPLIANT | | Design.md is missing | Skip coherence check; focus on spec compliance only | | Verify-report already exists (re-verification) | Append a new section with date; preserve the history | | Coverage threshold not met | Mark as CRITICAL if P0 reqs lack coverage; WARNING otherwise |
none mode, NEVER create or modify any project filesrules.verify from openspec/config.yaml or the engram project contextstatus, executive_summary, detailed_report (optional), artifacts, next_recommended, and risksdocumentation
Yoizen UI design system guidelines and resources. Trigger: When working on Yoizen UI components, styling, colors, typography, or icons.
development
TypeScript strict patterns and best practices. Trigger: When writing TypeScript code - types, interfaces, generics.
development
Tailwind CSS 4 patterns and best practices. Trigger: When styling with Tailwind - cn(), theme variables, no var() in className.
data-ai
name: skill-sync description: > Sync skill metadata with the Auto-invoke sections in AGENTS.md. Trigger: When you change a skill's metadata (metadata.scope/metadata.auto_invoke), regenerate the Auto-invoke tables, or run ./skills/skill-sync/assets/sync.sh. metadata: author: Yoizen version: "1.0" scope: [root] auto_invoke: - "skill operations" - "workflow" - "sdd" author: Yoizen version: "1.0" scope: [root] auto_invoke: - "skill operations" - "workflow"