acceptance-criteria-verification
npx machina-cli add skill troykelly/claude-skills/acceptance-criteria-verification --openclawAcceptance 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:
issue-driven-development- Step 8
This skill calls:
project-status-sync- Update verification fieldsissue-lifecycle- Post comments
Source
git clone https://github.com/troykelly/claude-skills/blob/main/skills/acceptance-criteria-verification/SKILL.mdView on GitHub Overview
Acceptance Criteria Verification systematically checks every criterion of a GitHub issue after feature work. It extracts criteria, plans verification, executes unit, integration, E2E, or manual checks, records results, and posts a structured verification report back to the issue. This creates an auditable trail proving each criterion is met.
How This Skill Works
It reads the issue body to extract criteria marked as - [ ] or - [x], maps each criterion to an appropriate test type, and runs the corresponding verifications (pnpm test for unit/integration, Playwright or MCP-based E2E, or manual steps). It then records evidence for each criterion and posts a structured verification report to the issue, followed by updating the issue checkboxes and project fields to reflect the results.
When to Use It
- After implementing a feature, to verify every acceptance criterion listed in the GitHub issue body.
- When you need auditable proof of verification logged in the issue for stakeholders.
- When criteria include unit, integration, E2E, or manual verification.
- When you want to automatically update checkboxes and project status after verification.
- When coordinating feature work across teammates and needing traceable status updates.
Quick Start
- Step 1: Identify the ISSUE_NUMBER and ensure the gh CLI is authenticated.
- Step 2: Run the skill after implementing the feature to extract criteria and plan verifications.
- Step 3: Review the verification report in the issue, update checkboxes, and refresh project fields.
Best Practices
- Announce the verification at the start with the exact phrase: "I'm using acceptance-criteria-verification to verify the implementation."
- Parse criteria precisely from the issue body by scanning for - [ ] and - [x] markers.
- Assign a concrete test type (Unit, Integration, E2E, Manual) to each criterion.
- Capture evidence (logs, test output, screenshots) for every criterion.
- Post a structured verification report to the issue and update checkboxes and project fields.
Example Use Cases
- Verify a new login feature with criteria for successful login, error handling, and session persistence.
- Add a new API endpoint with criteria for status 200, response schema, and error handling.
- Validate a UI component using Playwright E2E tests and a manual accessibility check.
- Confirm a database migration with unit tests for new fields and integration tests for data integrity.
- Apply a bug fix and accompany it with regression tests across unit/integration and visual checks.