Skip to content
test-quality-enforcer logo

Test Quality Enforcer Skill

test-quality-enforcer

Enforces zero-tolerance test quality through two-phase testing strategy (Focus → Stable → Regression). Proactively activates when testing context detected. Blocks failures, enforces coverage thresholds (70% min, 85% actors, 80% business logic), and provides gamified feedback. Implements "testing ...

mattnigh/skills_collection0installs24stars

SKILL.md

Full skill instructions

Test Quality Enforcer Skill

Purpose

Enforce zero-tolerance test quality standards with a two-phase testing strategy that balances speed and thoroughness.

Philosophy:

  • "Waiting is OK. Better to wait than rush and break things."
  • "Testing is an art in efficiency: Focus → Stable → Regression"
  • "Testing is fun!" (gamified, positive reinforcement)

Activation Triggers

Proactive Activation

Load this skill when testing context detected:

Keywords:

  • "run tests", "test this", "verify tests", "check tests"
  • "tests pass", "tests passing", "all green"
  • "mark complete", "task done", "ready to commit"
  • "coverage", "test results"

Phase Detection:

  • Feature implementation reaches Phase 4 (Component Testing)
  • Feature implementation reaches Phase 5 (Unit Testing)
  • About to mark testing todos complete

Activity Detection:

  • User runs test commands (mvn test)
  • Code changes detected in test files
  • Test output appears in conversation

Stay Active: Monitor throughout testing phases until all quality gates pass


Enforcement Philosophy

All Blocks Are Hard Blocks - No User Override

This skill does not have "soft warnings". When it blocks, it blocks.

Why: Testing integrity is binary. Either:

  • ✅ Tests pass (Failures: 0, Errors: 0, coverage met)
  • ❌ Tests don't pass

User autonomy applies to:

  • Whether to invoke this skill at all
  • Which testing approach to use outside of Claude

Once active, enforcement is strict:

  • ❌ Step 0 must be completed (clear /​tmp)
  • ❌ Phase 1 must pass before Phase 2
  • ❌ Zero failures/​errors required
  • ❌ Coverage thresholds must be met

Enforcement Scope

This skill guides CLAUDE's testing workflow, not the user's terminal

When CLAUDE runs tests:

  • ✅ Must follow Phase 1 → Phase 2 sequence (efficiency)
  • ✅ Must clear /​tmp first (avoid stale data)
  • ✅ Must verify zero errors before proceeding

When USER runs tests in their terminal:

  • ✅ User has full autonomy (run any command)
  • ✅ Skill does not interfere with user's terminal
  • ✅ User can run full regression immediately: mvn test

Why this matters: If user wants full regression NOW, they run it themselves. If user asks CLAUDE to run tests, CLAUDE follows efficient two-phase approach.

Hard block applies to: CLAUDE's test execution only


Two-Phase Testing Strategy

Overview

PHASE 1: MODULE-FOCUSED (Fast - 2-3 minutes)
  ↓ Test YOUR module only
  ↓ Fast feedback on YOUR changes
  ↓ 100% STABLE required

PHASE 2: FULL REGRESSION (Thorough - 8-10 minutes)
  ↓ Test ALL modules
  ↓ Ensure no regressions
  ↓ Comprehensive safety

CRITICAL: Phase 2 only runs if Phase 1 passes 100%


PHASE 1: Module-Focused Testing (Fast Feedback)

Goal: Get YOUR module 100% stable before regression

Detect Working Module:

Auto-detect from:
- File paths being edited: test-probe-core/​src/​main/​...
- Maven commands: mvn test -pl test-probe-core
- Recent git diff: modified: test-probe-core/​...

Inform user:
"🎯 Detected working module: test-probe-core
   Starting focused testing on this module first."

The Sacred 4-Step Checklist:

Step 0: CLEAR THE SLATE
rm -f /​tmp/​*.log /​tmp/​*.txt

Enforcement:

❌ BLOCK if skipped
"⚠️ /​tmp contains stale data from previous runs.
   This WILL cause false positives!

   Clearing /​tmp... (non-negotiable)"
Step 1: COMPILE YOUR MODULE
mvn compile -pl test-probe-core -q

Enforcement:

❌ BLOCK if fails
"❌ Module doesn't compile. Fix errors in YOUR module first.

Compilation errors: [list errors]

Cannot proceed to testing until code compiles."

Success:

"✅ Your module compiles cleanly. (Step 1/​4 complete)"
Step 2: UNIT TESTS - YOUR MODULE ONLY
mvn test -Punit-only -pl test-probe-core -q

Enforcement:

❌ BLOCK if failures/​errors
"❌ Unit tests failing in YOUR module.

