새 파일이 잘 실행된다고 이전 파일을 그대로 되찾은 것은 아닐 수 있다. K-POP PULSE의 재발행 README에는 승인된 명세로 다시 만든 패키지이며 이전 ZIP의 바이트 단위 복구가 아니라는 경계가 분명하게 남아 있다. 나는 이 표현이 작업 결과를 설명하는 중요한 부분이라고 본다.

이것은 지금 받은 원본 ZIP을 잃어버렸다는 이야기가 아니다. 현재 자료 안에 보존된 문서가 서술하는 당시의 재구현 선택이다. 무엇이 있었고 무엇이 없었는지, 다시 만든 것과 복구한 것을 어떻게 구별했는지 풀어보려 한다.

없어진 원인의 이야기보다 남은 자료의 범위를 확인했다

당시 README는 이전에 생성된 샌드박스 바이너리가 그 세션에 없었다고 설명한다. 파일이 왜 없어졌는지나 누가 지웠는지를 이 문서만으로 단정할 수는 없다. 확인한 것은 기존 바이너리를 그대로 복원했다고 주장할 수 없었다는 범위다.

나는 재구현을 시작할 때 남은 명세·소스·데이터·설정의 상태를 따로 적어야 한다고 본다. 하나의 파일이 없다는 이유로 모든 지식을 잃은 것도 아니고, 명세가 있다는 이유로 이전의 모든 데이터가 돌아온 것도 아니다. 무엇을 근거로 다시 만드는지 정하는 출발점이다.

실행 가능한 새 패키지와 원본의 동일성은 다른 검사다

명세를 바탕으로 새 프로그램을 만들고 설치·실행을 확인할 수는 있다. 하지만 그 검사만으로 이전 ZIP의 모든 파일과 값이 같다고 말할 수는 없다. 원본 해시나 이전 데이터와 대조할 자료가 없다면 동일성의 증거도 다르게 남겨야 한다.

고객에게도 이 구분을 설명하는 편이 좋다. 기능을 다시 제공할 수 있다는 약속, 이전 내용을 복구했다는 약속, 지금 작업을 계속할 수 있다는 약속은 각각 확인할 대상이 다르다. 나는 결과를 설명할 때 실행 성공이라는 말 하나에 이 약속들을 모두 넣지 않으려 한다.

없는 원본 행을 템플릿으로 대신했다고 표시했다

문서는 이전 762행의 소스 마스터가 당시 세션에 없었고 42열의 가져오기 템플릿을 제공한다고 밝힌다. 행 수와 열 수는 같은 양을 말하는 숫자가 아니다. 스키마를 담은 틀이 있다는 사실을 기존 등록 데이터가 복구됐다는 뜻으로 설명하지 않았다.

나는 이 선택을 빈 데이터를 채워 그럴듯하게 보이게 하지 않는 기준으로 읽는다. 실제로 확인한 원본이 있어야 등록할 수 있는 자료라면 없는 행을 예시로 만들고 정본처럼 넣어서는 안 된다. 설명용 합성 데이터와 운영 데이터도 각각의 용도로 구별해야 한다.

다음 작업자가 출발점을 오해하지 않도록 남긴다

재발행 경계는 최초 설명에만 있어서는 부족하다. 설치한 사람이 기존 데이터가 모두 들어 있다고 생각하면 가져오기나 검증을 생략할 수 있다. 무엇이 제공됐고 어떤 원본을 추가로 붙여야 하는지 작업의 진입점에 남겨야 한다.

이것은 사용자에게 복잡한 구현을 모두 알아야 한다고 요구하는 것과 다르다. 빠진 자료, 확인할 책임, 실제 설치 상태를 읽을 수 있게 하는 설명이다. 다른 컴퓨터나 다른 AI가 작업을 이어갈 때도 내가 한 일을 원본 복구로 과장하지 않도록 돕는다.

새 설명용 장부로 출처를 나누어 볼 수 있다

아래는 같은 원칙을 다른 작업에 적용하기 위한 새 장부 예시다. 명세를 바탕으로 다시 만들었다는 종류와 아직 없는 원본 자료를 함께 기록한다. 실제 프로젝트의 복원 보고서나 해시가 아니라 구조를 보여 주는 합성 예시다.

실제 사용에서는 원본 파일의 존재·해시와 데이터 범위를 직접 검사하고, 확인하지 못한 항목을 비워 둔다. 새로 만든 코드가 얼마나 원본과 같은지는 대조할 기준에 맞춰 설명한다. 근거 없는 동일성이나 복구 완료를 문서의 형식으로 만들어 넣지 않는다.

코드와 구현 살펴보기

새 설명용 출처 장부. 실제 프로젝트의 복구 결과가 아니다.

{
  "build_kind": "reissued_from_specification",
  "original_bytes_verified": false,
  "data_delivered": "empty_import_template",
  "missing_material": ["verified source master"],
  "next_check": "compare supplied source data before import"
}

지금 보존한 기록도 미래에 다시 읽을 수 있어야 한다

이번 제작기에서는 현재 제공받은 ZIP을 원본과 구별되는 위치에 보존하고, 읽은 자료와 새 예제를 별도로 기록한다. 이 문서 안의 이전 패키지 부재와 지금의 자료 보존 상태를 같은 사건으로 합치지 않는다. 새 설명을 만들 때도 원본 자료 자체를 고쳐 증거를 맞추지 않는다.

내가 남기려는 것은 보기 좋은 복구 성공 문장보다 다음 작업의 정확한 출발점이다. 무엇을 되찾았고 무엇을 새로 만들었으며 어떤 데이터는 아직 필요한지 분명하면, 다른 사람이 검증하거나 더 나은 구현으로 바꾸는 작업을 이어가기 쉬워진다.