# fix\(web\): let LegendList own end-follow and disclosure anchoring \(\#5449\) · stienswout/t3code

[View on GitCafe](https://git.cafe/stienswout/t3code/commit/61121f56ba39cbe312ce394dea30cc7d44b0e9ea)

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

Visibility: public

Requested revision: 61121f56ba39cbe312ce394dea30cc7d44b0e9ea

Requested commit: 61121f56ba39cbe312ce394dea30cc7d44b0e9ea

Commit: 61121f56ba39cbe312ce394dea30cc7d44b0e9ea

Tree: e30c791e2f6bc7be2ace1d80c7edcc0a43ebd216

Author: Julius Marminge

Committer: Julius Marminge

## Message

```
fix(web): let LegendList own end-follow and disclosure anchoring (#5449)

Complete the #5449 architecture on the v2 timeline, following the
LegendList author's direction to lean on the list's native mechanisms
instead of app-side scroll layers:

- maintainScrollAtEnd is enabled and owned by LegendList, gated off only
  while the user reads history (liveFollowEnabled), while a sent turn
  anchors near the top (anchoredEndSpace), or during the two-frame settle
  of a fold toggle.
- maintainVisibleContentPosition compensates size changes natively
  ({data, size, shouldRestorePosition}); fold toggles anchor compensation
  to the toggled row via a disclosure anchor key, so the trigger stays
  under the pointer instead of the viewport chasing the end.
- ChatView's hand-rolled streaming follow (double-rAF scrollToEnd on
  every data change) is gone; the app now only owns streaming
  adjustments during anchored-end-space mode, mirroring main.
- timelineLiveFollowEnabled state mirrors the follow refs so the
  render-visible gate switches native follow off when a gesture breaks
  follow and back on when the viewport returns to the end band.

Timeline tests updated to assert the native-ownership invariants.

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

```

## Parents

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

[Source at this commit](https://git.cafe/stienswout/t3code/tree/61121f56ba39cbe312ce394dea30cc7d44b0e9ea?format=markdown)
