Repository navigation
Fix windowed timeline outline navigation - #2260
Merged
Merged
Conversation
ymichael
force-pushed
the
bb/fix-timeline-windowing-bug-thr_zp5q9tyx9b
branch
from
August 21, 2026 21:46
4d8ae60 to
b4d2e24
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was wrong
Conversation-outline navigation tried to scroll to a target row while older pages were still being prepended. With timeline windowing enabled, the target could be removed when the timeline crossed the virtualization threshold, and switching from the fully rendered lazy fallback to estimated-height virtual rows could reproject the viewport. That made the selected row flash or jump away.
What changed
The outline now reports its destination before continuing through the existing pagination and DOM-scroll path. When the Timeline windowing experiment is enabled, that destination is added to the virtualizer's existing
alwaysMountedKeysset so the normal outline scroll can find it. The lazy fallback also records exact row heights before handing control to the virtualizer, preventing activation from shifting the viewport. There are no timers or custom scroll scheduler, and the non-windowed rendering path is unchanged. This is app-only behavior and does not change the host-daemon wire protocol.How you verified
pnpm exec turbo run test --filter=@bb/app --force— 414 files passed; 3,203 tests passed and 3 skipped.pnpm exec turbo run typecheck --filter=@bb/app— passed.pnpm exec turbo run lint --filter=@bb/app— passed with 157 pre-existing warnings and no errors.dev-browser; 10 ms frame sampling showed a single transition to “can you do a sanity pass on it”, and repeated jumps between distant entries stayed anchored without snapping back.Fixes: N/A — reported directly; no issue filed.