Commit f3671c8
fix(transcript): stop auto-jump to the bottom when a reply completes
A detached reader gets yanked to the bottom the moment a run finishes,
through two independent paths:
1. Settle shrink re-attach (both ends). When a reply settles, the row
list briefly shrinks (desktop persistence can lag the run's end; the
WebUI drops its pending bubble). The browser clamps scrollTop to the
new bottom and emits a scroll event, and the follow reducer's clamp
branch attached unconditionally — so the regrowth that lands right
after pinned the reader to the bottom.
Gate the clamp attach on evidence of intent: our own pin write
echoing back (still following) or an arrival inside the 500ms
gesture latch. Every deliberate return-to-bottom still attaches
(wheel/touch/key arrivals ride the latch chain, thumb drags
re-engage on release, the jump button uses forceFollow); a shrink
clamp carries no input and no latch, so it can no longer re-engage
follow.
2. Queued-turn auto-start pin (GUI). Draining the chat queue after a
run completes went through markConversationRunStarted, which
force-pinned the visible conversation. Queue auto-starts are not a
user gesture — skip the pin for them (preserveComposerOnStart is
the queue-only marker); manual sends keep pinning.
The old "landing at the physical clamp always attaches with no latch
and no pointer" test codified the hole; it is rewritten as a latched
arrival (preserving its fractional-DPR tolerance intent), with new
regression coverage for the shrink clamp and the pin echo.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1 parent b5c95c6 commit f3671c8
5 files changed
Lines changed: 109 additions & 25 deletions
File tree
- crates
- agent-gateway/web
- src/lib/chat-scroll
- test
- agent-gui
- src
- lib/chat-scroll
- pages
- test/chat
Lines changed: 20 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
22 | 27 | | |
23 | 28 | | |
24 | 29 | | |
| |||
194 | 199 | | |
195 | 200 | | |
196 | 201 | | |
197 | | - | |
198 | | - | |
199 | | - | |
200 | | - | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
201 | 209 | | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
202 | 213 | | |
203 | 214 | | |
204 | 215 | | |
| |||
Lines changed: 32 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
53 | | - | |
| 53 | + | |
54 | 54 | | |
55 | | - | |
56 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
57 | 86 | | |
58 | 87 | | |
59 | 88 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
22 | 27 | | |
23 | 28 | | |
24 | 29 | | |
| |||
194 | 199 | | |
195 | 200 | | |
196 | 201 | | |
197 | | - | |
198 | | - | |
199 | | - | |
200 | | - | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
201 | 209 | | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
202 | 213 | | |
203 | 214 | | |
204 | 215 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3831 | 3831 | | |
3832 | 3832 | | |
3833 | 3833 | | |
3834 | | - | |
| 3834 | + | |
| 3835 | + | |
| 3836 | + | |
| 3837 | + | |
| 3838 | + | |
3835 | 3839 | | |
3836 | 3840 | | |
3837 | 3841 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
51 | | - | |
| 51 | + | |
52 | 52 | | |
53 | | - | |
54 | | - | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
55 | 84 | | |
56 | 85 | | |
57 | 86 | | |
| |||
0 commit comments