Skip to content

Move Activity back into the Messages sidebar - #3127

Merged
tulsi-builder merged 4 commits into
mainfrom
basil/activity-sidebar
Nov 9, 2026
Merged

tulsi-builder merged 4 commits into
mainfrom
basil/activity-sidebar

Conversation

@tulsi-builder

@tulsi-builder tulsi-builder commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Activity moves out of the dock and back into a row at the top of the Messages sidebar, where it was before #2626. Drafts & sent sits below it when that plugin is on.

The change is host policy in pagePlacement() (src/app/shell/presentation.ts): buzz.inbox/inbox resolves to "sidebar" whatever placement it registers, and it's dropped from the dock order. No FOUNDATION files are touched.

Docs (docs/inbox.md, docs/buzz-help.md, docs/shell-design.md, the Activity README) and Inbox code comments now say "Messages sidebar" where they said "app dock".

Tradeoffs

  • Fewer places to see it. The row lives in the Messages sidebar. With another dock app open, the sidebar collapsed (below 650px), or a plugin narrowing the sidebar, Activity takes an extra step (Messages, Show navigation, or Search/shortcut), and the reaction-emoji swap isn't visible until the sidebar is.
  • Activity is no longer a dock tab. This reverses that part of Move app navigation to a dock and unify conversation headers #2626, so the dock's owner should sign off.

Screenshots

Synthetic browser-fixture data only.

Hovering the Activity row, light:

Activity hover card beside its Messages sidebar row, light theme

Dark:

Activity hover card beside its Messages sidebar row, dark theme

The row's bell swapped for a new reaction (✅):

Activity row showing a reaction emoji in place of its bell

Tests

  • New PageNavigation.test.tsx: the sidebar Activity row swaps its bell for the emoji and keeps its accessible name.
  • presentation.test.ts: bundled Activity resolves to the sidebar whatever placement it registers.
  • navigation-owner.test.ts: Activity now belongs to Messages.
  • entity-navigation.test.tsx also checks that Activity has no dock tab.
  • AppShell and entity-navigation tests that used Activity as an example dock app now use Bestie, Reminders or Workflows. Entity-navigation tests find the Activity row only after the sidebar's one startup remount, so they never click a detached row.
  • Browser specs find Activity with a shared activityRow() helper in tests/browser/navigation.mjs. No browser cases were added or removed. inbox-preview.spec.mjs now covers hovering the sidebar row; on a selected row it checks for the row's title hint where it used to check for the dock's tooltip. inbox-tabs.spec.mjs expects the 16px row emoji instead of the 18px dock one.

Validation on this branch:

  • pnpm check (biome, typecheck, design checks) passed.
  • Full vitest run: 20,129 passed, 1 failed. The failure, MemoryPanel.test.tsx > copies a memory from its context menu, passes when run on its own on both this branch and main.
  • Chromium browser specs (--project chromium) covering Activity or the dock (41 files): after the fixes, every case touched passes. Three cases fail identically on the base commit without this change, so they're out of scope here: layout.spec.mjs "Alt+ArrowUp from a message link preserves native scroll ownership", and both typing.spec.mjs "a growing … composer lifts history" cases (React error Add complete reaction toggles to the message menu #185).
  • Narrow windows: below 650px the Messages sidebar is collapsed, so getting to Activity takes Show navigation or Search. inbox.spec.mjs's 390px case opens Activity through Show navigation and checks that the drawer closes.
  • After review fixes (916e24d3e): the vitest files touched (30 files, 689 tests) and tsc pass; the Chromium specs rerun with 45 passed and 1 failed, the Alt+ArrowUp case that also fails on main. layout.spec.mjs now uses Workflows as its non-Messages dock destination.
  • tulsi tried the running desktop app: the row, hover preview and emoji swap all work.

Not run locally: WebKit browser projects and native builds. CI covers those.

🤖 Generated with Claude Code

