Files
buzz/desktop/tests
Matt Toohey cde664e728 feat(desktop): move the Project Canvas beside project chat
The Canvas preview sat above the message timeline as a fixed 25.2/28.8rem
strip, so it ate the top of every project channel's chat: the timeline
started below the fold, and a "Chat preview boundary" marker had to be
drawn across the full Canvas to show authors where that fold landed.

Put the preview in a right-hand pane instead. Chat keeps its full height,
and the Canvas gets a tall column, which suits a dashboard of stacked
widgets far better than a letterbox.

- `ChannelViewOverride` gains `mainColumnHeaderPlacement`
  ("top" | "right", default top). `ChannelPaneMainColumn` lays the header
  out as a sibling column (`order-last`, `clamp(24rem, 38%, 28.8rem)`)
  when it is "right" and keeps the existing `contents` pass-through
  otherwise, so no other channel view changes. `ProjectChannelHome` asks
  for "right" on the chat tab and "top" on the canvas tab, where the
  surface still fills the pane.
- The pane is container-queried, not viewport-queried: it appears only
  once the chat column itself is at least 52rem wide, so a narrow window
  shows chat at full width and users reach the Canvas through its tab.
  `ChannelPane` also passes `hideRightHeader` when a split auxiliary pane
  is open, so a thread, profile, or agent panel takes that space rather
  than competing with it. The frame stays mounted (`display: none`), so
  opening and closing a thread never reloads the package or drops its
  live subscriptions.
- The preview-boundary marker goes away with the fold it described, and
  "Show full canvas" becomes a tooltipped icon button pinned
  bottom-right, since a full-width labelled button no longer fits a 24rem
  column. It follows the existing icon-button idiom: one `aria-label` on
  the button, matching tooltip copy.

The e2e spec binds the new geometry — chat and composer both end at or
before the pane's left edge and the pane is taller than it is wide; the
narrow-viewport test now asserts the pane is hidden and the full tab is
the way in; and a new 1920px test opens a thread to check the pane
yields, chat takes the width, and the frame's `src` survives the round
trip.

Verified: desktop unit suite 5987 passing, project-channel-canvas 8
passing, the project and thread layout specs 6 passing, and tsc, biome,
px-text, pubkey-truncation, and the file-size gate clean. Three specs
fail on this branch independent of this change —
project-cold-start.spec.ts:76 and :107 plus
project-empty-state-alignment.spec.ts:48 look for
`project-home-context-panel`, whose component has had no callers since
the channel-first migration.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
2026-09-02 16:42:24 +10:00
..