Repository navigation
fix(channels): show Add and Send message errors above the Manage members list - #2421
Merged
Merged
Conversation
In a long Manage members list, a refused Add (with Retry), "Opening conversation…", a Send message failure and a Copy link failure rendered after the last member group inside the scrolling Member list, so they appeared below the fold and the action looked like it did nothing. Render them outside and before the Member list region, right after the existing administration error. No state changes; Solo share feedback and the hidden status announcement stay where they were. The new MemberAdministration case checks that each message is outside the list and before it in document order, and fails on the previous layout. Its setup now exposes the community writer and gives the session an in-memory outbox (as ChannelMembersDialog tests do), because jsdom has no IndexedDB and a plain Add otherwise fails before publishing. Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Matt Toohey <[email protected]>
A refused team add produced one alert and Retry per agent above the list,
so a few refusals with the same reason could push the member list and
search field out of view.
Group memberAdditions errors by identical message: one alert names the
people (up to three, then "and N more") and its one Retry resubmits every
key in the group. A single refusal still reads "Sam: blocked: … Retry";
the button's accessible name says who it retries ("Retry adding Sam").
Names come from label() with the team row's fallback; label() is unchanged.
Refusals, the opening status, the DM error and the copy failure share one
wrapper with a tighter gap than the layout's sections.
Tests: a refused team add with one reason gives one alert whose Retry
adds both agents; two reasons give two alerts. Both fail on the previous
dialog. Existing Retry locators use the new accessible name.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
A group Retry called the row Add path per key, so each success
overwrote the previous notice and recorded a search choice for every
agent. The Retrying… state was unreachable, because a pending addition
leaves the alert.
Retry a group like a team add: await every key with Promise.allSettled
and announce one combined notice ("Ada and Cy are in the channel.").
A single refusal keeps the Add path. Format names with Intl.ListFormat,
sorted by label so the text is stable, and keep one Retry per solo
agent, which joins directly. Drop the unreachable Retrying… branch.
Tests cover a partial retry (only "Cy: Invitation denied" remains, with
"Retry adding Cy") and a four-agent refusal ("Ada, Bo, Cy, and 1 more").
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
…ries addTeam and the group Retry ran the same allSettled loop with different notices. Fold both into addAll(keys, done), with the done text passed from render. The group Retry now focuses the search field first, where Add lands, so the next step is the search. Tests: Retry leaves focus on the search field; the partial-retry case scopes its "no Ada" check to the alerts and waits for Ada's addition to land before asserting that no group notice appears. docs/channels.md says Solo agents keep one alert each. Co-Authored-By: Claude Fable 5.1 <[email protected]> Signed-off-by: Matt Toohey <[email protected]>
The errors above the member list could still leave the viewport. The pager's sr-only "Page" span is absolutely positioned, and its containing block was the overflow: hidden dialog body, which gave the body ~2,600 px of hidden scroll overflow on a long roster. Highlighting a search match scrolled that body 24 px, and inserting an alert above the list moved it by the alert's height through scroll anchoring. No wheel could bring it back, so the search field and the refusal sat above the visible area. Make .memberList the containing block, so the body has nothing to scroll. Nothing in the dialog relied on the old containing block: the other positioned descendants are sr-only text and a hit target already contained by its own relative parent. A browser journey covers it in Chromium and WebKit: on a 60-member roster with a highlighted "Sam" search, a refused Add and a later failed Send message both stay fully in view with the search field. It fails on the previous stylesheet (refusal 0.70 in view). A bounded feedback block (max-block-size with its own overflow) was measured at 200% text and left out: it hides the newest alert and does not keep the search field in view. Co-Authored-By: Claude Fable 5.1 <[email protected]> Signed-off-by: Matt Toohey <[email protected]>
…ember errors journey Check the root cause directly: once the roster rows render, the dialog body's scrollHeight minus clientHeight is 0. Pin the roster heading to "People · 61", drop the add gate and the "Adding…" check it existed for, and drop the scrollTop writes, which the click's own scrolling made redundant. Without the containment rule the journey fails here first, with 2,038 px of hidden overflow. Co-Authored-By: Claude Fable 5.1 <[email protected]> Signed-off-by: Matt Toohey <[email protected]>
matt2e
marked this pull request as ready for review
November 4, 2026 14:08
kazemek21
approved these changes
Nov 4, 2026
kazemek21
left a comment
Contributor
There was a problem hiding this comment.
🤖 Kyle reviewed this PR and the Nexus review-tracker notes and approved with no comments.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
johnmatthewtennant
added a commit
that referenced
this pull request
Nov 4, 2026
* origin/main: (38 commits) fix(browser): load scheme-less address input over https, falling back to http (#2467) fix(identity): stop one-click key unlinks and show the linked backed-up key (#2486) fix(test): observe coordination transition events (#2297) fix(profiles): keep the next view's profile reads through a shrink (#2395) fix(channels): show Add and Send message errors above the Manage members list (#2421) fix(threads): keep reply hooks off agent activity bubbles (#2422) fix(channels): offer only Copy link in a not-joined preview's sidebar actions (#2425) test: scope row menu placement checks to active section rows (#2493) feat(relay): detach channel windows to a point in history (#2042) feat(identity): decide a missing backup choice from community membership (#2378) Offer Builderlab decisions in FI builds (#2227) feat(inbox): preview recent Inbox activity when hovering the sidebar row (#2347) Add collapsible Solo and Team sidebar sections (#2296) fix(codex): open long Codex transcripts a page of items at a time (#2259) Keep Solo model and effort choices per chat (#2342) feat(sidebar): smooth channel reordering with bounded motion (#2108) Connect legacy agents from DMs and channel mentions (#2423) fix: exclude muted channels from sidebar unread scroll indicators (#2335) fix(claude-code): open long Claude transcripts a page at a time (#2428) feat(solo): share chats as view only (#2375) ...
damienrj
added a commit
to damienrj/buzz-app
that referenced
this pull request
Nov 4, 2026
…-clone-auth-ab8b97 * origin/main: fix(browser): load scheme-less address input over https, falling back to http (block#2467) fix(identity): stop one-click key unlinks and show the linked backed-up key (block#2486) fix(test): observe coordination transition events (block#2297) fix(profiles): keep the next view's profile reads through a shrink (block#2395) fix(channels): show Add and Send message errors above the Manage members list (block#2421) fix(threads): keep reply hooks off agent activity bubbles (block#2422) fix(channels): offer only Copy link in a not-joined preview's sidebar actions (block#2425) test: scope row menu placement checks to active section rows (block#2493) feat(relay): detach channel windows to a point in history (block#2042) Signed-off-by: damienrj <[email protected]>
wpfleger96
added a commit
that referenced
this pull request
Nov 4, 2026
…-nip-fi * origin/main: fix(identity): stop one-click key unlinks and show the linked backed-up key (#2486) fix(test): observe coordination transition events (#2297) fix(profiles): keep the next view's profile reads through a shrink (#2395) fix(channels): show Add and Send message errors above the Manage members list (#2421) fix(threads): keep reply hooks off agent activity bubbles (#2422) fix(channels): offer only Copy link in a not-joined preview's sidebar actions (#2425) test: scope row menu placement checks to active section rows (#2493) feat(relay): detach channel windows to a point in history (#2042) # Conflicts: # src/app/IdentitySettings.test.tsx # src/app/IdentitySettings.tsx # src/app/Settings.tsx
wpfleger96
added a commit
that referenced
this pull request
Nov 4, 2026
…r-load-perf * origin/main: (31 commits) test: fix invitation and coordination checks on main (#2517) perf(search): name searched people from the profile search response (#2353) Use the merge queue for pull requests that require it (#2452) fix(browser): load scheme-less address input over https, falling back to http (#2467) fix(identity): stop one-click key unlinks and show the linked backed-up key (#2486) fix(test): observe coordination transition events (#2297) fix(profiles): keep the next view's profile reads through a shrink (#2395) fix(channels): show Add and Send message errors above the Manage members list (#2421) fix(threads): keep reply hooks off agent activity bubbles (#2422) fix(channels): offer only Copy link in a not-joined preview's sidebar actions (#2425) test: scope row menu placement checks to active section rows (#2493) feat(relay): detach channel windows to a point in history (#2042) feat(identity): decide a missing backup choice from community membership (#2378) Offer Builderlab decisions in FI builds (#2227) feat(inbox): preview recent Inbox activity when hovering the sidebar row (#2347) Add collapsible Solo and Team sidebar sections (#2296) fix(codex): open long Codex transcripts a page of items at a time (#2259) Keep Solo model and effort choices per chat (#2342) feat(sidebar): smooth channel reordering with bounded motion (#2108) Connect legacy agents from DMs and channel mentions (#2423) ...
michaelneale
added a commit
that referenced
this pull request
Nov 4, 2026
* origin/main: (31 commits) test: fix invitation and coordination checks on main (#2517) perf(search): name searched people from the profile search response (#2353) Use the merge queue for pull requests that require it (#2452) fix(browser): load scheme-less address input over https, falling back to http (#2467) fix(identity): stop one-click key unlinks and show the linked backed-up key (#2486) fix(test): observe coordination transition events (#2297) fix(profiles): keep the next view's profile reads through a shrink (#2395) fix(channels): show Add and Send message errors above the Manage members list (#2421) fix(threads): keep reply hooks off agent activity bubbles (#2422) fix(channels): offer only Copy link in a not-joined preview's sidebar actions (#2425) test: scope row menu placement checks to active section rows (#2493) feat(relay): detach channel windows to a point in history (#2042) feat(identity): decide a missing backup choice from community membership (#2378) Offer Builderlab decisions in FI builds (#2227) feat(inbox): preview recent Inbox activity when hovering the sidebar row (#2347) Add collapsible Solo and Team sidebar sections (#2296) fix(codex): open long Codex transcripts a page of items at a time (#2259) Keep Solo model and effort choices per chat (#2342) feat(sidebar): smooth channel reordering with bounded motion (#2108) Connect legacy agents from DMs and channel mentions (#2423) ... Signed-off-by: Michael Neale <[email protected]>
cheng-block
added a commit
to cheng-block/buzz-app
that referenced
this pull request
Nov 5, 2026
…punctuation * upstream/main: (78 commits) fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465) feat(plugins): let agents request plugin changes for owner review (block#2280) fix(messages): keep the hover toolbar while its menu is open (block#2439) feat(workflows): suggest channel members for @ in Send Message text (block#2309) AIDA-2344: Exclude muted channels from Dock (block#2313) feat(search): add slack-style message search operators on desktop (block#2463) test: fix invitation and coordination checks on main (block#2517) perf(search): name searched people from the profile search response (block#2353) Use the merge queue for pull requests that require it (block#2452) fix(browser): load scheme-less address input over https, falling back to http (block#2467) fix(identity): stop one-click key unlinks and show the linked backed-up key (block#2486) fix(test): observe coordination transition events (block#2297) fix(profiles): keep the next view's profile reads through a shrink (block#2395) fix(channels): show Add and Send message errors above the Manage members list (block#2421) fix(threads): keep reply hooks off agent activity bubbles (block#2422) fix(channels): offer only Copy link in a not-joined preview's sidebar actions (block#2425) test: scope row menu placement checks to active section rows (block#2493) feat(relay): detach channel windows to a point in history (block#2042) feat(identity): decide a missing backup choice from community membership (block#2378) Offer Builderlab decisions in FI builds (block#2227) ... Signed-off-by: Cheng Peng <[email protected]> # Conflicts: # docs/buzz-help.md
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.
Problem
In a long channel, Manage members rendered a refused Add (with Retry), "Opening conversation…", a failed Send message and a failed Copy link after the last member group, inside the scrolling member list. The action looked like it did nothing until you scrolled to the bottom.
member-errors-before-after.mp4
Before:
mainat the merge-base (0b2dfbf). After: this branch. Both use the same script and timing in a 61-person channel, in Chromium at 960×720.What changed
region "Member list". No state changes. Solo share feedback and the hidden status announcement stay where they were.addAllpath (Promise.allSettled) and announce one combined notice. Names are sorted and formatted withIntl.ListFormat. Retry returns focus to the search field. Solo agents keep one alert each.position: relativeon.memberList). Moving the errors wasn't enough. The pager'ssr-only"Page" span is absolutely positioned, and its containing block was theoverflow: hiddendialog body. On a long roster that gave the body about 2,000 px of hidden scroll overflow. Highlighting a search match scrolled the body, and inserting an alert moved it further through scroll anchoring. No wheel could undo it, so the search field and the new alert ended up above the visible area. Making.memberListthe containing block leaves the body with nothing to scroll. The dialog's other positioned descendants (sr-only text, and a hit target already inside its own relative parent) don't depend on the old containing block.docs/channels.mddescribes the new placement and grouping.Tests
MemberAdministration.test.tsx,ChannelMembersDialog.test.tsx):tests/browser/channel-members-errors.spec.mjs(Chromium and WebKit).--repeat-each=3.channel-members-focus.spec.mjs: one locator updated for the new Retry name.Typecheck, lint and the related Vitest and browser files passed locally at 6383cec. CI hasn't been checked yet.
Known limits
docs/buzz-help.md.buzz-dialog-bodystill usesoverflow: hidden. Switching tooverflow: clipwould close this class of bug, but that's a design-system change for its owners.🤖 Generated with Claude Code