Repository navigation
fix(channels): open the dock's community switcher from Personal space - #2806
Conversation
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 One layout issue with the new action at narrow widths and enlarged text.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 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.
|
🤖 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:
Optional:
Not checked: the running app (I used the PR's screenshots), dark mode, enlarged text in a narrow pane, keyboard return focus. |
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>
5e585ad to
6d1e53a
Compare
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>
…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) ...
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
Left,
mainat3bcf1c4bb1: "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 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
HEADSHA and exact hint text before writing an image.What changed
The hint
CommunityPicker.tsxexports anOpenCommunitySwitchercontext, which is absent where the shell doesn't mount the switcher. It also accepts controlledopen/onOpenChangeprops, typed as a union so a host passes both or neither.navigatedreset moves from the trigger'sonOpenChangeinto 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.tsxowns the switcher's open state, next to the New menu'screationOpen, and wraps page content in the context provider.ChannelsPage.tsxhas the new text and renders the button only when a shell provides the opener. The heading is unchanged.CommunityPickerstays the only switcher. The button is the sharedButton 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…", matchingAgentAvatarPicker.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.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)
CommunityPickertest 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.mdno 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. TheInboxRowandInboxPreviewcomments follow.Tests and checks
Run on
cbef0332e5, the pushed head:AppShell,CommunityPicker,CommunityPicker.native,CommunityLanding,ChannelsPageandAvatarEditor.ChannelsPagewith no saved community, clicks Choose a community, expects the Switch community dialog, then presses Escape and expects focus on the Apps dock'sCommunity switchertrigger. Withmain'sChannelsPage.tsx, it fails atexpect(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.onOpenChange, it fails with focus on#main-content.tsc --noEmit,design:check(all six scripts),biome checkon the changed source files, andgit diff --checkall pass.git grepfor "community picker in the top bar", "in the sidebar to upload" and "bell in the sidebar" finds nothing insrc,README.mdordocs/.mainat067db608f.Not checked yet
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-capsuleanddata-compact-pages(neither exists insrcany more), and "The shell topbar passesopen(target, { focus: "preserve" })", which is now done by the dock.docs/inbox.md's "the bell in the title bar above", and the matchingInbox.module.csscomment.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