fix(mobile): the thread no longer bounces when a reply finishes#28334
Stacked on #28333. I can't push a branch upstream, so this targets main and also shows that PR's commit. Review only the top commit, fix(mobile): the thread no longer bounces when a reply finishes.
When a turn ends in the mobile app, the thread bounces. The list scrolls down with the shrinking floating status inset, then jumps back up as the reply's footer row appears.
The fix holds the list in place while that inset collapses, then pins to the end once. It skips the freeze while the keyboard is up or moving, because a frozen list misses keyboard inset events.
Evidence
iOS simulator, iPhone 18 Pro, slowed 4x. On the left is #28333 alone, and on the right is this commit on top. On the left the reply's last row overshoots and comes back down. On the right it only moves up.
End of a reply, before and after
Real-time clips, each a send and a full reply: main, #28333 alone, this commit. They ran on an isolated server with a scripted provider.
What I checked
vp run check:changedpasses.- On iOS, the end of one paced reply in a long thread. This is the clip above.
- There is no automated test. This is a visual fix, so the capture is the proof.
Why this is a draft
- Unsolved race: the freeze only checks that the keyboard is idle when the inset starts collapsing. A keyboard that starts moving during the 180 ms collapse is missed, which could leave a wrong inset. I haven't reproduced this.
- Android: this code has not run on Android.
- Remaining motion: the reply's last row still sits under the status pill for a few frames, then the list takes one step up with a tiny settle.
- Overlap: draft #28125 rewrites this list code.
Model: Claude Opus 5.5. Harness: Claude Code in T3 Code.
🤖 Generated with Claude Code