Repository navigation
fix(messages): release Virtua's held range when scrolling stops - #2032
Merged
Merged
Conversation
A flushed scroll correction holds the mounted range until its own scroll event. A correction that moves nothing, or that another write undoes in the same task, raises no event, so the held range outlived idle. On Linux WebKit the timeline sat idle with no buffer below the viewport, and a held reader row just below it did not remount before the test failed (history-loading.spec.mjs "a held pointer keeps its place after the page's reader row unmounts", CI run 41120162311). Scroll-end now releases the held range and re-renders, so idle buffers both sides as patches/README.md describes. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Logan Johnson <[email protected]>
The scroll-end timer can fire between a flushed jump's write and that jump's scroll event. Releasing the held range then re-rendered from the pre-jump offset against post-jump row offsets: a 40-row prepend mounted rows 0-24 while the viewport sat at 2300-2800px. Scroll-end now reads the native offset first, as the viewport resize path does, so a trailing jump is consumed as its own event and the release applies only to a jump that left the offset unmoved. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Logan Johnson <[email protected]>
loganj
marked this pull request as ready for review
October 30, 2026 21:35
kalvinnchau
approved these changes
Oct 31, 2026
kalvinnchau
left a comment
Contributor
There was a problem hiding this comment.
🤖 Reviewed at 15b4ef3. No defects found. The scroll-end release is confined to the single e.h(2) caller, the driver reads the native offset before the release, and both changes are covered by tests that fail when each is reverted. Local macOS: src/features/messages Vitest 2266/2266 passed; CI green.
shellz-n-stuff
added a commit
that referenced
this pull request
Oct 31, 2026
Picks up the month-boundary StatusEditor test fix (#2064). Co-Authored-By: Claude Opus 5.5 <[email protected]> * origin/main: (56 commits) perf(sidebar): subscribe to selected live and list facts (#1966) feat(desktop): align the sign-in callback page with web branding (#2038) Show linked PRs in Solo headers and move idle huddles to Chat actions (#1968) feat(messages): mark edited messages with "(edited)" (#2020) feat(desktop): bundle the buzz CLI in every package (#2027) feat(plugins): open a plugin page from buzz://plugin links (#2053) feat(plugins): managed plugin sources (#2052) test(browser): prevent sampled clock pause races (#1955) test: fix month-boundary and Sonner mount races in StatusEditor and RelayStaff tests (#2064) test: stop tests leaving temp dirs and a flake-check fixture behind (#1977) fix(messages): release Virtua's held range when scrolling stops (#2032) test(mcp): allow protection checks in bundled help fixture (#2061) fix(emoji): recover transient image failures without reopening chats (#2000) test: wait for dialog focus, reach a reading position, re-sign pair() (#1975) feat(plugins): sign builderlab in through the native fi session in fi builds (#1461) feat(agents): offer bundled Buzz help (#2033) fix(github): show pull request status for anchors and subpages (#2055) fix(dialogs): focus safe controls and task inputs (#2021) fix(composer): truncate workspace names at narrow widths (#2043) AIDA-2287: Refresh public channel search incrementally (#2023) ... Signed-off-by: Alex Rosenzweig <[email protected]>
morgmart
added a commit
that referenced
this pull request
Oct 31, 2026
…isibility * origin/main: (23 commits) feat(profiles): show NIP-FI verified names (BUZZ-433) (#2005) feat(identity): sign in to the organization when Buzz opens (#2086) perf(identity-names): stop rerunning name policy for live member churn (#2092) fix(sidebar): keep the channel drag preview under the pointer (#2019) fix(identity): use xyz.block.buzz.desktop federated-session keychain service (#2094) perf(relay): read each channel's remote access once per accepted batch (#2091) fix(styles): keep page status :has() on each rule's subject (#2081) fix(navigation): show a notice for invalid deep links (#2054) fix(messages): preserve held readers through equal-height resizes (#1963) perf(sidebar): subscribe to selected live and list facts (#1966) feat(desktop): align the sign-in callback page with web branding (#2038) Show linked PRs in Solo headers and move idle huddles to Chat actions (#1968) feat(messages): mark edited messages with "(edited)" (#2020) feat(desktop): bundle the buzz CLI in every package (#2027) feat(plugins): open a plugin page from buzz://plugin links (#2053) feat(plugins): managed plugin sources (#2052) test(browser): prevent sampled clock pause races (#1955) test: fix month-boundary and Sonner mount races in StatusEditor and RelayStaff tests (#2064) test: stop tests leaving temp dirs and a flake-check fixture behind (#1977) fix(messages): release Virtua's held range when scrolling stops (#2032) ... # Conflicts: # src/bundled/channels/ChannelMemberAvatars.tsx
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.
Summary
history-loading.spec.mjs"a held pointer keeps its place after the page's reader row unmounts" (run https://github.com/block/buzz-app/actions/runs/41120162311). After a 91px correction, the list went idle with no rows rendered below the viewport. The held message row did not remount before the test failed.patches/README.mddescribes.Details
patches/[email protected]; Virtua is the list virtualization library):src/features/messages/virtua-compensation.test.mjs) run the installed, patched store and driver:src/features/messagesVitest tests, and the history-loading, image-scroll and initial-position browser files in Chromium and WebKit (2 workers).🤖 Generated with Claude Code