Test-Driven Development

SkillDev tools

Test-driven development workflow. Use when implementing features or fixing bugs where the user says "TDD", "test first", "write tests", or wants a red-green-refactor cycle.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Test-Driven Development skill

What this skill tells your AI

The instructions your AI receives, as published by mfielding92/clawedback in .claude/skills/tdd/SKILL.md and read by ahel’s review.

Goal

Implement a feature or bug fix using strict red-green-refactor discipline. Success = all tests pass, no regressions, and the implementation is covered by mutation-resistant assertions.

Dependencies

  • Tools: Read, Write, Edit, Bash, Grep, Glob
  • CLI: Project's test runner (e.g., pytest, jest, go test, npm test)

Context

  • Read existing test files to understand naming conventions and test framework in use
  • Check CLAUDE.md or project docs for test file locations and runner commands
  • Identify the test framework before writing any tests

Process

Step 1: Understand the Requirement

  • Read relevant code and existing tests
  • Identify the behavior being added or fixed
  • Determine test file location following project conventions

Step 2: Write Failing Tests (RED)

Write tests FIRST that:

  • Cover the happy path
  • Cover edge cases (null inputs, empty collections, boundary values)
  • Cover error conditions
  • Use mutation-resistant assertions: assert specific values, not truthiness
    • Good: assertEqual(result.status, 'completed')
    • Bad: assertTrue(result) or assertNotNone(result)

Run the tests. They MUST fail. If they pass, the tests aren't testing new behavior.

CHECKPOINT: Show the failing tests to the user. Do NOT proceed until they confirm the tests correctly capture the intended behavior. Ask: "Here are the failing tests. Do these cover what you need, or should I add/change anything before implementing?"

Step 3: Commit the Tests

Stage and note the failing tests. This prevents accidentally modifying tests to make them pass.

Step 4: Implement Minimum Code (GREEN)

Write the minimum code to make ALL tests pass:

  • No extra features
  • No premature abstractions
  • No "while I'm here" improvements
  • Just make the tests green

Run the full test suite (not just new tests) to catch regressions.

Step 5: Refactor (REFACTOR)

Only after tests pass:

  • Extract common patterns
  • Improve naming
  • Remove duplication
  • Simplify logic

Run tests after each refactor step. Tests must stay green.

Step 6: Verify

  • Run the complete test suite one final time
  • Confirm no regressions
  • Review the diff for anything unexpected

CHECKPOINT: Present the final diff and test output to the user before finishing. Ask: "All tests pass. Here's the final diff. Does this look correct, or anything to adjust?"

Output

  • Deliverable: Updated source file(s) + test file(s), all tests passing
  • Format: Code files in their existing project locations; no new files unless required by the feature
  • Test results: Show final test runner output confirming green suite
  • Logged changes: Available via git diff for user review

Testing Guidelines

Assertion Quality:

# BAD - passes with garbage data
assert result is not None
assert len(items) > 0

# GOOD - catches real bugs
assertEqual(result.user_id, 'usr_123')
assertEqual(len(items), 3)
assertEqual(items[0].name, 'Expected Name')

Test Independence:

  • Each test sets up its own state
  • No test depends on another test's side effects
  • Tests can run in any order

What to Test:

  • Public API behavior, not implementation details
  • State changes, not method calls
  • Output correctness, not internal structure

Signals

GitHub stars
23
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
tdd-mfielding92
Source
github.com/mfielding92/clawedback