镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

fix(channels): open the dock's community switcher from Personal space - #2806

Merged
baxen merged 4 commits into
mainfrom
community-chooser-instructions-out-of-date
Nov 9, 2026
Merged

baxen merged 4 commits into
mainfrom
community-chooser-instructions-out-of-date

Conversation

@matt2e

@matt2e matt2e commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

In Personal space, or with no community saved, Messages told people to "use the community picker in the top bar". Since #2626 the top bar holds only Hide sidebar, Back, Forward and Search. The switcher is now the icon-only globe at the foot of the Apps dock, so people looked for a control that isn't there.

The hint no longer names a location, and it now has a primary Choose a community button. The button opens the dock's own community switcher, so the popover appears anchored to the dock trigger and shows where the switcher lives. Escape returns focus to that trigger.

Before and after

Before on the left (main 3bcf1c4bb1) says to use the community picker in the top bar. After on the right (cbef0332e5) names no location and adds a Choose a community button.

Left, main at 3bcf1c4bb1: "Use the community picker in the top bar to choose or add a community. Your profile and settings work without a community." The top bar has no community control, and there is no button.
Right, this branch at cbef0332e5: "Choose a community to see its channels, or join one. Your profile and settings work without a community." followed by Choose a community. Nothing else in the frame changes except that the centred block moves up 36 px to fit the button. Its wording now matches the sidebar's existing "Choose a community to see channels."

After clicking Choose a community, the dock's Switch community popover opens beside the globe at the bottom left, listing Personal space, Primary, Secondary and Join a community.

After clicking Choose a community: the dock's own Switch community popover opens beside the globe at the bottom left, not over the empty state. The dialog starts at x 56, 8 px right of the 40 px trigger at x 8, and both bottom edges are at 752 px. The pointer is still over the button, which is why it shows its hover shade.

Both captures used the plain product build against the repo's in-process fixture relay, in Playwright Chromium at 1280×800, with the same steps and seeded identities on each side. The capture script checked each side's HEAD SHA and exact hint text before writing an image.

What changed

The hint

  • CommunityPicker.tsx exports an OpenCommunitySwitcher context, which is absent where the shell doesn't mount the switcher. It also accepts controlled open/onOpenChange props, typed as a union so a host passes both or neither.
  • The picker's navigated reset moves from the trigger's onOpenChange into a layout effect that runs whenever the switcher opens. A switcher the host opens therefore also returns focus to its trigger after an earlier choice navigated away.
  • AppShell.tsx owns the switcher's open state, next to the New menu's creationOpen, and wraps page content in the context provider.
  • ChannelsPage.tsx has the new text and renders the button only when a shell provides the opener. The heading is unchanged.
  • CommunityPicker stays the only switcher. The button is the shared Button variant="primary", the same as Try again in this block. No FOUNDATION files or ctx services change.

Text that still described the old layout

  • AvatarEditor.tsx: "Select a community in the sidebar to upload…" becomes "Select a community to upload…", matching AgentAvatarPicker.
  • docs/buzz-help.md: Activity is "the bell in the app dock". The Communities bullet now says the switcher is at the bottom of the dock and that Personal space offers Choose a community.
  • The Activity, Reminders and Workflows plugin READMEs, which appear in Settings → Plugins, say "in the app dock" instead of "in the sidebar".
  • README.md: Agents is in the app dock. New chat's + is at the top of the Messages sidebar, beside All / Solo / Team, not in the top bar.
  • docs/communities.md: three references to "the header's community picker" become "the dock's community switcher".
  • docs/inbox.md: a plain open of Activity comes "from the app dock", not "the sidebar or topbar".

Review follow-ups (the second and third commits)

  • A CommunityPicker test covers a host-opened switcher's focus return after Create community navigates. The union type for the controlled props is also from this review.
  • docs/communities.md no longer says the picker is "labeled Communities". It describes the icon-only trigger, which shows the community's icon, or a globe in Personal space or with no community saved, and a tooltip that names the selection.
  • docs/inbox.md's "Sidebar preview" is now "Dock preview" and describes the card from the dock's Activity bell. The InboxRow and InboxPreview comments follow.

