.claude/skills/verify-task/SKILL.md
Run code-verification on a specific task. Use to verify a single task's acceptance criteria after implementation.
npx skillsauth add benjaminshoemaker/ai_coding_project_base verify-taskInstall 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.
Verify Task $1 from EXECUTION_PLAN.md using the code verification workflow.
Determine working context:
If current working directory matches pattern */features/*:
/project/features/foo → /project)If current working directory matches pattern */plans/greenfield*:
/project/plans/greenfield → /project)Otherwise:
Before starting, confirm EXECUTION_PLAN.md exists in the current working directory.
cd into their project/feature directory (the one containing EXECUTION_PLAN.md) and re-run /verify-task $1.plans/greenfield/EXECUTION_PLAN.md exists in the current working directory, tell the user to cd plans/greenfield and re-run /verify-task $1..claude/verification-config.json from PROJECT_ROOT if it existsIf the config is missing or required commands are empty:
/configure-verificationCopy this checklist and track progress:
Verify Task Progress:
- [ ] Step 1: Parse criteria from task
- [ ] Step 2: Pre-flight check (testability)
- [ ] Step 3: TDD compliance check
- [ ] Step 4: Test quality gate (optional)
- [ ] Step 5: Verify each criterion
- [ ] Step 6: Handle exit conditions
- [ ] Step 7: Generate report
- [ ] Step 8: Log to verification-log.jsonl
Follow the code-verification workflow (inline, no sub-agents):
For each acceptance criterion, create a verification item:
| Field | Value |
|-------|-------|
| ID | V-001, V-002, etc. |
| Criterion | The acceptance criterion text |
| Type | CODE, TEST, LINT, TYPE, BUILD, SECURITY, BROWSER:*, MANUAL, or MANUAL:DEFER |
| Verify | The Verify: method (test name, command, route/selector, etc.) |
| Evidence | Where evidence will be stored (log, screenshot, or output path) |
| Files | Which files to examine |
If a criterion is missing a type or Verify: line:
Confirm each criterion is testable:
Flag untestable criteria immediately.
Browser Tool Availability Check (SOFT BLOCK):
If any criteria are type BROWSER:*:
Check tool availability (fallback chain):
If at least one tool available: Continue to verification.
If NO browser tools available:
⚠️ BROWSER VERIFICATION BLOCKED
Task $1 has {N} browser-based acceptance criteria but no browser
MCP tools are available.
Browser criteria:
- {list each BROWSER:* criterion}
Options:
1. Continue anyway (browser criteria become manual verification)
2. Stop and configure browser tools first
This step evaluates development process quality, not functional correctness. TDD failures are informational — they don't block task completion.
Verify that Test-Driven Development was followed:
Test existence check — For each acceptance criterion:
Test-first check (if git history available):
# Check if test file was committed before/with implementation
git log --oneline --follow -- "path/to/test/file"
git log --oneline --follow -- "path/to/impl/file"
Test effectiveness check — For each test:
TDD Compliance Report:
TDD COMPLIANCE: Task $1
-----------------------
Tests Found: X/Y criteria covered
Test-First: PASS | WARNING | UNABLE TO VERIFY
Issues:
- [Criterion] Missing test
- [Criterion] Test added after implementation
- [Criterion] Test has no meaningful assertions
If tests are missing for any criterion, stop and write tests before proceeding.
If test runner is unavailable or not configured:
verification-config.json for testCommand/configure-verification to set up test commandsThis step checks whether tests are meaningful, not just present.
If .claude/verification-config.json includes commands.mutation_test, ask
whether to run it for this task. If yes, prefer a scoped run (changed files or
specific test paths). If mutation tests fail, mark the test-quality gate as
FAIL and stop for fixes.
Otherwise, run this lightweight checklist and record PASS/WARNING:
If any criterion lacks assertions or only smoke-tests behavior, mark the test-quality gate as FAIL and stop to improve tests.
For each criterion:
VERIFICATION: [V-001]
---------------------
Status: PASS | FAIL | BLOCKED
Location: [file:line or "N/A"]
Finding: [What was found]
Expected: [What was expected]
Suggested Fix: [If FAIL]
Verification method by type:
TEST: Use config commands.test. If Verify: includes a test name or file
path, run a focused test command if the test runner supports it; otherwise run
the full test suite and note the limitation.
LINT: Use config commands.lint.
TYPE: Use config commands.typecheck.
BUILD: Use config commands.build.
SECURITY: Run /security-scan (or equivalent for config if defined).
CODE: Inspect the file, export, or command indicated by Verify:.
BROWSER:*: Use the browser-verification skill with route/selector details.
MANUAL / MANUAL:DEFER: Attempt automation using the auto-verify skill:
MANUAL:DEFER:
Enqueue to deferred review queue (.claude/deferred-reviews.json).
Task continues — this does NOT block. Mark checkbox with — Deferred: {key}.MANUAL (blocking):
List in report for human review with reasonReport format for attempted automation:
[V-XXX] MANUAL → AUTOMATED
Method: {tool} ({pattern detected})
Result: PASS | FAIL
Duration: {ms}
Stop verification loop when:
TASK VERIFICATION: $1
=====================
TDD Compliance:
- Tests Found: X/Y criteria covered
- Test-First: PASS | WARNING | UNABLE TO VERIFY
Test Quality Gate:
- Status: PASS | WARNING | FAIL | SKIPPED
- Mutation Tests: PASSED | FAILED | SKIPPED
Criteria Verification:
- Total: N
- Passed: X
- Failed: Y
- Skipped: Z
Details:
[V-001] PASS — Criterion summary
[V-002] FAIL — Criterion summary
- Attempts: 3
- Blocker: Description
TDD Issues (if any):
- [Criterion] {issue description}
Append a JSON line to .claude/verification-log.jsonl for each criterion:
{
"timestamp": "{ISO timestamp}",
"scope": "task",
"task_id": "$1",
"criterion_id": "V-001",
"type": "TEST",
"status": "PASS",
"evidence": ".claude/verification/task-$1.md"
}
Ensure .claude/verification/ exists before writing evidence files.
| Situation | Action |
|-----------|--------|
| EXECUTION_PLAN.md not found in working directory | Stop and tell user to cd into the project/feature directory containing EXECUTION_PLAN.md |
| Task ID $1 not found in EXECUTION_PLAN.md | Stop and report "Task $1 not found"; list available task IDs for the user |
| .claude/verification-config.json missing or has empty commands | Run /configure-verification automatically; if still missing, report and mark checks as SKIPPED |
| Test runner command fails with non-zero exit (not test failures) | Distinguish execution errors from test failures; report the execution error and mark criterion as BLOCKED |
| No browser MCP tools available for BROWSER:* criteria | Prompt user to continue with manual verification or stop to configure browser tools |
- [ ] → - [x].claude/phase-state.json task entry, including per-criterion results:
{
"tasks": {
"$1": {
"status": "COMPLETE",
"completed_at": "{ISO timestamp}",
"verification": {
"passed": true,
"criteria_met": "X/X",
"tdd_compliant": true,
"criteria": {
"V-001": {"status": "PASS", "type": "TEST", "evidence": "..."},
"V-002": {"status": "PASS", "type": "CODE", "evidence": "..."}
}
}
}
}
}
jq ".tasks[\"$1\"].status" .claude/phase-state.json
If the read-back doesn't show "COMPLETE", report the write failure and retry once..claude/verification/task-$1.md.claude/verification-log.jsonl.claude/phase-state.json task entry and note failed criteria:
{
"tasks": {
"$1": {
"status": "IN_PROGRESS",
"verification": {
"passed": false,
"criteria_met": "X/Y",
"last_attempt": "{ISO timestamp}",
"attempts": N,
"failing_criteria": ["V-001", "V-003"]
}
}
}
}
testing
Audit project alignment with VISION.md, identify SDLC gaps, and generate feature proposals. Use when reviewing strategic direction or planning new features.
testing
Resolve Vercel preview deployment URL for the current git branch. Invoked by browser-verification when deployment.enabled is true, or directly to check deployment status. Use to check deployment status or when browser verification needs a URL.
tools
Discover and sync all toolkit-using projects with the latest skills. Use when skills are modified, after the post-commit hook reminds you, or to batch-sync multiple projects.
development
Update documentation after commits. Syncs README, AGENTS.md, CHANGELOG, and docs/ with code changes. Use after commits or to analyze working tree changes.