77cd703d7278a4defc46a0aa396bb4e29b8f355a
Sending a message used to collapse the turn above it, live, while you were still reading it. Watching your own conversation fold up under you as you typed the next message is worse than the scrolling it saved. Folding now keys off `historicalCount` — how many messages at the front of the list came from the server rather than from this sitting. Nothing collapses while you are watching, however many turns you send; reload, and all of it has become history and folds at once, which is where the grouping actually earns its place. A count rather than a set of ids because everything historical is contiguous and at the front: the preload seeds it, paging older messages prepends to it, live turns append past it, and a resume replaces the list with a transcript that is history in its entirety. Two consequences worth stating rather than discovering. The last turn is no longer exempt. It used to be excluded from folding for being the live one by definition; now it is an ordinary turn, so a reloaded conversation folds its final turn too — except while it is still generating, since hiding work as it arrives is the exact thing being undone. And folding is no longer a pure derivation over the message list, so a reload does NOT render identically to a live session. That property was deliberate and is deliberately given up; it is the feature. The state it costs is one number in useChat, never on the wire and never on disk. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Description
No description provided
42 MiB
Languages
TypeScript
90.9%
Shell
4.7%
JavaScript
4.1%
CSS
0.2%
HTML
0.1%