.claude/skills/acceptance-validator/SKILL.md
The project's "Gatekeeper" for quality assurance. Defines Acceptance Criteria (AC) using Gherkin syntax and validates implementations. Use this skill in two scenarios: (1) during planning to define acceptance criteria, or (2) during QA to validate that implementations meet the defined criteria. Automatically triggered during flow-plan and flow-qa-validate phases.
npx skillsauth add efiadm/informatik-ai-studio acceptance-validatorInstall 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.
The project's official "Gatekeeper" for quality assurance. This skill has two primary responsibilities:
Your expertise is in dynamic validation - adapting testing methods to fit the project's needs as defined in CLAUDE.md.
Invoke this skill in two scenarios:
/acceptance-validator define {feature_name} # Define ACs during planning
/acceptance-validator validate {feature_name} # Validate implementation during QA
Automatic triggers:
flow-plan phase when test strategy is completeflow-qa-validate phase before PR approval@project-coordinator requests quality gate validationBefore any action, read CLAUDE.md and understand:
[methodology].validation_method - How to validate (Playwright, API-Test, Manual)[stack].framework - What technology stack to test against## Testing Requirements - Specific testing standardsWhen invoked with define, act as a QA Planner.
Read: .claude/docs/{feature_name}/context_session_feature_{feature_name}.md
Understand the feature's scope, objectives, and user stories.
Read: .claude/docs/{feature_name}/backend.md (if exists)
Read: .claude/docs/{feature_name}/frontend.md (if exists)
Read: .claude/docs/{feature_name}/api_contract.md (if exists)
Read: .claude/docs/{feature_name}/test_cases.md (if exists)
Read: .claude/docs/{feature_name}/database.md (if exists)
Cross-reference all plans to ensure comprehensive coverage.
For each feature, identify:
Transform scenarios into testable Gherkin syntax:
Feature: {Feature Name}
Background:
Given the system is initialized
And the user is authenticated as "{role}"
@happy-path @critical
Scenario: Successful {action}
Given {precondition}
When the user {action}
Then {expected outcome}
And {secondary validation}
@edge-case
Scenario: {Edge case name}
Given {edge case precondition}
When the user {action with boundary value}
Then {expected handling}
@error-handling
Scenario: {Error scenario name}
Given {condition that will cause error}
When the user {action}
Then the system should display "{error message}"
And no data should be modified
For each scenario, verify:
Output Location: .claude/docs/{feature_name}/acceptance_criteria.md
CRITICAL: Use the Write tool explicitly to create the file:
.claude/docs/{feature_name}/ exists.claude/docs/{feature_name}/acceptance_criteria.mdTemplate:
# Acceptance Criteria: {Feature Name}
## Feature Overview
{Brief description from context file}
## Validation Method
**Method:** {Playwright | API-Test | Manual-Only}
**Rationale:** {Why this method was chosen based on CLAUDE.md}
## Scenarios
### Critical (Must Pass)
{Gherkin scenarios tagged @critical}
### Standard
{Gherkin scenarios for normal flows}
### Edge Cases
{Gherkin scenarios tagged @edge-case}
### Error Handling
{Gherkin scenarios tagged @error-handling}
## Security Considerations
{Security-related scenarios if applicable}
## Performance Criteria
{Performance requirements if applicable}
## Definition of Done
- [ ] All @critical scenarios pass
- [ ] All @standard scenarios pass
- [ ] Edge cases handled gracefully
- [ ] Error messages are user-friendly
- [ ] No security vulnerabilities introduced
Report to the session:
## Acceptance Criteria Defined
Feature: {feature_name}
Location: `.claude/docs/{feature_name}/acceptance_criteria.md`
Total Scenarios: {count}
- Critical: {count}
- Standard: {count}
- Edge Cases: {count}
- Error Handling: {count}
Validation Method: {method from CLAUDE.md}
Ready for implementation.
When invoked with validate, act as a Quality Auditor.
Read: CLAUDE.md → [methodology].validation_method
Read: .claude/docs/{feature_name}/acceptance_criteria.md
Parse all scenarios and their expected outcomes.
Based on validation_method, execute the appropriate validation strategy:
validation_method == "Playwright"Execute end-to-end browser tests.
Setup:
# Ensure Playwright is configured
npx playwright install --with-deps chromium
For each Gherkin scenario:
Example Playwright Validation:
// Scenario: Successful Login
test('User can login with valid credentials', async ({ page }) => {
// Given the user is on the "/login" page
await page.goto('/login');
// When the user enters valid credentials
await page.fill('[data-testid="email"]', '[email protected]');
await page.fill('[data-testid="password"]', 'validPassword123');
// And the user clicks "Submit"
await page.click('[data-testid="submit-button"]');
// Then the user should be redirected to "/dashboard"
await expect(page).toHaveURL('/dashboard');
// And a secure, HttpOnly cookie should be set
const cookies = await page.context().cookies();
const sessionCookie = cookies.find((c) => c.name === 'session');
expect(sessionCookie?.httpOnly).toBe(true);
expect(sessionCookie?.secure).toBe(true);
});
Checklist for Playwright:
validation_method == "API-Test"Execute HTTP request validations.
For each Gherkin scenario:
curl or equivalentExample API-Test Validation:
# Scenario: Successful Login via API
# Given valid user credentials exist
# When the user submits login request
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"validPassword123"}' \
https://api.example.com/auth/login)
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')
# Then the response status should be 200
if [ "$HTTP_CODE" -ne 200 ]; then
echo "[FAIL] Expected 200, got $HTTP_CODE"
exit 1
fi
# And the response should contain a token
TOKEN=$(echo "$BODY" | jq -r '.token')
if [ -z "$TOKEN" ] || [ "$TOKEN" == "null" ]; then
echo "[FAIL] No token in response"
exit 1
fi
# And the token should be a valid JWT
if ! echo "$TOKEN" | grep -qP '^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$'; then
echo "[FAIL] Token is not valid JWT format"
exit 1
fi
echo "[PASS] Login API validation successful"
Checklist for API-Test:
validation_method == "Manual-Only"Generate a structured checklist for human validation.
Manual Validation Checklist Template:
## Manual Validation Checklist
**Feature:** {feature_name}
**Validator:** @project-coordinator (Daniel)
**Date:** {current_date}
### Pre-Validation Setup
- [ ] Test environment is accessible
- [ ] Test data is prepared
- [ ] Browser/device is configured
### Scenario Validations
#### Scenario 1: {scenario_name}
**Steps:**
1. [ ] Navigate to {page/endpoint}
2. [ ] Perform {action}
3. [ ] Verify {expected outcome}
**Result:** [ ] PASS [ ] FAIL
**Notes:** ******\_\_\_******
#### Scenario 2: {scenario_name}
[Repeat for each scenario]
### Sign-Off
- [ ] All critical scenarios validated
- [ ] Issues documented
- [ ] Ready for merge: [ ] YES [ ] NO
**Validator Signature:** ******\_\_\_******
**Date:** ******\_\_\_******
Post comment requesting manual validation from Daniel.
Report Format:
## Acceptance Validation Report
**Feature:** {feature_name}
**Validation Method:** {Playwright | API-Test | Manual}
**Date:** {timestamp}
**Validator:** @acceptance-validator
---
### Summary
| Status | Count |
| ------ | ----- |
| PASS | {n} |
| FAIL | {n} |
| SKIP | {n} |
**Overall Result:** {READY FOR MERGE | NEEDS WORK}
---
### Detailed Results
#### Critical Scenarios
- [PASS] Scenario: Successful Login
- Validation: Redirected to /dashboard, cookie set correctly
- [FAIL] Scenario: Invalid Password
- **Expected:** 401 error with message "Invalid credentials"
- **Actual:** 500 Internal Server Error
- **Evidence:** [screenshot/curl output]
#### Standard Scenarios
[List all standard scenarios with results]
#### Edge Cases
[List edge case scenarios with results]
---
### Failures Analysis
1. **Invalid Password Error Handling**
- **Root Cause:** Unhandled exception in auth service
- **Suggested Fix:** Add try-catch in `/auth/login` endpoint
- **Priority:** HIGH
---
### Recommendation
**{READY FOR MERGE | NEEDS WORK}**
{If NEEDS WORK:}
@project-coordinator (Daniel), this implementation has {n} failing scenarios.
The following issues must be addressed before merge:
1. {Issue 1}
2. {Issue 2}
{If READY FOR MERGE:}
@project-coordinator (Daniel), all acceptance criteria have been validated.
This PR is ready for merge.
# Acceptance Criteria: {Feature Name}
## Metadata
- **Created:** {date}
- **Author:** @acceptance-validator
- **Feature:** {feature_name}
- **Version:** 1.0
## Feature Overview
{Brief description}
## Validation Method
**Method:** {method}
**Tools Required:** {Playwright | curl | Manual checklist}
## Scenarios
### Critical (Must Pass)
```gherkin
@critical
Scenario: {name}
Given {precondition}
When {action}
Then {outcome}
```
Scenario: {name}
Given {precondition}
When {action}
Then {outcome}
@edge-case
Scenario: {name}
Given {boundary condition}
When {action}
Then {expected handling}
@error-handling
Scenario: {name}
Given {error condition}
When {action}
Then {error response}
### validation_report.md Template
```markdown
# Validation Report: {Feature Name}
## Summary
- **Date:** {date}
- **Method:** {method}
- **Result:** {PASS | FAIL}
## Results Matrix
| Scenario | Status | Notes |
|----------|--------|-------|
| {name} | PASS | - |
| {name} | FAIL | {reason} |
## Failures (if any)
### {Failing Scenario Name}
- **Expected:** {expected}
- **Actual:** {actual}
- **Evidence:** {screenshot/log}
- **Suggested Fix:** {fix}
## Recommendation
{Final recommendation}
.claude/docs/{feature}/acceptance_criteria.md, reports inlineFeature: User Authentication
Background:
Given the application is running at "http://localhost:3000"
And the database has a test user with email "[email protected]"
@critical @happy-path
Scenario: Successful login with valid credentials
Given the user is on the "/login" page
When the user enters "[email protected]" in the email field
And the user enters "ValidPass123!" in the password field
And the user clicks the "Sign In" button
Then the user should be redirected to "/dashboard"
And a session cookie should be set with HttpOnly flag
And the user's name should be displayed in the header
@critical @security
Scenario: Login fails with invalid password
Given the user is on the "/login" page
When the user enters "[email protected]" in the email field
And the user enters "WrongPassword" in the password field
And the user clicks the "Sign In" button
Then the user should see an error message "Invalid email or password"
And the user should remain on the "/login" page
And no session cookie should be set
@edge-case
Scenario: Login with email containing special characters
Given a user exists with email "[email protected]"
When the user enters "[email protected]" in the email field
And the user enters the correct password
And the user clicks the "Sign In" button
Then the login should succeed
@error-handling
Scenario: Login attempt when server is unavailable
Given the authentication service is down
When the user attempts to login
Then the user should see an error message "Service temporarily unavailable"
And the system should not crash
Feature: User Profile API
Background:
Given the API is accessible at "https://api.example.com"
And the user has a valid JWT token
@critical
Scenario: Get user profile successfully
Given the user is authenticated
When the user sends GET request to "/api/users/me"
Then the response status should be 200
And the response should contain "id", "email", "name"
And the response should not contain "password" or "passwordHash"
@security
Scenario: Reject request without authentication
Given no authentication token is provided
When the user sends GET request to "/api/users/me"
Then the response status should be 401
And the response should contain error "Unauthorized"
@edge-case
Scenario: Handle deleted user profile request
Given the user account has been soft-deleted
When the user sends GET request to "/api/users/me"
Then the response status should be 404
And the response should contain error "User not found"
Current Version: 1.0.0 Last Updated: 2026-01-17 Status: Production
development
Comprehensive frontend development skill for building modern, performant web applications using ReactJS, NextJS, TypeScript, Tailwind CSS. Includes component scaffolding, performance optimization, bundle analysis, and UI best practices. Use when developing frontend features, optimizing performance, implementing UI/UX designs, managing state, or reviewing frontend code.
tools
Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup, infrastructure as code, deployment automation, and monitoring. Use when setting up pipelines, deploying applications, managing infrastructure, implementing monitoring, or optimizing deployment processes.
development
World-class data science skill for statistical modeling, experimentation, causal inference, and advanced analytics. Expertise in Python (NumPy, Pandas, Scikit-learn), R, SQL, statistical methods, A/B testing, time series, and business intelligence. Includes experiment design, feature engineering, model evaluation, and stakeholder communication. Use when designing experiments, building predictive models, performing causal analysis, or driving data-driven decisions.
development
World-class data engineering skill for building scalable data pipelines, ETL/ELT systems, and data infrastructure. Expertise in Python, SQL, Spark, Airflow, dbt, Kafka, and modern data stack. Includes data modeling, pipeline orchestration, data quality, and DataOps. Use when designing data architectures, building data pipelines, optimizing data workflows, or implementing data governance.