Skip to content

trunk-merge/pr-4034/f5d16664-8ca4-4334-bf7a-84ad50b97014 - #4037

Closed
trunk-io[bot] wants to merge 21 commits into
mainfrom
trunk-merge/pr-4034/f5d16664-8ca4-4334-bf7a-84ad50b97014
Closed

trunk-merge/pr-4034/f5d16664-8ca4-4334-bf7a-84ad50b97014#4037
trunk-io[bot] wants to merge 21 commits into
mainfrom
trunk-merge/pr-4034/f5d16664-8ca4-4334-bf7a-84ad50b97014

Conversation

@trunk-io

@trunk-io trunk-io Bot commented Jul 31, 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 32c01893132880b09a3d79ec5a489bb556b2fdac.

See more details about each PR in the batch here:

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

Pull Requests Being Tested

This pull request is testing a batch with the changes from pull requests 4034 and 4008 - batching documentation.

adamleithp and others added 21 commits July 29, 2026 21:11
The cloud workflow holds a run at in_progress while it babysits CI after
opening the PR ("Keeping CI green"). Under the Trunk merge queue that wait
ends only when someone comments /trunk merge, so a run can claim to be
working for hours after the agent stopped: two tasks in the code space had
been spinning for 104 and 220 minutes, one with all 29 checks green.

The dot now goes quiet once a PR exists, and the badge stack shows the PR
even when its GitHub state is unresolved. latest_run.output.pr_url is
written the moment the PR opens, while prState needs a lookup a cloud-only
task never gets (TaskPrStatusService discards fresh state when the task
has no local workspace row). A task that opened a PR must not look like it
did nothing, so the badge appears uncoloured rather than not at all.

Not sure this is the right cut. It treats "has a PR" as terminal, which is
a guess about intent: a run that opens a draft PR and keeps pushing to it
is genuinely still working, and this now draws it as quiet. The real fix is
upstream in products/tasks, where the run should reach a terminal status
rather than being held open for a merge the queue won't perform unattended.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYPVPkN4Lm3gygchrpcoqr
The sidebar list is one list now: pins sit in it with everything else,
marked by a badge in the row's own stack rather than living in a section
of their own, and canvases carry the same menu tasks do.

Rows
- Pinned items merge into the sessions list, sorted ahead of newer ones
  so a pin can't fall off the recents cap.
- The pin joins the row's badge stack in the vocabulary's amber; it goes
  first, which in a reversed stack puts it leftmost and underneath.
- Canvas badges are violet, matching the canvas colour everywhere else,
  and are named on hover like the task badges beside them.
- The row's "…" is gone: at rest a row shows status, not controls.

Row menu
- Actions move into the hover card, built from the same item list the
  right-click menu uses.
- Canvases get that menu: pin, and delete through the existing
  deleteCanvasWithUndo window. Filing and command-centre cells are task
  shaped, so they're dropped rather than shown dead.
- The card is quill's Card/Item parts throughout — no hand-rolled shadow
  — and is controlled so it survives its own "File to…" flyout.

Chrome
- Space rows drop the cube glyph; #me keeps its lock and the Spaces
  heading keeps its icon.
- Project switcher moves to the top of the sidebar, above the nav row.
- "New session" leads the space pane's list of pages.
- Back row, header buttons and the row menu trigger use quill buttons
  rather than hand-rolled ones; rows use quill's focus ring.
- The "Created by" filter is hidden in #me, where it can only answer
  "you", and its value is neutralised so a stale filter can't empty the
  list with no control left to undo it.

Unread
- Counts and unread dots read amber, the same colour the status dots use
  for "something is owed to you". Red is left for failure.

Fixes a 4px clip on the ⌘-slot hints: quill's `.quill-button kbd` hangs
4px into a button's padding, and the row's truncate wrapper cut it off.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrvaQrZNBNSexddG78u4Nt
The card was carrying quill's card padding on top of its own sections,
which read as a lot of air around four short lines. Its padding is off
now and each section pays for its own inset, so the rules run edge to
edge and the action rows highlight full width.

- Deleting a canvas confirms first, with the same copy the artifacts
  grid and the canvas header use — it goes for everyone in the space.
  The undo window still follows the confirm.
- A canvas waiting out that window flashes a red dot labelled
  "Deleting…". It stays in the list rather than vanishing, so the row
  has to say what is happening to it.
- "File to…" opens on hover in the card, the way a submenu does on
  right-click. Delete is quill's destructive button.
- Menu separators are gone from both surfaces.
- The quiet dot reads "All caught up" rather than "Nothing owed to you".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrvaQrZNBNSexddG78u4Nt
Unread was amber picked by hand; it's `--primary` now — yellow in dark,
orange in light — so the count badges, the unread dots and the row's own
dot are one colour, and the numeral takes `--primary-foreground` rather
than a contrast token chosen per theme.

The pin keeps its own amber: primary means "there is something here for
you", and a pin is a shelf, not a claim on your attention.

Also stops every badge in a row's stack offering a pointer cursor —
quill gives an avatar rendered as a button one, which promised a click
that did nothing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrvaQrZNBNSexddG78u4Nt
Three things the review turned up:

- Canvas rows share `useChannelTaskStatus`, which passes an empty task id
  to `useTaskPrStatus` — every canvas row was spending a round trip to be
  told nothing. No id now means no query.
- The row's menu didn't carry the space it's listed under, so "File to…"
  ticked nothing and filing a task to where it already lives reported a
  move that didn't happen.
- `TaskRowMenuList` builds its item components from the callbacks it's
  given, so an inline `onAction` remounted every button in the hover card
  on each render of the row.

Also gates the pending-delete lookup on canvases, which are the only
things that can be in that map.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrvaQrZNBNSexddG78u4Nt
It was a scratch page for reading the task-status vocabulary while it was
being written; the vocabulary is settled and the page has no reader.

Takes the route, its view, the Settings entry that opened it and the tab
target with it. The dot-ring spinner stays — it's a primitive the rows
use, and only the comment pointing at its old home changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrvaQrZNBNSexddG78u4Nt
…ullRequest) → yellow solid (Pending - no work in flight)
@github-actions

Copy link
Copy Markdown

React Doctor found 5 issues in 4 files · 5 warnings.

5 warnings

src/features/canvas/components/ChannelSidebar.tsx

src/features/sessions/components/session-update/StatusNotificationView.tsx

src/features/sidebar/components/items/TaskStatusDot.tsx

src/primitives/SearchableMenuFlyout.tsx

Reviewed by React Doctor for commit b9b01f0.

@trunk-io trunk-io Bot closed this Jul 31, 2026
@trunk-io
trunk-io Bot deleted the trunk-merge/pr-4034/f5d16664-8ca4-4334-bf7a-84ad50b97014 branch July 31, 2026 10:40
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