Implement a feature or fix a bug using strict TDD. Analyzes the requirement, creates tests first, implements minimal code, then refactors. Use for feature requests, bug fixes, or enhancements that need test coverage.
Install with the open skills CLI (global, non-interactive — available in every Claude Code session):
npx skills add FastLED/FastLED --skill "tdd-implement" -g -a claude-code -yOr manually — copy the SKILL.md below into:
~/.claude/skills/tdd-implement/SKILL.md---
name: tdd-implement
description: Implement a feature or fix a bug using strict TDD. Analyzes the requirement, creates tests first, implements minimal code, then refactors. Use for feature requests, bug fixes, or enhancements that need test coverage.
argument-hint: <feature request, bug description, or issue reference>
context: fork
agent: test-writer-agent
---
# TDD Implementation — Feature-Driven Test-First Development
You are implementing a feature or fixing a bug using strict Test-Driven Development. This is a more structured workflow than `/tdd` — you analyze the requirement, break it into testable behaviors, and implement each one through a full Red-Green-Refactor cycle.
## Input
$ARGUMENTS
## Step 1: Analyze the Requirement
### Actions
1. **Read the requirement** carefully — identify what behavior needs to change or be added
2. **Find relevant source code**: Use Grep/Glob to locate the files that need to change
3. **Read existing tests**: Find any existing test coverage for the affected code
4. **Identify testable behaviors**: Break the requirement into 1-5 discrete, testable units
### Output
```
## Requirement Analysis
**Requirement**: [one-line summary]
**Source files**: [list of files that will be modified]
**Existing tests**: [list of related test files, or "none found"]
**Testable behaviors**:
1. [behavior 1 — what it does, how to verify]
2. [behavior 2 — what it does, how to verify]
3. [behavior 3 — if needed]
```
## Step 2: Implement Each Behavior via TDD
For EACH testable behavior, execute a full Red-Green-Refactor cycle:
### RED: Write Failing Test
1. Write a minimal test for this specific behavior
2. Follow all conventions from `agents/tests.md`:
- `FL_` prefixed macros (`FL_CHECK_EQ`, `FL_REQUIRE_TRUE`, etc.)
- Include `test.h` and `FastLED.h`
- `using namespace fl;` + anonymous namespace
- Mirror source path for test file placement
3. Run `bash test TestName` — verify it FAILS for the right reason
### GREEN: Minimal Implementation
1. Write the minimum code to make this test pass
2. Do NOT implement other behaviors yet
3. Run `bash test TestName` — verify it PASSES
4. Run `bash test --cpp` — verify no regressions
### REFACTOR: Clean Up
1. Improve code quality without changing behavior
2. Run tests after each change to verify they stay green
### Report Each Cycle
```
### Behavior N: [description]
- RED: Test written at tests/fl/foo.cpp — FAILS (expected: [reason])
- GREEN: Implemented in src/fl/foo.h — PASSES
- REFACTOR: [changes made, or "clean as-is"]
```
## Step 3: Integration Verification
After all behaviors are implemented:
1. **Run full test suite**: `bash test --cpp`
2. **Check for regressions**: Verify ALL tests pass, not just new ones
3. **Review changes holistically**: Ensure the implementation is cohesive
4. **Run code review**: Check changes against FastLED coding standards
### Output
```
## Integration Verification
**Full test suite**: [X/X] tests pass
**New tests added**: [count]
**Source files modified**: [list]
**Regressions**: None / [details if any]
```
## Step 4: Final Summary
```
## TDD Implementation Complete
**Requirement**: [what was implemented]
**Approach**: [brief description of the solution]
### Files Changed
| File | Change Type | Description |
|------|-------------|-------------|
| tests/fl/foo.cpp | Added | 3 test cases for [feature] |
| src/fl/foo.h | Modified | Added [function/method] |
### Test Coverage
- [Test case 1]: [what it verifies]
- [Test case 2]: [what it verifies]
- [Test case 3]: [what it verifies]
### All Tests Passing: Yes
```
## Key Rules
- **Test FIRST, implement SECOND** — this order is absolute
- **One behavior per cycle** — don't batch multiple behaviors
- **Minimal implementation** — write the simplest code that passes
- **Run tests at EVERY transition** — RED->GREEN->REFACTOR each verified
- **Stay in project root** — never `cd` to subdirectories
- **Use `bash test`** wrapper — never bare `python`, `meson`, or `ninja`
- **Extend existing test files** — don't create new ones unless necessary
- **No mocks** — use real objects and values
Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
Use when completing tasks, implementing major features, or before merging to verify work meets requirements
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes