| name | format-until-clean |
| description | 프로젝트 포맷터(prettier, biome 등)를 돌리고, 포맷터가 자동으로 못 고친 스타일 문제를 손보고, 코드베이스가 diff 하나 없이 깨끗하게 포맷될 때까지 반복하는 수동 루프입니다. 사용자가 "포맷 깔끔하게 정리해줘", "prettier 돌려서 diff 없을 때까지", "포맷팅 통일해줘", "코드 스타일 다 맞춰줘", "포맷 깨끗해질 때까지 돌려줘", "format until clean", "run prettier/biome until clean", "fix formatting until no diff"처럼 포맷을 끝까지 깨끗하게 맞추고 싶을 때 사용하세요. (구분: 린트·타입 에러까지 잡는 건 looping:lint-typecheck-fix, 네이밍·죽은 코드·디버그 잔재 정리는 looping:de-sloppify-pass, 미사용 export·고아 파일 제거는 looping:knip-until-clean, 접근성 검사 클린업은 looping:a11y-audit-until-clean) |
포맷 깨끗해질 때까지 (Format Until Clean)
포맷터를 돌리고, 남은 스타일 문제를 고치고, 코드베이스가 diff 없이 깔끔하게 포맷될 때까지 반복합니다.
| 항목 | 값 |
|---|
| 카테고리 | 테스트(Testing) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | 포맷 명령이 성공하고 git diff가 비었을 때 (남은 diff 없음) |
| 반복 한도(Max iterations) | 5 |
| 매 반복 체크 명령 | npm run format |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor · Codex |
이 루프는 언제 쓰나
포맷이 들쭉날쭉한 코드베이스를 한 번에 통일하고 싶을 때 씁니다. 포맷터를 한 번 돌리면 대부분 자동으로 정리되지만, 포맷터가 손대지 못하는 스타일 문제(긴 줄 수동 정리, import 정렬 규칙에 안 맞는 케이스 등)나, 포맷 후에도 working tree가 안정되지 않는 상황이 남곤 합니다. 이 루프는 포맷 실행 → diff 검토 → 다시 포맷해서 깨끗한지 확인을 스스로 반복하며 "더 이상 바뀌는 게 없는" 상태로 수렴시킵니다. 핵심은 포맷터가 만든 diff에 의도치 않은 변경이 섞이지 않았는지 매번 확인하는 것입니다.
루프 흐름
수동 시작 → 포맷 실행 → diff 검토 → 깨끗한지 확인 →〔피드백 게이트〕남은 diff 없음?
↑ │ 아니오
└──────────────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- 포맷 실행 — 프로젝트 포맷터(prettier, biome 등)를 돌립니다.
npm run format
- diff 검토 — 포맷팅으로 파일이 바뀌었으면 diff를 살펴 의도치 않은 편집이 없는지 확인합니다. 포맷터가 놓친 수동 스타일 문제를 직접 고칩니다.
- 깨끗한지 확인 — 포맷터를 다시 돌려 working tree가 안정적인지(더 이상 바뀌지 않는지) 확인합니다.
npm run format && git diff --quiet
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
- 스위트를 통과시키려고 테스트를 약화·삭제·skip 하지 않는다.
- 진짜 단언(assertion)을 항상 통과하는 껍데기 테스트로 바꾸지 않는다.
- green으로 만들려고 테스트를 땜질하기보다 프로덕션 코드를 고치는 쪽을 택한다.
Claude Code에서 실행하기
가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 반복합니다.
"포맷 깨끗해질 때까지(Format Until Clean)" 루프를 시작합니다.
목표: 포맷터가 남은 diff 없이 깨끗하게 실행됨
최대 반복: 5
매 반복 사이 실행: npm run format
종료 조건: 포맷 명령이 성공하고 git diff가 비었을 때
1단계: 포맷터를 실행한다. 자동으로 못 고치는 문제가 있으면 직접 고치고 반복한다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: npm run format은 예시입니다. 프로젝트에 맞게 npx prettier --write ., biome format --write ., pnpm format, cargo fmt, gofmt -w ., ruff format . 등으로 바꾸세요.
팁 / 변형
- 포맷터 교체:
npm run format을 실제 도구로 바꾸세요 — prettier는 npx prettier --write ., biome는 biome format --write ., Go는 gofmt -w ., Rust는 cargo fmt, 파이썬은 ruff format ..
- 확인 명령 강화: 종료 판정은
npm run format && git diff --quiet로 하면, 포맷 후 working tree가 정말 안 바뀌는지 한 번에 검증됩니다. git diff --quiet는 변경이 있으면 0이 아닌 코드로 끝나므로 게이트로 딱 맞습니다.
- 막힐 때: 같은 파일이 매 반복 다시 바뀐다면, 포맷터 설정(
.prettierrc, biome.json)과 에디터 자동 포맷이 충돌하거나 줄바꿈(LF/CRLF) 설정이 어긋난 경우가 많습니다. 가드레일대로 멈추고 원인 가설과 함께 보고하게 하세요.
- 연관 루프: 린트·타입 에러까지 함께 잡으려면
looping:lint-typecheck-fix, 네이밍·죽은 코드 등 폭넓은 정리는 looping:de-sloppify-pass, 미사용 export·고아 파일 제거는 looping:knip-until-clean.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Format Until Clean" loop.
Goal: formatter runs cleanly with no remaining diff
Max iterations: 5
Between iterations run: npm run format
Exit when: format command succeeds and git diff is empty
Step 1: Run the formatter. Fix any issues it cannot auto-fix, 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/format-until-clean