tulsi-builder and others added 2 commits November 9, 2026 11:31
Activity is a row at the top of the Messages sidebar again instead of a
dock app. It keeps its hover preview, and its bell swaps for the latest
reaction emoji at row size. Opening it keeps Messages selected with its
sidebar, like other pages listed there.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: tulsi <[email protected]>
Browser journeys open Activity from its sidebar row through a shared
activityRow() helper, or through Search at narrow widths where the sidebar
is collapsed. Tests that only needed some dock app use Workflows,
Reminders or Messages instead.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: tulsi <[email protected]>
@tulsi-builder
tulsi-builder marked this pull request as ready for review November 9, 2026 19:44
@tulsi-builder
tulsi-builder requested a review from a team as a code owner November 9, 2026 19:45

@tellaho tellaho 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.

🤖 Princess Donut, reviewing on tho's behalf. Reviewed head 8519674 against merge base 2fd77b6. No concrete blocking correctness or security defect found in this review. The change reuses the shell's placement, navigation ownership, preview, and icon owners. One optional coverage suggestion is inline. Source review only; I did not rerun suites or exercise the built UI.

Comment thread tests/browser/inbox.spec.mjs Outdated
.getByRole("tab", { name: "Activity", exact: true })
.click();
// At this width the Messages sidebar, and its Activity row, is collapsed.
await openPage(page, "Activity");

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.

🤖 Optional coverage suggestion: this switches the 390px journey to Search, so it bypasses the access path changed by this PR. Consider opening Messages → Show navigation → Activity here (or in the existing narrow sidebar journey), then asserting that Activity opens and the drawer closes. That would exercise the newly required navigation path at narrow widths.. This is a coverage suggestion, not a reproduced runtime defect.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Good call, done in a3b2a99. The 390px case now opens Activity with Show navigation → the Activity row, then checks that Activity opens and the drawer closes (the row is hidden and Show navigation is back). The whole inbox.spec.mjs passes on Chromium (6/6).

@tellaho tellaho 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.

🤖 Princess Donut, approving on tho’s behalf at their explicit request. Reviewed head 8519674; no blocking findings. The inline narrow-navigation coverage suggestion is optional. Source review only; no local test reruns or live UI verification.

tulsi-builder and others added 2 commits November 9, 2026 11:49
Activity can no longer be a dock page, so the dock's Activity icon branch
and the icon's dock size go away; the icon is sized for a sidebar row.
Help, shell design notes and Inbox comments no longer place Activity in
the dock. Tests check that Activity has no dock tab, and the layout check
uses Workflows so it still proves a non-Messages dock destination.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: tulsi <[email protected]>
Below 650px the Activity row sits in the collapsed Messages sidebar, so
the narrow Inbox test now opens it with Show navigation and checks that
the drawer closes once Activity opens, rather than going through Search.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: tulsi <[email protected]>
@tulsi-builder
tulsi-builder merged commit 756d7b9 into main Nov 9, 2026
212 of 216 checks passed
@tulsi-builder
tulsi-builder deleted the basil/activity-sidebar branch November 9, 2026 21:39
matt2e added a commit that referenced this pull request Nov 10, 2026
…Settings card tests

The two Settings-card tests added in c125aeb waited for a tab named
Activity before opening Settings. After the rebase onto main, "Move
Activity back into the Messages sidebar" (#3127, 756d7b9) made
Activity a row in the Messages sidebar rather than a dock tab, and the
file's other tests moved to its findActivityRow() helper. These two
kept the old barrier and failed on every CI run with "Unable to find
role="tab" and name "Activity"".

Use findActivityRow() like the neighbouring tests. The assertions are
unchanged: inside Settings, Try again is alone and prominent on the
not-available card, Manage plugins is alone on the turned-off card, and
Go to Messages appears nowhere.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
matt2e added a commit that referenced this pull request Nov 10, 2026
…Settings card tests

The two Settings-card tests added in c125aeb waited for a tab named
Activity before opening Settings. After the rebase onto main, "Move
Activity back into the Messages sidebar" (#3127, 756d7b9) made
Activity a row in the Messages sidebar rather than a dock tab, and the
file's other tests moved to its findActivityRow() helper. These two
kept the old barrier and failed on every CI run with "Unable to find
role="tab" and name "Activity"".

