내가 돌려서 통과했다는 말은 증거가 아니다: 남이 한 줄로 재현하게 만든 하루
만든 사람이 통과했다고 말하는 것은 증거가 아니다. 증거는 구현하지 않은 사람이 명령 하나로 같은 결과를 다시 만들어낼 때 성립한다.
세 줄 요약부터 적는다.
- 오늘 한 일: 법률 문서 검증 시스템이 실제로 통과했다는 사실을, 그 시스템을 만들지 않은 사람이 명령 하나로 똑같이 재현할 수 있게 만들었다.
- 왜 중요한가: 만든 사람이 통과했다고 말하는 순간, 그 말은 증거가 아니라 주장이 된다. 증거는 제삼자가 같은 결과를 다시 뽑아낼 때 비로소 성립한다.
- 빌더에게의 의미: 검증의 신뢰도는 검증을 몇 번 돌렸느냐가 아니라, 밖에 있는 사람이 손을 대지 않고도 재현할 수 있느냐에서 갈린다.
만든 사람의 통과 선언은 증거가 아니라 주장이다
오늘 붙든 문제는 하나였다. 어제까지 검증을 여러 번 돌려서 통과 판정을 받았지만, 그 판정을 내린 것은 전부 시스템을 만든 나 자신이었다. 내가 돌리고 내가 통과했다고 적으면, 밖에서 보기에 그건 확인이 아니라 자기 진술이다. 검증의 마지막 문은 나를 빼고도 같은 결과가 나오느냐였다.
그래서 목표를 재현으로 옮겼다. 구현자가 손을 대지 않은 상태에서, 검토를 맡은 다른 판정자가 명령 한 줄을 돌려 똑같은 결과에 도달할 수 있어야 한다. 결과가 우연히 맞는 것이 아니라, 같은 입력과 같은 환경이면 언제나 같은 값이 나온다는 결정성이 있어야 한다. 여기까지 와야 통과라는 단어를 쓸 자격이 생긴다.
- 만든 사람이 돌린 통과: 주장.
- 밖의 사람이 명령 하나로 재현한 통과: 증거.
- 둘 사이의 거리를 좁히는 것이 오늘의 작업이었다.
언어 모델을 거친 해시는 무결성 증거가 아니다
검토 과정에서 갈린 지점이 오늘의 핵심 판단이다. 결과물의 지문에 해당하는 값을 언어 모델에 통째로 흘려보내고 모델이 맞다고 확인하는 방식은 무결성 증거가 되지 못한다. 모델을 거치는 순간 그 값이 실제 파일에서 나온 것인지, 대화 중에 변형된 것인지 구분할 방법이 사라지기 때문이다. 증거로 인정되는 것은 디스크 위 파일을 직접 계산한 값과 직접 실행한 기록뿐이다.
같은 이유로 내가 앞서 내걸었던 표현 하나를 오늘 접었다. 나는 이 결과가 어떤 버전을 꺼내 쓰든 똑같이 재현된다고 말했는데, 그건 과한 주장이었다. 정확히는 환경을 고정했을 때만 결정적으로 재현된다. 절대적 재현에서 조건부 재현으로 주장을 낮추는 게 정직한 서술이었다. 실행 환경, 사용한 도구의 버전, 시간대까지 명시해 두고 나서야 재현이라는 말이 성립한다.
- 접은 주장: 어떤 버전에서든 같은 결과.
- 고친 주장: 고정된 환경에서 같은 결과.
- 배운 것: 재현성은 조건을 함께 적을 때만 참이 된다.
남이 손대지 않고 한 줄로 재현하는 문을 세웠다
마지막으로 만든 것은 제삼자용 재현 도구다. 검토를 맡은 사람이 명령 한 줄을 돌리면 도구가 스스로 순서를 밟는다. 먼저 재현에 쓰는 도구 자체가 변조되지 않았는지 정본과 대조하고, 어긋나면 즉시 비정상 종료한다. 그다음 검증 게이트 전체를 다시 실행하고, 결과 지문이 목표값과 일치하는지, 외부로 나간 데이터가 정말 없는지까지 한 번에 확인해 로그로 남긴다.
핵심은 재현하는 사람이 신뢰를 미리 가정하지 않아도 된다는 것이다. 도구가 자기 자신의 무결성부터 검사하기 때문에, 만든 사람을 믿을 필요 없이 로그만 보면 된다. 없는 신뢰를 요구하는 대신, 신뢰가 필요 없는 구조를 만드는 쪽을 골랐다.
오늘 하루를 관통한 판단
증거의 무게중심을 나에게서 밖으로 옮긴 하루였다. 내가 통과했다고 말하는 것과, 나를 뺀 사람이 재현했다고 말하는 것은 무게가 전혀 다르다. 그래서 통과 선언을 재현 절차로 바꿨고, 해시를 눈으로 확인받는 대신 파일에서 직접 계산하게 했고, 재현 범위를 흐리는 표현을 조건부로 낮췄다.
만드는 사람에게 남는 교훈은 간단하다. 신뢰를 요구하는 시스템과 신뢰가 필요 없는 시스템은 다르다. 내 결과를 남이 믿게 하고 싶을 때, 나는 더 세게 통과했다고 말하지 않는다. 밖의 사람이 나 없이 같은 결과를 뽑을 수 있는 한 줄을 건넨다.
맥락: 이 작업은 여러 검토자가 함께 도는 검증 절차 안에서 이뤄졌고, 실제 사건 데이터는 전부 로컬에만 두고 외부로 내보내지 않았다.