Repository navigation
Conversation
kazemek21
force-pushed
the
kylez_NEXUS-3690_plugin-sidebar-sections
branch
2 times, most recently
from
October 23, 2026 02:50
8a28f95 to
8fb5d12
Compare
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Kyle Zemek <kylez@squareup.com>
kazemek21
force-pushed
the
kylez_NEXUS-3690_plugin-sidebar-sections
branch
from
October 23, 2026 04:25
8fb5d12 to
db4fac3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR
Plugins can add a versioned section to the existing Team conversation sidebar. Buzz keeps ownership of the sidebar frame and navigation interactions instead of letting a plugin replace them.
Why
The plugin author API has no sidebar section contribution, so plugins cannot add their own rows beside the built-in sections.
What
The author API exposes an optional v1 capability for a section, observable rows, row selection to an
OpenTarget, and optional header actions. The host renders each contribution through its existing sidebar and navigation components, isolates contribution failures, and disposes registrations with their plugin scope.How
Contributed sections share the host's collapse, drag-reorder, resize, persisted preference, and theme behavior. They reorder within their own group; the built-in channel-group order stays unchanged. Older hosts that omit the optional capability remain unaffected.
Testing
The browser case verifies coexistence with Solo and Team at 1440px and 390px, light and dark themes, enlarged text, keyboard and pointer collapse, and plugin disable/enable. The full file passed on macOS Blox in Chromium and WebKit with
bin/pnpm test:browser tests/browser/sidebar-contributions.spec.mjs --project chromium --project webkit --no-deps --workers=1.The new drag-preview case protects the PointerSensor and portaled DragOverlay interaction, which lower-level tests cannot exercise. It failed before the overlay fix (one visible
Workspacelabel instead of the section plus preview) and passed after it. No browser cases were removed.Before and after at desktop width (1440px):
Before and after at narrow width (390px):
Risk
This adds an optional host capability. It does not change page routing or replace Solo, Team, or Settings navigation. Failures stay local to the contribution.
FOUNDATION files
src/plugins/author.tsexports the public author types.src/app/services.tsconstructs the host registration service.src/app/App.tsxpasses the service into the host shell.Related change
#1532 changes the sidebar filter menu and channel activity handling. This PR keeps its section contribution wiring in separate hunks.
Open question
Should a future contract let plugins interleave their sections with built-in channel groups, or keep contributed sections together as this version does?
— Posted by Codex (gpt-6-luna) on behalf of kazemek21