fa0e3d4470f8bf57160df25274e1e8bb75650fd3
The chat screen asked the claw for everything the cache did not hold by counting events, and a session that ran for weeks cost the whole record the first time it opened here. The stream now names each frame's seq and the cache stores it, so a reopening screen sends since=<seq> and receives only the gap. The cache migrates in place: the old count of events is exactly the last seq plus one, because the record numbers densely. A screen with no cache opens on the newest turn and walks back through the new history route when the reader reaches the top, one whole turn per page, so the phone does not hold a weeks-long transcript to show the last few messages. Pages are folded through the same reducer the stream uses and prepended, since the list runs oldest first: appended, they would land at the newest end. A reset comment (the record no longer holds the cursor) drops the mirror, and the tail that follows rebuilds it. The outcome tag colours a steered turn as an accent rather than a failure, matching the web UI.
Languages
Rust
74.9%
Kotlin
13.8%
Vue
7.1%
TypeScript
3%
Dockerfile
0.5%
Other
0.6%