문서가 아니라 대상을 재라
기록에는 그렇게 적혀 있었다. 실제로 재보니 달랐다. 세 번 틀리고 나서야 알았다.
그림 자료 수천 장이 지금 어떤 상태인지 알아야 할 일이 있었다. 다행히 폴더마다 기록 파일이 있었다. 어떤 파일에서 비롯됐는지, 크기가 얼마인지, 심지어 검증용 해시값까지 적혀 있었다.
그 기록을 읽고 결론을 냈다. "2,736장 전부 손대야 한다." 기록에 출처가 그렇게 적혀 있었으니까.
실제로 한 장씩 픽셀을 견줘 보니 절반 가까이는 이미 바뀐 뒤였다. 진작 갈아 끼운 것들인데, 기록 파일의 출처 항목은 그대로 남아 있었던 것이다.
기록의 source 는 어디서 왔는지의 이력이지 지금 무엇인지가
아니었다. 당연한 말인데, 읽을 때는 그게 안 보인다.
그래서 픽셀로 재는 스크립트를 썼다. 이번엔 제대로 셌다고 생각했다.
대조 스크립트 자체가 어긋나 있었다. 한 무리의 그림들을 "이미 바꿨음"으로 잘못 세고 있었다. 숫자가 그럴듯해서 한참 몰랐다.
두 번을 정정하고 나서 점검 문서에 이렇게 적어 두었다.
반드시 픽셀로 재야 한다.
기계가 고른 것은 기계의 방식으로 검산한다
세 번째는 성격이 조금 다르다. 쓰지 않는 그림 파일을 골라내는 일이었다. 코드에서 참조되지 않는 이름을 찾으면 되니, 정규식으로 소스를 훑었다.
정규식이 거짓 양성 네 개를 냈다. 코드가 이름을 통째로 적어 두지 않고 조립해서 부르는 자리가 있었기 때문이다.
f'FLAG0{i}' # 승리 연출에서 번호를 붙여 부른다
f'TEACH-{min(n,2)}.IMG' # 두루마리도 그렇게 부른다
문자열만 훑는 눈에는 FLAG01 이 아무 데도 없어 보인다. 실제로는 일곱 장이
다 쓰이고 있었다. 그대로 지웠다면 특정 순간에 그림이 사라졌을 것이다.
고친 방식은 이렇다. 정규식을 버리고 파이썬의 구문 트리를 걸어 문자열을 모으고, 조립해 부르는 형태는 접두사째 살려 두게 했다. 문법을 아는 도구로 문법을 읽은 것이다.
미리보기는 실제를 안 탄다
같은 함정이 화면에서도 있었다. 새로 그린 타일을 확인하려고 자료만 따로 불러 나란히 띄워 보는 미리보기를 만들어 썼다. 멀쩡해 보였다.
게임에 올려 보니 두 가지가 무너졌다. 광산 타일의 회색 테가 도로와 구분이 안 갔다. 네모로 고쳤더니 이번엔 밭과 실루엣이 같아졌다. 둘 다 "지형 + 밭·광산 + 도로 + 부대 + 안개"가 한 화면에 겹쳐야 보이는 문제였다.
그래서 게임을 실제로 띄워 화면을 찍는 도구를 만들었다. 창은 열지 않고 화면만 저장한다. 게임 코드는 한 줄도 고치지 않고, 밖에서 시간·입력·표시 세 가지만 바꿔 끼운다.
왜 AI와 일할 때 더 벌어지는가
세 번 다 같은 모양이었다. 적혀 있는 것과 실제가 달랐다. 그리고 나는 적혀 있는 것을 읽고 판단했다.
AI와 일하면 이 틈이 특히 잘 벌어진다. AI가 근거로 삼는 것이 대개 문서와 주석과 파일 이름이기 때문이다. 그것들은 사람이 남긴 것이고, 사람은 코드를 고치면서 주석을 잊는다. 그러니 AI는 가장 낡기 쉬운 것을 가장 먼저 읽는다.
"이 폴더는 원본을 변환한 것이다"라고 적힌 파일을 보면, AI도 나도 똑같이 그렇게 답한다. 둘 다 성실하게 틀린다.
확인은 대상 자체를 재는 방식이어야 한다. 그림은 픽셀로, 소리는 파일로, 배포본은 열어 보고, 화면은 실제로 띄워서.
숫자가 그럴듯할 때가 가장 위험하다. 두 번째 실수가 그랬다. 기대와 맞아떨어지는 숫자는 검산할 마음이 안 든다. 그래서 요즘은 결과가 마음에 들 때 한 번 더 본다.
그리고 정정한 기록을 지우지 않고 남겨 둔다. 점검 문서에 "집계를 두 번 정정했다"는 문장이 그대로 있다. 다음에 같은 자리에서 미끄러지지 않으려면, 미끄러진 자리를 적어 두는 편이 낫다.