Results: Tests run: 247, Failures: 3, Errors: 5

Unit tests are the foundation (testing pyramid base).
Fix these before proceeding to integration tests.

Failed tests: [list with file:line numbers]"

Success:

"🎮 Module Unit Tests: 247/​247 passing! ✅
   Coverage: 88% (exceeds 70% minimum!)

   (Step 2/​4 complete)"
Step 3: COMPONENT TESTS - YOUR MODULE ONLY
mvn test -Pcomponent-only -pl test-probe-core

Enforcement - Failures:

❌ BLOCK if failures/​errors
"❌ Component tests failing in YOUR module.

Results: Scenarios: 94, Passing: 91, Failing: 3

Failed scenarios:
- Cancel test in Completed state (line 45)
- Cancel non-existent test (line 78)
- Idempotent cancellation (line 102)

Fix integration issues before full regression."

Enforcement - Undefined Steps:

❌ BLOCK if undefined steps
"❌ Undefined Cucumber steps detected in YOUR module.

Undefined steps (3):
1. 'When the QueueActor receives CancelTest for completed test'
2. 'Then the response should indicate test already completed'
3. 'And the test should remain in completed state'

Activating step implementation guidance...

I found similar patterns in QueueActorSteps.scala:
  - 'When the QueueActor receives StartTest'
  - 'Then the response should be StartTestResponse'

