에이전트가 파일을 수정하고, 테스트가 녹색으로 표시되며, 에이전트는 "수정되었다(fixed)"고 말합니다. 하지만 그 녹색 테스트는 단지 한 가지만을 알려줄 뿐입니다: 해당 명령어가 지금 통과한다는 것뿐입니다. 이 테스트는 이전에 실패했다는 사실을 알려주지 않으며, 변경 사항 없이 다시 실패할 것이라는 점도 알려주지 않습니다.
그래서 저는 FixProof를 만들었습니다. 이는 스킬 파일(skill file)과 작은 Python CLI(표준 라이브러리만 사용하며, 3.9 이상 버전 필요)로 구성되어 있으며, 이 체크들을 직접 실행합니다. 저장소의 slugify 예시에서 작동하는 모습은 다음과 같습니다.
버그
def slugify(text):
# BUG: 공백을 대시(-)로 바꾸지 않고 제거함
return text.strip().lower().replace(" ", "")
테스트는 slugify("Hello World ")의 결과가 hello-world일 것으로 예상합니다. 이중 공백에 주목하세요.
1단계: 먼저 실패를 기록하기
$ python3 scripts/verify.py init --repro "python3 -m unittest test_slugify" --suite "python3 -m unittest test_other"
FixProof 기준선(baseline): 재생성 결과 = 실패 (exit 1)
버그가 재현되었습니다. 수정 사항을 적용한 후, 다음 명령어를 실행하세요: verify.py check
2단계: 완료된 것처럼 보이는 수정
return text.strip().lower().replace(" ", "-")
제대로 된 것 같습니다. 하지만 이중 공백은 hello--world로 변합니다:
$ python3 scripts/verify.py check
FixProof 0.3.0 status: FAILED (exit 1)
- 수정 사항이 버그를 해결하지 못함: 재생성 테스트가 여전히 실패함 (3/3 실행)
출력을 대충 훑어보는 에이전트라면 이것을 완료된 것으로 간주할 것입니다. 하지만 이 CLI는 그렇지 않습니다.
3단계: 실제 수정
return "-".join(text.strip().lower().split())
FixProof 0.3.0 status: VERIFIED (exit 0)
- 기준선 실패, 수정 사항이 모든 재실행을 통과함, 되돌리기 테스트가 수정 사항 없이 실패함, 회귀 없음
revert test: fails_without_fix
제가 가장 중요하게 생각하는 부분은 '되돌리기 테스트(revert test)'입니다. 이 테스트는 임시적으로 수정을 제거하고, 다시 재생성(repro)을 실행하여 실패하는지 확인한 다음, 파일을 원래대로 되돌립니다. 만약 변경 사항 없이도 테스트가 여전히 통과한다면, 그 테스트는 실제로 버그를 테스트하고 있는 것이 아니며, '수정됨(VERIFIED)' 대신 '검증되지 않음(UNVERIFIED)'을 받게 됩니다.
다섯 가지 결과
- VERIFIED: 이전에 실패했지만 재실행할 때마다 통과하고, 되돌렸을 때는 다시 실패하며, 다른 부분은 깨지지 않은 경우
- FAILED: 재현(repro)이 여전히 실패하거나, 이전에 통과했던 부분이 이제는 실패하는 경우
- PARTIALLY VERIFIED: 재현 테스트는 통과하지만 무언가 누락된 경우 (테스트 스위트나 되돌리기 테스트 없음)
- UNVERIFIED: 버그를 절대 재현할 수 없거나, 수정 없이도 테스트가 통과하거나, 불안정한(flaky) 재실행이 발생하는 경우
- BLOCKED: 도구가 누락되었거나, 시간 초과(timeout)가 발생했거나, git 저장소가 아닌 경우
기능적 한계점 (What it can't do)
솔직하게 말씀드리자면:
- 에이전트가 재현 명령어(repro command)를 선택합니다. 만약 그 명령어가 실제로 버그를 건드리지 못한다면, VERIFIED는 단지 잘못된 명령어가 검증되었다는 의미일 뿐입니다.
- 에이전트는
.fixproof/ 디렉토리를 삭제하고 새로운 로그를 만들 수 있습니다. 이것이 중요하다면 직접 check를 다시 실행해 보세요.
- git가 필요합니다.
- 수정 사항(fix)이 테스트 파일 내부에 존재할 경우, 깨끗하게 되돌릴 수 없습니다.
- macOS는 아직 테스트되지 않았습니다.
사용 방법 (Try it)
git clone https://github.com/Livecristen/fixproof.git ~/.claude/skills/fixproof
(또는 ~/.codex/skills/ / .cursor/skills/)
버전은 v0.3.0이며, MIT 라이선스입니다: https://github.com/Livecristen/fixproof
이 상태 규칙들이 사용자가 에이전트와 작업하는 방식과 일치하는지 궁금합니다. 피드백을 환영합니다.