Skip to content

fix(web): open threads at the bottom (evidence staging) - #7

Closed
bompus wants to merge 1136 commits into
mainfrom
fix/open-thread-at-bottom
Closed

bompus wants to merge 1136 commits into
mainfrom
fix/open-thread-at-bottom

Conversation

@bompus

@bompus bompus commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Problem

Switching back to a thread can leave its viewport above the newest message. The saved-position restore uses estimated row heights, and the return button can remain hidden after those heights change.

Ordinary thread entry should open at the latest message, including threads previously left partway up. Scrolling up while a thread is open should still hold the reader's position.

Change

Initialize a fresh LegendList for each requested/displayed thread pair and use its native initialScrollAtEnd measurement handling. Remove the custom saved-row restoration loop and root scroll-position cache. Keep disclosure expansion and work-log state separate from entry position.

Reset following before the new thread paints and attach navigation listeners when its scroll node mounts. Explicit citation navigation keeps its target; upward navigation cancels native initialization and end following.

Mobile already uses a fresh keyed list with initialScrollAtEnd. This gives web and desktop the same entry policy and the bottom-on-entry behavior requested in the comparison with other ADE/chat apps. Native mobile is unchanged; packaged desktop and other apps have not been independently tested here.

Scope and approval

Replaces pingdotgg#14212 with the revised bottom-on-entry requirement. References pingdotgg#5903 (thread viewport stranding) and pingdotgg#12372 (missing recovery button), which remain open for triage; this does not claim to resolve their other causes. Maintainer triage of #12372 confirms that failure, but its suggested fix does not establish approval of every entry-policy choice here.

Related pingdotgg#15859 changes recovery-button and send-time anchor behavior; this PR addresses thread entry. pingdotgg#14916 preserves saved reading positions while fixing stale saved-follow intent. This PR removes root reading-position restoration and always opens at the end.

Verification

  • 233 tests pass across MessagesTimeline.test.tsx, timelineScrollAnchoring.test.tsx, ChatView.logic.test.ts, and assistantCitationNavigation.test.ts.
  • The new regression uses the installed real LegendList with controlled layout measurements. It covers return through an uncached/loading destination retaining the previous display, cached thread switches, rows measuring twice their estimate, a 2,620px late tail growth, and preserving manual reading after following is disabled.
  • Replacing the requested/displayed key with the old display-only key makes the regression fail with the viewport at 100px instead of the end. Both original reviewer findings are fixed; no further model review round ran.
  • Web typecheck passes. Scoped lint has 109 warnings versus 110 on upstream, with no new diagnostics or errors. Scoped formatting passes.
  • Real web-client verification with two synthetic long threads at 1280×800: upstream returns 1,800px above the end; this change returns with a 0px bottom gap. Upward navigation held the reading position while the thread remained open. The evidence demonstrates the entry-policy change; it does not reproduce every reported viewport-stranding cause. Packaged desktop and native mobile were not run.
Before After
Before After

Recording: scroll up in A, switch to B, then return to A at the end.

return-to-bottom.mp4

return-to-bottom.mp4

maria-rcks and others added 30 commits October 4, 2026 08:49
… cards (pingdotgg#15506)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…5467)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…dotgg#15468)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…15475)

Co-authored-by: Bil0000 <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ngdotgg#15847)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
juliusmarminge and others added 28 commits October 7, 2026 00:04
…ngdotgg#16290)

Co-authored-by: spoukyii <61633921+spoukyii@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ices (pingdotgg#16631)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tgg#16762)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s of untracked files (pingdotgg#16771)

Co-authored-by: Braulio Oliveira <brauliobo@gmail.com>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…eep (pingdotgg#16760)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ingdotgg#16761)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ingdotgg#16782)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…turn settles (pingdotgg#16878)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nt is idle (pingdotgg#16486)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
…ingdotgg#16287)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… connect (pingdotgg#16887)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ntrackedFiles=no (pingdotgg#15834)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nd (pingdotgg#14917)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ingdotgg#16895)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ady holds (pingdotgg#16897)

Co-authored-by: saphid <saphid@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…legacy (pingdotgg#16903)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… phone's orientation (pingdotgg#16885)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…16908)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ingdotgg#16676)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@bompus

bompus commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

Evidence uploaded and verified in pingdotgg#16930. Closing this temporary draft; the upstream PR is the implementation proposal.

@bompus bompus closed this Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.