| name | autoloop-tdd |
| description | 실패하는 테스트를 먼저 쓰고 → 통과시킬 최소한의 코드를 구현하고 → 리팩터하는 red-green-refactor TDD 사이클을, 대상 동작이 테스트로 완전히 덮이고 전체 스위트가 통과할 때까지 자동으로 반복하는 닫힌 루프입니다. 사용자가 "TDD로 만들어줘", "테스트 먼저 쓰고 구현해줘", "red-green-refactor로 돌려줘", "실패 테스트부터 작성해서 기능 추가해줘", "테스트 주도로 이 기능 구현해줘", "Autoloop TDD", "test-first loop", "write a failing test then implement", "TDD this feature"처럼 테스트를 먼저 작성해 새 기능을 구현하고 싶을 때 사용하세요. (구분: 이미 깨진 기존 테스트를 통과시키는 건 looping:test-until-green, 커버리지 %를 채우려고 테스트만 추가하는 건 looping:coverage-until-threshold, spec.md 체크리스트로 요구사항을 하나씩 구현하는 건 looping:spec-first-ship, E2E 스위트를 green으로 만드는 건 looping:e2e-until-green) |
오토루프 TDD (Autoloop TDD)
테스트 우선 루프 — 실패 테스트를 쓰고, 통과시킬 최소 코드를 구현하고, 리팩터하고, 반복합니다.
| 항목 | 값 |
|---|
| 카테고리 | 테스트(Testing) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | 대상 동작이 테스트로 덮이고 모든 테스트가 통과할 때 |
| 반복 한도(Max iterations) | 12 |
| 매 반복 체크 명령 | npm test |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor |
이 루프는 언제 쓰나
새 기능이나 동작 하나를 "테스트 먼저(test-first)" 방식으로 안전하게 붙이고 싶을 때 씁니다. 곧장 구현으로 뛰어드는 대신, 에이전트가 실패 테스트 작성 → 최소 구현 → green 확인 → 리팩터를 한 동작 단위로 반복하며 회귀 없이 기능을 쌓습니다. 핵심은 통과시킬 만큼만 구현하고(불필요한 기능 추가 금지), 매 회차 끝에 전체 스위트가 green인지 확인해 다음 동작으로 넘어가기 전에 안전망을 갖추는 것입니다.
테스트가 먼저 존재하므로 "이 코드가 무슨 동작을 보장하는가"가 항상 명시적이고, 리팩터를 해도 즉시 깨짐을 잡아낼 수 있습니다.
루프 흐름
수동 시작 → 실패 테스트 작성 → 최소 구현 → green 확인 → 리팩터 →〔피드백 게이트〕대상 동작이 테스트로 덮이고 전체 스위트 통과?
↑ │ 아니오
└──────────────────────────────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- 실패 테스트 작성 — 다음 동작에 집중한 테스트를 하나 작성합니다. 실행해서 올바른 이유로 실패하는지 확인하세요.
npm test -- --testPathPattern=<new-test>
- 최소 구현 — 새 테스트를 통과시킬 가장 작은 구현을 작성합니다. 부가 기능은 넣지 않습니다.
- green 확인 — 새 테스트와 전체 스위트를 돌려 모두 통과하는지 확인합니다.
npm test
- 리팩터 — 테스트를 green으로 유지한 채 중복과 네이밍을 정리합니다. 리팩터할 때마다 테스트를 다시 돌립니다.
npm test
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
- 스위트를 통과시키려고 테스트를 약화·삭제·skip 하지 않는다.
- 진짜 단언(assertion)을 항상 통과하는 껍데기 테스트로 바꾸지 않는다.
- green으로 만들려고 테스트를 땜질하기보다 프로덕션 코드를 고치는 쪽을 택한다.
Claude Code에서 실행하기
가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 red-green-refactor 사이클을 반복합니다.
"오토루프 TDD(Autoloop TDD)" 루프를 시작합니다.
목표: 대상 동작을 테스트 우선(test-first)으로 구현하고 전체 스위트를 green으로 유지
최대 반복: 12
매 반복 사이 실행: npm test
종료 조건: 대상 동작이 테스트로 덮이고 모든 테스트가 통과할 때
1단계: 다음 동작에 대한 실패 테스트를 먼저 작성하고, 통과시킬 최소한의 코드를 구현하고, 리팩터한 뒤 반복한다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: npm test는 예시입니다. 프로젝트에 맞게 pytest, go test ./..., cargo test, pnpm test, bun test 등으로 바꾸세요. 1단계의 --testPathPattern=<new-test>도 러너에 맞는 단일 테스트 실행 방식(pytest path::test, go test -run, cargo test <name> 등)으로 교체하면 됩니다.
팁 / 변형
- 동작 단위로 쪼개기: 큰 기능은 한 번에 하나의 작은 동작만 테스트하도록 잘게 나누세요. 한 회차에 테스트 하나가 빨개졌다가 초록이 되는 리듬을 유지하는 게 핵심입니다.
- 막힐 때: 같은 테스트가 2회 반복해도 통과하지 않으면, 가드레일대로 테스트를 약화시키지 말고 멈춰서 가설과 함께 보고하게 하세요.
- 연관 루프: 이미 깨진 스위트를 통과까지 돌리는 건
looping:test-until-green, 커버리지 임계치까지 테스트를 보강하는 건 looping:coverage-until-threshold, 작성된 spec 체크리스트를 따라 구현하는 건 looping:spec-first-ship.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Autoloop TDD" loop.
Goal: implement the target behavior test-first with a green suite
Max iterations: 12
Between iterations run: npm test
Exit when: target behavior is covered and all tests pass
Step 1: Write a failing test for the next behavior, implement the minimum code to pass, refactor, and repeat.
Self-pace this loop. After each iteration, run the check command, read the output, and only continue if the exit condition is not met. Stop when the exit condition passes or max iterations is reached. Give a short status update each pass.
출처: https://loops.elorm.xyz/loops/autoloop-tdd