ymatrix1/vantage 的最新提交 fb924a6 合并了 PR #81,在转录记录更深处查找未带标题的 AI 会话的名称与首个请求,并让它们不再读起来像是同一个标题。仓库说明指出,这是一款本地优先(local-first)的可视化工具,用于在 Claude Code、Codex、git 与 PR 记录中,以证据为核心追踪从 'Asked' 到 'Verified' 的 AI 辅助工作项。该提交于 2026-10-15 合入,而规则原文就写在同一天新增到设计决策文档中的 D195 里。本次改动涉及 9 个文件,新增 327 行、删除 12 行。原文见 https://github.com/ymatrix1/vantage/commit/fb924a698ecf73d9e9933b2cb14eab9972a81c0b。
问题在于,名称其实就在文件里面,只是位于没有被读取到的位置。D195 记录写道,在作者真实的 store 中,502 个条目里有 16 个因为没有标题而同样显示为 'repo · Oct 15' 之类。其中单独查看 6 个会话可以看到,转录记录中分别有 12 到 183 行 `custom-title`,但光标在写入名称之前就已经越过了该位置,而首个用户输入位于 0.6~3.9 MB 处,比 256 KB 的首次检查范围还要更深。6 个中有 3 个是共享了复制历史的 fork,因此连替代标题都变得一模一样。
解决方案分为三步。首次查看会话文件时,会一次性扫描开头 1 MB 和结尾 2 MB 以查找会话名称;如果 256 KB 的首次检查没有发现输入的请求,则会再向更深处读取一次,最多到 6 MB。当两个标题为空的条目变得相同时,会在后面追加 ' · edited <最后编辑的文件>',如果仍然重复,则追加 ' · #<ID 前 4 位>',确保任何两行都不会读起来一样。只含注入文本的会话不会被隐藏,而是原样保留在折叠的 'Conversations without code' 分组中。实现落在 `titles.ts`、`ingest.ts` 和 `stages.ts` 中,并在 `packages/daemon/test/session-names.test.ts` 中新增了合成测试。名称与请求的扫描一次性运行需要 9 秒,因此将每轮的深度读取限制为 60 次;按照正常状态 1 秒的基准,这在 11 轮中每轮只额外增加 1~2 秒。项目记录显示,在 store 副本上的实测结果是,16 行中以替代标题残留的数量为 0。
不过,这一决定的状态目前仍为 proposed,也还有一些提交并未触及的问题。这是既有行为,但由于守护进程是单线程的,当一次同时消化约 500 个转录记录的 backfill 持续 41~51 秒时,先前启动的 HTTP 服务器在这段时间内无法响应。为此单独列出的条目(bean,优先级 low)仍然留在待办,需要验证在文件之间让出执行权后,backfill 期间是否仍能在约 200 ms 内响应;而从父标题继承 fork 标题一事则被明确列为范围之外。也就是说,标题重复问题已在真实的 store 副本上得到解决,但大规模 backfill 期间的响应延迟仍未解决。