# fix\(web\): port the refined live-follow gesture gating to the v2 timeline · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/commit/55b51547b7e7693502f2626735e0c127636dcf15)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

Requested revision: 55b51547b7e7693502f2626735e0c127636dcf15

Requested commit: 55b51547b7e7693502f2626735e0c127636dcf15

Commit: 55b51547b7e7693502f2626735e0c127636dcf15

Tree: 5df78be079b21fd08fed58274fdd966a9fb8e774

Author: Julius Marminge

Committer: Julius Marminge

## Message

```
fix(web): port the refined live-follow gesture gating to the v2 timeline

The rebase kept the LegendList 3.3.3 upgrade and patch from #5449 and the
mobile end-follow latch from #5566, but the v2 MessagesTimeline/ChatView
still carried the branch's blunt any-gesture-breaks-follow listeners.
Port main's #5566 web mechanics onto the v2 follow architecture:

- resolveTimelineIsAtEnd measures the 40px follow re-arm band from real
  geometry (contentLength/scroll/scrollLength minus the composer inset),
  keeping the isNearEnd fallback for older state shapes.
- Follow now breaks only on gestures that can actually leave the live
  edge: upward wheel with overflowing content, touch drags that exited
  the end band, scrollbar drags vs content clicks, and keyboard
  navigation (PageUp/Home/ArrowUp) — previously keyboard scrolling never
  broke follow and the next stream chunk yanked the view back down.
- Listener attach retries across frames so a thread switch cannot mount
  the list without its opt-out listeners.

Deliberately not ported: #5449's shouldRestorePosition disclosure
anchoring and follow-gated maintainScrollAtEnd — the v2 timeline keeps
maintainScrollAtEnd={false} with its own follow scrolls and anchor
system; flipping that core is a separate change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

```

## Parents

- [e2d6d4dfe95629026502d8cdfc4239f274a8d1a9](https://git.cafe/pingdotgg/t3code/commit/e2d6d4dfe95629026502d8cdfc4239f274a8d1a9?format=markdown)

[Source at this commit](https://git.cafe/pingdotgg/t3code/tree/55b51547b7e7693502f2626735e0c127636dcf15?format=markdown)
