Skip to content

NEXUS-4156: Expose Solo Workspaces to plugin regions - #2786

Merged
gilgtm merged 1 commit into
mainfrom
gil/nexus-4156-workspace-api
Nov 11, 2026
Merged

gilgtm merged 1 commit into
mainfrom
gil/nexus-4156-workspace-api

Conversation

@gilgtm

@gilgtm gilgtm commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Exposes the bound user's personal Solo Workspaces to plugin regions (2cbf04b6d).

ctx.soloNavigation.workspaces takes the current region binding and offers:

  • snapshot: the workspace IDs and names, the catalog status, whether creation is available, and any read error;
  • subscribe and refresh;
  • create({ id, name }).

It uses the existing Solo preference writer, so that writer's authorization, capacity and revision checks apply. An ended binding cannot read or write another community. Ordinary chat filing stays host-owned. docs/solo-regions.md documents the contract.

Compared with the previous version of this PR

The PR no longer contains "add primary controls and the workspace header". It is based on #2784's branch instead of #2785's.

buzz-review-completed

Testing

Local runs on macOS, on the stack rebased onto main 9596cd3db:

  • At this PR's head 2cbf04b6d: pnpm check (Biome, TypeScript and the design checks) and the icon check passed. Vitest for the files the flake check selects for this PR: 436 of 438 passed in a run that shared the machine with a Rust build; the 2 tests that timed out (App.profile.test.tsx, entity-navigation.test.tsx) passed on rerun, 52/52 in their files.
  • At the stack tip adbdf424e: full Vitest, 20556 passed and 23 skipped (includes browser-host/channel-kit.test.mjs).
  • Browser journeys at the stack tip, Chromium and WebKit: the full tests/browser/solo-rename.spec.mjs, repeated 5 times, passed 120/120. The 34 other specs that the flake check relates to the stack, run once in each engine: 343 passed, 3 skipped by their own conditions. The full browser suite was not run locally.
  • The Nexus plugin's connected browser harness ran on the actual Buzz web shell and plugin UI, with a simulated relay and generated identities, before the rebase. Full run at host pin 049a9b57e (now 1fbd49c49), which includes this PR: 53 passed.

Native testing: Gil ran the native desktop app on this stack at adbdf424e, with the matching Nexus plugin build. Gil confirmed that these native-only paths passed:

Agent testing did not reach these paths: the agent ran no native app, no real relay and no real agent.

Known gaps

  • None specific to this PR.

Hosted or local failures that this stack does not cause:

  • tests/browser/typing.spec.mjs:290 ("a growing channel/thread composer lifts history with it at the bottom") intermittently fails with React error Add complete reaction toggles to the message menu #185 on main too. Locally it failed 12 of 12 runs at 9596cd3db and 9 of 12 at a later main commit.
  • On macOS, cargo test -p Buzz crashes the library test binary (SIGSEGV), and some host_command deadline tests fail. Both happen the same way at base 9596cd3db, before this stack. Hosted Linux CI is the reference for these.

Test changes

Titles are compared only in the test files each range changes. Tests that moved or were renamed are matched by title.

Removed by this PR's diff (0)
  • none
Added by this PR's diff (1)
  • src/features/channel-navigation/solo-workspaces.test.ts: projects the existing Solo catalog and writer, preserving uncertainty and fencing ended bindings
In the previous version of this PR, not carried over (2)
  • src/features/solo/SoloDraft.test.tsx: permits one start across already-open drafts and preserves unresolved payload (%s)
  • src/features/solo/SoloDraft.test.tsx: shows pending accepted-message recovery and cancels binding when its draft region ends

@gilgtm
gilgtm added this pull request to stack #2791 November 6, 2026 12:04
@gilgtm
gilgtm force-pushed the gil/nexus-4156-workspace-api branch from 3369ce3 to bf72e8f Compare November 6, 2026 16:02
@gilgtm
gilgtm force-pushed the gil/nexus-4156-workspace-api branch from bf72e8f to 35033e1 Compare November 10, 2026 03:00
@gilgtm
gilgtm removed this pull request from stack #2791 November 10, 2026 03:03
@gilgtm
gilgtm changed the base branch from gil/nexus-4022-new-chat-host to gil/nexus-4022-durable-task-host November 10, 2026 03:03
@gilgtm
gilgtm added this pull request to stack #3176 November 10, 2026 03:03
@gilgtm
gilgtm force-pushed the gil/nexus-4156-workspace-api branch from 35033e1 to 2cbf04b Compare November 10, 2026 05:31
@gilgtm
gilgtm marked this pull request as ready for review November 10, 2026 06:04
@gilgtm
gilgtm requested a review from a team as a code owner November 10, 2026 06:04

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

🤖 approved for this commit. native signing and a consuming plugin remain unverified

