여러 AI가 번갈아 일하는 프로젝트가 있다. 어느 날 저장소를 열었더니 새 코드 1,664줄이 커밋돼 있었다.
그런데 작업 일지에도, 진행 문서에도, 원장에도 그 작업이 한 줄도 없었다. 누가, 왜, 어디까지 했는지 아무 데도 안 적혀 있었다.
이틀 동안 상태가 어긋나 있었다
다른 실행자가 코어를 구현하고 커밋까지 했는데, 종료 절차를 건너뛴 것이다. 살아남은 단서는 커밋 메시지와 작업 큐 파일 둘뿐이었다.
그 둘을 대조해서 상태를 복원했다. 복원 중에 상태 문서를 다시 만드는 생성기의 경로를 몰라서 또 헤맸다. 경로는 큐 파일 안에 적혀 있었는데, 늘 있던 폴더들만 뒤졌다.
이 이틀 동안 진행 문서는 “구현 전”이라 말하고 저장소는 “구현됨”이라 말했다. 어느 쪽을 믿느냐에 따라 다음 작업이 달라지는 상태였다. 하마터면 이미 된 일을 다시 하거나, 검증 없이 다음으로 넘어갈 뻔했다.
일은 기록까지가 일이다
코드가 남았으니 된 것 아니냐고 할 수 있다. 아니었다. 코드에는 가정과 검증 범위가 안 담긴다. 그 작업에는 리뷰 없이 사실로 채택하면 안 되는 설계 가정이 7건 있었다. 기록이 없었으면 그 가정들이 조용히 사실이 됐을 것이다.
종료 절차를 실행자 불문으로 못 박았다
재발 방지로, 누가 일하든 세션을 닫을 때 세 가지는 예외 없이 하도록 규칙을 박았다. 작업 큐 상태 갱신 · 상태 문서 재생성 · 원장에 한 줄 추가. 사람이든 AI든, 급하든 아니든. 기록이 빠진 완료는 완료가 아니라 미확인 변경이다.
재발방지 체크리스트
① 완료의 정의에 기록을 포함한다. 코드만 남은 작업은 미확인 변경으로 취급한다.
② 진행 문서와 저장소가 다른 말을 하면 즉시 정지하고 대조부터 한다.
③ 복원의 단서는 커밋 메시지와 상태 파일이다. 커밋 메시지를 성의 있게 쓰는 이유다.
④ 도구·생성기의 경로는 상태 파일 안에 적어둔다. 사람 기억은 이틀을 못 간다.
① 완료의 정의에 기록을 포함한다. 코드만 남은 작업은 미확인 변경으로 취급한다.
② 진행 문서와 저장소가 다른 말을 하면 즉시 정지하고 대조부터 한다.
③ 복원의 단서는 커밋 메시지와 상태 파일이다. 커밋 메시지를 성의 있게 쓰는 이유다.
④ 도구·생성기의 경로는 상태 파일 안에 적어둔다. 사람 기억은 이틀을 못 간다.