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
npx skills add https://github.com/nWave-ai/nWave --skill nw-ad-critique-dimensions
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).
review_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.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Use when implementing any feature or bugfix, before writing implementation code
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding assays, expression testing, thermostability measurements, enzyme activity assays, or protein sequence optimization. Also use for submitting experiments via API, tracking experiment status, downloading results, optimizing protein sequences for better expression using computational tools (NetSolP, SoluProt, SolubleMPNN, ESM), or managing protein design workflows with wet-lab validation.
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.
Take nwave-ai/nw-ad-critique-dimensions from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.