Base automatically changed from gil/nexus-4022-durable-task-host to main November 11, 2026 02:40
Use the existing preference writer for workspace snapshots, refreshes, subscriptions and creation.

Co-authored-by: Codex <[email protected]>
Signed-off-by: Gil Birman <[email protected]>
@gilgtm
gilgtm force-pushed the gil/nexus-4156-workspace-api branch from 2cbf04b to 135d6fa Compare November 11, 2026 02:40
@gilgtm
gilgtm merged commit 8993595 into main Nov 11, 2026
66 checks passed
@gilgtm
gilgtm deleted the gil/nexus-4156-workspace-api branch November 11, 2026 03:08
joahg added a commit to joahg/buzz-app that referenced this pull request Nov 11, 2026
* origin/main:
  feat(messages): let attachment renderers open files from the host file card (block#2239)
  feat(charts): bundle a Charts code-block renderer (block#3226)
  Expose native reply grouping through Conversation.ui (block#3245)
  NEXUS-4163: Keep plugin-owned chat deletion in Solo (block#2787)
  NEXUS-4156: Expose Solo Workspaces to plugin regions (block#2786)
  NEXUS-4022: Start region chats in the New Chat editor (block#2784)
  feat(link-previews): unfurl web links below messages by default (block#3225)
  fix(messages): keep names in literal Markdown as written when editing (block#2834)
  feat(plugins): fetch a packaged managed plugin policy from a URL (block#2504)

Signed-off-by: Joah Gerstenberg <[email protected]>

# Conflicts:
#	crates/plugin-manager/tests/management.rs
#	docs/plugin-architecture.md
bostonaholic added a commit that referenced this pull request Nov 11, 2026
…y-untagged-reactions

* origin/main: (324 commits)
  fix(github): show private-repo body images from signed links (#3252)
  NEXUS-4029: Preserve semantic chips in the core composer (#2303)
  Make plugin signature enforcement opt-in (#2212)
  NEXUS-4156: Add workspace Leads and choose a chat's workspace (#2788)
  feat(plugins): report conclusively retired update providers (#3263)
  feat(messages): let attachment renderers open files from the host file card (#2239)
  feat(charts): bundle a Charts code-block renderer (#3226)
  Expose native reply grouping through Conversation.ui (#3245)
  NEXUS-4163: Keep plugin-owned chat deletion in Solo (#2787)
  NEXUS-4156: Expose Solo Workspaces to plugin regions (#2786)
  NEXUS-4022: Start region chats in the New Chat editor (#2784)
  feat(link-previews): unfurl web links below messages by default (#3225)
  fix(messages): keep names in literal Markdown as written when editing (#2834)
  feat(plugins): fetch a packaged managed plugin policy from a URL (#2504)
  fix(goose): enable deferred tool loading for goose agents (#3227)
  fix(unread): preserve manual intent in captured explicit reads (#3228)
  NEXUS-4337: Expose retained plugin update reviews (#3075)
  feat(conversation): add a link preview slot below messages (#3219)
  feat(plugins): let link previews read a public page's preview fields (#3217)
  Let sidebar row plugins decorate ordinary Solo chats (#3222)
  ...
tlongwell-block added a commit that referenced this pull request Nov 11, 2026
* origin/main: (121 commits)
  Expose Solo region state before a component mounts (#3296)
  fix(builderlab): say a 401 was refused, not expired, and show each sign-in failure once (#3241)
  feat(agents): file new Solo chats in explicit personal workspaces (#2857)
  perf(css): limit broad style invalidation (#3267)
  Delay and fade in the Bestie badge celebration (#3292)
  fix(github): show private-repo body images from signed links (#3252)
  NEXUS-4029: Preserve semantic chips in the core composer (#2303)
  Make plugin signature enforcement opt-in (#2212)
  NEXUS-4156: Add workspace Leads and choose a chat's workspace (#2788)
  feat(plugins): report conclusively retired update providers (#3263)
  feat(messages): let attachment renderers open files from the host file card (#2239)
  feat(charts): bundle a Charts code-block renderer (#3226)
  Expose native reply grouping through Conversation.ui (#3245)
  NEXUS-4163: Keep plugin-owned chat deletion in Solo (#2787)
  NEXUS-4156: Expose Solo Workspaces to plugin regions (#2786)
  NEXUS-4022: Start region chats in the New Chat editor (#2784)
  feat(link-previews): unfurl web links below messages by default (#3225)
  fix(messages): keep names in literal Markdown as written when editing (#2834)
  feat(plugins): fetch a packaged managed plugin policy from a URL (#2504)
  fix(goose): enable deferred tool loading for goose agents (#3227)
  ...

Signed-off-by: Tyler Longwell <[email protected]>
Co-authored-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>
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