npx claudepluginhub nwave-ai/nwave --plugin nwThis skill uses the workspace's default tool permissions.
All pass before committing:
Runs quality gates for linting, type checking, unit tests with coverage, spec compliance, and smoke checks at local/CI/deploy levels.
Enforces 5 TDD test design mandates, validates test budgets via behavior counts, and checks 5-phase TDD plus external validity in code reviews.
Sets test coverage thresholds, determines strategy for unit/integration/E2E (Playwright) tests, and validates quality gates in Conductor orchestrator projects.
Share bugs, ideas, or general feedback.
All pass before committing:
Note: Reviewer approval (formerly Gate 12) and Testing Theater detection (formerly Gate 13) enforced at deliver-level Phase 4 (Adversarial Review via /nw-review), not per step.
Definition: Acceptance tests pass because test fixtures create the expected end-state directly, rather than exercising production code through the driving port. Tests verify the correct outcome from the WRONG source.
Detection: After GREEN phase, run git diff --name-only. If files_to_modify
from the roadmap step have NO changes but tests flipped from RED to GREEN, this is
Fixture Theater. The test fixtures are implementing the feature, not production code.
Litmus test: Delete the new production code (or revert production files to pre-GREEN state). If tests still pass, it's Fixture Theater.
Prevention:
files_to_modify MUST appear in git diffgit diff --stat shows only test files changed after GREEN, BLOCK the COMMITAfter every TDD cycle, Mikado leaf, or atomic transformation:
# 1. BUILD
dotnet build --configuration Release --no-restore
# 2. TEST
dotnet test --configuration Release --no-build --verbosity minimal
# 2.5. QUALITY VALIDATION (before committing)
# - Edge cases tested (null, empty, malformed, boundary)
# - No silent error handling (all errors logged/alerted)
# - Real data golden masters included where applicable
# - API assumptions documented
# 3. COMMIT (if tests pass)
# Use appropriate format below
# 4. ROLLBACK (if tests fail)
git reset --hard HEAD^ # Maintain 100% green discipline
For commit message formats, load the collaboration-and-handoffs skill.
Track: cyclomatic complexity (reduction) | maintainability index (improvement) | technical debt ratio (reduction) | test coverage (maintenance) | test effectiveness (75-80% mutation kill rate at Phase 2.25) | code smells (systematic elimination across 22 types).
For mutation testing integration, load the property-based-testing skill.
9 design constraints for clean OOP code in the hexagonal core (Jeff Bay, ThoughtWorks Anthology). Apply during GREEN and COMMIT phases.
| # | Rule | Rationale | Layer |
|---|---|---|---|
| 1 | One indentation level per method | Forces decomposition | Domain, Application |
| 2 | No else keyword | Guard clauses, early returns | Domain, Application |
| 3 | Wrap all primitives and strings | Value objects | Domain |
| 4 | First-class collections | Domain collection types | Domain |
| 5 | One dot per line | Law of Demeter | Domain, Application |
| 6 | No abbreviations | Intention-revealing names | All |
| 7 | Small entities (<50 LOC classes, <10 LOC methods) | SRP | Domain, Application |
| 8 | Max 2 instance variables per class | Promotes decomposition | Domain |
| 9 | No getters/setters | Tell, don't ask | Domain, Application |
Getters are acceptable in these cases:
Rule 9 applies strictly to domain entities and application services. Behavior through commands, not data access.
For EVERY driven port adapter, complete this table:
| Port | InMemory Behavior | Cannot Model | Covered By |
|---|---|---|---|
| (port name) | (what InMemory returns) | (real condition it can't model) | (test name that covers the gap) |
If "Covered By" is empty for any row, the test suite has a blind spot. Flag as HIGH.
For EVERY InMemory test double, verify it validates inputs like the real adapter:
| Test Double | Validates None? | Validates empty strings? | Validates ranges? | Matches real preconditions? |
|---|---|---|---|---|
| (double name) | YES/NO | YES/NO | YES/NO | YES/NO |
If any cell is NO, the test double is a liar — it accepts inputs the real adapter rejects. Flag as HIGH.
A permissive test double creates invisible wiring bugs: tests pass, production crashes.
For EVERY external system (subprocess, API, DB):
Consequence rules: