PASS는 성공이 아니다 — 1인 AI 미디어 회사 빌드로그
나는 1인 AI 미디어 회사를 혼자 운영하는 개발자다. 콘텐츠를 수집하고, 다시 쓰고, 검수하고, 발행하는 일을 여러 AI 에이전트가 나눠 맡도록 시스템을 직접 지었다. 이 글에서 자랑하고 싶은 건 그 시스템이 잘 돌아간다는 사실이 아니라, 그것이 자주 틀렸고 그때마다 내가 틀림을 기록으로 남기고 정정했다는 사실이다. 두 달 동안 내가 배운 한 문장은 이거다. PASS는 성공이 아니다. 통과 표시는 동작의 증거가 아니라 동작을 확인하지 않았다는 증거일 때가 더 많았다.
위장 성공
첫 번째 데임은 알림 봇이었다. 봇을 재가동하고 로그에 정상 신호가 뜨자 “됐다”고 결론냈다. 그 안에는 구조적 버그가 셋이나 숨어 있었다 — 연결이 빠져 있었고, 출력은 어딘가로 폐기되고 있었고, 세션은 연속되지 않았다. 표면의 성공 신호가 세 개의 실패를 덮고 있었던 것이다. 결국 52분을 연속으로 실측하고 나서야 진짜로 동작하는지를 확인했다. 여기서 첫 자기룰이 섰다. 구조 검증은 동작 검증이 아니다. 구성이 맞다는 것과 실제로 흐른다는 것은 다른 사건이다.
보고를 믿었다가
다음은 내가 만든 검수 에이전트(desk)였다. 어떤 항목을 “전면 교체 완료”라고 보고하길래 그대로 받아들였는데, 실제 검색 결과는 0건이었다. 교체된 것이 하나도 없었다. 에이전트의 액면 보고를 믿었다가 들킨 셈이다. 나는 이 패턴 — 확인되지 않은 완료 선언 — 을 금칙으로 명문화했다. 구현하는 쪽이 자기 작업을 스스로 “됐다”고 판정하는 구조 자체가 위험했다.
그 의심은 결국 내 손으로 쓴 기록에까지 닿았다. 인수인계 문서에 부풀려 적힌 서술 다섯 건을 찾아 정정했다. 에이전트의 보고만이 아니라 내가 직접 쓴 문장조차 액면 그대로 믿어선 안 됐다.
‘영구 해결’이 24시간을 못 버틴 날
가장 뼈아팠던 건 ‘영구 해결’이라는 단어를 너무 쉽게 쓴 일이다. 토큰 만료를 막으려고 keepalive를 걸고 “이제 영구 해결됐다”고 적었다. 근거는 파일 수정시각이 안 변했다는 것이었는데, 그걸 ‘토큰이 유효하다’는 뜻으로 읽은 게 측정 오차였다. 처방은 하루 만에 무효가 됐다. 게다가 폐기 결재까지 한 모니터 프로세스가 메모리에 살아남아 발행을 멈춰 세웠다. “unload하면 종료된다”는 내 가정이 틀린 것이다. 추측을 접고 ps로 실제 프로세스를 확인해 직접 죽이고 나서야 멈췄다. PASS는 성공이 아니다 — 이 문장은 그날 자리를 잡았다.
네 번 반복된 함정, 그 뿌리를 고치다
문제는 이게 한 번의 실수가 아니었다는 거다. “스스로 확인했다고 믿었는데 확인이 아니었던” 같은 종류의 자기검증 함정이 네 번 반복됐다. 한 번이면 버그지만 네 번이면 설계 결함이다. 그래서 증상이 아니라 뿌리를 고치기로 했다. 내가 만든 기획실장 에이전트의 정체성을 다시 썼다 — ‘시스템 전체를 안다’에서 ‘대표와 같이 정한다’로. 혼자 다 안다는 전제 자체가 오진을 낳는 진원지였다.
추측을 물증으로
여섯 번째는 외부 이미지 생성 도구의 쿼터였다. 남은 한도를 텍스트 패턴으로 추측하던 게이트가 세 번 연속 오탐했다. 추측이 틀릴 수 있는 게 아니라, 추측이라는 방식 자체가 틀린 거였다. 그래서 텍스트 추측을 통째로 들어내고 약속 토큰과 파일 물증으로 판단하도록 바꿨다. 쿼터를 표시하는 자리에는 “조회값 아님”을 명시했다. 모르는 걸 아는 척 정밀하게 보여주는 것 — 허위 정밀함 — 을 금지한 것이다.
두 번 틀리고, 세 번째에 물증
마지막 사건이 이 글의 핵심이다. 이미지 쿼터가 막힌 원인을 나는 두 번 틀리게 진단했다. 처음엔 “회복 주기 문제”라고 했고, 두 번째엔 “IDE 의존”이라고 했다. 둘 다 그럴듯했고 둘 다 틀렸다. 세 번째에야 서버가 직접 돌려준 429 응답의 리셋 시각이라는 물증으로 원인을 확정했다. 중요한 건 그다음이다. 나는 그 두 번의 오진을 지우지 않았다. 틀린 진단 두 개를 기록에 그대로 남겨두고, 그 위에 물증으로 바로잡은 결론을 얹었다. 정정의 가치는 정답을 맞히는 데 있는 게 아니라, 틀린 경로를 지우지 않는 데 있다.
그래서 지금
일곱 번의 데임을 다시 읽으면 공통점이 보인다. 어느 것도 “실패”가 핵심이 아니다. 전부 “정정”이 핵심이다. 위장 성공은 52분 실측으로, 허위 보고는 금칙으로, 부풀린 기록은 다섯 건의 수정으로, 무너진 영구 해결은 ps 물증으로, 반복된 함정은 정체성 재설계로, 추측은 파일 물증으로, 두 번의 오진은 429 리셋 시각으로 — 매번 표면의 통과 표시를 의심하고 한 겹 아래의 사실로 내려갔다.
지금 이 회사의 품질 문화는 한 줄로 굳었다. 액면을 믿지 말고 물증으로 검증하라. 그리고 틀렸다면 지우지 말고 기록하라. 이 규율이 깔려 있기 때문에 나는 다음 시스템을 더 빠르게, 더 크게 지을 수 있다 — 에러가 안 나서가 아니라, 에러가 나면 빨리 잡혀 설계 안으로 흡수되기 때문이다. 이 빌드로그 시리즈가 앞으로 보여줄 것은 그 흡수의 기록이다.