.claude/skills/tdd/SKILL.md
Test-Driven Development workflow. Use for ALL code changes - features, bug fixes, refactoring. TDD is non-negotiable.
npx skillsauth add taewook486/real-estate-mcp tddInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
TDD is the fundamental practice. Every line of production code must be written in response to a failing test.
For how to write good tests, load the testing skill. This skill focuses on the TDD workflow/process.
Commit history should show clear RED → GREEN → REFACTOR progression.
Ideal progression:
commit abc123: test: add failing test for user authentication
commit def456: feat: implement user authentication to pass test
commit ghi789: refactor: extract validation logic for clarity
TDD evidence may not be linearly visible in commits in these cases:
1. Multi-Session Work
2. Context Continuation
3. Refactoring Commits
When exception applies, document in PR description:
## TDD Evidence
RED phase: commit c925187 (added failing tests for shopping cart)
GREEN phase: commits 5e0055b, 9a246d0 (implementation + bug fixes)
REFACTOR: commit 11dbd1a (test isolation improvements)
Test Evidence:
✅ 4/4 tests passing (7.7s with 4 workers)
Important: Exception is for EVIDENCE presentation, not TDD practice. TDD process must still be followed - these are cases where commit history doesn't perfectly reflect the process that was actually followed.
Always run coverage yourself before approving PRs.
Before approving any PR claiming "100% coverage":
Check out the branch
git checkout feature-branch
Run coverage verification:
cd packages/core
pnpm test:coverage
# OR
pnpm exec vitest run --coverage
Verify ALL metrics hit 100%:
Check that tests are behavior-driven (not testing implementation details)
For anti-patterns that create fake coverage (coverage theater), see the testing skill.
Look for the "All files" line in coverage summary:
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
---------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
setup.ts | 100 | 100 | 100 | 100 |
context.ts | 100 | 100 | 100 | 100 |
endpoints.ts | 100 | 100 | 100 | 100 |
✅ This is 100% coverage - all four metrics at 100%.
Watch for these signs of incomplete coverage:
❌ PR claims "100% coverage" but you haven't verified
❌ Coverage summary shows <100% on any metric
All files | 97.11 | 93.97 | 81.81 | 97.11 |
❌ "Uncovered Line #s" column shows line numbers
setup.ts | 95.23 | 100 | 60 | 95.23 | 45-48, 52-55
❌ Coverage gaps without explicit exception documentation
"What business behavior am I not testing?"
NOT "What line am I missing?"
Add tests for behavior, and coverage follows naturally.
No exceptions without explicit approval and documentation.
If 100% coverage cannot be achieved:
Step 1: Document in package README
Explain:
Step 2: Get explicit approval
From project maintainer or team lead
Step 3: Document in CLAUDE.md
Under "Test Coverage: 100% Required" section, list the exception
Example Exception:
## Current Exceptions
- **Next.js Adapter**: 86% function coverage
- Documented in `/packages/nextjs-adapter/README.md`
- Missing coverage from SSR functions (tested in E2E layer)
- Approved: 2024-11-15
The burden of proof is on the requester. 100% is the default expectation.
pnpm test:watch)# 1. Write failing test
it('should reject empty user names', () => {
const result = createUser({ id: 'user-123', name: '' });
expect(result.success).toBe(false);
}); # ❌ Test fails (no implementation)
# 2. Implement minimum code
if (user.name === '') {
return { success: false, error: 'Name required' };
} # ✅ Test passes
# 3. Refactor if needed (extract validation, improve naming)
# 4. Commit
git add .
git commit -m "feat: reject empty user names"
Use conventional commits format:
feat: add user role-based permissions
fix: correct email validation regex
refactor: extract user validation logic
test: add edge cases for permission checks
docs: update architecture documentation
Format:
feat: - New featurefix: - Bug fixrefactor: - Code change that neither fixes bug nor adds featuretest: - Adding or updating testsdocs: - Documentation changesBefore submitting PR:
Example PR Description:
## Summary
Adds support for user role-based permissions with configurable access levels.
## Behavior Changes
- Users can now have multiple roles with fine-grained permissions
- Permission check via `hasPermission(user, resource, action)`
- Default role assigned if not specified
## Test Evidence
✅ 42/42 tests passing
✅ 100% coverage verified (see coverage report)
## TDD Evidence
RED: commit 4a3b2c1 (failing tests for permission system)
GREEN: commit 5d4e3f2 (implementation)
REFACTOR: commit 6e5f4a3 (extract permission resolution logic)
After green, classify any issues:
| Priority | Action | Examples | |----------|--------|----------| | Critical | Fix now | Mutations, knowledge duplication, >3 levels nesting | | High | This session | Magic numbers, unclear names, >30 line functions | | Nice | Later | Minor naming, single-use helpers | | Skip | Don't change | Already clean code |
For detailed refactoring methodology, load the refactoring skill.
let/beforeEach for test dataFor detailed testing anti-patterns, load the testing skill.
Before marking work complete:
let/beforeEach)testing
--- name: worklog description: Update worklog files by moving tasks between todo/doing/done states. Use when recording task progress, starting new work, or marking tasks complete. Requires explicit arguments: worklog [done|doing|todo] [description]. --- # Worklog Update task state in worklog files. Requires explicit arguments. ## Worklog Files - `localdocs/worklog.todo.md` — backlog - `localdocs/worklog.doing.md` — in progress - `localdocs/worklog.done.md` — completed (grouped by date, appen
tools
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
development
Refactoring assessment and patterns. Use after tests pass (GREEN phase) to assess improvement opportunities.
tools
Expert assistant for developing Model Context Protocol (MCP) servers in Python. Use when creating, debugging, or optimizing MCP servers with FastMCP, tools, resources, and prompts.