Skip to content

fix(settings): keep the chosen plugin row in place when details open or close - #1551

Merged
loganj merged 1 commit into
mainfrom
larry/plugin-catalog-scroll-hold
Oct 22, 2026
Merged

loganj merged 1 commit into
mainfrom
larry/plugin-catalog-scroll-hold

Conversation

@loganj

@loganj loganj commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

🤖

Summary

  • In Settings → Manage plugins, opening a plugin's details and then closing it could make the plugin list jump. In the run below, the row you had clicked (Usage) moved from the middle of the list to the top edge, about 286 px. Now the row stays where you saw it, both when details open and when they close.
  • This also fixes the settings.spec.mjs failure on main ("plugin details preserves the catalog scroll position on open and close", Chromium and WebKit, run 39809018054).

Why it broke

#1475 changed the Settings window so that plugin details appear beside the plugin list instead of over it. The list gets narrower, so the rows above the clicked row reflow and the list's scroll position must change to keep the row in place. Two things followed:

  • The test compared the raw scroll position before and after opening. That number now has to change by design (1505 → 1791), so the test failed every time, in both browsers.
  • Only the browser's built-in scroll anchoring kept the row in place. It does not do this reliably: when details closed soon after opening, the list jumped, in both Chromium and WebKit.

Details

  • Settings now records where the clicked row is on screen just before details open or close. After the layout changes, it scrolls the list by the difference, rounded to whole pixels (WebKit drops fractional scroll positions). This covers the row click, the Update button and the details Close/Escape path.
  • The test now checks what the user sees: the clicked row's position inside the list's scroll area, on open and on close. It also checks that the list is actually scrolled.
  • With only the test changed, unchanged main fails the new check on every run in both browsers (the row ends at 26 px instead of 312 px after close). With the fix it passes.

Screenshots (WebKit, close right after open)

Before opening details After closing, main After closing, this PR
before main after close fix after close

…or close

Since #1475 the Settings modal shows plugin details beside the catalog
instead of over it. The catalog column narrows, rows above the chosen
plugin reflow, and only browser scroll anchoring kept the row in view.
That anchoring is not reliable: on close the Usage row jumped 286 px
(from 312 px to 26 px in the scrollport), and the scrollTop check in
settings.spec failed on main in both engines.

Settings now records where the activated row sits before the details
toggle and corrects the catalog scrollport by the whole-pixel drift in
the next layout effect. The journey now checks the row's position in
the scrollport, which is what the user sees, instead of a raw scrollTop
that must change when the column narrows.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Signed-off-by: Logan Johnson <[email protected]>
@loganj
loganj merged commit 0f7dd73 into main Oct 22, 2026
77 of 79 checks passed
@loganj
loganj deleted the larry/plugin-catalog-scroll-hold branch October 22, 2026 17:42
johnmatthewtennant added a commit that referenced this pull request Oct 22, 2026
Co-authored-by: Aaron <f425b86c3b780d43f8d9cf1802429d04dd985bf92eac44fca9468b5ad3887c5e@buzz.block.builderlab.xyz>

* origin/main:
  fix(channels): confirm a requested member when the relay stores bot (#1519)
  test(browser): settle dialog motion and startup errors before strict checks (#1492)
  perf(messages): measure read-tracking rows once per frame (#1527)
  fix(settings): keep the chosen plugin row in place when details open or close (#1551)
  fix(messages): polish reaction pills and mention badges (#1506)

Signed-off-by: John Tennant <[email protected]>
morgmart added a commit that referenced this pull request Oct 23, 2026
Signed-off-by: morgmart <[email protected]>
Co-authored-by: Carl <c217fe6b9d958f41c3a5e030dccc7f626775a923089cb6491305eade75ea1f1b@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

* origin/main: (24 commits)
  Unify chat and channel access, tidy the Solo chat menu (#1446)
  fix(todos): render nested TODOs with collapsible hierarchy and Markdown (#1483)
  fix(agents): Allow agents to propose updates to agents (#1478)
  fix(composer): prevent plugins from updating the recipient on a WIP draft message (#1497)
  fix(agents): can't delete an agent belonging to an archived channel (#1560)
  Bump tokio to 1.53.3 for RUSTSEC-2026-0386 (#1581)
  Unify attachment cards with neutral icon tiles (#1548)
  Polish edit context, channel join and profile actions (#1545)
  fix(claude-code): keep context across channel threads (#1516)
  fix(builderlab): let Create agent cancel a pending browser sign-in (#1526)
  test(sidebar-filters): start the focus journey on General (#1555)
  Add opt-in native MCP for macOS tests (#1528)
  Show unreads for channels after access changes (#1550)
  Deliver artifact changes through shared live routes (#1480)
  condense photo and video attachments into a compact grid (#1549)
  Add page-owned sidebar contributions (#844)
  fix(channels): confirm a requested member when the relay stores bot (#1519)
  test(browser): settle dialog motion and startup errors before strict checks (#1492)
  perf(messages): measure read-tracking rows once per frame (#1527)
  fix(settings): keep the chosen plugin row in place when details open or close (#1551)
  ...
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.

2 participants