Tests and checks

Run on cbef0332e5, the pushed head:

  • Vitest: 90/90 pass in AppShell, CommunityPicker, CommunityPicker.native, CommunityLanding, ChannelsPage and AvatarEditor.
  • New AppShell test: it renders the real shell around the real ChannelsPage with no saved community, clicks Choose a community, expects the Switch community dialog, then presses Escape and expects focus on the Apps dock's Community switcher trigger. With main's ChannelsPage.tsx, it fails at expect(channels).not.toHaveTextContent(/top bar/i). Earlier, it also failed with "Unable to find … button 'Choose a community'" when only the text changed and AppShell provided no opener.
  • New CommunityPicker test: "returns focus to the trigger when the host reopens the switcher after a choice navigated". With the reset moved back into onOpenChange, it fails with focus on #main-content.
  • Static checks: tsc --noEmit, design:check (all six scripts), biome check on the changed source files, and git diff --check all pass.
  • Stale wording: git grep for "community picker in the top bar", "in the sidebar to upload" and "bell in the sidebar" finds nothing in src, README.md or docs/.
  • Merge: merges cleanly with main at 067db608f.
  • Earlier browser run: a prototype of the first commit passed the after flow in Chromium and WebKit at 1280×800. At 390 px the button and switcher worked.

Not checked yet

  • the desktop app
  • WebKit for these commits
  • dark theme
  • 200% text
  • keyboard activation of the button in a browser
  • screen-reader output

Not in this PR

These still describe the old layout, and their owners should confirm the wording:

  • docs/plugin-architecture.md: the More pages popover and wide-topbar tabs, .shell-center-capsule and data-compact-pages (neither exists in src any more), and "The shell topbar passes open(target, { focus: "preserve" })", which is now done by the dock.
  • docs/inbox.md's "the bell in the title bar above", and the matching Inbox.module.css comment.
  • The README screenshots in docs/assets/readme/.
  • DESIGN.md's "Top-bar pills".

Other "Choose a community…" hints, in the sidebar, Activity, Search, Drafts & sent, Bestie, Watching and Repos, could use the same opener later.

🤖 Generated with Claude Code

@matt2e
matt2e requested a review from a team as a code owner November 6, 2026 14:10

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 One layout issue with the new action at narrow widths and enlarged text.

Comment thread src/bundled/channels/ChannelsPage.tsx Resolved

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket, Mantis and Groot reviews.

No additional actionable findings at 5e585ad8ada52bc58d2144b43dfb8327863d87c2 (target base a70907c98c7b67c513d3489f51b80d8057923d14; diff merge base 3bcf1c4bb1111d924a84d9b710c1da2db80ccf0b).

Reviewed the shell-owned opener and controlled/uncontrolled picker callers, focus reset and dismissal, existing join/leave recovery paths, Personal-space reflow, regression-test source, user documentation and both attached screenshots. The change reuses the existing picker and navigation owners. The CSS changes and new browser scenario address the mechanism in the existing enlarged-text layout finding; this review does not independently confirm its runtime resolution.

Validation is source-only: no tests, builds or app execution. The description’s screenshots and reported checks refer to cbef0332e5, not this head. Current-head browser/desktop behavior, including initial focus when opened from the page and narrow 200% text scrolling, remains unverified by this review. No approval or merge recommendation is implied.

@morgmart

morgmart commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

🤖 Design review (critical path: fixes a hint that pointed to a control that no longer exists, on a screen new people see). The new copy and the button that opens the dock's community switcher are right.

Must-fix:

  • New overrides on the shared Button. The page's stylesheet now also forces the button's label to wrap and sets its max width (.connect button). Design-system components shouldn't be styled from outside. Smallest fix: drop those two new lines; "Choose a community" is short. If labels really need to wrap at enlarged text, add that to Button itself so every button gets it.

