| name | coverage-until-threshold |
| description | 테스트를 추가해 코드 커버리지(coverage)를 목표 임계치(예: 80%)까지 끌어올리는 닫힌 루프입니다. 프로덕션 동작은 불필요하게 바꾸지 않고, 커버되지 않은 분기에만 집중 테스트를 더해 "임계치 충족 + 전체 테스트 통과(종료 코드 0)"에 수렴시킵니다. 사용자가 "커버리지 80%까지 올려줘", "테스트 커버리지 끌어올려줘", "커버리지 임계치 채워줘", "안 덮인 코드에 테스트 추가해줘", "coverage until threshold", "raise test coverage to 80%", "add tests until coverage passes"처럼 커버리지 목표를 채우고 싶을 때 사용하세요. (구분: 그냥 깨진 테스트를 통과시키는 건 looping:test-until-green, 실패 테스트를 먼저 쓰는 TDD 사이클은 looping:autoloop-tdd, 불안정·간헐 실패 분류는 looping:flaky-test-triage, e2e 스위트 통과는 looping:e2e-until-green) |
커버리지 임계치까지 (Coverage Until Threshold)
프로덕션 동작은 건드리지 않고, 커버리지가 목표 임계치(예: 80%)를 채울 때까지 집중 테스트를 더합니다.
| 항목 | 값 |
|---|
| 카테고리 | 테스트(Testing) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | 커버리지가 목표 임계치를 충족하고, 테스트가 종료 코드 0으로 끝날 때 |
| 반복 한도(Max iterations) | 12 |
| 매 반복 체크 명령 | npm test -- --coverage |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor |
이 루프는 언제 쓰나
커버리지 게이트(예: "PR은 80% 이상")가 걸려 있는데, 어느 파일·어느 분기가 안 덮였는지 일일이 들여다보며 테스트를 채우기 번거로울 때 씁니다. 한 번 시작하면 에이전트가 커버리지 측정 → 가장 큰 미커버 구간에 집중 테스트 추가 → 재측정을 스스로 반복하며 임계치 충족에 수렴합니다. 핵심은 커버되지 않은 분기에 꼭 필요한 최소 테스트만 더하는 것입니다. 숫자를 채우려고 snapshot을 남발하거나 의미 없는 단언을 박아 넣지 않고, 프로덕션 코드의 동작도 불필요하게 바꾸지 않습니다.
루프 흐름
수동 시작 → 커버리지 측정 → 테스트 추가 → 재측정 →〔피드백 게이트〕임계치 충족 & 전부 통과?
↑ │ 아니오
└────────────────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- 커버리지 측정 — 커버리지 리포트를 켜고 테스트를 실행합니다. 어느 파일·분기가 안 덮였는지 확인합니다.
npm test -- --coverage
- 테스트 추가 — 커버되지 않은 분기를 덮는 데 필요한 가장 작은 테스트만 작성합니다. snapshot 남발이나 의미 없는(trivial) 단언은 금지.
- 재측정 — 커버리지를 다시 돌려 임계치가 충족됐는지 확인합니다.
npm test -- --coverage
가드레일 (점수 조작 방지 규칙)
커버리지 숫자나 종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
- 스위트를 통과시키려고 테스트를 약화·삭제·skip 하지 않는다.
- 진짜 단언(assertion)을 항상 통과하는 껍데기 테스트로 바꾸지 않는다.
- green으로 만들려고 테스트를 땜질하기보다 프로덕션 코드를 고치는 쪽을 택한다.
Claude Code에서 실행하기
이 루프는 수동(manual) 트리거입니다. 가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 반복합니다.
"커버리지 임계치까지(Coverage Until Threshold)" 루프를 시작합니다.
목표: 커버리지가 목표 임계치(기본 80%)를 충족하고 모든 테스트가 통과
최대 반복: 12
매 반복 사이 실행: npm test -- --coverage
종료 조건: 커버리지 임계치가 충족되고 테스트가 종료 코드 0으로 끝날 때
1단계: 커버리지를 실행한다. 가장 큰 미커버 구간부터 집중 테스트를 추가하고 반복한다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: 임계치를 명시하고 싶으면 첫 줄에 "목표 80%" 대신 원하는 숫자를 적어 주세요. npm test -- --coverage도 예시이므로 프로젝트에 맞게 바꾸면 됩니다(아래 팁 참고).
팁 / 변형
- 체크 명령 교체:
npm test -- --coverage는 Jest 예시입니다. Vitest는 vitest run --coverage, 파이썬은 pytest --cov, Go는 go test -cover ./..., Rust는 cargo tarpaulin 등으로 바꾸세요.
- 임계치 조정: 목표를 80% 대신 90%로 올리거나, 전체 대신 변경된 파일·특정 디렉터리만 측정하도록 범위를 좁히면 더 빠르게 수렴합니다.
- 막힐 때: 같은 구간이 계속 미커버로 남으면, 테스트하기 어려운 설계(과한 결합, 부수효과 등)가 원인일 수 있습니다. 숫자를 억지로 끌어올리지 말고 가드레일대로 멈추고 보고하게 하세요.
- 연관 루프: 일단 깨진 테스트부터 green으로 만들려면
looping:test-until-green, 새 기능을 테스트 우선으로 쌓으려면 looping:autoloop-tdd, 채운 뒤 정리는 looping:de-sloppify-pass.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Coverage Until Threshold" loop.
Goal: coverage meets the target threshold (default 80%) with all tests passing
Max iterations: 12
Between iterations run: npm test -- --coverage
Exit when: coverage threshold is met and tests exit 0
Step 1: Run coverage. Add focused tests for the biggest uncovered gaps, then 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/coverage-until-threshold