The latest commit fb924a6 in ymatrix1/vantage merges PR #81, which finds the name and first request of AI sessions that carry no title deeper in the transcript and keeps them from reading as the same title. The repository description says it is a local-first visualization tool that tracks AI-assisted work items from 'Asked' to 'Verified' in an evidence-based way across Claude Code, Codex, git, and PR records. The commit landed on 2026-10-15, and the rule is written out verbatim in D195, which was added to the design decision document on the same day. The change adds 327 lines and deletes 12 lines across 9 files. The original is at https://github.com/ymatrix1/vantage/commit/fb924a698ecf73d9e9933b2cb14eab9972a81c0b.
The problem was that the names were inside the files but at positions that were never read. The D195 record states that in the author's actual store, 16 of 502 entries read identically as something like 'repo · Oct 15' because they had no title. Looking at six of those sessions separately, their transcripts had between 12 and 183 `custom-title` lines, but the cursor had already passed the point where the name was written, and the first user input sat at 0.6–3.9 MB, deeper than the 256 KB first check. Three of the six were forks that share copied history, so even the fallback titles ended up identical.
The solution has three steps. When a session file is first viewed, the first 1 MB and the last 2 MB are swept once to find the session name, and if the 256 KB first check turns up no entered request, the file is read one level deeper, up to 6 MB. When two entries with an empty title come out the same, ' · edited <last edited file>' is appended, and if they still collide, ' · #<first 4 characters of the ID>' is appended, so that no two lines read identically. Sessions that contain only injected text are not hidden; they are left as they are in the collapsed 'Conversations without code' group. The implementation went into `titles.ts`, `ingest.ts`, and `stages.ts`, and a synthetic test was added at `packages/daemon/test/session-names.test.ts`. Running the name and request scans together takes 9 seconds, so the number of deep reads per pass is capped at 60, which adds only 1–2 seconds each across the 11 passes that make up a normal 1-second run. According to the project record, a measurement on a copy of the store found that 0 of the 16 lines remained as fallback titles.
That said, the status of this decision is still proposed, and problems the commit does not touch remain. This is existing behavior, but because the daemon is single-threaded, when a backfill that digests roughly 500 transcripts at once runs for 41–51 seconds, the HTTP server that came up earlier cannot respond during that time. A separate item (bean, priority low) that covers this is left to verify whether yielding between files keeps responses within about 200 ms even during a backfill, and taking the title of a fork from its parent's title is explicitly stated to be out of scope. In other words, the duplicate-title problem has been resolved on an actual copy of the store, but the response latency during large-scale backfills is still unresolved.