Test-Driven Development
SkillDev toolsTest-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.
No other account needed.
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)orassertNotNone(result)
- Good:
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 difffor 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