Verify that implemented code meets acceptance criteria from user stories. Use when validating story completion - performs code inspection, test execution, and manual checks against each AC criterion.
Verifies code meets acceptance criteria by inspecting files, running tests, and prompting for manual checks. Used after implementation to validate story completion and identify unmet criteria for remediation.
/plugin marketplace add metasaver/claude-marketplace/plugin install core-claude-plugin@metasaver-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Purpose: Verify implemented code meets acceptance criteria (AC) defined in user stories
Trigger: Called by validation-phase or /audit after code implementation
Input: User stories with AC, implemented files, test suite
Output: {verified, results[], unmet_criteria[]}
For each user story ({PROJECT}-{EPIC}-{NNN}):
- [x] (complete) or - [ ] (incomplete)For each AC in the story:
a. Code Inspection:
b. Test Execution:
__tests__/{filename}.test.{ts,js} or .spec.{ts,js})pnpm test --run {test_file}c. Manual Check Prompts:
For UI/UX or non-automatable criteria:
Compile per-story verification:
{
"story_id": "prj-epc-001",
"title": "User Authentication",
"ac_total": 4,
"ac_passed": 3,
"ac_failed": 1,
"ac_results": [
{
"criterion": "User can login with email + password",
"status": "pass",
"method": "test_execution",
"test_file": "src/__tests__/auth.test.ts",
"tests_passed": 2
},
{
"criterion": "Invalid credentials rejected",
"status": "fail",
"method": "test_execution",
"error": "Test 'Invalid credentials' failed: expected 401"
},
{
"criterion": "Login button is visible on mobile",
"status": "pending",
"method": "manual_check",
"prompt_sent": true
}
]
}
VERIFIED (100% pass):
- [x]UNMET (any AC failed):
PARTIAL (manual pending):
| Method | When to Use | Result |
|---|---|---|
| Code Inspection | File/function existence checks | Pass/Fail |
| Test Execution | Automated test suites available | Pass/Fail/Error |
| Manual Check | UI/UX or non-automatable criteria | Yes/No/Skip |
Missing Implementation File:
AC: "User model stores email address"
Method: Code Inspection
Result: FAIL - File 'src/models/User.ts' not found
Action: Return to execution for file creation
Test Failure:
AC: "Invalid password rejected"
Method: Test Execution
Result: FAIL - test 'rejects invalid password' failed
Error: Expected status 401, got 200
Action: Return to execution for code fix
Manual Confirmation Required:
AC: "Login form validation error displays in red"
Method: Manual Check
Prompt: "Verify AC: Login form validation error displays in red"
User Response: "yes" or "no"
Action: Record response, proceed or flag remediation
Success Output:
{
"verified": true,
"status": "complete",
"summary": {
"stories_verified": 5,
"total_ac": 18,
"ac_passed": 18,
"ac_failed": 0,
"verification_time_ms": 12500
},
"results": [
{
"story_id": "prj-epc-001",
"ac_total": 4,
"ac_passed": 4,
"ac_failed": 0,
"status": "verified"
}
],
"unmet_criteria": []
}
Failure Output:
{
"verified": false,
"status": "blocked",
"summary": {
"stories_verified": 5,
"total_ac": 18,
"ac_passed": 15,
"ac_failed": 3,
"verification_time_ms": 12500
},
"results": [
{
"story_id": "prj-epc-002",
"ac_total": 4,
"ac_passed": 3,
"ac_failed": 1,
"status": "unmet",
"failed_ac": [
{
"criterion": "Password reset email sent within 30 seconds",
"method": "test_execution",
"error": "Test timeout: email not sent"
}
]
}
],
"unmet_criteria": [
"prj-epc-002: AC 2 - Password reset email sent within 30 seconds",
"prj-epc-003: AC 1 - File upload supports .pdf files",
"prj-epc-005: AC 3 - Admin dashboard shows user count"
]
}
Called by:
validation-phase skill (after execution)/audit command (post-implementation)/build command (acceptance validation)Calls:
pnpm test --run)Next step: If verified → proceed to report-phase; If unmet → return to execution-phase
Input Story:
# prj-epc-001: User Authentication
## Acceptance Criteria
- [ ] User can login with email + password
- [ ] Invalid credentials rejected with 401 status
- [ ] User session persists after logout + login
- [ ] Login button is visible on mobile (manual check)
## Implementation Status
Test File: src/**tests**/auth.test.ts
Files Modified: src/auth.ts, src/services/AuthService.ts
Verification Process:
1. AC #1: "User can login with email + password"
→ Run src/__tests__/auth.test.ts
→ Test 'login with valid credentials' passes
→ Status: PASS
2. AC #2: "Invalid credentials rejected with 401 status"
→ Run src/__tests__/auth.test.ts
→ Test 'login rejects invalid credentials' passes
→ Status: PASS
3. AC #3: "User session persists after logout + login"
→ Check file: src/services/AuthService.ts exists ✓
→ Run src/__tests__/auth.test.ts
→ Test 'session persists' passes
→ Status: PASS
4. AC #4: "Login button is visible on mobile (manual)"
→ Prompt user: "Verify: Login button visible on mobile?"
→ User confirms: "yes"
→ Status: PASS
Result: ALL AC VERIFIED ✓
Update Story: Status → ✅ Verified, mark all AC checkboxes [x]