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

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

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

Visibility: public

Requested revision: 3f814de1f21ca2807f1b68e974a151e443ee90c4

Requested commit: 3f814de1f21ca2807f1b68e974a151e443ee90c4

Commit: 3f814de1f21ca2807f1b68e974a151e443ee90c4

Tree: 58507e8dd798aa600fc74bcad03b549e9f3f5784

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

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

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