ymatrix1/vantage의 최신 커밋 fb924a6은 PR #81을 병합해, 제목이 붙지 않은 AI 세션의 이름과 첫 요청을 트랜스크립트 더 깊은 곳에서 찾고, 같은 제목으로 읽히지 않게 했다. 저장소 설명은 Claude Code·Codex·git·PR 기록에서 AI 보조 작업 항목을 'Asked'에서 'Verified'까지 근거 위주로 추적하는 로컬 우선(local-first) 시각화 도구라고 밝힌다. 커밋은 2026-10-15에 들어왔고, 같은 날 설계 결정 문서에 추가된 D195에 규칙이 그대로 적혀 있다. 변경은 9개 파일에서 327줄 추가와 12줄 삭제다. 원본은 https://github.com/ymatrix1/vantage/commit/fb924a698ecf73d9e9933b2cb14eab9972a81c0b 에 있다.
문제는 이름이 파일 안에 있는데 읽지 못한 위치가 있었다는 점이다. D195 기록은 저자의 실제 스토어에서 502개 항목 중 16개가 제목 없이 'repo · Oct 15'처럼 똑같이 읽혔다고 적는다. 그중 세션 6개를 따로 보면 트랜스크립트에 `custom-title` 줄이 12~183개씩 있었지만 커서가 이름을 남기기 전에 이미 지나친 상태였고, 첫 사용자 입력은 256KB 첫 확인 범위보다 안쪽인 0.6~3.9MB 지점에 있었다. 6개 중 3개는 복사된 이력을 공유하는 포크라 대체 제목까지 같아졌다.
해결 방식은 세 단계다. 세션 파일을 처음 볼 때 앞 1MB와 뒤 2MB를 한 번 훑어 세션 이름을 찾고, 256KB 첫 확인에서 입력된 요청이 없으면 최대 6MB까지 한 번 더 깊게 읽는다. 제목이 비어 있는 두 항목이 같아질 때에는 뒤에 ' · edited <마지막으로 편집한 파일>'을, 그래도 겹치면 ' · #<아이디 앞 4자>'를 붙여 어떤 두 줄도 같게 읽히지 않게 했다. 주입된 텍스트만 있는 세션은 숨기지 않고 접힌 'Conversations without code' 그룹에 그대로 둔다. 구현은 `titles.ts`, `ingest.ts`, `stages.ts`에 들어갔고 `packages/daemon/test/session-names.test.ts`에 합성 테스트가 붙었다. 이름과 요청 스캔을 한 번에 돌리면 9초가 걸려 한 패스당 깊은 읽기를 60회로 제한했고, 이는 정상 상태 1초 기준 11개 패스에 걸쳐 1~2초씩만 더해진다. 프로젝트 기록에 따르면 스토어 사본 실측 결과 16개 중 대체 제목으로 남은 줄은 0개였다.
다만 이 결정의 상태는 아직 proposed이고, 커밋이 건드리지 않은 문제가 남아 있다. 기존 동작이지만 디렉데몬이 단일 스레드라, 약 500개 트랜스크립트를 한 번에 소화하는 백필이 41~51초 이어지면 그보다 먼저 뜬 HTTP 서버가 그동안 응답할 수 없다. 이를 다루는 별도 항목(bean, 우선순위 low)은 파일 사이에서 양보해 백필 중에도 약 200ms 안에 응답하는지 검증하는 일로 남아 있고, 포크 제목을 부모 제목에서 가져오는 일도 범위 밖으로 명시됐다. 즉 제목 중복 문제는 실제 스토어 사본에서 해소됐지만, 대량 백필 중 응답 지연은 아직 미해결 상태다.