feat(channels): unify header actions and inline details editing - #487
Conversation
e151453 to
447acc9
Compare
wesbillman
left a comment
There was a problem hiding this comment.
No actionable changes requested in the reviewed channel-action, inline-details and navigation/focus changes. Source and all 42 historical attachments were checked; no public-material privacy issue was identified, and those captures are not current-head workflow validation.
Star Lord’s automated source review via Wes’s account: head 447acc9c73df125a9d19506503b993bc3f502d55, base 69a9af2360c2e15bfbe35814b217358165e07117. No tests or app run by this review; the observed CI required/DCO checks passed, Windows native validation was skipped, and native/live behavior remains unverified.
Reuse the regular shared dropdown and existing editor, lifecycle and sidebar action owners. Keep Channel details first, support navigation actions with origin-aware focus, and order lifecycle actions Leave, Archive, Delete with a destructive Delete tone. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Label the pane entry Open channel details and add the shared pencil icon to Edit details. Update selectors and make the existing dismissal recovery test wait for menu closure and reopening. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Add link-colored inline Edit actions with full-row hit targets for description and visibility, reuse the existing details editor and member dialog, and retain permission, recovery and origin-focus behavior. Remove the redundant pane edit button and channel type row. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Remove direct details editing from the header menu. Keep Edit and Copy text on settings rows, add the Members chevron, and make the centered title editable with an inline hover pencil that follows its last line. Copy the exact channel ID with tooltip feedback and preserve editor permissions, recovery, and focus return. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Replace Edit and Copy links with small icons beside their section labels. Fade section icons and the title pencil in from the left, preserve full-row targets and keyboard access, and respect touch and reduced-motion preferences. Show the copy tooltip only after success and report failures inline. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Route the Description section to the shared editor textarea while preserving name focus for other entry points and focus return on close. Disable browser autocomplete on the channel-name field. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep Canvas accessible through the channel actions menu and remove the settings card, its preview reads and unused presentation helper. Restore default channel-name autocomplete without password-manager attributes; preserve description focus and editor recovery. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Match the shared icon wrapper’s rem output while retaining the 14px section and 16px title sizes at default scale. Preserve mainline sizing and reading behavior. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Bind Canvas presentation to its opening channel and navigation lifetime before rendering. Keep channel-scoped drafts and require an explicit reopen after history navigation. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Reuse navigation presentation signals for lifecycle and deferred Create section handoffs. Keep sidebar-entry behavior and session-owned mutation/recovery unchanged; cover retired callbacks and uncertain publication. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Remove the local parent-row outline while retaining keyboard focus, inline affordances and restoration. Assert the computed style in both browser engines. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Scope permission completion barriers to Channel settings after the inline-details migration. Wait for the existing panel entrance before measuring thread activity alignment; preserve all behavioral assertions and geometry tolerances. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Integrate inline editing with reversible privacy, duration, discard protection and pending recovery. Keep permission completion observable without restoring removed copy, preserve routed Members handoffs and migrate affected browser entry points. Scope crowded-strip assertions to panel tabs and wait for menu focus handoffs before outside dismissal. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Follow the Channel actions dropdown through the Tabler migration while retaining the mainline tab-close sizing, sidebar-toggle artwork and crowded-strip geometry assertions. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
447acc9 to
f4313e9
Compare
wesbillman
left a comment
There was a problem hiding this comment.
No additional changes requested in this integration follow-up. The launch/focus handoff and retained header-icon assertions introduce no source-demonstrated regression; the unchanged PR description and all 42 attachment contents reconcile with the prior public-material review.
Automated source review by Star Lord via Wes’s account; head f4313e9900ad29f4381a16aaf334245911c5ce84, base c9946be433f1957713a19cffca614947c17514ee. No tests or app/native workflows were run, and CI was not assessed; this COMMENT is not runtime validation or approval.
* origin/main: (21 commits) Add remote agent owner attestation fn to host service (#532) fix(build): pin Rust 1.98.1 to unblock macOS 27 agent builds (#529) main fix: Pi model test ETXTBSY flake (#513) fix(composer): remove phantom text-field focus outlines (#519) fix(relay): use writer reads for channel confirmations (#501) feat(channels): unify header actions and inline details editing (#487) Show app-managed agents working in the sidebar (#539) Add recoverable hosted community deletion (#403) Add verified Inbox evidence and exact edit closure (#495) Animate Buzz startup through initial content readiness (#534) Polish profile avatar picker and custom colors (#533) Add Send to channel for authored thread replies (#531) Allow plugins to send managed-agent registration events (kind 30177) (#535) Fix Pi and Goose environment overrides (#517) feat(ui): Switch shared icons to Tabler (#523) Improve message media contrast and thumbnail fill (#521) Document unified inventory and verify focused import and compact-row acceptance (#293) fix(ux): clarify Pi installation and setup errors (#511) Count unread replies only in conversations you are part of (#471) Animate the terminal welcome with a compact hex wordmark (#508) ... Signed-off-by: Sol <49aa1f65411fd096d2e2ec144f1e7aa36fdc76d1b907cfdf7be000c66f9d3b8e@buzz.block.builderlab.xyz>
Overview
Category: improvement
User Impact: People can reach channel actions from one header menu and edit or copy channel details directly from the settings pane.
Problem: Channel actions were split across header shortcuts and sidebar menus, while the details pane required extra navigation for common edits. Its Canvas card also duplicated the new header destination.
Solution: Put existing actions in a standard-size header dropdown, with View channel details first and permission-gated Leave → Archive → Delete last. Reuse the existing policy, dialog, mutation and recovery owners; refine the pane with inline affordances, entry-point-specific editor focus and success-only copy feedback.
Implemented with Carl (AI agent); human review remains required. This is a draft, not a merge/readiness claim.
Changes
File changes
docs/channels.md
Document the header destinations, reused action ownership, inline editing/copy feedback and focus return; remove the obsolete Settings Canvas entry.
docs/plugin-architecture.md
Point the Todos fallback to Channel actions → View canvas.
src/bundled/channel-templates/ChannelTemplatesDialog.tsx
Allow the existing dialog to restore focus to its originating header control.
src/bundled/channel-templates/TemplateSettings.tsx
Compose Save as template inside the shared header menu without moving dialog lifetime into the popup.
src/bundled/channel-templates/agent-selection.test.tsx
Cover menu composition and focus handoff while retaining template agent-selection coverage.
src/bundled/channels/ChannelDetailsEditor.test.tsx
Cover Description versus Name focus, trigger handoff and recovery alongside existing editing behavior.
src/bundled/channels/ChannelDetailsEditor.tsx
Support entry-point-specific initial focus and origin-aware dismissal while retaining the existing edit/save/recovery owner.
src/bundled/channels/ChannelHeaderMenu.test.tsx
Exercise permission-dependent composition, ordering, unavailable states and menu/dialog handoff.
src/bundled/channels/ChannelHeaderMenu.tsx
Compose the standard-size channel menu with details first, Canvas, optional template/sidebar actions and gated lifecycle items.
src/bundled/channels/ChannelLifecycleMenu.test.tsx
Cover embedded menu lifetime and lifecycle eligibility/focus behavior.
src/bundled/channels/ChannelLifecycleMenu.tsx
Reuse lifecycle entries inside another menu and retain the shared confirmation and authority owner.
src/bundled/channels/ChannelSettingsPanel.test.tsx
Cover editable/read-only presentation, entry-point focus, clipboard success/failure/retry and retained pending-edit recovery.
src/bundled/channels/ChannelSettingsPanel.tsx
Make the title and metadata rows useful entry points, add exact-ID copy feedback, and remove redundant Canvas/type/edit entries.
src/bundled/channels/Channels.module.css
Style centered wrapping titles, full-row hit targets and small hover/focus/touch icons without layout shift; respect reduced motion.
src/bundled/channels/ChannelsPage.tsx
Wire the header to existing pane, Canvas, member and lifecycle owners and retire modal state on navigation.
src/bundled/channels/canvas-preview.test.ts
Remove tests for the deleted preview-only helper; Canvas editing remains covered through its real entry point.
src/bundled/channels/canvas-preview.ts
Remove the preview-only helper now that the redundant Canvas settings card is gone.
src/bundled/channels/useChannelReadAction.test.tsx
Cover shared read/unread action eligibility and outcomes.
src/bundled/channels/useChannelReadAction.ts
Share the header and sidebar read/unread presentation logic instead of duplicating its state and mutation behavior.
src/features/channel-navigation/ChannelNavigationState.test.tsx
Cover action registration, aborted handoff and cleanup across navigation ownership changes.
src/features/channel-navigation/ChannelNavigationState.tsx
Expose sidebar-owned action presentation to the header while retaining existing persistent mutation/dialog owners.
src/features/channel-navigation/ChannelSidebar.test.tsx
Cover deferred Create after origin retirement and preserve uncertain lifecycle-publication recovery.
src/features/channel-navigation/ChannelSidebar.tsx
Provide header-compatible actions and origin-aware focus/retirement without duplicating sidebar writes or recovery.
src/features/channel-templates/provider.ts
Add the small menu-composition/final-focus contract needed by the current template caller.
src/shared/design-system/DESIGN.md
Document controlled Tooltip action feedback while retaining ordinary hint defaults.
src/shared/design-system/ui/Tooltip.test.tsx
Cover controlled feedback, dismissal, and ordinary hint accessibility behavior.
src/shared/design-system/ui/Tooltip.tsx
Support controlled asynchronous feedback and opt-out of click dismissal without changing uncontrolled hints.
tests/browser/activity-navigation-focus.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/agent-activity.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/channel-archive-delete-pane.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/channel-details.mjs
Centralize opening/focusing details through the production header menu for existing journeys.
tests/browser/channel-header-menu.spec.mjs
Add seven representative scenarios for actual portal/focus ownership, row hit targets, responsive geometry, motion preferences, clipboard feedback, sidebar-action handoff and browser-history retirement boundaries.
tests/browser/channel-leave-pane.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/channel-members.spec.mjs
Retain viewport/focus coverage and assert that navigation retires the open member dialog.
tests/browser/channel-opening.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/channel-settings.spec.mjs
Exercise the responsive Settings pane through its new menu entry without treating menu expansion as pane visibility.
tests/browser/channel-tabs.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/composer-focus.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/dm-labels.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/layout.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/live-status.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/message-navigation.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/navigation-groups.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/navigation-session-menu.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/sidebar-unread.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/sidenav-polish.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/startup.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/stream-evidence.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/thread-unread.spec.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
tests/browser/todos.spec.mjs
Keep the disabled-Todos Canvas fallback journey through the new View canvas destination.
tests/browser/unread.spec.mjs
Preserve explicit pane open/close behavior now that selecting details focuses rather than toggles it.
tests/browser/websocket-actions.profile.mjs
Migrate the existing journey from the removed Channel settings header shortcut to Channel actions → View channel details, preserving its original behavior assertions and explicit close/focus checks.
Reproduction Steps
Validation and limits
Current integration — October 1
Pushed head:
447acc9c73df125a9d19506503b993bc3f502d55, rebased onto69a9af2360c2e15bfbe35814b217358165e07117.aria-busy; removed permission paragraphs stay removed.Historical implementation evidence (pre-rebase)
Snapshot:
074c882b0cb553007591b5ae040ec2f94eb3da8f, based onfefbfd05f60c5fe8623fcbc51dcd066e7be6043a; clean tracked tree, pushed to the draft branch.5f93e1c5: 13 Chromium journeys passed (36.7s, one worker), producing 42 images. The affected owner/editor/copy capture journey was rerun at074c882b(1 passed, 10.7s) and screenshot 33 was replaced. The other 41 images retain their original provenance, not a fresh-head validation claim. Captures exercise the actual app and production broker with ephemeral synthetic fixture data/modelled upstream I/O, not a component showcase or hand-drawn mock. No real community lifecycle writes were performed.5f93e1c5: six header/Canvas browser cases passed; four stale pixel-sized SVG assertions were updated to mainline's shared rem output before the full unit suite passed.5f93e1c5identified three blockers. Follow-up commits address each: Canvas is bound to its opening channel/visit (8b45add8); header-origin sidebar dialogs and deferred opens use the existing navigation abort signal (9ffceaa8); metadata rows respect the shared focus policy (074c882b). Existing per-channel drafts, session-owned writes/recovery and sidebar-entry behavior remain with their original owners. These fixes have not received a second independent review or new score.Screenshots / Demos
Historical visual evidence: These captures predate the latest rebase. They are grouped for comparison, not fresh screenshots of the integrated editor/privacy UI. Original captions and URLs are preserved.
Images 01–42 were originally captured at
5f93e1c5; 33 is replaced by a fresh capture at074c882bto show the corrected keyboard-focus appearance. Dark appearance uses the existing product accent; the last group also covers light appearance. All channel names, IDs, membership and permission variants are synthetic fixture data in the real product UI. Narrow crops exclude unrelated conversations. These screenshots illustrate states, not proof of navigation retirement, native/device or live-relay acceptance.Permission matrix
Authority variations
Permission uncertainty and recovery
Details, inline affordances and editor focus
Header destinations and action states
Responsive, light and touch-emulated states