Use findActivityRow() like the neighbouring tests. The assertions are
unchanged: inside Settings, Try again is alone and prominent on the
not-available card, Manage plugins is alone on the turned-off card, and
Go to Messages appears nowhere.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
matt2e added a commit that referenced this pull request Nov 11, 2026
…Settings card tests

The two Settings-card tests added in c125aeb waited for a tab named
Activity before opening Settings. After the rebase onto main, "Move
Activity back into the Messages sidebar" (#3127, 756d7b9) made
Activity a row in the Messages sidebar rather than a dock tab, and the
file's other tests moved to its findActivityRow() helper. These two
kept the old barrier and failed on every CI run with "Unable to find
role="tab" and name "Activity"".

Use findActivityRow() like the neighbouring tests. The assertions are
unchanged: inside Settings, Try again is alone and prominent on the
not-available card, Manage plugins is alone on the turned-off card, and
Go to Messages appears nowhere.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
matt2e added a commit that referenced this pull request Nov 12, 2026
…Settings card tests

The two Settings-card tests added in c125aeb waited for a tab named
Activity before opening Settings. After the rebase onto main, "Move
Activity back into the Messages sidebar" (#3127, 756d7b9) made
Activity a row in the Messages sidebar rather than a dock tab, and the
file's other tests moved to its findActivityRow() helper. These two
kept the old barrier and failed on every CI run with "Unable to find
role="tab" and name "Activity"".

Use findActivityRow() like the neighbouring tests. The assertions are
unchanged: inside Settings, Try again is alone and prominent on the
not-available card, Manage plugins is alone on the turned-off card, and
Go to Messages appears nowhere.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
matt2e added a commit that referenced this pull request Nov 13, 2026
…Settings card tests

The two Settings-card tests added in c125aeb waited for a tab named
Activity before opening Settings. After the rebase onto main, "Move
Activity back into the Messages sidebar" (#3127, 756d7b9) made
Activity a row in the Messages sidebar rather than a dock tab, and the
file's other tests moved to its findActivityRow() helper. These two
kept the old barrier and failed on every CI run with "Unable to find
role="tab" and name "Activity"".

Use findActivityRow() like the neighbouring tests. The assertions are
unchanged: inside Settings, Try again is alone and prominent on the
not-available card, Manage plugins is alone on the turned-off card, and
Go to Messages appears nowhere.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
matt2e added a commit that referenced this pull request Nov 13, 2026
…Settings card tests

The two Settings-card tests added in c125aeb waited for a tab named
Activity before opening Settings. After the rebase onto main, "Move
Activity back into the Messages sidebar" (#3127, 756d7b9) made
Activity a row in the Messages sidebar rather than a dock tab, and the
file's other tests moved to its findActivityRow() helper. These two
kept the old barrier and failed on every CI run with "Unable to find
role="tab" and name "Activity"".

Use findActivityRow() like the neighbouring tests. The assertions are
unchanged: inside Settings, Try again is alone and prominent on the
not-available card, Manage plugins is alone on the turned-off card, and
Go to Messages appears nowhere.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
matt2e added a commit that referenced this pull request Nov 14, 2026
…Settings card tests

The two Settings-card tests added in c125aeb waited for a tab named
Activity before opening Settings. After the rebase onto main, "Move
Activity back into the Messages sidebar" (#3127, 756d7b9) made
Activity a row in the Messages sidebar rather than a dock tab, and the
file's other tests moved to its findActivityRow() helper. These two
kept the old barrier and failed on every CI run with "Unable to find
role="tab" and name "Activity"".

Use findActivityRow() like the neighbouring tests. The assertions are
unchanged: inside Settings, Try again is alone and prominent on the
not-available card, Manage plugins is alone on the turned-off card, and
Go to Messages appears nowhere.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: Matt Toohey <[email protected]>
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