Skip to content

Load long Conversation transcripts around the read position #2568

Open

Description

@sentry-junior

The dashboard Conversation page loads and renders every transcript row from the latest event backward. With read positions (#2513), it often opens in the middle of the transcript, but it still loads and renders from the end.

Current behavior

  • The detail request returns the latest 500 events (limit default in conversationDetailQuerySchema).
  • Older pages load only when the reader scrolls near the top, through an IntersectionObserver sentinel (useAutoLoadPreviousPage). Nothing loads in the background.
  • Every loaded row stays mounted. There is no list virtualization, so render and layout work grows with the transcript.
  • The event API pages only backward (before cursor). It has no page that starts at a given seq.

Gap

  • A reader whose read position is far behind still waits for the latest page, then scrolls back through it to reach the "New" marker.
  • If the read position is older than the first loaded page, the marker shows at the top of the loaded rows, not at the first unread row.
  • Long-lived Conversations keep all loaded rows in the DOM, which can cause jank.

Related code

Proposal (from BYK's review of #2513)

  • Cap how far toward the present the first load goes, based on the known read position. Load the rest piece by piece in the background after first paint.
  • Cap how far back into the past the page loads, and use a virtual list.

via @BYK.

--

View Session in Sentry

Activity

  1. self-assigned this
    on Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions