Skip to content

trunk-merge/pr-3935/3eb76366-280d-4527-b1c4-a53d9cf03014 - #3941

Closed
trunk-io[bot] wants to merge 54 commits into
mainfrom
trunk-merge/pr-3935/3eb76366-280d-4527-b1c4-a53d9cf03014
Closed

trunk-merge/pr-3935/3eb76366-280d-4527-b1c4-a53d9cf03014#3941
trunk-io[bot] wants to merge 54 commits into
mainfrom
trunk-merge/pr-3935/3eb76366-280d-4527-b1c4-a53d9cf03014

Conversation

@trunk-io

@trunk-io trunk-io Bot commented Jul 29, 2026

Copy link
Copy Markdown
Trunk Merge Pull Request Banner

This pull request was created and is being managed by Trunk Merge.

This pull request is based on the main branch at SHA f0e2ed4cbae34f27718733715409d230ef02a57d.

See more details here.

When CI completes, this pull request will be closed automatically.

Pull Requests Being Tested

This pull request is testing the changes from pull request 3935.

Dependencies

This pull request depends on the changes from pull requests 3640 and 3922.

richardsolomou and others added 30 commits July 28, 2026 12:03
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Keep the extracted domain declaration as the single source after rebasing onto current main.

Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
The canvas "…" menu had no way to delete; the canvases grid had one that
deleted on click with no confirmation.

Both now open an alert dialog, and confirming doesn't delete straight
away: the canvas is marked pending and the host isn't told until the
"Deleted artifact" toast's timer expires, so Undo simply cancels the
timer rather than recreating anything.

Pending canvases stay in their lists — the artifacts row swaps its
template icon for a pulsing trash can and stops opening, the grid card
dims behind the same icon — so undoing restores them in place.

The commit runs outside React (module-level timer + hostClient) because
deleting from inside a canvas navigates away immediately.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Preserve the shared model-policy extraction while incorporating current main's Modal model support.

Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
adamleithp and others added 24 commits July 29, 2026 09:56
Every message row carried a hover copy button plus 36px of reserved
right padding for it. Drop both. In its place:

- Each completed turn's hover footer gains a "Copy turn" button beside
  its timestamp, copying that turn as plain text (prompt + agent prose;
  tools and thoughts left out). The windowed body carries the same text
  on the row that already carries the turn timestamp.
- User messages get the same button in their own footer.
- Right-clicking any user or agent message offers "Copy message".

Both buttons are quill Button + Tooltip, muted-foreground in every
state, and confirm with an anchored quill toast ("Copied!") fired off
the copied flag -- so a rejected clipboard write never claims success.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
The per-message context menu sits inside SessionView's own menu and
wins the event, so right-clicking a message was the one spot in the
session where "Show raw logs" went missing. Carry the toggle (reading
the same sessionViewStore state) alongside "Copy message".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
Introduce a compound PageHeader primitive (header shell, heading, title,
chip, description, actions, sub-nav, filters) and adopt it on Inbox,
Activity, Loops, the space Artifacts / Context / Loops pages. Each
adoption keeps its previous header on the flag-off branch: space pages
switch with the spaces layout (useChannelsLayout), Inbox and the global
Loops list with project-bluebird.

Space wayfinding now reads "{space} / {page}" everywhere, with labels and
icons resolved from one CHANNEL_PAGES table that the sidebar rows share,
so the two can't drift. ChannelBreadcrumb renders every segment as a
button (uniform padding/height), marks non-navigable segments aria-disabled
without the disabled dimming, gained an optional middle segment
("{space} / Loops / {loop}"), and opens the rename editor on a single
click at matching type scale.

Artifacts gains list / grid / masonry views with live canvas previews,
persisted per device; the freeform preview moves out of the dashboards
grid so both surfaces share it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
…acts

