Skip to content

feat(channels): unify header actions and inline details editing - #487

Merged
tellaho merged 15 commits into
mainfrom
tho/channel-header-menu
Oct 2, 2026
Merged

tellaho merged 15 commits into
mainfrom
tho/channel-header-menu

Conversation

@tellaho

@tellaho tellaho commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

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

  1. Open an ordinary channel and activate Channel actions with mouse or keyboard. The menu uses the regular shared sizing and starts with View channel details; opening it must not execute a lifecycle action.
  2. Compare an owner, admin and member. Only eligible lifecycle actions appear, ordered Leave, Archive, Delete; Delete is destructive. The last owner cannot leave. Owned-agent Delete authority is evaluated separately from direct Archive authority.
  3. Select View channel details twice. It opens/focuses the existing pane rather than toggling it away. The redundant Canvas, Channel type and standalone Edit details rows are gone.
  4. Hover or keyboard-focus the title, Description, Visibility and Channel ID rows. Small inline icons reveal without shifting layout; the title pencil follows its last line. At a touch-emulated viewport the icons remain visible; reduced motion removes the translation/fade.
  5. Activate Description: its textarea receives focus. Title and Visibility open the same editor focused on Name. Change fields, toggle Private and cancel: no draft is published and focus returns to the originating control. Closing or pressing Escape with a dirty draft instead requires discard confirmation; Keep editing retains it. Name has neither an autocomplete override nor a password-manager-specific attribute.
  6. Open Members from its row and dismiss it. Copy Channel ID: only successful copying shows the tooltip, and dismissing it does not replay feedback on hover. A denied clipboard shows an inline retryable error.
  7. Open Canvas and, with Templates & teams enabled, Save as template from the menu. Cancel each dialog and verify focus returns to the header. Also exercise Move channel, mute/unmute, mark read/unread and New session; session creation hands focus to its composer.
  8. Inspect the menu in a DM: Hide conversation and Remove from Messages remain distinct. In a disposable test environment, delay/fail the permission read and verify unavailable actions stay omitted and retry remains available.
  9. Visit one channel, then another. Open Canvas, Create new section or Delete from the header and use browser Back: the dialog closes and does not return on Forward. Reopen Canvas explicitly to recover its original channel draft. Repeat Create/Delete from the sidebar: their existing navigation-persistent behavior remains unchanged. Cancel destructive confirmations; do not submit against real data.

Validation and limits

Current integration — October 1

Pushed head: 447acc9c73df125a9d19506503b993bc3f502d55, rebased onto 69a9af2360c2e15bfbe35814b217358165e07117.

  • Preserves mainline reversible privacy, shared Name/Description/Duration fields, dirty-draft confirmation, pending/check-only recovery, routed Members/profile/DM handoffs and Archive/Unarchive focus continuity. Inline entry points and header-origin dialog retirement remain intact. Permission completion is observable through the Settings pane's aria-busy; removed permission paragraphs stay removed.
  • Mandatory hooks passed TypeScript, 6,542 Vitest tests in 493 files, design typecheck and design guards at this committed head. Hook unit run: 262.22s wall, 312.65s summed test execution, two workers. No Rust inputs changed; local Clippy was not selected.
  • Frontend build, 125 design tests in 21 files, and design viewer/gallery builds passed on the identical committed source. Only ordinary bundle-size warnings were reported.
  • Complete unread and message-navigation files: 56 Chromium/WebKit cases passed (2.3m). Complete header, settings, lifecycle, archive/delete, Leave, Members, modal-dismissal, tabs, Todos and activity batch: 70 passed / 2 failed (2.7m). Both failures counted the new picker's category tabs as workspace tabs. Scoping unchanged assertions to the existing Panel tabs tablist repaired this; the complete tabs file then passed all 4 cases in both engines (14.3s). Other production/browser files were unchanged after their passing runs. This is affected-flow coverage, not a full browser-suite claim.
  • The header unit outside-dismiss test now observes menu removal and the reopened popup's focus handoff before clicking outside. No shared-menu production change, sleeps, retries, relaxed geometry, or dropped assertions. Existing controlled-clock reading journeys drive deferred menu mounting without releasing policy time.
  • At the 20:55 UTC snapshot, current-head CI was in progress and DCO Check passed. Windows native validation was skipped. Hosted CI is not yet claimed green.
  • The 42 existing screenshots below are preserved in 15 image tables, at most three image columns. GitHub-rendered HTML and body readback were checked; every caption and image URL was retained. They remain historical captures, not new evidence of the rebased editor/privacy UI.
  • No fresh independent review or human acceptance of this integrated head, native/physical-device validation, or live destructive acceptance is claimed. The PR remains draft; no approval or merge performed.

