ad791a0d845132ace60be110bccce7853573739a
joinPages healed a tool call split across a page boundary but not a message split across one, so a long reply came back as two rows with a paragraph break through the middle of a sentence -- visible on any session whose replies are longer than an eighty-event page. Same cause, same cure, and the rule was already written down one member of the set: `foldEvent` never leaves two assistant messages adjacent inside a page, since deltas accumulate into the message before them, so two meeting at a join are always halves of one reply. The newer half keeps its identity for the reason adoptRun gives -- it is the row already on screen. It grows by what the older half brings, which is safe at this join and nowhere else: the join is at the oldest end of what is loaded, so the growth extends off the top, away from the row the list anchors to.
Languages
Rust
54%
Kotlin
43.6%
Shell
2.4%