Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review dimensions for acceptance test quality - happy path bias, GWT compliance, business language purity, coverage completeness, walking skeleton user-centricity, priority validation, observable behavior assertions, traceability coverage, and walking skeleton boundary proof
.claude/skills/nwave-ai-nw-ad-critique-dimensions/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 259% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 86% | 0% |
Load when performing peer review of acceptance tests (during handoff-develop).
Pattern: Only successful scenarios, error paths missing.
Detection: Count success vs error scenarios. Error should be at least 40%. Missing coverage examples: login success but no invalid password | Payment processed but no decline/timeout | Search results but no empty/error cases.
Severity: blocker (production error handling untested).
Pattern: Scenarios violate Given-When-Then structure.
Violations: Missing Given context | Multiple When actions (split into separate scenarios) | Then with technical assertions instead of business outcomes. Each scenario: Given (context), When (single action), Then (observable outcome).
Severity: high (tests not behavior-driven).
Pattern: Technical terms leak into acceptance tests.
Flag: database, API, HTTP, REST, JSON, classes, methods, services, controllers, status codes (500, 404), infrastructure (Redis, Kafka, Lambda).
Business alternatives: "Customer data is stored" not "Database persists record" | "Order is confirmed" not "API returns 200 OK" | "Payment fails" not "Gateway throws exception"
Severity: high (tests coupled to implementation).
Pattern: User stories lack acceptance test coverage.
Validation: Map each story to scenarios | Verify all AC have corresponding tests | Confirm edge cases and boundaries tested.
Severity: blocker (unverified requirements).
Pattern: Walking skeletons describe technical layer connectivity instead of user value.
Detection litmus test for @walking_skeleton scenarios:
Violations: "End-to-end order flow through all layers" (technical framing) | Then "order row inserted in database" (internal side effects) | Given "database contains user record" instead of "customer has an account"
Severity: high (skeletons that only prove wiring miss the point -- first skeleton should be demo-able to stakeholder).
Pattern: Tests address secondary concerns while larger gaps exist.
Questions: 1. Is this the largest bottleneck? (timing data or gap analysis) | 2. Simpler alternatives considered? | 3. Constraint prioritization correct? | 4. Test design decisions data-justified?
Severity: blocker if wrong problem addressed, high if no measurement data.
Pattern: Tests assert internal state or method calls instead of observable behavior.
For EVERY Then step in EVERY scenario, apply this mechanical checklist:
Concrete violations to flag:
assert mock_repo.save.called — asserts method call, not observable outcomeassert len(db.query(Order).all()) == 1 — asserts internal DB stateassert obj._internal_field == "value" — asserts private stateassert os.path.exists("output.json") — asserts file existence (implementation detail)Concrete passing assertions:
assert result.is_confirmed() — observable business outcomeassert result.order_number is not None — return value from driving portassert "confirmation" in customer_notification.subject — observable user outcomeRelationship to Dim 5 (Walking Skeleton User-Centricity):
Severity: high (tests coupled to implementation break on refactoring).
Pattern: Scenarios exist without traceability to upstream wave artifacts.
Two mandatory traceability checks:
Check A — Story-to-Scenario mapping:
docs/feature/{feature-id}/discuss/user-stories.mdCheck B — Environment-to-Scenario mapping:
docs/feature/{feature-id}/devops/environments.yamlclean, with-pre-commit, with-stale-configWhat this dimension does NOT cover:
Severity: blocker for Check A (untraceable requirements), high for Check B (untested environments).
yamlreview_id: "accept_rev_{timestamp}" reviewer: "acceptance-designer (review mode)" strengths: - "{positive test design aspect with example}" issues_identified: happy_path_bias: - issue: "Feature {name} only tests success" severity: "blocker" recommendation: "Add error scenarios: invalid input, timeout, service failure" gwt_format: - issue: "Scenario has multiple When actions" severity: "high" recommendation: "Split into separate scenarios" business_language: - issue: "Technical term '{term}' in scenario" severity: "high" recommendation: "Replace with: '{business alternative}'" coverage_gaps: - issue: "User story {US-ID} has no acceptance tests" severity: "blocker" recommendation: "Create scenarios for all AC of {US-ID}" walking_skeleton_centricity: - issue: "Walking skeleton '{name}' describes technical flow, not user goal" severity: "high" recommendation: "Reframe: title as user goal, Then steps as observable user outcomes" observable_behavior: - issue: "Scenario '{name}' Then step asserts internal state: {assertion}" severity: "high" recommendation: "Replace with observable outcome assertion: {alternative}" traceability_coverage: - issue: "Story {US-ID} has no matching scenario" severity: "blocker" recommendation: "Create at least one scenario tagged @{US-ID}" - issue: "Environment '{env}' has no matching Given clause in walking skeletons" severity: "high" recommendation: "Add walking skeleton with Given clause: 'Given a {env} environment with {preconditions}'" walking_skeleton_boundary: - issue: "WS strategy not declared in wave-decisions.md" severity: "blocker" recommendation: "Auto-detect strategy and confirm with user" - issue: "WS uses @in-memory under Strategy {C/B/D} for local resource adapter" severity: "blocker" recommendation: "Replace InMemory with real adapter (tmp_path, real subprocess)" - issue: "Driven adapter '{name}' has no real I/O integration test" severity: "blocker" recommendation: "Add integration test with real I/O for this adapter" approval_status: "approved|rejected_pending_revisions|conditionally_approved"
The acceptance-designer-reviewer (Sentinel) owns Dimensions 1-9 during DISTILL.
Responsibilities that belong to OTHER reviewers (do NOT evaluate these):
If a finding touches KPI measurement or infrastructure readiness, tag it @escalate:{reviewer} in the review output and move on. Do NOT attempt to evaluate it.
For walking skeleton scenarios, validate that the WS actually proves adapter wiring with real I/O.
Is the WS strategy declared in wave-decisions.md?
Does the WS implementation match the declared strategy?
Does every driven adapter have a real I/O integration test?
Walking skeleton fixtures — what adapter tier do they use?
Grep for @in-memory on walking skeleton scenarios under strategies B/C/D.
Other measured skills in the registry, with their headline benchmark lift.