# Conflicts:
#	packages/ui/src/features/canvas/components/WebsiteChannelLoops.tsx
The sandbox document painted with a hard light fallback
(background: var(--background, #fff)) during the window before its
stylesheets loaded and before the host's init/set-theme message toggled
`.dark` — so every canvas preview scrolling into view flashed white over
a dark app. It now stays transparent until the tokens land, and the host
sets color-scheme on the iframe so the UA's base canvas is dark too.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
The options menu kept quill's default width, which clipped "Unpin from
channel" mid-word; it now sizes to its longest item like the channel-list
menus do. The label itself follows the layout — space under the new one,
channel under the old.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
The dialog said the delete "cannot be undone" while the action routes
through deleteCanvasWithUndo, which holds it for 8s behind an Undo toast.
Say what actually happens instead, and call the container a space under
the new layout, like the menu above it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
- one useBluebirdFlag hook so the dev default isn't repeated per call site
- type view_mode on the channel-action event instead of a bare string
- drop the two redundant comments on the analytics event union
- memoize the Activity feed and its mark-all-read button

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
Generated-By: PostHog Code
Task-Id: e18a8b14-426f-437f-98e2-db55475ea06e
- loop scenes with no space keep an identifying header instead of an
  empty row (greptile P1)
- artifacts body left-aligns under its header rather than centring
- grid cards stretch to a common height, so a PR tile no longer ends
  short beside a canvas thumbnail
- canvas previews get a skeleton while deferred and an icon + "Nothing
  built yet" when empty, instead of a bare line of text
- the Activity nav entry is a quill icon button (28px) like its
  neighbours, not a hand-rolled 32px one

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
Replaces the ButtonGroup of outline buttons and its hand-rolled
data-[active] styling: ToggleGroup owns the pressed state, so the
selected view styles itself. Tooltips share one provider with no open
delay, since the icons are the only labelling.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
…u copy

Two review fixes:

groupIntoTurns emits the user message as a standalone row, so the turn
footer's copy carried the agent's prose without the prompt it answers.
Each AgentTurn now records the user-initiated row that opened it, and
both bodies pass it ahead of the turn's items to buildTurnCopyText.

The context-menu "Copy message" wrote to the clipboard synchronously
from the closing menu, which rejects in Electron while focus is being
restored — silently leaving the clipboard's previous contents. It now
goes through the deferred copyFromContextMenu helper (same as
SessionView's outer menu) and surfaces both outcomes as toasts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q2H7r8hPC6pFCDrnYkMSRD
The list was capped at 680px and the cards at 1400px, which stranded
whitespace to the right of the header on a wide window. Every layout
here is a scannable list rather than prose, so drop the caps; the grid
and masonry gain a fourth column past 2xl now that they have the room.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
- call useChannelsLayout unconditionally, not inside a ternary, in the
  two places that derive a "space"/"channel" noun from it
- move inboxTabFromPath / inboxScopeApplies to core beside the tab routes
  they read, so the tab bar file exports components only
- render the Activity feed as a memo'd child instead of JSX built in a
  useMemo above the parent's early return

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
Preserve the repository and inbox migration while adopting the previously merged composer and shared-contract changes.

Generated-By: PostHog Code
Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
@github-actions

Copy link
Copy Markdown

React Doctor found 11 issues in 3 files · 11 warnings.

11 warnings

src/app/task/index.tsx

src/features/loops/components/LoopDetailView.tsx

src/features/tasks/composer/TaskChatComposer.tsx

Reviewed by React Doctor for commit b3404c1.

@posthog

posthog Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

👋 Visual changes detected for this PR.

Review and approve in PostHog Visual Review

If these changes are unexpected, they may be caused by a flaky test or a broken snapshot on master. Don't approve — rerun the job or wait for a fix.

@trunk-io trunk-io Bot closed this Jul 29, 2026
@trunk-io
trunk-io Bot deleted the trunk-merge/pr-3935/3eb76366-280d-4527-b1c4-a53d9cf03014 branch July 29, 2026 12:25
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.

4 participants