Historical implementation evidence (pre-rebase)

Snapshot: 074c882b0cb553007591b5ae040ec2f94eb3da8f, based on fefbfd05f60c5fe8623fcbc51dcd066e7be6043a; clean tracked tree, pushed to the draft branch.

  • Mandatory pre-push passed TypeScript, all 5,827 Vitest tests in 478 files, and design typecheck/guards. Unit run: 51.58s wall, 304.91s summed test execution. Rust inputs were unchanged, so the local Clippy hook was not selected.
  • 16 Chromium/WebKit cases passed (30.4s) at this head: the complete header-menu and channel-settings files in both engines. Coverage includes Canvas Back/Forward retirement without reading the destination Canvas, recovery of the original draft on explicit reopen, retirement of header-launched Create/Delete, preservation of sidebar-launched Create/Delete, and computed metadata focus appearance. This is not a full browser-suite claim.
  • Regression fail-then-pass: restoring the pre-fix production implementation while retaining the new assertions produced 8 failures across both engines (Canvas, header Create, header Delete and metadata outline), with 6 unaffected cases passing. Restoring the fixes and completing the destination-read assertion yielded the final 16-case pass. No assertions were relaxed to accept the old behavior.
  • Browser coverage: seven new permanent scenarios / fourteen engine cases in the header-menu file (the original two plus five navigation-origin scenarios); no permanent cases removed. Browser-only justification is actual browser-history and portal/focus ownership, destination-editor mounting/reads, pointer targeting, wrapping geometry, CSS motion and clipboard integration. Permission permutations and state/recovery matrices stay in component/hook tests. Existing browser files otherwise migrate the entry point; removed preview unit coverage belongs solely to the deleted Canvas preview helper.
  • Initial capture evidence at 5f93e1c5: 13 Chromium journeys passed (36.7s, one worker), producing 42 images. The affected owner/editor/copy capture journey was rerun at 074c882b (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.
  • Earlier integration evidence at 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.
  • Independent adversarial review of 5f93e1c5 identified 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.
  • The earlier one-shot CI/DCO follow-up was delivered and deleted. Current CI status is recorded above; no all-green claim here. Native desktop, physical touch-device behavior, live destructive operations, and final human acceptance are not established by these fixtures. Touch images are emulation; ordinary 1Password behavior is intentionally unchanged. The PR remains draft.

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 at 074c882b to 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

Fixture Leave Archive Delete
Last direct owner Hidden Shown Shown
Direct owner plus another owner (owned agent fixture) Shown Shown Shown
Direct admin, no owned owner-agent Shown Shown Hidden
Direct member, no owned owner-agent Shown Hidden Hidden
Direct admin who owns an owner-role agent Shown Shown Shown
Direct member who owns an owner-role agent Shown Hidden Shown

Authority variations

01. Last direct owner: no Leave action. 02. Direct owner with another owner (owned-agent fixture): Leave, Archive and Delete. 03. Direct admin: Leave and Archive, no Delete.
Last direct owner: no Leave action. Direct owner with another owner (owned-agent fixture): Leave, Archive and Delete. Direct admin: Leave and Archive, no Delete.
04. Direct member: Leave only. 05. Admin owning an owner-role agent: independent Delete authority is available. 06. Member owning an owner-role agent: Delete is available without Archive.
Direct member: Leave only. Admin owning an owner-role agent: independent Delete authority is available. Member owning an owner-role agent: Delete is available without Archive.
08. Member details remain read-only; no edit affordances. 09. DM actions distinguish Hide conversation from Remove from Messages.
Member details remain read-only; no edit affordances. DM actions distinguish Hide conversation from Remove from Messages.

Permission uncertainty and recovery

10. Permission lookup held pending; unsafe actions are omitted. 11. Permission read failed; explicit retry is available. 25. Only the owner-agent Delete check failed; Leave and Archive remain available with a separate retry.
Permission lookup held pending; unsafe actions are omitted. Permission read failed; explicit retry is available. Only the owner-agent Delete check failed; Leave and Archive remain available with a separate retry.

Details, inline affordances and editor focus

12. Details resting state, without the redundant Canvas card. 13. Wrapping title with trailing hover pencil. 14. Description row hover reveals the small inline pencil.
Details resting state, without the redundant Canvas card. Wrapping title with trailing hover pencil. Description row hover reveals the small inline pencil.
30. Visibility row hover reveals its inline pencil. 31. Members row hover and destination chevron. 32. Existing member dialog opened from the settings row.
Visibility row hover reveals its inline pencil. Members row hover and destination chevron. Existing member dialog opened from the settings row.
33. Description keyboard-focus affordance without a replacement outline (074c882). 15. Opening Description focuses its textarea. 17. Opening the title focuses Name; no autocomplete/password-manager override.
Description keyboard-focus affordance without a replacement outline. Opening Description focuses its textarea. Opening the title focuses Name; no autocomplete/password-manager override.
16. Edited Name/Description and Private draft; Save enabled, changes not submitted. 18. Successful exact-ID copy opens the portaled confirmation tooltip. 19. Denied clipboard shows an inline retryable error instead of success.
Edited Name/Description and Private draft; Save enabled, changes not submitted. Successful exact-ID copy opens the portaled confirmation tooltip. Denied clipboard shows an inline retryable error instead of success.

Header destinations and action states

35. Header trigger and full-size menu in context. 26. Templates enabled adds Save as template. 27. Existing template dialog opened from the header.
Header trigger and full-size menu in context. Templates enabled adds Save as template. Existing template dialog opened from the header.
28. Move channel submenu. 29. Create new section dialog reached through Move. 36. Muted channel offers Unmute.
Move channel submenu. Create new section dialog reached through Move. Muted channel offers Unmute.
37. Manually unread channel offers Mark as Read. 38. New session hands focus to its existing composer. 21. Canvas opened from View canvas.
Manually unread channel offers Mark as Read. New session hands focus to its existing composer. Canvas opened from View canvas.
07. Leave confirmation (cancelled, no lifecycle publication). 22. Archive confirmation (cancelled, no lifecycle publication). 23. Delete confirmation (cancelled, no lifecycle publication).
Leave confirmation (cancelled, no lifecycle publication). Archive confirmation (cancelled, no lifecycle publication). Delete confirmation (cancelled, no lifecycle publication).

Responsive, light and touch-emulated states

20. 390px viewport details with wrapping title. 34. 800px intermediate viewport details. 24. 390px viewport menu fits the viewport.
390px viewport details with wrapping title. 800px intermediate viewport details. 390px viewport menu fits the viewport.
39. Light appearance menu. 40. Light appearance details and inline affordance. 41. Light appearance editor with Description focused.
Light appearance menu. Light appearance details and inline affordance. Light appearance editor with Description focused.
42. Touch-emulated 390px viewport: icons visible at rest; not a physical-device test.
Touch-emulated 390px viewport: icons visible at rest; not a physical-device test.

@tellaho
tellaho force-pushed the tho/channel-header-menu branch from e151453 to 447acc9 Compare October 1, 2026 20:55
@tellaho
tellaho marked this pull request as ready for review October 1, 2026 21:11
@tellaho
tellaho requested review from a team, comp615 and wesbillman as code owners October 1, 2026 21:11

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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.

tellaho and others added 15 commits October 2, 2026 09:04
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>
@tellaho
tellaho force-pushed the tho/channel-header-menu branch from 447acc9 to f4313e9 Compare October 2, 2026 16:15
@tellaho
tellaho merged commit 539bb13 into main Oct 2, 2026
22 checks passed
@tellaho
tellaho deleted the tho/channel-header-menu branch October 2, 2026 16:30

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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.

johnmatthewtennant pushed a commit that referenced this pull request Oct 2, 2026
* 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>
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