commitgate-tddlisted
Install: claude install-skill sol5288/commitgate
# CommitGate — Test-First 구현 루프
`AGENTS.md`의 절대 규칙 1(Test-First)을 **실행 가능한 순서**로 편 것이다. 규칙 자체는 `AGENTS.md`가 정본이다.
## 전제
**`req:next`가 `AGENT`를 반환해 phase 구현을 지시했을 때만 유효하다.** 아니면 이 스킬을 쓰지 말고 즉시 `req:next`로 돌아가라.
구현 전에 그 phase의 인수 기준을 `02-plan.md`에서 확인한다. **그 phase의 인수 기준만 구현한다** — 다음 phase 기능을 미리 만들지 않는다.
## 방법
### 1. Seam을 먼저 정한다
**seam**은 테스트를 붙이는 공개 경계다 — 내부를 들추지 않고 동작을 관찰하는 지점.
테스트를 쓰기 전에 **어느 seam에서 테스트할지 적는다.** 전부를 테스트할 수는 없다 — seam을 먼저 정하는 것이
노력을 임계 경로에 쓰는 방법이다.
**근거는 이미 승인되어 있다.** `02-plan.md`의 phase별 테스트 oracle과 `01-design.md`의 인수 기준이 seam을 정해 뒀다.
그것을 따른다. 문서가 seam을 특정하지 않았으면 **승인된 인수 기준을 관찰할 수 있는 공개 경계**를 네가 고른다 —
그 판단은 이미 승인된 범위 안이다.
⚠️ **여기서 사람 승인을 새로 만들지 마라.** `req:next`가 `AGENT`를 준 것은 "그 범위 안에서 구현하라"는 뜻이다.
사람에게 가야 할 때는 **승인된 범위를 벗어나야 할 때뿐**이다 — 인수 기준이 틀렸거나, seam이 없어서 설���를 바꿔야 하거나,
비목표를 건드려야 할 때. 그건 이미 계약의 보고 사유이고, ��때는 설계를 고쳐 **재승인**을 받는다.
### 2. Red — 실패하는 테스트를 먼저
게이트를 통과시킬 테스트를 **먼저** 쓰고, **실제로 실패하는 것을 눈으로 본다.**
실패를 보지 않은 테스트는 통과해도 아무것도 증명하지 않는다.
### 3. Green — 통과시킬 최소 구현
그 테스트를 통과시킬 **딱 그만큼만** 쓴다. 다음 테스트를 앞질러 가거나 추측성 기능을 넣지 않는다.
### 4. Refactor
동작을 바꾸지 않고 정리한다. 테스트는 계속 초록이어야 한다.
### 5. 검증하고 stage
- 관련 단위 테스트 → typecheck → 전체 테스트 순으로 돌린다.
⚠️ **명령을 추측하지 마라.** `02-plan.md`의 그 phase 검증 명령을 그대로 쓰고, 없으면 프로젝트의 script 정의와
`req.config.json`의 `packageManager`(npm·pnpm·yarn)를 보고 맞춘다. **패키지매니저를 단정하면 다른 매니저를 쓰는 프로젝트가 깨진다.**
- staged 범위를 **그 phase의 파일로 제한**한다. `git add -A` 금지.
- `git diff --cached --check`(공백)·`--stat`(범위) 확인.
- **`state.json`·`respons