Claude-skill-registry acceptance-criteria-verification
Use after implementing features - verifies each acceptance criterion with structured testing and posts verification reports to the GitHub issue
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/acceptance-criteria-verification" ~/.claude/skills/majiayu000-claude-skill-registry-acceptance-criteria-verification-cd5315 && rm -rf "$T"
skills/data/acceptance-criteria-verification/SKILL.mdAcceptance Criteria Verification
Overview
Systematically verify each acceptance criterion and post structured reports.
Core principle: Every criterion verified. Every verification documented.
Announce at start: "I'm using acceptance-criteria-verification to verify the implementation."
The Verification Process
Step 1: Extract Criteria
Read the issue and extract all acceptance criteria:
# Get issue body gh issue view [ISSUE_NUMBER] --json body -q '.body'
Parse out criteria (look for
- [ ] or - [x] patterns in acceptance criteria section).
Step 2: Plan Verification
For each criterion, determine:
| Criterion | Test Type | How to Verify |
|---|---|---|
| [Criterion 1] | Unit test | Run specific test |
| [Criterion 2] | Integration | API call + response check |
| [Criterion 3] | E2E | Browser automation |
| [Criterion 4] | Manual | Visual inspection |
Step 3: Execute Verification
For each criterion, run the appropriate verification:
Unit/Integration Tests
# Run specific tests pnpm test --grep "[test pattern]" # Or run test file pnpm test path/to/specific.test.ts
E2E Tests
# If using Playwright npx playwright test [test file] # If using browser automation MCP # Use mcp__playwright or mcp__puppeteer
Manual Verification
For criteria requiring visual or interactive verification:
- Start the application
- Navigate to relevant area
- Perform the action
- Capture screenshot if relevant
- Document result
Step 4: Record Results
For each criterion, record:
Criterion: [Text from issue] Status: PASS | FAIL | PARTIAL | SKIP Evidence: [Test output, screenshot, observation] Notes: [Any relevant details]
Step 5: Post Verification Report
Post a structured comment to the issue:
gh issue comment [ISSUE_NUMBER] --body "## Verification Report **Run**: $(date -u +%Y-%m-%dT%H:%M:%SZ) **By**: agent **Commit**: $(git rev-parse --short HEAD) **Branch**: $(git branch --show-current) ### Results | # | Criterion | Status | Notes | |---|-----------|--------|-------| | 1 | [Criterion text] | PASS | [Notes] | | 2 | [Criterion text] | FAIL | [What failed] | | 3 | [Criterion text] | PARTIAL | [What works, what doesn't] | ### Summary | Status | Count | |--------|-------| | PASS | X | | FAIL | X | | PARTIAL | X | | SKIP | X | | **Total** | **X** | ### Test Output <details> <summary>Test Results</summary> \`\`\` [test output here] \`\`\` </details> ### Next Steps - [ ] [Action items for failures/partials] "
Step 6: Update Issue Checkboxes
For each passing criterion, check it off in the issue body:
# Get current body BODY=$(gh issue view [ISSUE_NUMBER] --json body -q '.body') # Update checkboxes for passing criteria # (Implementation depends on body format) # Update issue gh issue edit [ISSUE_NUMBER] --body "$NEW_BODY"
Step 7: Update Project Fields
# Update project fields using project-status-sync skill # Verification status # - All PASS → Passing # - Any FAIL → Failing # - Mix of PASS/PARTIAL → Partial # Criteria Met count # - Count of PASS criteria # Last Verified # - Current date # Verified By # - "agent"
Status Definitions
| Status | Meaning | Action |
|---|---|---|
| PASS | Criterion fully met, verified working | Check off in issue |
| FAIL | Criterion not met, requires fix | Document what failed, return to development |
| PARTIAL | Works with issues, needs improvement | Document issues, may need fix |
| SKIP | Could not verify (blocked, N/A, etc.) | Document reason |
E2E Verification Best Practices
When using browser automation:
- Start fresh - New browser session for each verification
- Capture evidence - Screenshots at key points
- Check visible state - Not just DOM, but visible rendering
- Test error cases - Not just happy path
- Clean up - Close sessions after verification
// Example verification flow (pseudo-code) await page.goto(appUrl); await page.click('[data-testid="new-chat"]'); await page.waitForSelector('[data-testid="chat-input"]'); await page.screenshot({ path: 'new-chat-verification.png' }); // Verify expected state const title = await page.title(); expect(title).toContain('New Chat');
Handling Failures
When criteria fail:
- Document specifically what failed
- Include reproduction steps if not obvious
- Capture error messages or screenshots
- Return to development to fix
- Re-run verification after fix
Do NOT:
- Mark as PASS when it failed
- Skip verification because "it should work"
- Ignore intermittent failures
Verification Checklist
Before completing verification:
- All acceptance criteria evaluated
- Each criterion has clear PASS/FAIL/PARTIAL/SKIP status
- Evidence captured for each (test output, screenshots)
- Verification report posted to issue
- Issue checkboxes updated for passing criteria
- Project fields updated
- If any failures, next steps documented
After Verification
Based on results:
| Overall Result | Next Action |
|---|---|
| All PASS | Proceed to code review |
| Any FAIL | Return to development, fix, re-verify |
| Partial only | Discuss with user - acceptable or needs fix? |
Integration
This skill is called by:
- Step 8issue-driven-development
This skill calls:
- Update verification fieldsproject-status-sync
- Post commentsissue-lifecycle