"문서 어디든 한 바이트가 바뀌면 해시가 바뀌고 — 거기서 파생된 모든 chunk id 도 바뀌어. content-addressing 은 재구축을 살아남아. 편집은 못 살아남아."
content-addressing 의 한계
앞에서 아름다운 속성을 배웠어: chunk id 는 내용에서 계산되니, 인덱스를 영원히 purge 하고 재구축해도 모든 citation 이 여전히 resolve 돼. 사실이야 — 그리고 노려볼 가치가 있는 정확한 경계가 있어. chunk id 는 문서의 해시에서 파생돼. 그 문서 어디든 한 글자를 편집하면 — 첫 문단 오타를 고치면 — doc_sha256 이 바뀌어. 그 문서의 모든 chunk id 가 함께 바뀌어. 뭐가 깨져서가 아니라, 이제 진짜로 다른 내용이라서.
재구축-안정은 편집-안정이 아냐
이건 다른 두 보장이고, 헷갈리기 쉬워:
- 재구축-안정: 같은 내용을 다시 수집하면 같은 id 를 내. content-addressing 이 이걸 완전히 줘.
- 편집-안정: 소스 문서가 편집돼도 참조가 살아남아. content-addressing 은 이걸 전혀 안 줘 — 그리고 옳게도, id 가 내용이 바뀌었다고 정직하게 보고하는 거니까.
검색엔 편집-불안정이 괜찮아 — 재색인하고 넘어가. 증거엔 치명적이야. 2년 전에 만든 claim 이, 그 뒤 오타를 고친 에세이의 passage 로 뒷받침되는데, 그 오타 때문에 증발하게 둘 순 없어.
그래서 증거는 텍스트를 복사해
증거 레이어의 답은 무뚝뚝하고 옳아: 고정된 passage 는 mint 시점에 정확한 텍스트를 복사해, 온전한 provenance 와 함께. 나중에 resolve 할 포인터가 아니라 — 그게 중요하다고 정한 순간에 얼린, 그 단어들의 실제 복사본. provenance(코퍼스, 경로, offset, 해시, profile) 가 같이 타서 여전히 소스를 찾아갈 수 있어. 근데 텍스트 자체가 passage 레코드 안에 있어. 그 복사본이 내구성 있는 산출물이고, 포인터는 내려앉을 수도 아닐 수도 있는 편의야.
다른 두 일을 위해 둘 다 지켜
passage 레코드는 결국 둘 다 쥐어, 의도적으로, 다른 일을 하니까. 복사된 텍스트는 "내가 정확히 뭘 인용했지?" 에 답해 — 영구히, 소스에 뭐가 일어났든 상관없이. provenance 는 "이게 어디서 왔고, 아직 거기 있나?" 에 답해 — 그게 바로 나중에 재검증이 citation 이 여전히 live 인지, 옮겨졌는지, drift 했는지 보고하는 데 쓸 거야. 어느 쪽도 다른 걸 대체 안 해. 이건 엔진 다른 데와 같은 2-of-2 본능이야: 상대가 못 덮는 실패 모드를 덮는 기록 둘.