"구조화된 진실을 색인해. export 는 절대 색인하지 마 — export 는 틀려도 되는 거야."
솔깃한 지름길
Recall 은 읽을 수 있는 Markdown transcript 를 만들어. 바로 거기 있잖아. 영상당 파일 하나, 네가 검색하고 싶은 바로 그 텍스트로 가득. 그러니 지름길이 저절로 떠올라. 검색 index 를 Markdown 폴더에 겨누면 끝. 온 본능이 그러라고 하지. Recall 은 아니라고 하고, 그 이유가 금방 쌓여.
- Markdown 은 바뀔 수 있어. 사람이 손으로 고칠 수도 있고, 동기화 때문에 오래된 버전이 될 수도 있고, 재생성으로 교체될 수도 있는 디스크의 파일이야. 그걸 색인하면 export 가 입력이 되는 거고, 트랙 2 가 금지한 바로 그 loop 이 생겨. 손으로 고친 파일이 네 검색이 믿는 걸 조용히 다시 써버릴 거야.
- Markdown 은 구조를 잃어버렸어. 여기서 제품은 검색이 아니라 영상으로 돌아가는 문이잖아. 그 문에는 segment 마다 절대 타임스탬프가 필요해. release 를 산문으로 납작하게 눌러버리면 타임스탬프가 사라져. 단어는 찾는데 두 시간짜리 영상 어디쯤에 있는지는 여전히 모르는 거지.
- index 는 다시 지을 수 있어야 해. 파생 index 에는 purge 하고 replay 할 수 있는 canonical 소스가 있어야 하거든. 그 소스는 누가 손댔을지 모르는 파일이 아니라 DB 에 있는 release 야.
release 가 실제로 뭔지를 색인해
그래서 Recall 은 current release 에서 DB 안의 전문 index 로 투영된, 순서 있는 타임스탬프 segment 를 색인해. hit 마다 그 문을 여는 데 필요한 걸 다 들고 있어. 자기가 나온 current release, 절대 영상 타임스탬프, 주변 텍스트, source identity 와 경로, release 의 content hash, 그리고 rank. 그게 바로 행동할 수 있는 검색 결과야. 누르면 엔진이 정확히 어느 영상 어느 초인지를 알거든.
Markdown 은 여전히 있고 여전히 쓸모 있어. 사람이 읽는 용도로. 다만 철저히 하류에, 권위 없는 export 로 남아서 아무 데도 안 껴. index 에도, queue 완료에도, 요약의 진실에도. 레거시 corpus 도 이 규칙을 따랐어. 그 옛 Markdown 은 분명히 라벨을 단 구조화 증거로 한 번 import 됐고, 그 뒤로 검색은 파일이 아니라 구조화된 segment 위에서 돌았지.
세심함을 드러내는 디테일 둘
첫째, 제품 검색은 hit 을 영상별로 묶되 나머지를 버리지는 않아. 순진하게 묶으면, 그러니까 영상당 행 하나에 최고 hit 만 남기면 그 영상의 나머지 match 가 전부 조용히 사라지는데, 하필 그게 네가 찾던 순간인 경우가 많거든. 묶기는 표현 방식의 선택이지 데이터를 버리는 선택이 되면 안 돼.
둘째, 비슷한 영상을 찾아주는 결과는 지금은 lexical 방식이고, vector index 는 일부러 canonical 상태가 아니야. 나중에 붙인다 해도 규칙은 이미 정해져 있어. release 를 기준으로 주소가 잡히고 언제든 다시 지을 수 있어야 해. 같은 버전 있는 진실에서 파생되고, purge 하고 replay 할 수 있고, 두 번째 권위의 원천은 절대 되지 않게. 파생된 건 아무리 영리해져도 파생된 채로 남아.