원클릭으로
tdd
Test-Driven Development workflow. Use for ALL code changes - features, bug fixes, refactoring. TDD is non-negotiable.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Test-Driven Development workflow. Use for ALL code changes - features, bug fixes, refactoring. TDD is non-negotiable.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Apply template-downstream to all registered downstream projects in bulk, one project at a time. Use when you want to push the latest .claude/, .mcp.json, or .pre-commit-config.yaml to every project at once. Triggers on: "일괄 배포", "전체 프로젝트에 내려보내기", "모든 프로젝트 업데이트", "broadcast template", "bulk sync".
The standard business voice for any Korean text a human reads — a formal-yet-friendly business register built on 해요체 but elevated with 합니다/습니다 endings, polite recommendation phrasing, natural greetings/closings, and readable structure. Use whenever producing or rewriting reader-facing text: Telegram replies, reports, READMEs, job outputs, human-facing notes, and especially when rewriting raw TIL/technical notes for sharing with colleagues. Triggers: 비즈니스 톤, business voice, 격식 있는 톤, 동료 공유용 재작성, formal rewrite, 보고서 톤, 발표자료 톤.
한국 특화 기능(교통·날씨·부동산·쇼핑·법률·금융·공공데이터 등) 요청이 들어오면 실행. git pull로 최신화 후 README 레지스트리에서 스킬을 골라 해당 SKILL.md만 읽어 진행한다.
Import Dev Sentinel experiences into localdocs/learn.sentinel.md. Use when the user wants to bring gotchas, failure lessons, or struggle experiences captured by Dev Sentinel into the project's local knowledge base. Triggers: "sentinel 가져와", "sentinel import", "gotcha 정리", "경험 가져와", "sentinel에서 배운 것", "실패 경험 가져와".
Update .claude/, .mcp.json, and .pre-commit-config.yaml from the upstream python-project-template repository into the current project. Only files that exist upstream are updated — project-only files are never deleted. Use when pulling latest tooling, rules, hooks, or skills from the canonical template into this project. Triggers on: "템플릿 최신화", "template sync", "upstream 반영", "template 업데이트".
Planning work in small, known-good increments. Use when starting significant work or breaking down complex tasks.
| name | tdd |
| description | Test-Driven Development workflow. Use for ALL code changes - features, bug fixes, refactoring. TDD is non-negotiable. |
TDD is the fundamental practice. Every line of production code must be written in response to a failing test.
This skill focuses on the TDD workflow/process.
Commit history should show clear RED → GREEN → REFACTOR progression.
Ideal progression:
commit abc123: [MAINTENANCE] Add failing test for user authentication
commit def456: [NEW FEATURE] Implement user authentication to pass test
commit ghi789: [MAINTENANCE] 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:
uv run pytest --cov --cov-report=term-missing
Verify ALL metrics hit 100%:
Check that tests are behavior-driven (not testing implementation details)
Watch for anti-patterns that create fake coverage (coverage theater).
Look for the "All files" line in coverage summary:
Name Stmts Miss Cover Missing
-------------------------------------------------
src/models.py 42 0 100%
src/services.py 38 0 100%
src/utils.py 15 0 100%
-------------------------------------------------
TOTAL 95 0 100%
✅ This is 100% coverage.
Watch for these signs of incomplete coverage:
❌ PR claims "100% coverage" but you haven't verified
❌ Coverage summary shows <100%
TOTAL 95 8 92%
❌ "Missing" column shows line numbers
src/services.py 38 5 87% 45-48, 52
❌ Coverage gaps without exception documentation
"What business behavior am I not testing?" — not "What line am I missing?"
uv run pytest)# 1. Write failing test
def test_reject_empty_user_names():
result = create_user(id="user-123", name="")
assert result.success is False # ❌ Test fails (no implementation)
# 2. Implement minimum code
def create_user(id: str, name: str) -> CreateUserResult:
if not name:
return CreateUserResult(success=False, error="Name required")
... # ✅ Test passes
# 3. Refactor if needed (extract validation, improve naming)
# 4. Commit
# git add . && git commit -m "[NEW FEATURE] Reject empty user names"
Before submitting PR:
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.
Before marking work complete:
commit-convention.md)