Skip to content

Expose native channel headings to Solo sources - #3523

Merged
dr0uleau merged 10 commits into
mainfrom
nexus/expose-host-channel-groups-for-consistent-worksp-e2b97b6e
Nov 14, 2026
Merged

dr0uleau merged 10 commits into
mainfrom
nexus/expose-host-channel-groups-for-consistent-worksp-e2b97b6e

Conversation

@dr0uleau

@dr0uleau dr0uleau commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Why

Solo sources can use native personal workspace headings, but must build their own channel headings and menus. Those copies can drift from channel access rules and native actions.

What

Add optional ui.ChannelGroup to the Solo region contract. The host supplies the channel name, privacy icon, disclosure, details entry and native menu. Sources supply task content, selection, collapse state and New task.

How

Reuse the existing channel menu, tab store and navigation components. Share one local roster lookup across groups. Evaluate menu actions and lifecycle evidence when the popup opens. Recheck channel membership and write access before source callbacks run.

The component is optional and retains version 2. Older hosts omit it, so sources can keep their existing fallback. No source uses it unless it opts in.

Risk

The existing channel header also defers menu work until open. Its action owners and access checks stay in place. At 200% interface size, a narrow sidebar truncates the channel title while controls show; its hint retains the full name. New task remains in the menu when its shortcut cannot fit.

Testing

Manual Chromium checks used the actual app shell with simulated community data. Pointer and keyboard opened all seven expected menu actions. Escape returned focus. Details opened Channel settings and focused its tab. Disclosure preserved its body, and New task opened the channel task pane. Light mode, dark mode, narrow widths and supported 200% interface size were checked. No native app or real relay was used.

The scale check uses 3,000 channel records and 100 rendered groups. Closed groups start no channel or profile fetches, use fewer than 20 local roster reads, and retain all 14 native/offered menu items. Removing the closed-menu guard made the check fail with 100 premature action evaluations. Restoring the source passed. No browser cases were added or removed. Independent shipping review found no blocking defects in the feature. A later CI check found a submenu focus regression; the popup now keeps its action contents through closure. Both engines reproduced the original failure. All 34 cases across the full channel-header-menu and nested-replies files then passed. All 123 focused unit tests passed. Required CI and human review remain merge gates.

The restored Move channel focus path was then confirmed by a human in the running preview.

buzz-review-completed

Native channel group menu in light mode

Native channel group menu at 200% interface size

Generated with Codex

dr0uleau and others added 9 commits November 13, 2026 14:43
Co-authored-by: Codex <[email protected]>
Signed-off-by: Daniel Rouleau <[email protected]>
Co-authored-by: Codex <[email protected]>
Signed-off-by: Daniel Rouleau <[email protected]>
Co-authored-by: Codex <[email protected]>
Signed-off-by: Daniel Rouleau <[email protected]>
@dr0uleau
dr0uleau marked this pull request as ready for review November 13, 2026 23:46
@dr0uleau
dr0uleau requested a review from a team as a code owner November 13, 2026 23:46
@dr0uleau
dr0uleau requested review from gilgtm and kazemek21 November 13, 2026 23:46
Co-authored-by: Codex <[email protected]>
Signed-off-by: Daniel Rouleau <[email protected]>

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

🤖 No P0/P1 findings in the deep dual review of 0b7ad5127e5c18dc0e9660c0e97e9c3375818f5e.

Posted by duel-review skill [driver: codex(high), mode: deep-dual, review synthesized by codex(high)]

@dr0uleau
dr0uleau requested a review from a team November 14, 2026 00:36
@dr0uleau
dr0uleau merged commit 762b9ef into main Nov 14, 2026
68 checks passed
@dr0uleau
dr0uleau deleted the nexus/expose-host-channel-groups-for-consistent-worksp-e2b97b6e branch November 14, 2026 00:37
wpfleger96 added a commit that referenced this pull request Nov 14, 2026
…y-unreads