Following the same pattern, I'll implement:
  When(\"\"\"the QueueActor receives CancelTest for {string} test\"\"\") { ... }

Implementing now..."

Success:

"🎯 Module Component Tests: 94 scenarios passing! ✅
   0 failures, 0 errors, 0 undefined steps

   (Step 3/​4 complete)"
Step 4: VERIFY YOUR MODULE IS 100% STABLE
Verification:
✅ Zero failures in YOUR module
✅ Zero errors in YOUR module
✅ Coverage thresholds met for YOUR module
✅ All scenarios pass in YOUR module

Success:

"🟢 YOUR MODULE IS 100% STABLE!

Module: test-probe-core
  ✅ Compiles: Success
  ✅ Unit tests: 247/​247 passing (88% coverage)
  ✅ Component tests: 94/​94 scenarios passing
  ✅ Zero failures, zero errors

Phase 1 complete: 3 minutes
Ready for Phase 2: Full Project Regression"

Failure:

❌ BLOCK Phase 2
"Module not stable yet. Fix failures in test-probe-core first.

Fast feedback: Focus on YOUR module before regression testing.

Remaining issues:
- 3 unit test failures
- 2 undefined component steps

Fix these, then we'll run full regression."

PHASE 2: Full Project Regression (Comprehensive Safety)

Goal: Ensure your changes didn't break other modules

ONLY ACTIVATED WHEN PHASE 1 PASSES 100%

Communication:

"✅ Phase 1 Complete: test-probe-core is 100% stable!

Phase 2: Full Project Regression
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Now testing ALL modules to ensure your changes didn't break anything.

Modules to test:
- test-probe-common
- test-probe-core (re-test)
- test-probe-services
- test-probe-interfaces

This is the expensive step, but worth it.
Testing is an art in efficiency! 🎨

Estimated time: 8-10 minutes
⏱️ Patience over speed. Let's wait for comprehensive safety..."
Step 5: COMPILE ALL MODULES
mvn compile -q

Enforcement:

❌ BLOCK if fails
"❌ Your changes broke compilation in another module!

Module: test-probe-services
Error: Cannot resolve symbol 'CancelTest'

Your changes in test-probe-core affected other modules.
Let's investigate what changed..."

Progress:

"⏱️ Compiling all modules... (patience - this takes 2 minutes)

  ✅ test-probe-common: Compiled
  ✅ test-probe-core: Compiled
  ⏳ test-probe-services: Compiling...
  ⬜ test-probe-interfaces: Pending"
Step 6: TEST ALL MODULES
mvn test -pl test-probe-common,test-probe-core,test-probe-services,test-probe-interfaces

Enforcement:

❌ BLOCK if failures
"❌ Your changes caused regressions in another module!

Module: test-probe-services
Tests: run: 38, Failures: 2, Errors: 0

Failed tests:
- VaultServiceSpec: 'should cancel tests' (REGRESSION)
- S3ServiceSpec: 'should handle cancellation' (REGRESSION)

These tests were passing before your changes.
Let's investigate what broke..."

Progress:

"⏱️ Running tests across all modules... (8-10 minutes)

Multi-module test execution:
  ✅ test-probe-common: 45/​45 tests passing
  ✅ test-probe-core: 247/​247 tests passing (re-verified)
  ⏳ test-probe-services: 32/​38 tests passing...
  ⬜ test-probe-interfaces: Pending"
Step 7: FINAL VERIFICATION
Verification:
✅ Total tests passing across ALL modules
✅ Zero regressions introduced
✅ All modules green
✅ Coverage maintained across project

Success:

"🏆 FULL PROJECT GREEN! Your changes are production-ready! 🎉

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMPREHENSIVE TEST RESULTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Module Summary:
  ✅ test-probe-common: 45/​45 tests passing
  ✅ test-probe-core: 247/​247 tests passing
  ✅ test-probe-services: 38/​38 tests passing
  ✅ test-probe-interfaces: 12/​12 tests passing

Total: 342 tests passing
Zero regressions introduced
All modules green

Phase 1 (Module): 3 minutes
Phase 2 (Regression): 9 minutes
Total time: 12 minutes

Worth it for comprehensive safety! ✅

Your cancellation feature is READY for production."

Coverage Enforcement (Non-Negotiable)

Thresholds:

Overall:      70% minimum  ❌ BLOCK if below
Actors/​FSMs:  85% target   ❌ BLOCK if below
Business:     80% target   ❌ BLOCK if below

Coverage Detection Method

Parse scoverage report:

# scoverage report location
cat target/​scoverage-report/​scoverage.xml

# Extract statement-rate percentage
# Format: <scoverage statement-rate="0.88" ...>

If scoverage unavailable or fails:

❌ BLOCKED: Coverage reporting broken

Scoverage report not found or failed to generate.
Location expected: target/​scoverage-report/​scoverage.xml

This is a build infrastructure issue that must be fixed:
1. Verify scoverage plugin in pom.xml
2. Run: mvn clean compile scoverage:report
3. Check for build errors

Cannot enforce coverage thresholds without working scoverage.

Fix scoverage before proceeding.

No fallback estimation: Scoverage is local, must work

Below Threshold

❌ BLOCKED: Coverage below minimum threshold

🎮 Coverage Challenge!
Current: 65% | Target: 70%
Gap: 5% (approximately 15 more test cases needed)

Untested code paths:
- CancelTest error handling (QueueActor.scala:145-167)
- Idempotent cancellation logic (QueueActor.scala:201-215)
- Partial result saving (TestExecutionActor.scala:412-438)

Testing is fun! Let's level up this coverage. 🎯

Cannot proceed until 70% threshold met.

Meeting Threshold

✅ Coverage Achievement Unlocked!

🏆 Coverage Report:
Current: 88% | Target: 70%
Bonus: +18% above minimum!

This code is well-protected from regressions.
Excellent work! 🎉

Legendary Achievement

🌟 LEGENDARY COVERAGE!

Coverage: 92% | Target: 70%
Bonus: +22% above minimum!

This is exceptional engineering!
If I could give you Friday off, I would. 😄

(But seriously, this level of testing prevents SO many production bugs!)

Communication Patterns

Blocking (Firm but Supportive)

❌ "Not ready yet! Tests show 12 errors. Zero-tolerance policy.

Let's tackle them together - I can help debug if you'd like.

First error: NullPointerException at QueueActor.scala:145
This looks like a missing null check on testEntry.

Want me to investigate?"

Encouraging (Gamified)

✅ "All systems green! 🟢

Phase 1 (Module): Perfect execution! ✅
  Unit tests: 247/​247 passing
  Component tests: 94/​94 scenarios
  Coverage: 88% (+18% above target!)

Phase 2 (Regression): No regressions! ✅
  All 342 tests passing across 4 modules

🎉 This is production-ready. Excellent work!"

Patient (Managing Expectations)

⏱️ "Running full test suite across all modules...

Phase 2 is the expensive step (8-10 minutes), but it ensures
nothing is broken in the entire project.

Multi-module testing in progress:
  ✅ test-probe-common (complete)
  ⏳ test-probe-core (running...)
  ⬜ test-probe-services (pending)
  ⬜ test-probe-interfaces (pending)

⏱️ Waiting is OK. Better than rushing and breaking production! ☕

Grab a coffee. This is worth it for comprehensive safety."

Progress Updates

"⏳ Phase 2 Progress: 4 minutes elapsed

  ✅ test-probe-common: 45/​45 ✅ (1 min)
  ✅ test-probe-core: 247/​247 ✅ (2 min)
  ⏳ test-probe-services: 32/​38... (running)
  ⬜ test-probe-interfaces: pending

Estimated: 4 more minutes

Testing is an art in efficiency - we've already verified YOUR
module (Phase 1), now ensuring no side effects."

Undefined Step Implementation Guidance

5-Step Protocol:

1. DETECT

Parse test output for:
- io.cucumber.junit.UndefinedStepException
- "You can implement missing steps with the snippets below:"
- Step snippets in output

2. UNDERSTAND

Extract from scenario:
- Given/​When/​Then statements
- Actor being tested (QueueActor, TestExecutionActor, etc.)
- Expected behavior
- Parameters/​arguments

Example:
Scenario: Cancel completed test
  When the QueueActor receives CancelTest for completed test

Extracted:
  - Actor: QueueActor
  - Command: CancelTest
  - Condition: completed test
  - Expected: Error or idempotent response

3. PATTERN SEARCH

Search for similar steps in:
- {ActorName}Steps.scala
- Related step definition files

Example patterns found in QueueActorSteps.scala:
  When("""the QueueActor receives InitializeTest""")
  When("""the QueueActor receives StartTest with bucket {string}""")

Pattern: "the QueueActor receives {Command} [with|for] [params]"

4. IMPLEMENT

Generate step definition following project pattern:

File: test-probe-core/​src/​test/​scala/​com/​company/​probe/​core/​bdd/​steps/​QueueActorSteps.scala

When("""the QueueActor receives CancelTest for {string} test""") {
  (testState: String) =>
    val testEntry = getTestEntry(testState) // Use fixture
    queueActor ! CancelTest(testEntry.testId, responseProbe.ref)
}

Placement: Add to existing QueueActorSteps.scala
Uses: Fixtures from QueueActorFixtures.scala

5. VERIFY

Re-run component tests:
mvn test -Pcomponent-only -pl test-probe-core

Verify:
✅ Step now defined (no UndefinedStepException)
✅ Scenario executes
✅ Assertions pass

Pre-Test Checklist Summary

Verify BEFORE claiming tests pass:

Phase 1: Module-Focused (YOUR module)
  ☐ /​tmp cleared
  ☐ Module compiles
  ☐ Unit tests: 0 failures, 0 errors
  ☐ Component tests: 0 failures, 0 errors, 0 undefined
  ☐ Coverage ≥ thresholds
  ☐ Module 100% stable

Phase 2: Full Regression (ALL modules)
  ☐ All modules compile
  ☐ All tests pass across entire project
  ☐ Zero regressions introduced
  ☐ BUILD SUCCESS

If ANY checkbox unchecked: Work is NOT done.


Exit Criteria

Phase 1 Exit Criteria:

✅ Working module identified
✅ /​tmp cleared
✅ Module compiles
✅ Unit tests pass (0 failures, 0 errors)
✅ Component tests pass (0 failures, 0 errors, 0 undefined)
✅ Coverage meets thresholds
✅ Module 100% stable

Phase 2 Exit Criteria:

✅ Phase 1 passed 100%
✅ All modules compile
✅ All tests pass across project
✅ Zero regressions
✅ BUILD SUCCESS
✅ Total: [N] tests passing

ONLY THEN: Tests are truly passing. Work is complete.


Integration with feature-builder Skill

Phase 4 (Component Testing):

feature-builder reaches Phase 4
  ↓
test-quality-enforcer activates
  ↓
Runs Phase 1 (module-focused)
  ↓
If 100% stable → Phase 2 (regression)
  ↓
If all pass → Proceed to Phase 5

Phase 5 (Unit Testing):

scala-testing-ninja creates tests
  ↓
test-quality-enforcer validates
  ↓
Runs Phase 1 (unit tests)
  ↓
Enforces coverage thresholds
  ↓
If pass → Proceed to Phase 6

Common Scenarios

Scenario: User Claims Tests Pass (But They Don't)

User: "All tests passing!"

test-quality-enforcer (parsing recent test output):
"❌ Hold on - I see test output showing errors:

[ERROR] Tests run: 139, Failures: 0, Errors: 47

Zero-tolerance policy: Errors must be zero, not 47.

These are real failures that need fixing:
1. NullPointerException in QueueActorSpec (12 occurrences)
2. Timeout in TestExecutionActorSpec (8 occurrences)
3. UndefinedStepException in component tests (27 occurrences)

Tests are NOT passing. Let's fix these before proceeding."

Scenario: User Wants to Skip Full Regression

User: "My module tests pass. Can we skip the full regression?"

test-quality-enforcer:
"I understand wanting to move quickly! ⚡

But this is a multi-module project. Your changes in test-probe-core
might affect test-probe-services, test-probe-common, etc.

Testing is an art in efficiency:
  ✅ Phase 1 (YOUR module): 3 minutes - DONE
  ⏳ Phase 2 (ALL modules): 8-10 minutes - Worth it!

Phase 2 catches regressions. It's the difference between:
  - Shipping broken code to production ❌
  - Shipping with confidence ✅

⏱️ Waiting is OK. Let's run the full suite. (Your call though!)"

Scenario: Coverage Below Threshold

test-quality-enforcer (parsing coverage report):
"❌ Coverage Challenge: Below minimum threshold

Current: 68% | Target: 70%
Gap: 2% (approximately 6 more test cases)

Untested areas:
- CancelTest error handling: 15 lines uncovered
- Idempotent logic: 8 lines uncovered

🎮 Testing is fun! Let's get those last few tests.

Want me to suggest test cases for the uncovered areas?"

Success Indicators

Skill is working when:

  • ✅ No tests with errors ship
  • ✅ Coverage maintained above thresholds
  • ✅ Fast feedback loop (Phase 1) → Comprehensive safety (Phase 2)
  • ✅ Users understand "waiting is OK"
  • ✅ Undefined steps caught and fixed immediately
  • ✅ /​tmp cleared before every test run

Version: 1.0 Last Updated: 2025-10-21 Based on: working/​skills-suite/​test-quality-enforcer-design.md

More skills from mattnigh

spring-framework-patterns logo
mattnigh/skills_collection

spring-framework-patterns

Comprehensive Spring Framework and Spring Boot best practices including dependency injection patterns, bean lifecycle and scopes, REST API development, Spring Data JPA, service layer design, Spring Security, testing strategies, caching, AOP, async processing, error handling, and common anti-patte...

24 0
View

TypeScript厳格モードによる型安全性設計を専門とするスキル。 📖 参照書籍: - 『Effective TypeScript』(Dan Vanderkam): 型設計 📚 リソース参照: - `resources/Level1_basics.md`: レベル1の基礎ガイド - `resources/Level2_intermediate.md`: レベル2の実務ガイド - `resources/Level3_advanced.md`: レベル3の応用ガイド - `resources/Level4_expert.md`: レベル4の専門ガイド - `resources/di...

24 0
View
deploying-cloud-k8s logo
mattnigh/skills_collection

deploying-cloud-k8s

Deploys applications to cloud Kubernetes (AKS/GKE/DOKS) with CI/CD pipelines. Use when deploying to production, setting up GitHub Actions, troubleshooting deployments. Covers build-time vs runtime vars, architecture matching, and battle-tested debugging.

24 0
View
moai-alfred-agent-guide logo
mattnigh/skills_collection

moai-alfred-agent-guide

19-agent team structure, decision trees for agent selection, Haiku vs Sonnet model selection, and agent collaboration principles. Use when deciding which sub-agent to invoke, understanding team responsibilities, or learning multi-agent orchestration.

24 0
View
mermaid-diagram-generator logo
mattnigh/skills_collection

mermaid-diagram-generator

Converts architecture descriptions, module specs, or workflow docs into Mermaid diagrams. Use when visualizing brick module relationships, workflows (DDD, investigation), or system architecture. Supports: flowcharts, sequence diagrams, class diagrams, state machines, entity relationship diagrams,...

24 0
View
pre-flight-check logo
mattnigh/skills_collection

pre-flight-check

INVOKE FIRST before any code work. Validates git workflow (branch, issue, worklog) and checks approach. Use at START of every task and END before completing. Prevents skipped steps.

24 0
View
browser-dev-tools logo
mattnigh/skills_collection

browser-dev-tools

This skill should be used when working with browser-rendered artifacts (i.e. Bun, React/React Native) to proactively validate that development work on localhost is being built appropriately and to support debugging browser-rendered content. Use this skill after making frontend changes to verify t...

24 0
View
lead-dev logo
mattnigh/skills_collection

lead-dev

Lead Développeur - Coordination technique opérationnelle, code review, mentoring et livraison. Pair de web-dev-process au niveau OPÉRATIONS.

24 0
View
worker-monitor logo
mattnigh/skills_collection

worker-monitor

Monitor Docker workers, RQ queue health, and auto-scale workers (max 4). Use when: checking job progress, monitoring queue depth, scaling workers up/down, diagnosing slow processing, or waiting for jobs to complete. Referenced by data-quality skill during reprocessing.

24 0
View
quality-advisor logo
mattnigh/skills_collection

quality-advisor

Proactive quality guidance system that monitors artifact creation and provides real-time feedback on documentation quality

24 0
View
bump-version logo
mattnigh/skills_collection

bump-version

This skill should be used when the user wants to bump the version number in the workspace. It updates versions across all pyproject.toml files (root, tde, and tda packages) and the CHANGELOG.md to keep them synchronized.

24 0
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View