Optional:

  • This screen hand-builds an empty state, and the new comment says it copies EmptyState's narrow-pane behavior. After launch, consider moving it onto EmptyState instead.

Not checked: the running app (I used the PR's screenshots), dark mode, enlarged text in a narrow pane, keyboard return focus.

matt2e and others added 4 commits November 9, 2026 11:32
In Personal space, or with no saved community, Messages told people to
"use the community picker in the top bar". Since #2626 the top bar holds
only Hide sidebar, Back, Forward and Search. The picker is the unlabelled
globe at the foot of the Apps dock, so people looked for a control that
isn't there.

The hint no longer names a location, and it now has a primary "Choose a
community" button. The button opens the dock's own CommunityPicker, so
the popover appears anchored to the dock trigger and shows where the
switcher lives. Escape returns focus to that trigger.

- CommunityPicker exports an OpenCommunitySwitcher context and accepts
  optional controlled open/onOpenChange props. Its navigated reset moves
  into a layout effect on open, so a switcher opened by the host also
  returns focus to the trigger after an earlier choice navigated.
- AppShell owns the switcher's open state, as it already does for the
  New menu, and provides the opener to page content. No FOUNDATION file
  or ctx service changes.
- ChannelsPage reads the context and renders the button only when a
  shell provides it.

It also fixes 11 other texts that still describe the old layout: the
AvatarEditor hint, buzz-help's Activity bell, the Activity, Reminders
and Workflows plugin READMEs, two README steps, three
docs/communities.md references and docs/inbox.md. buzz-help's
Communities bullet now says where the switcher is.

A new AppShell test renders the real shell around the real ChannelsPage
with no saved community. It fails on main (old hint), and it also fails
when only the text changes and AppShell provides no opener.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mtoohey <mtoohey@squareup.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Follow-up review fixes for the Choose a community change.

- CommunityPicker test: after Create community navigates, a switcher the
  host opens with open={true} and dismisses with Escape returns focus to
  its trigger. It fails with focus on #main-content if the navigated
  reset goes back into the trigger's onOpenChange.
- CommunityPicker's controlled props are now a union, so a host passes
  open and onOpenChange together or not at all.
- docs/inbox.md: "Sidebar preview" becomes "Dock preview", describing
  the card from the Activity bell in the app dock.
- docs/communities.md: "dock's community picker" becomes "dock's
  community switcher" in all three places.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mtoohey <mtoohey@squareup.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Review follow-ups for the Choose a community change.

- docs/communities.md no longer says the picker is "labeled
  Communities". Since #2626 the trigger is an icon-only button showing
  the selected community's icon, or a globe in Personal space or with
  no community saved. Its tooltip names the community, "Personal space"
  or "Communities", as CommunityPicker sets it.
- InboxRow and InboxPreview comments now name the dock's Activity bell
  and its preview instead of a sidebar row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mtoohey <mtoohey@squareup.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
…h enlarged text

Review follow-up for PR 2806. At 390x800 with the 200% text preference,
the Messages empty state in Personal space overflowed its 260 px pane.
Its content was centred with no scroll container, and the panel frame
clips. Choose a community started at y=994.7, below the viewport, and
was 380.6 px wide. A wheel scroll left it unmoved in Chromium and
WebKit, and "conversation." was cut off on both sides.

- .connect is now the pane's scroll container. It centres with
  safe center, so the start of overflowing content stays reachable, and
  long words break with overflow-wrap: anywhere.
- The button's label wraps and the button never grows wider than the
  pane, as in other panes too narrow to reflow a whole control.
- In containers of 16rem or less, .connect uses space-2 inline padding,
  the same threshold EmptyState uses. Otherwise the 2rem padding left
  36 px for the label and the button wrapped one or two letters per
  line.

Layout at 1280 px and at 390 px with 100% text is unchanged.

A new journey, personal-space-layout.spec.mjs, runs at 390x800 with
--buzz-text-scale 2. It checks that the heading starts inside the pane,
the button fits the pane's width, nothing overflows sideways and the
button starts below the pane. Then it wheel-scrolls the pane, checks
the button is fully in view, and clicks it at its coordinates to open
the switcher. It is browser-only because jsdom has no layout, clip or
wheel scrolling. It fails in both engines on HEAD's CSS, and also when
the fix drops the scroll container, safe alignment, the narrow-pane
padding or the label wrap.

Signed-off-by: Matt Toohey <contact@matttoohey.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
@matt2e
matt2e force-pushed the community-chooser-instructions-out-of-date branch from 5e585ad to 6d1e53a Compare November 9, 2026 00:38
@baxen
baxen merged commit 0e55903 into main Nov 9, 2026
60 checks passed
@baxen
baxen deleted the community-chooser-instructions-out-of-date branch November 9, 2026 01:03
aharvard added a commit to aharvard/buzz-app that referenced this pull request Nov 9, 2026
Picks up c202642 (block#2837), which fixes the ThreadPanel catch-up test
that fails on every run of a merge with the older main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* origin/main: (155 commits)
  deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (block#3077)
  fix(communities): accept invite links and bare hosts in Join a community (block#2412)
  fix(builderlab): open a remote agent's Activity on the conversation it was opened from (block#3051)
  refactor(builderlab): keep capabilities fresh in the session (block#3003)
  feat(moderation): show invite links as a QR code (block#3029)
  Keep Create agent's Model row readable and give Goose a Thinking row (block#2673)
  Join a community right after creating it in Settings (block#2991)
  Let new Solo chats start temporary by default (block#2874)
  fix(messages): fill a screen that a head of folded agent activity leaves empty (block#3037)
  fix(search): search saved conversations while the community is offline or connecting (block#2724)
  test(agents): make version-history date assertion time-zone independent (block#3010)
  feat(relay): gate artifact writers on NIP-AR support (block#2735)
  fix(channels): open the dock's community switcher from Personal space (block#2806)
  fix(members): keep the list's place after a member change (block#2818)
  fix(channels): keep a launcher's side panel open on Close all tabs (block#2803)
  fix(activity): show a remote agent's Buzz send as its reply (block#3025)
  refactor(settings): move external identity authorization to security (block#3032)
  test(typeahead): serve the fixture pages as a build so cold loads fit (block#2793)
  feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (block#2722)
  fix(solo): delete a removed workspace's settings after the groups write (block#2819)
  ...

Signed-off-by: Andrew Harvard <aharvard@squareup.com>
gilgtm added a commit that referenced this pull request Nov 9, 2026
…pover-card-layout-7eeda1e0

* origin/main: (128 commits)
  deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (#3077)
  fix(communities): accept invite links and bare hosts in Join a community (#2412)
  fix(builderlab): open a remote agent's Activity on the conversation it was opened from (#3051)
  refactor(builderlab): keep capabilities fresh in the session (#3003)
  feat(moderation): show invite links as a QR code (#3029)
  Keep Create agent's Model row readable and give Goose a Thinking row (#2673)
  Join a community right after creating it in Settings (#2991)
  Let new Solo chats start temporary by default (#2874)
  fix(messages): fill a screen that a head of folded agent activity leaves empty (#3037)
  fix(search): search saved conversations while the community is offline or connecting (#2724)
  test(agents): make version-history date assertion time-zone independent (#3010)
  feat(relay): gate artifact writers on NIP-AR support (#2735)
  fix(channels): open the dock's community switcher from Personal space (#2806)
  fix(members): keep the list's place after a member change (#2818)
  fix(channels): keep a launcher's side panel open on Close all tabs (#2803)
  fix(activity): show a remote agent's Buzz send as its reply (#3025)
  refactor(settings): move external identity authorization to security (#3032)
  test(typeahead): serve the fixture pages as a build so cold loads fit (#2793)
  feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (#2722)
  fix(solo): delete a removed workspace's settings after the groups write (#2819)
  ...
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.

5 participants