"규칙에서 id 가 한 번 발행되면, 그 규칙은 절대 조용히 마음을 못 바꿔. 규칙을 바꾸면, 이름을 바꿔."
Profile 은 설정이 아니라 계약이야
chunking profile 은 문서 텍스트가 chunk 가 되는 방식을 정확히 정의해 — 문단 경계, 크기 한도, overlap, 규칙이 뭐든. 그 id(가령 md-para-v1) 가 그게 만드는 모든 chunk id 에 구워져. 그래서 profile 은 config 손잡이보다 강한 게 돼: 계약이야. 계산된 모든 chunk id 는 "이 정확한 텍스트를, 이 정확한 방식으로 잘라, 이 정확한 규칙 세트 아래" 라 말하는 약속이야.
Profile 변형이 과거를 깨는 이유
이제 더 큰 chunk 가 낫다 정하고 md-para-v1 을 제자리에서 편집해 그걸 쓴다 해봐. 그 profile 이 만든 모든 chunk id 가 여전히 md-para-v1 이라 말하는데 — 그 id 가 묘사한 규칙은 더 이상 없어. 재색인하면 같은 문서가 다른 조각, 다른 offset, 다른 id 를 내. 옛 동작 아래 발행된 모든 citation 이 이제 허공을 가리켜: 저장한 id 가 현재 md-para-v1 은 절대 안 만들 chunk 를 묘사해. profile 을 개선한 게 아냐. 그 역사 전체를 조용히 무효화한 거야.
규칙: 새 동작은 새 id 를 받아
규율은 단순하고 절대적이야: chunking 동작을 바꾸는 건 새 profile id 를 발행하는 것 — md-para-v2 — 이고 md-para-v1 은 절대 안 건드려. 옛 profile 은 늘 뜻하던 걸 정확히 계속 뜻해. 문서는 앞으로 v2 아래 다시 chunk 될 수 있고, v1 실행에 앵커된 모든 citation 은 완벽히 resolve 가능하게 남아, v1 의 동작이 영원히 얼어 있으니까. 옛것과 새것이 공존하고, 과거의 어떤 것도 고아가 안 돼.
이 패턴은 내구성 있는 곳 어디에나 있어
같은 불변성이 capture 변환기를 다스리고(strip 규칙을 바꾸면 새 변환기 id 발행), 결과가 어느 임베딩·reranker 모델이 만들었는지 기록하는 것도 같은 이유야. 시스템이 "이 산출물은 변환 T 가 만듦" 이라 말할 때마다, T 는 그 버전에 영원히 얼어 있어야 해, 안 그러면 기록이 재현 불가능해져. 불변, 버전 매겨진 변환이, 10년 치 파생 산출물을 아무도 재현 못 할 출력 더미로 쌓는 대신 설명 가능하게 유지하는 방법이야.