ワンクリックで
test-driven-development
Use when implementing any feature or bugfix, before writing implementation code
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Use when implementing any feature or bugfix, before writing implementation code
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Use when reviewing a spec or task graph for completeness before implementation
Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging in, or automating browser actions
Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging in, or automating browser actions
Use when decomposing a spec, design, or feature description into a task dependency graph with self-evaluating acceptance criteria
Use when doing creative product, feature, component, functionality, or behavior design work
Use when infrastructure or features are built but before declaring done -- verifies work is wired into the system and actively used
| name | test-driven-development |
| description | Use when implementing any feature or bugfix, before writing implementation code |
Write the test first. Watch it fail. Write minimal code to pass.
Core principle: If you didn't watch the test fail, you don't know if it tests the right thing.
Violating the letter of the rules is violating the spirit of the rules.
Always:
Exceptions (ask the user):
Thinking "skip TDD just this once"? Stop. That's rationalization.
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
Write code before the test? Delete it. Start over.
No exceptions:
Implement fresh from tests. Period.
Write one minimal test showing what should happen.
```python def test_retries_failed_operations_3_times(): attempts = 0def operation():
nonlocal attempts
attempts += 1
if attempts < 3:
raise RuntimeError("fail")
return "success"
result = retry_operation(operation)
assert result == "success"
assert attempts == 3
Clear name, tests real behavior, one thing
</Good>
<Bad>
```python
def test_retry_works(mocker):
mock = mocker.patch("module.operation",
side_effect=[RuntimeError(), RuntimeError(), "success"])
retry_operation(mock)
assert mock.call_count == 3
Vague name, tests mock not code
Requirements:
MANDATORY. Never skip.
# Go
go test ./path/to/...
# Python
uv run pytest path/to/test_file.py
Confirm:
Test passes? You're testing existing behavior. Fix test.
Test errors? Fix error, re-run until it fails correctly.
Write simplest code to pass the test.
```go func RetryOperation[T any](fn func() (T, error)) (T, error) { var zero T for i := 0; i < 3; i++ { result, err := fn() if err == nil { return result, nil } if i == 2 { return zero, err } } return zero, errors.New("unreachable") } ``` Just enough to pass ```go func RetryOperation[T any]( fn func() (T, error), opts ...RetryOption, // YAGNI ) (T, error) { // configurable retries, backoff, callbacks... } ``` Over-engineeredDon't add features, refactor other code, or "improve" beyond the test.
MANDATORY.
go test ./path/to/...
uv run pytest path/to/test_file.py
Confirm:
Test fails? Fix code, not test.
After green only:
Keep tests green. Don't add behavior.
| Excuse | Reality |
|---|---|
| "Too simple to test" | Simple code breaks. Test takes 30 seconds. |
| "I'll test after" | Tests passing immediately prove nothing. |
| "Already manually tested" | Ad-hoc ≠ systematic. No record, can't re-run. |
| "Deleting X hours is wasteful" | Sunk cost fallacy. Keeping unverified code is debt. |
| "Keep as reference" | You'll adapt it. That's testing after. Delete means delete. |
| "Need to explore first" | Fine. Throw away exploration, start with TDD. |
| "TDD will slow me down" | TDD faster than debugging. Pragmatic = test-first. |
All of these mean: Delete code. Start over with TDD.
| Problem | Solution |
|---|---|
| Don't know how to test | Write wished-for API. Write assertion first. Ask the user. |
| Test too complicated | Design too complicated. Simplify interface. |
| Must mock everything | Code too coupled. Use dependency injection. |
| Test setup huge | Extract helpers. Still complex? Simplify design. |
Before marking work complete:
Can't check all boxes? You skipped TDD. Start over.
Production code → test exists and failed first
Otherwise → not TDD
No exceptions without the user's permission.