Skip to content

feat(desktop): full-panel thread view mode + brand identity variant layer - #6073

Open
asatire1 wants to merge 2 commits into
block:mainfrom
asatire1:kimi/brand-identity-exploration
Open

feat(desktop): full-panel thread view mode + brand identity variant layer#6073
asatire1 wants to merge 2 commits into
block:mainfrom
asatire1:kimi/brand-identity-exploration

Conversation

@asatire1

Copy link
Copy Markdown

What

Two related changes from the app-identity thread (buzz://message?channel=19dd4184-366f-48a2-8c60-444f755f598a&id=279c1f84355d5c1cc1019ba9ca4119448eeec72f58b3496f48e07580713bb545):

  1. Full-panel thread view mode — a third thread view mode where the open thread replaces the channel timeline in the main column while the channel sidebar stays visible on the left. The timeline stays mounted (hidden), so scroll position and composer state survive closing the thread.

    • Full is the new default; the thread-header toggle cycles full → split → focus, and Settings offers the same three-way choice.
    • The layout toggle is only offered when a two-pane layout is actually available; narrow viewports keep single-panel behavior.
    • Reading position is preserved across mode switches via the existing top-visible-row anchor.
  2. Brand identity variant layer — a variant layer on top of the theme engine: applyIdentityVariant re-asserts a variant's signature vars after every theme/accent application and stamps data-identity on <html>; MessageRow articles carry data-author-kind (agent/human) for the agent visual signature. Variants: stock (default, untouched), honey, dual, mono.

    • Ships inert: stock stays the default; the variant is selected via localStorage["buzz-identity-variant"] until a settings appearance panel lands.

How to verify

  • node --import ./test-loader.mjs --experimental-strip-types --test "src/features/channels/**/*.test.mjs" — 9/9 view-mode unit tests pass.
  • pnpm build:e2e && pnpm exec playwright test --project=smoke tests/e2e/thread-focus-mode.spec.ts tests/e2e/full-thread-shot.spec.ts — 3/3 pass (mode cycle, cross-mode scroll anchoring, narrow-viewport toggle gating, full-mode screenshot).
  • pnpm exec biome check on touched files — clean.

Not in this PR

  • Identity settings panel, brand moments (login/empty states/switcher), and mobile variants — follow-up build-out.
  • Mid-session variant switching needs a reload (documented in identity-variants.ts).

Add a third thread view mode, "full": the open thread replaces the
channel timeline in the main column while the channel sidebar stays
visible on the left. The timeline stays mounted (hidden) so its scroll
position and composer state survive closing the thread.

- Full is the new default; the header toggle cycles full -> split ->
  focus and Settings offers the same three-way choice.
- The layout toggle is only offered when a two-pane layout is actually
  available; narrow viewports keep single-panel behavior.
- Reading position is preserved across mode switches via the existing
  top-visible-row anchor; e2e spec re-captures the anchor per hop since
  centering walks it up a few rows per switch.

Verified: 9/9 view-mode unit tests, thread e2e specs 3/3 (incl. narrow
toggle gating and cross-mode scroll anchoring), biome clean.

Signed-off-by: asatire1 <236048262+asatire1@users.noreply.github.com>
Exploration layer for giving Buzz its own face: a variant re-asserts its
signature theme vars after every theme/accent application (hooked at the
applyAccentColor exit points) and stamps data-identity on <html> so the
companion CSS can restyle agent rows, type, and geometry. MessageRow
articles carry data-author-kind (agent/human) for the agent signature.

Variants: stock (default, untouched), honey (amber brand + teal agent
signature), dual (indigo/cyan human-agent duality), mono (dev-tool
green/violet). Ships inert: stock stays the default and the variant is
selected via localStorage (buzz-identity-variant) until the settings
appearance panel lands.

Verified: 4 distinct variant screenshots, biome clean, px-text guard
clean, e2e build OK.

Signed-off-by: asatire1 <236048262+asatire1@users.noreply.github.com>
@asatire1
asatire1 requested a review from a team as a code owner August 16, 2026 19:15

@themiguelamador themiguelamador left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I found three correctness/quality-gate issues and fixed them in Complear/buzz:review/pr-6073-fix (f34d9631d):

  • [P1] ChannelPane.tsx grew past the repository's hard file-size ratchet (1,016 lines versus the 1,000-line ceiling), so pnpm check:file-sizes failed. I kept the same full-panel behavior while folding the new state into the existing layout variables and native hidden handling; the file is back at the allowed ceiling.
  • [P2] full-thread-shot.spec.ts emitted mock messages immediately after navigation, before the E2E bridge had necessarily installed __BUZZ_E2E_EMIT_MOCK_MESSAGE__. The focused smoke run reproduced this as Failed to seed thread root. The spec now polls for the emitter before seeding.
  • [P3] the mono identity selector used [data-testid^="channel-"], which also matched channel-drop-zone and every other channel test hook. That made the entire conversation pane inherit JetBrains Mono, despite the documented scope being names and channel labels. It now targets sidebar menu buttons carrying a channel ID.

Verification on the fix commit:

  • full desktop unit suite: 4,194 passed
  • focused Playwright smoke specs: 3 passed
  • TypeScript typecheck passed
  • Biome passed on all touched files
  • check:file-sizes and check:px-text passed
  • E2E build passed
  • exploratory browser check confirmed an unsent channel draft survives opening/closing full-thread mode, and the corrected mono variant leaves the channel pane/controls in Inter while channel labels use JetBrains Mono

Please incorporate the fix commit (or equivalent changes) before merging.

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