* origin/main: (24 commits)
  [1/2] feat(agents): add a recommended agent setup (core) (#3344)
  test(browser): survive the live-stream restart a page-clock jump causes (#3442)
  chore(renovate): hold rusqlite below 0.41 for mesh-llm (#3438)
  test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (#3445)
  test(browser): play the draft clip at rate 0 instead of looping it before the Play click (#3446)
  fix(status): reopen a status whose preset deadlines coincide as Today (#3449)
  fix(messages): tolerate a cancelled reaction-name chunk load (#3450)
  fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (#3451)
  test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (#3444)
  Expose native channel headings to Solo sources (#3523)
  test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (#3447)
  fix(solo): keep every contributed destination action (#3516)
  fix(identity): report an issuer that keeps rate-limiting an agent as a limit (#2365)
  fix(identity): let a stuck at-launch sign-in copy its link (#2453)
  fix(profiles): open avatar previews on hover in compact density (#3510)
  feat(solo): smooth chat recency reordering (#3502)
  Reject self-mentions that cannot wake another session (#3513)
  feat(status): offer don't clear for every status (#3515)
  Let plugin panels name their tab with panels.useTabTitle (#3251)
  fix(agents): report a conversation wake that fails before its turn starts (#2192)
  ...

# Conflicts:
#	tests/browser/message-management.spec.mjs
wpfleger96 added a commit that referenced this pull request Nov 14, 2026
* origin/main: (27 commits)
  [2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity (#3345)
  fix(solo): preserve and resume unsent chat drafts (#3525)
  fix(builderlab): give refused app sign-ins and Identity links a route to Organization sign-in (#3078)
  fix(agents): say why Import an agent can't import here, and link Manage plugins (#3073)
  [1/2] feat(agents): add a recommended agent setup (core) (#3344)
  test(browser): survive the live-stream restart a page-clock jump causes (#3442)
  chore(renovate): hold rusqlite below 0.41 for mesh-llm (#3438)
  test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (#3445)
  test(browser): play the draft clip at rate 0 instead of looping it before the Play click (#3446)
  fix(status): reopen a status whose preset deadlines coincide as Today (#3449)
  fix(messages): tolerate a cancelled reaction-name chunk load (#3450)
  fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (#3451)
  test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (#3444)
  Expose native channel headings to Solo sources (#3523)
  test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (#3447)
  fix(solo): keep every contributed destination action (#3516)
  fix(identity): report an issuer that keeps rate-limiting an agent as a limit (#2365)
  fix(identity): let a stuck at-launch sign-in copy its link (#2453)
  fix(profiles): open avatar previews on hover in compact density (#3510)
  feat(solo): smooth chat recency reordering (#3502)
  ...

# Conflicts:
#	src-tauri/src/federated_identity/agent/tests.rs
#	src-tauri/src/federated_identity/mod.rs
#	src-tauri/src/federated_identity/protocol.rs
joahg added a commit to joahg/buzz-app that referenced this pull request Nov 14, 2026
* origin/main: (133 commits)
  Expose ordinary chats without workspace headings (block#3530)
  [2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity (block#3345)
  fix(solo): preserve and resume unsent chat drafts (block#3525)
  fix(builderlab): give refused app sign-ins and Identity links a route to Organization sign-in (block#3078)
  fix(agents): say why Import an agent can't import here, and link Manage plugins (block#3073)
  [1/2] feat(agents): add a recommended agent setup (core) (block#3344)
  test(browser): survive the live-stream restart a page-clock jump causes (block#3442)
  chore(renovate): hold rusqlite below 0.41 for mesh-llm (block#3438)
  test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (block#3445)
  test(browser): play the draft clip at rate 0 instead of looping it before the Play click (block#3446)
  fix(status): reopen a status whose preset deadlines coincide as Today (block#3449)
  fix(messages): tolerate a cancelled reaction-name chunk load (block#3450)
  fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (block#3451)
  test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (block#3444)
  Expose native channel headings to Solo sources (block#3523)
  test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (block#3447)
  fix(solo): keep every contributed destination action (block#3516)
  fix(identity): report an issuer that keeps rate-limiting an agent as a limit (block#2365)
  fix(identity): let a stuck at-launch sign-in copy its link (block#2453)
  fix(profiles): open avatar previews on hover in compact density (block#3510)
  ...

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

# Conflicts:
#	src/bundled/codex/prompt.test.ts
#	src/bundled/goose/runtime.ts
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