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>Julius Marminge committed on 9/5/2026, 4:54:24 AMparent63b04bc
4 files changedLine totals unavailable