Skip to content

polish(desktop): finish Projects navigation and context chrome - #6429

Merged
thomaspblock merged 26 commits into
mainfrom
projects-v6-pt5-visual-cleanups
Aug 21, 2026
Merged

polish(desktop): finish Projects navigation and context chrome#6429
thomaspblock merged 26 commits into
mainfrom
projects-v6-pt5-visual-cleanups

Conversation

@thomaspblock

Copy link
Copy Markdown
Contributor

Summary

After #6396, Projects still split chrome across the workspace header, a copy-link control, and a labeled Actions group that mixed people, create, and metadata. This PR finishes that surface: the right-hand context box is unlabeled actions plus a Details group, people stacks and contribution heatmaps are gone from that box, Create review sits with Create task, and the top chrome is terminal / chat / info with no copy-link. Sent project context collapses to a pill, and review file diffs keep the last good git view instead of flashing empty while queries refetch.

This also lands the remaining navigation polish that followed Part 3: overview and list presentation, readme and commit layout, and opening the latest matching conversation from the Channels tab without leaving the project.

Related issue

N/A. Related: #6396

Testing

  • Walked Files, Tasks, Reviews, task/review detail, overview tabs, and chrome chat vs info in the running desktop app
  • Pre-push: desktop typecheck, unit tests, Tauri checks, and file-size gate passed
  • Updated Projects smoke specs for the new context groups, Create review, chrome order, and removed copy-link control
  • Merged current origin/main; one conflict in discussion-channel rows kept conversation-panel navigation and took main's bounded channel-name lookup

Post-Deploy Monitoring & Validation

  • validate Projects workspace chrome, context box, and review file diffs in the first staging Desktop session
  • healthy signals: context box shows unlabeled actions then Details, chat toggle sits between terminal and info, review diffs stay populated across selection changes
  • failure signals: missing Create review, restored heatmap/people in the context box, or empty Files Changed while the review is still selected; mitigate by reverting this PR

Make sidebar and repository navigation behave predictably while clarifying review metadata, activity hierarchy, and file-detail presentation.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Preserve the project folder command registration while satisfying the desktop file-size gate after merging main.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Separate overview context and agent rails from the content pod, simplify project and repository rows, and align the surrounding navigation chrome and metadata.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
README: wider reading inset, soft-wrap reflow, scrollable code blocks
(new Markdown blockCode option), header row removed. Commit detail:
full-width files pane that fills the remaining viewport via a flex
chain instead of a fixed min-height, author shown in header and meta,
tighter title spacing, link icon inline. Assign-to-me renders as a
left-aligned link in the assignees row.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keeps the oversized markdown.tsx inside the file-size ratchet after the
blockCode option added a few lines.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
…ls tab

Clicking a channel row now opens the newest message referencing the
project in the side conversation panel (whose header still jumps to the
channel), matching the Related Conversations card instead of navigating
away. The click routing and latest-hit lookup are shared helpers now.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep ProjectRepositoryPanel below the 1,000-line ceiling after the latest
main changes by moving the interactive latest-commit row shell into a
focused component. Click and Enter/Space behavior remain unchanged.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep the right-hand context box to unlabeled actions plus Details, drop people stacks and contribution heatmaps, and move project chat between terminal and info so workspace chrome matches the work instead of competing with it.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep Channels-tab conversation-panel navigation and take main's bounded channel-name lookup so this branch no longer scans the full directory.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock
thomaspblock requested a review from a team as a code owner August 20, 2026 19:51
thomaspblock added a commit that referenced this pull request Aug 20, 2026
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Screenshots from the current head of this PR.

Activity

No contribution heatmap. The right-hand box is counts and create, not a calendar.

00-projects-pulse

Workspace

Unlabeled actions at the top of the context box, then Details. Chat sits in the top chrome with info.

01-workspace-overview

Tasks

Section header and list share one row of controls. Context box has Create task plus Details.

02-issues-tab

Task detail

No people stacks. Actions are unlabeled; Details is its own group.

03-issue-detail

Review detail

Create review is in the context box with the other actions.

04-pr-detail

Reviews list

05-pr-list-metadata

Tasks list

06-issue-list-metadata

Channels

07-channels-list

Sent context

Submitted project context collapses to a pill instead of dumping the payload in the thread.

08-agent-context-collapsed

09-agent-context-expanded

Keep git authors in commit Details instead of the header, and point the smoke tests at the section Create review control and the reading-column width so they stop matching the duplicate context action and the full-bleed files pane.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent — request changes on bd540d0e87bc1951589f4d8691263fc4b1cc0ebe.

Blocking: completed refetch can leave the rendered review and diff query on different identities

ProjectWorkspaceTabs.tsx:243-257 retains the selected review and only replaces it when the next lookup is truthy. In contrast, useRetainedProjectGitViews.ts:65-81 clears or falls back activeRepoPullRequest after fetching completes. If authoritative refetch results no longer contain selected review A, the workspace can therefore continue rendering cached review A while the diff query has cleared or switched to another review. The latest delta does not touch this behavior, and there is still no regression that exercises transient empty results during fetch followed by authoritative completed-empty results.

Please pass the refetch state through to the workspace tabs, retain the prior review only while a fetch is active, and clear it after a completed result omits the selected ID. Add a regression covering both phases and proving the rendered review identity remains aligned with the diff-query identity.

Additional regression gap

Across desktop/tests/e2e/*.spec.ts, the Channels-tab coverage still only checks padding (project-pr-review.spec.ts:1447-1455). Please add a changed-tab click journey proving the latest matching project conversation opens in the side panel while project detail remains mounted.

Validation and residuals

The three deterministic UI contracts changed since c463bc6 are reconciled: compact commit author duplication is removed, the font-weight assertion targets the primary title, and Create review is scoped to the section header. At this exact clean head, the affected Projects run reported 66 passed / 1 flaky failure, with the failed multi-repository journey passing 1/1 in isolation; just desktop-test passed 5,205/5,205, just desktop-typecheck passed, focused project review/discussion tests passed 15/15, and git diff --check c463bc6..bd540d0 passed. CI was still running during review. Native Tauri keyboard/AX, zoom, reduced-motion, and exact-head rendering evidence were not run.

Retain the selected review only while a pull-request fetch is in flight,
clear it when the completed list omits that ID, and cover the Channels
tab journey that opens the latest matching conversation in place.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Addressed in 5c6d86b.

Please pass the refetch state through to the workspace tabs, retain the prior review only while a fetch is active, and clear it after a completed result omits the selected ID.

Addressed: workspace tabs now take the pull-request refetch state, share the same retain/clear predicate as the diff-query selection, and skip falling back to another review while an explicit ID is missing. A unit test covers both fetch phases and checks the rendered identity stays aligned with the diff-query identity.

Please add a changed-tab click journey proving the latest matching project conversation opens in the side panel while project detail remains mounted.

Addressed: project-pr-review.spec.ts now clicks a Channels row and asserts the latest matching conversation opens in the side panel with project detail still mounted.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent — request changes on exact head 5c6d86b3b388011b336ab01c14e7104d3d04873e.

Risk: medium — this changes visible Projects selection state and action context across asynchronous refetches.

Blocking: the retained review body can disagree with its context chrome and agent actions during refetch

WorkspaceTabs now retains review A while the PR list is transiently empty (desktop/src/features/projects/ui/ProjectWorkspaceTabs.tsx:248-262) and continues rendering A's detail and diff (:527-570). The diff-query path likewise uses the retained activeRepoPullRequest (ProjectDetailScreen.tsx:187-220). However, the parent separately recomputes selectedPullRequest from the transient query data (ProjectDetailScreen.tsx:691-693) and passes that unretained value into the selection/chat payload, breadcrumbs, agent context (:705-734), and right context card/actions (:783-815).

When a write invalidates the list and the refetch temporarily returns empty with isFetching=true, the center and diff remain on A, but the breadcrumb falls back to Reviews, the right card loses A's title/actions/share/chat target, and the agent prompt no longer names A. The user can therefore act on chrome that no longer describes the review still visible onscreen. A completed authoritative omission correctly clears the retained paths; the problem is the split identity during the transient phase.

Please resolve/retain the selected review once in ProjectDetailScreen using the shared fetch-phase predicate, then use that single identity for the git views, workspace review, breadcrumb, right context, and agent payload while still accepting null after a completed omission. Add a production-shaped component/E2E regression that drives A → transient empty/fetching → completed empty and asserts those consumers and the diff-query identity remain aligned in both phases. The new unit test (desktop/src/features/projects/lib/projectReviewDisplay.test.mjs:70-121) constructs only two synthetic caches, so it cannot detect this third, unretained production consumer.

Confirmed fixed

  • An explicitly selected missing review no longer falls back to a different branch review; renderer and diff selection share the retain/clear predicate.
  • The changed Channels journey opens the latest matching conversation in the side panel while Projects remains mounted.

Validation

At clean 5c6d86b3b388011b336ab01c14e7104d3d04873e:

  • just desktop-test5,207/5,207 passed.
  • just desktop-typecheckpassed.
  • pnpm build:e2e && pnpm exec playwright test tests/e2e/project-pr-review.spec.ts --grep 'channels tab opens…'1/1 passed. An initial attempt without build:e2e failed because dist/ was absent; it was corrected per TESTING.md.
  • Mutation of authoritative-null acceptance caused the focused clear assertion to fail (7 passed / 1 failed); source was restored and the tree rechecked clean.
  • git diff --check 3ee465e12b815a191d902856440e2f3348bda506..5c6d86b3b388011b336ab01c14e7104d3d04873epassed.
  • GitHub at submission: head unchanged and mergeable; all completed checks were successful/skipped, with Desktop Core still running.

Manual/native evidence: not run. No exact-head Tauri/WKWebView keyboard/AX, zoom, theme, or layout proof was available; the PR screenshots are not exact-head native evidence. This remains residual UI risk, but the reproduced source-level identity split already blocks approval.

Resolve the selected review once during pull-request refetch so the
workspace, diff query, breadcrumb, context card, and agent payload stay
on the same identity until a completed result omits it.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Addressed in bb565f5.

Please resolve/retain the selected review once in ProjectDetailScreen using the shared fetch-phase predicate, then use that single identity for the git views, workspace review, breadcrumb, right context, and agent payload while still accepting null after a completed omission.

Addressed: useRetainedPullRequestSelection now owns the retained selected review. Project detail uses that one object for the workspace, diff query, breadcrumb, context card, and agent payload. A completed refetch that omits the ID still clears it. The new hook test drives A → transient empty/fetching → completed empty through those production consumers.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent

Requesting changes at exact head bb565f5f4533b5b12bdd2c614bb502dcd21ed040.

Blocking: transient refetch still splits retained review identity from the rendered review body

The new shared retained selectedPullRequest now correctly drives the diff identity, breadcrumbs, context/actions, and agent payload. However, ProjectWorkspaceTabs passes the raw transient pullRequests list alongside that retained selection (desktop/src/features/projects/ui/ProjectWorkspaceTabs.tsx:506-548), and ProjectPullRequestsPanel returns “No reviews yet.” when pullRequests.length === 0 before considering the retained selectedPullRequest (desktop/src/features/projects/ui/ProjectPullRequestsPanel.tsx:876-903).

During the exact state this patch intends to support—review A selected, then pullRequests=[] while isFetching=true—A remains in the breadcrumb, right-side actions/context, agent payload, and diff query, but the center review body disappears and claims there are no reviews. Users can therefore act on retained review A while the primary surface says no review exists.

Please prioritize a retained selectedPullRequest before the empty-list branch, while preserving completed authoritative-empty behavior where the shared hook supplies null.

Regression proof is not production-shaped

desktop/src/features/projects/ui/__tests__/useRetainedProjectGitViews.test.mjs:112-161 manually composes helpers from the hook result; it does not render or import ProjectDetailScreen, ProjectWorkspaceTabs, or ProjectPullRequestsPanel. It therefore passes despite the user-visible branch-ordering defect above. Independently, reintroducing the prior production wiring defect for the agent payload still left this new focused test passing 1/1.

Add a component/E2E regression exercising the actual production path through populated A → transient empty/fetching → completed empty. It should assert the review body/title, breadcrumb, context/actions, agent payload, and diff-query identity remain aligned, and mutation of any one production consumer back to raw query data should fail.

Exact-head evidence

  • just desktop-test: 5,208/5,208 passed.
  • just desktop-typecheck: passed.
  • Built Projects smoke spec: 43/43 passed; it contains no refetch-identity lifecycle journey and does not cover this defect.
  • git diff --check 3ee465e12b815a191d902856440e2f3348bda506...bb565f5f4533b5b12bdd2c614bb502dcd21ed040: passed.
  • Head was live, clean, and mergeable when each lane closed; final submission guard rechecked the same SHA.
  • macOS build and both Desktop integration shards were green at the last team poll; Desktop Core, smoke shards, and Windows were still running. Green CI would not exercise the missing lifecycle.
  • Native Tauri/WKWebView keyboard/AX, zoom, reduced-motion, theme, and narrow-layout validation: not run.

@thomaspblock
thomaspblock enabled auto-merge (squash) August 20, 2026 21:56
Show the selected review before the empty-list branch so the center pane
stays on review A while chrome and the diff query already retain it, and
still show empty after a completed omission.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Addressed in 570b198.

Please prioritize a retained selectedPullRequest before the empty-list branch, while preserving completed authoritative-empty behavior where the shared hook supplies null. Addressed: PullRequestsPanel now routes through PullRequestsPanelSurface, which shows the selected review before the empty-list branch. A completed omission still renders “No reviews yet.”

Add a component/E2E regression exercising the actual production path through populated A → transient empty/fetching → completed empty. Addressed: useRetainedProjectGitViews.test.mjs now drives that journey through the panel surface (and the public PullRequestsPanel empty path). It asserts the review title/body stay visible during the transient empty refetch, that chrome / context / agent payload / diff-query identity stay aligned, and that completed empty still shows “No reviews yet.”

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent

Verdict: REQUEST CHANGES
Reviewed: 3ee465e12b815a191d902856440e2f3348bda506..570b198a07f9c536ddbb04b47b9f320e4e1c4520 (exact head 570b198a07f9c536ddbb04b47b9f320e4e1c4520)
Risk: medium — the implementation now appears to preserve one coherent review identity through refetch, but the regression test does not guard the production wiring that previously split the UI.

[P2] Exercise the real selected-review panel path in the regression

apps/desktop/src/hooks/useRetainedProjectGitViews.test.mjs:160-193 renders the real PullRequestsPanel only when no review is selected. In the populated/refetch states under test, it instead renders PullRequestsPanelSurface directly with synthetic title/body content. That bypasses ProjectDetailScreen -> ProjectWorkspaceTabs -> ProjectPullRequestsPanel, including the production selectedPullRequest prop connection at ProjectPullRequestsPanel.tsx:937-938.

This gap is causal, not theoretical: changing the production surface call to selectedPullRequest={null} recreates the center-pane disconnect, yet the focused regression still passes 1/1. Reversing the extracted surface precedence does fail the test, showing it guards only that helper boundary. The 43-test Projects Playwright spec also has no refetch lifecycle.

Please render the real PullRequestsPanel for selected states (or drive the full screen/workspace/panel journey) across populated -> transient empty/fetching -> completed empty, assert the real detail title/body and settlement states, and mutation-prove that severing the production selected-review prop fails.

Implementation traced

The product fix itself looks coherent and minimal: useRetainedProjectGitViews.ts:67-93 retains during fetch and clears after authoritative completed-empty; ProjectDetailScreen.tsx:703-730,787-812 uses the retained object for context, breadcrumb, agent payload, and review state; ProjectWorkspaceTabs.tsx:506-549 carries it to panel/diff surfaces; and PullRequestsPanelSurface.tsx:16-19 correctly prefers retained detail over transient empty.

Validation at exact head

  • pnpm test — PASS, 5,208/5,208 (an independent full-suite run had one useDocumentVisible timing failure, then its isolated 5/5 rerun passed)
  • pnpm typecheck — PASS
  • pnpm build:e2e && pnpm exec playwright test tests/e2e/project-pr-review.spec.ts --project=smoke — PASS, 43/43; no refetch identity coverage
  • git diff --check 3ee465e...HEAD — PASS
  • Surface-precedence mutation — expected focused failure; restored control passed
  • Production-wiring mutation — focused test incorrectly remained green 1/1
  • CI at submission: core/build/integration and smoke shards 1/2/4 passed; smoke shard 3 failed on an apparently unrelated message-feedback hover-alpha snapshot, leaving the aggregate Desktop check red

Manual/native evidence: not run; no permission to launch/focus the shared-machine GUI. Browser coverage includes narrow-layout context reachability but does not establish native WKWebView keyboard/AX/theme/zoom behavior.

Residual risk: production-path refetch regression remains unguarded; native behavior was not exercised; CI is red pending disposition of the unrelated snapshot failure.

The retained-review unit test bypassed production selectedPullRequest wiring by mounting a synthetic surface for selected states. Mount the real panel instead so a severed selection fails the refetch lifecycle.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
…l-cleanups

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep the retained-review panel mount from hanging node:test by using a unique stub URL and unmounting the QueryClient after the lifecycle.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Addressed in 255c8b9 / 7712bbc.

Please render the real PullRequestsPanel for selected states (or drive the full screen/workspace/panel journey) across populated → transient empty/fetching → completed empty, assert the real detail title/body and settlement states, and mutation-prove that severing the production selected-review prop fails.

The refetch regression now always mounts production PullRequestsPanel (populated, retained refetch, and completed-empty), including the selected/refetch path. It asserts the real detail h3 title and project-pull-request-detail body, keeps chrome / context / agent / diff-query identity aligned, and the severed-prop render (selectedPullRequest={null} while the hook still retains review A) fails closed with “No reviews yet.”

Focused useRetainedProjectGitViews.test.mjs passed 1/1 (including a run without --test-force-exit). Native Tauri/WKWebView GUI was not run.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent

Verdict: REQUEST CHANGES
Reviewed: 569308c23c9c2bf620dd3a9a5e4baecbcfa22e16..7712bbc3d1b6d023650813e33f5c7eb90c614a63
Risk: medium — the shipped identity flow looks coherent, but the regression still cannot detect a production wiring break that restores the false-empty review pane.

[P2] Make the refetch regression exercise the production workspace handoff

desktop/src/features/projects/ui/useRetainedProjectGitViews.test.mjs:286-351 mounts PullRequestsPanel directly and supplies selectedPullRequest itself at :297-304. It therefore bypasses the actual ProjectDetailScreen -> WorkspaceTabs -> PullRequestsPanel connection at desktop/src/features/projects/ui/ProjectWorkspaceTabs.tsx:506-549 (specifically :548).

This is causally non-discriminating: changing only ProjectWorkspaceTabs.tsx:548 to selectedPullRequest={null} restores the center-pane false-empty defect while the screen chrome and diff consumers can retain review A, yet the focused regression still passes 1/1. The source was restored and the exact-head tree was clean after the mutation. The new test proves hook-to-directly-mounted-panel behavior, not the production chain that previously broke.

Please drive populated A -> transient fetching-empty A -> completed-empty through WorkspaceTabs or ProjectDetailScreen, assert the real panel title/body plus the surrounding retained identity consumers, and mutation-prove that severing ProjectWorkspaceTabs.tsx:548 fails.

Implementation and validation

The shipped implementation itself remains coherent on source trace: retained selection resolves in ProjectDetailScreen.tsx:186-224, drives context/breadcrumb/agent consumers at :703-730, passes to the workspace at :917, and PullRequestsPanelSurface.tsx:16-19 prioritizes retained detail before authoritative settlement to empty.

At exact clean head, team validation reported:

  • focused retained-view control: 1/1 passed;
  • full desktop package: 5,231/5,231 passed;
  • desktop typecheck: passed;
  • E2E build + Projects smoke: 43/43 passed, but contains no refetch lifecycle journey;
  • git diff --check 569308c...HEAD: passed.

CI is not green: macOS build, Windows Rust, all four smoke shards, relay E2E, and integration shard 1 passed, but integration shard 2 was cancelled during Playwright system-dependency installation and the aggregate Desktop E2E Integration check failed. Desktop Core was still running at the final team poll.

Native Tauri/WKWebView keyboard/AX, theme, zoom, and reduced-motion behavior was not run under the shared-machine GUI safety policy. Browser smoke covers the current narrow-layout sheet behavior only.

One assigned product/UI reviewer did not return a final lane despite a direct follow-up, so no additional lane result is represented here; this concrete coordination blocker does not weaken the independently mutation-proven merge blocker above.

@thomaspblock

Copy link
Copy Markdown
Contributor Author

[P2] Exercise the real selected-review panel path in the regression

…useRetainedProjectGitViews.test.mjs renders the real PullRequestsPanel only when no review is selected. In the populated/refetch states under test, it instead renders PullRequestsPanelSurface directly with synthetic title/body content. That bypasses … the production selectedPullRequest prop connection at ProjectPullRequestsPanel.tsx:937-938.

Please render the real PullRequestsPanel for selected states … across populated -> transient empty/fetching -> completed empty, assert the real detail title/body and settlement states, and mutation-prove that severing the production selected-review prop fails.

Done on 255c8b9ab. The refetch regression now mounts the real PullRequestsPanel for populated → transient empty/fetching → completed empty. It asserts the production detail title/body, and dropping selectedPullRequest while the hook still retains review A shows “No reviews yet.”

@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Addressed in 71520a8 (head 733380e after merging origin/main).

Please drive populated A -> fetching-empty A -> completed-empty through WorkspaceTabs or ProjectDetailScreen, assert the retained real title/body and aligned surrounding identity consumers, and show that changing ProjectWorkspaceTabs.tsx:548 to pass null makes that regression fail.

The refetch regression now mounts production WorkspaceTabs (the selectedPullRequest={selectedPullRequest} handoff into PullRequestsPanel). It drives populated → retained refetch → completed-empty, asserts the real detail h3 / project-pull-request-detail body, and keeps chrome / context / agent / diff-query identity aligned.

Local mutation of that handoff to selectedPullRequest={null} failed the focused test (list rows instead of retained detail); restoring the handoff passed 1/1. The in-test “pass null to the panel” check is gone — it only proved the test-owned prop.

Native Tauri/WKWebView GUI was not run.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent

Verdict: REQUEST CHANGES
Reviewed: 24ec6a468ec9d0d425ee58fbfc4d416412c446ad..733380eed98bb92732c37577189a2fd76e6d7022
Risk: medium — the Projects identity handoff is now coherently implemented and causally guarded, but required exact-head Desktop CI is red.

[P2] Restore required Desktop smoke CI on the reviewed head

GitHub Actions run 32445630429 fails Desktop Smoke E2E (2), Desktop Smoke E2E (4), and the aggregate Desktop check.

  • Shard 4 fails deterministically in both themes across all retries at desktop/tests/e2e/tooltip-semantics.spec.ts:143: the assertion expects Public channel · Active \\d+[mhdw] ago, while the application renders Public channel · Active just now.
  • Shard 2 has a deterministic mentions mismatch across retries (@quinnhello versus @quinn hello), plus another retry-recovered case.

These failures appear outside the Projects-specific delta and arrived with the current base merge, but the exact PR head is not merge-green. Please repair/rebase or establish the failures are transient, then rerun the failed shards and aggregate Desktop check to green. Any new head requires delta re-review.

Projects refetch remedy verified

The previously requested production-path regression is now causal. useRetainedProjectGitViews.test.mjs:316-387,390-487 drives populated review A → fetching-empty A → completed-empty through real WorkspaceTabs → real PullRequestsPanel. The retained selection now consistently feeds diff identity, breadcrumb, context/actions, agent payload, and workspace/panel state (ProjectDetailScreen.tsx:703-731,906-918; ProjectWorkspaceTabs.tsx:499-549), then clears after authoritative omission.

Mutation proof: changing only ProjectWorkspaceTabs.tsx:548 from selectedPullRequest={selectedPullRequest} to selectedPullRequest={null} makes the focused regression fail on the missing real detail; restoring the source passes. A transient-only disconnection also fails. The prior coverage blocker is resolved, and no additional defect was found in the reviewed retention/identity handoffs.

Exact-head validation

At clean 733380eed98bb92732c37577189a2fd76e6d7022:

  • just desktop-check — passed (3 warnings / 2 infos outside this remedy)
  • just desktop-typecheck — passed
  • just desktop-test5,262/5,262 passed
  • git diff --check 24ec6a468ec9d0d425ee58fbfc4d416412c446ad...733380eed98bb92732c37577189a2fd76e6d7022 — passed

Native Tauri/WKWebView and a running-app refetch journey were not exercised on this head. The jsdom regression now protects the exact production workspace-to-panel wiring, but native keyboard/AX, theme, zoom, reduced-motion, and visible refetch behavior remain unproven residual risk.

Smoke shards failed after merging main: composer inline-flex chips
swallowed the space after @mentions, and the channel tooltip spec
rejected the product's Active just now copy.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖

Please repair/rebase or establish the failures are transient, then rerun the failed shards

Fixed on b8df8c477. Both smoke failures were deterministic after the main merge, not flakes:

  • Shard 2: composer mention chips inherit rendered-message inline-flex + icon ::before layout, which pulls the caret back into the chip so typing after @quinn becomes @quinnhello. Composer decorations stay display: inline now, so the trailing space survives.
  • Shard 4: channel activity within a minute is Active just now (ChannelDeepLink.tsx); the spec only allowed \d+[mhdw] ago. It now matches the message-chip pattern and the product copy.

The retained-review WorkspaceTabs coverage you verified is unchanged. New head will need your delta re-review once CI is green.

Inline-flex in the composer preserved chip chrome but stole the caret
after @mentions. Keep display:inline there and align the smoke specs.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent — request changes on exact head 9a98601afb5a182d7c99db5ee8d3f1fc928dc724 (base 24ec6a468ec9d0d425ee58fbfc4d416412c446ad).

[P2] The claimed composer caret fix remains nondeterministic

desktop/src/shared/styles/globals/composer.css:259-267 changes mention chips to display:inline, while desktop/src/shared/styles/globals/composerCaret.test.mjs only proves that CSS text exists. The rewritten assertions at desktop/tests/e2e/mentions.spec.ts:749,823 likewise assert the implementation but do not type after selecting those mentions.

At this exact clean head, the existing production-shaped journey at desktop/tests/e2e/mentions.spec.ts:1330-1332 still reproduced the defect the comment claims to fix:

Expected: "@quinn hello"
Received: "@quinnhello"

A focused run failed once and passed on retry; a retry-disabled 10-repeat run failed once more. That is 2 failures in 14 executions at the immutable head. A separate fresh run passed 3/3 targeted journeys and confirmed the restored human/agent pseudo-element icons render and align correctly. That corroborates the icon restoration, but it does not negate the repeated missing-space reproduction; it demonstrates the caret behavior is intermittent.

Please fix selection/caret placement deterministically rather than blessing a display value. Add a focused running-app regression that selects each relevant mention type, immediately types a suffix, and asserts exact spaced text together with visible/aligned identity treatment; stress or mutation-prove it so the old behavior fails reliably.

Other reviewed behavior

The prior Projects retention blocker remains resolved: retained PR identity is used through the refetch handoff and settles to authoritative empty state; matching Channels conversations remain in the Projects side panel. No additional persistence, ownership, panel-handoff, or failure-recovery defect was found in the searched changed paths.

Evidence

  • PASS: full desktop package suite, 5,264/5,264, at prior exact head b8df8c4; the 9a98601a delta is limited to composer CSS and mention tests.
  • PASS: exact-head E2E build and the two rewritten style rows.
  • FAIL: exact-head real post-selection typing journey, 2/14 reproductions of @quinnhello.
  • PASS: exact-head browser geometry/screenshots show restored human/agent icons visible and aligned.
  • PASS: git diff --check for base…head and b8df8c4..9a98601a.
  • CI run 32449314678 was still in progress when this blocking runtime reproduction was established; completed macOS build, Rust lint, relay E2E, and both integration shards were green.
  • NOT RUN: native Tauri/WKWebView manual keyboard/AX/zoom validation under shared-machine GUI safety policy.

Any new head invalidates this verdict and requires delta review.

Chip decorations can map the caret back to the token edge so the next
keystroke lands before the inserted space. Advance the caret past that
space on decoration rebuild and text input.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖

Please fix selection/caret placement deterministically rather than blessing a display value.

Addressed differently: display:inline was not enough — you still reproduced @quinnhello at 9a98601a. On a5eb2695f the mention highlight plugin now advances the caret past the inserted space on decoration rebuild and on handleTextInput, so a keystroke at the chip edge lands after @Name .

Human and agent mention smoke specs now click, type a suffix immediately, and assert the spaced text plus chip identity. Unit tests cover selectionAfterMentionTrailingSpace so returning the chip-edge position fails.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent — request changes on exact head a5eb2695ff8e005ca1afd966bd5e4c2c32e8c9aa (base 24ec6a468ec9d0d425ee58fbfc4d416412c446ad).

[P2] The relay-discovered mention path still loses its trailing space

The new correction in desktop/src/shared/lib/mentionHighlightExtension.ts:94-127,175-195 is not deterministic across the browser lifecycle it is meant to repair. appendTransaction corrects an empty selection only after a document/meta transaction, while handleTextInput redirects input only when ProseMirror reports from at the narrow token-end position before the existing space. The static helper tests exercise that document-position case, but not the DOM-selection remap and async relay-agent identity/decorations ordering.

Two independent exact-head stress runs reproduced the same user-visible failure in the committed relay-only journey at desktop/tests/e2e/mentions.spec.ts:1328-1334:

Expected: "@quinn hello"
Received: "@quinnhello"
  • 20 repetitions per relevant row, one worker, zero retries: 58 passed / 2 failed. Person and managed-agent rows were 20/20; relay-only failed twice.
  • Independent 10 repetitions per row, one worker, zero retries: 29 passed / 1 failed. Person and managed-agent rows were 10/10; relay-only failed once.

The Playwright screenshot/error contexts show the actual composer content after autocomplete click and immediate typing, so this is not an implementation-style oracle or incidental assertion. The new person/managed-agent E2Es are useful, but they do not cover the distinct relay-discovered lifecycle that still races.

Please place/fence the ProseMirror selection after the inserted space as part of autocomplete settlement, before subsequent text input, rather than relying on a later plugin correction that can lose the race. Keep a production-shaped relay-discovered-agent stress regression and the visible identity assertions; mutation-check that removing the correction fails it.

Scope and evidence

  • PASS: focused helper suite, 26/26.
  • PASS: fresh E2E builds and git diff --check 9a98601..a5eb269.
  • FAIL: exact-head real workflow in both independent stress runs, 3 failures across 30 relay-only executions.
  • PASS at poll: exact-head macOS build, Rust lint, relay E2E, both integration shards and aggregate. Remaining Desktop Core/Windows/smoke jobs were in progress; green CI would not override the reproduced workflow defect.
  • The author delta does not touch Projects/refetch/panel code; previously reviewed retention, identity, and in-project Channels handoffs were not reopened without a new delta-specific risk.
  • NOT RUN: native Tauri/WKWebView manual keyboard/AX/zoom validation under shared-machine GUI safety policy; evidence is browser Playwright.

Any new head invalidates this verdict and requires delta review.

Relay-only @agent chips still lost the trailing space when decorations remapped a selection-only caret before the next keystroke. Arm that caret as part of insert settlement so immediate typing stays after the space.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Jude: the remaining race was a selection-only DOM remap after chip decorations, which appendTransaction ignored unless the doc/meta changed. Autocomplete insert now rebuilds decorations in the same transaction and arms a short caret fence so those remaps still step past the trailing space (49afb82d2). The relay-only e2e repeats insert+immediate type 5 times; mutation: shouldAdvanceMentionCaret with fenceActive: true, rebuilt: false must stay true.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent reviewed exact head 49afb82d29ac3005a0a6d619e5337e1cb0c0dcdb against base 24ec6a468ec9d0d425ee58fbfc4d416412c446ad.

[P1] Mention autocomplete still loses the trailing separator under ordinary immediate typing

Production-shaped committed Playwright workflows fail at the shipped bytes:

  • Person selection (Hey @bo → Bob → immediately type hello): 18/20 passed, 2/20 failed with visible text Hey @bobhello instead of Hey @bob hello.
  • Relay-discovered allowlisted agent: 29/30 passed, 1/30 failed with @quinnhello instead of @quinn hello (each repetition performs five selection/type cycles).
  • Managed-agent control: 20/20 passed.

The person failure screenshot and Playwright semantic context both showed the malformed composer text, so this is not merely a test-helper mismatch. It can alter visible text and break mention resolution/notification during normal click-and-type behavior.

The fence in desktop/src/features/messages/lib/mentionHighlightExtension.ts:220-242 only corrects selection from appendTransaction; it neither forces a transaction nor synchronously reasserts the DOM selection after decoration/focus reconciliation. A browser selection remap can therefore become the insertion point for beforeinput before the fence has an opportunity to repair it.

Please make settlement own both model and DOM selection through the trailing space after focus/decorations settle, scoped to the editor instance. Keep repeated browser coverage for person, managed-agent, and relay-discovered-agent paths, and demonstrate that removing the actual settlement makes the regression fail.

[P2] The timed caret fence can steal intentional selection and leak across editors

mentionCaretFenceUntil is module-global (mentionHighlightExtension.ts:18-30), autocomplete arms it at :92-118, and every plugin instance consults it at :221-240. During that 750 ms window, shouldAdvanceMentionCaret advances an empty selection at the mention edge even when no decorations were rebuilt (:39-50). Immediate ArrowLeft after mention insertion can therefore be undone, and inserting in composer A can affect a qualifying selection transaction in composer B. clearMentionCaretFence has no callers in the searched desktop/src and desktop/tests trees.

The committed unit expectation fenceActive: true, rebuilt: false => true codifies this selection movement, while the ArrowLeft coverage waits until after expiry. Please keep settlement state per editor/plugin instance, consume it after the intended remap, cancel it for explicit keyboard/pointer selection, and add immediate-ArrowLeft plus simultaneous-composer production-path regressions.

The claimed regression is also non-causal: removing the fence arm while retaining the earlier rebuild/input correction still passed the relay-only running-app row 10/10. The shipped implementation itself later failed 1/30. The test therefore neither detects removal of this fence nor establishes that the new mechanism fixes the race.

Validation at the reviewed head

  • just desktop-test: 5,272/5,272 passed.
  • just desktop-typecheck: passed.
  • just desktop-check: passed (3 warnings/2 infos outside this delta).
  • Focused mention + retained Projects unit coverage: 32/32 passed.
  • Projects product/navigation workflows: 13/13 passed; source trace found no new Projects/refetch blocker.
  • git diff --check: passed; reviewer trees were restored clean.
  • CI at final preflight: completed smoke/integration/build/lint/DCO checks green or skipped; Desktop Core remained in progress.
  • Native Tauri/WKWebView keyboard, VoiceOver, and zoom validation was not run under the shared-machine GUI safety policy; browser Playwright evidence only.

Head/base were rechecked against the live PR immediately before submission. The intermittent shipped-code failures and deterministic ownership/selection hazard require changes despite the otherwise green package and CI evidence.

A timed module-global fence still lost ordinary click-then-type and could steal ArrowLeft in another composer. Own model and DOM selection per editor after autocomplete focus, cancel on arrows/click, and keep a selected trailing space from being replaced.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Jude: the timed global fence was the wrong mechanism — it could steal ArrowLeft, leak across composers, and still lose ordinary click-then-type. 0071d6fd5 settles model + DOM selection in the inserting editor after autocomplete focus, cancels that settlement on arrows/click, and treats a selected trailing space as insert-after rather than replace. Person and managed-agent e2es now repeat insert+type five times; relay-only keeps its five-cycle loop; ArrowLeft immediately after @bob types into the name instead of after the space. Mutation: insertPosForMentionTextInput on [chip-end, space) must return after the space, and two createMentionCaretSettlement() instances must not share armed state.

Smoke failed because settlement stayed armed after autocomplete, so ArrowLeft was bounced back past the trailing space. Consume it after the first model/DOM remap; typing at the chip edge still redirects.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep the mention-caret settlement current with main before pushing the ArrowLeft smoke fix.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent

Verdict: REQUEST CHANGES
Reviewed: 9891e64f6b8358d78aa85f2ba248310d58b51ec0..35fc1b6e64761270fa0e0193e20afd3add15daaa
Risk: high — this changes mention insertion/caret ownership, which directly affects composed message text and notification correctness.

[P1] Honor the first deliberate caret move after mention selection

The new post-remap cancellation at desktop/src/features/messages/lib/mentionHighlightExtension.ts:356-359 still does not make the browser's first intentional ArrowLeft operate from a truthful synchronized model/DOM selection.

At this exact head, the committed browser regression at desktop/tests/e2e/mentions.spec.ts:762-776 fails 1/1 after selecting person @bob, immediately pressing ArrowLeft, and typing x:

Expected: Hey @bobx
Received: Hey @bob x

A real-browser click-at-the-mention-edge probe also produced Hey @bob x (1/1 failed), so pointer placement is not established either. Meanwhile, person, managed-agent, and relay-discovered-agent ordinary immediate-typing/send rows passed 3/3.

This is causal evidence against the proposed remedy: removing only the new settlement.cancel() at mentionHighlightExtension.ts:358 and rebuilding produced the identical matrix—ordinary rows 3/3 passed, ArrowLeft 1/1 failed. The new line therefore has no demonstrated effect on the claimed fix. Please synchronize model and DOM selection so the first deliberate ArrowLeft/click is honored, commit deterministic browser coverage for both interactions, and show that removing the actual remedy makes those regressions fail.

Traced scope and validation

  • The authored 0071d6f..35fc1b6 remedy is three lines in the mention plugin; the remaining movement is the new base merge and channel intro copy/tests. Merge-base matched 9891e64f6b8358d78aa85f2ba248310d58b51ec0.
  • just desktop-cipassed at clean exact head (same-shell pre/post SHA check); focused mention unit tests 34/34 passed. These package gates do not exercise browser selection ownership.
  • Fresh E2E build and typecheck — passed.
  • Representative Projects journeys — 2/2 passed; channel intro copy/dialog journey — 1/1 passed. Project/refetch source is unchanged from the previously reviewed head, and no new async/refetch defect was found.
  • git diff --check 9891e64f6..35fc1b6passed.
  • CI run 32477979383 was incomplete at review close; completed jobs had no failures, but smoke shard 2 and other required Desktop jobs were still running. CI cannot clear the exact-head local browser failure.

Manual/native evidence: browser Playwright only; native Tauri/WKWebView, VoiceOver, theme, and zoom were not run. The reproduced browser correctness failure is sufficient to block.

Chip-edge typing was always redirected past the trailing space, so a
deliberate ArrowLeft still produced @bob x. Redirect only while
autocomplete is settling; after ArrowLeft or a chip-edge click, insert
at the caret.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Jude: the ArrowLeft miss was not the consume-after-remap line — handleTextInput always treated the chip edge as “type after the space,” so a deliberate ArrowLeft still produced Hey @bob x. 208209f33 redirects that path only while autocomplete is settling. After ArrowLeft or a chip-edge click, typing inserts at the caret. Mutation: mentionTextInputInsertPos(..., settling=false) at the chip edge must return null. Person/agent/relay immediate-type coverage is unchanged; there is now a chip-edge click e2e alongside ArrowLeft.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent

Verdict: APPROVE
Reviewed: 9891e64f6b8358d78aa85f2ba248310d58b51ec0..208209f332bc40a6a4ac90ae3389e10ff29c5960 (exact head 208209f332bc40a6a4ac90ae3389e10ff29c5960)
Risk: high — mention caret ownership changes can alter composed text and notification correctness; Projects also changes asynchronous selection/refetch and visible navigation contracts.

No material findings remain.

Resolved behavior and contracts

The exact-head delta replaces the earlier overbroad chip-edge redirection with editor-local settlement and explicit model/DOM selection synchronization. Deliberate ArrowLeft and mention-chip placement are handled only at the exact trailing-space boundary (desktop/src/features/messages/lib/mentionHighlightExtension.ts:79-105,358-460); navigation cancels settlement and plugin destruction clears its state, avoiding cross-editor or torn-down lifecycle leakage.

The previously reviewed Projects path remains coherent: repository/selection-aware cache keys prevent stale review or diff carryover, selected review identity is retained only during same-key fetch and clears after authoritative omission, and that same identity drives detail, chrome, context/actions, agent payload, and diff (projectReviewDisplay.ts:8-59; useRetainedProjectGitViews.ts:51-87,164-204; ProjectDetailScreen.tsx:187-224,692-731,807-918). The production regression exercises populated → fetching-empty → completed-empty through the real consumer handoff (useRetainedProjectGitViews.test.mjs:390-491).

Exact-head validation

  • Full Desktop unit suite: 5,277/5,277 passed; typecheck passed.
  • Mention browser suite: 100/100 passed. First-ArrowLeft and chip-edge controls passed 10/10 across repeated runs.
  • Causal mutations reproduced the old visible defect (Hey @bob x instead of Hey @bobx); restoring the exact source/build returned the focused controls to 10/10. Independently removing the explicit ArrowLeft handler also made the ArrowLeft regression fail, then restoration returned 2/2 green.
  • Projects browser coverage: 68/68 passed across PR review/refetch recovery, commit detail, navigation, keyboard/ARIA states, responsive context rail/sheet behavior, retry/recovery, and repository/branch operations. Exact-head wide and narrow screenshots showed no clipping or overlap.
  • git diff --check 9891e64f6b8358d78aa85f2ba248310d58b51ec0..208209f332bc40a6a4ac90ae3389e10ff29c5960 passed on a clean detached checkout.
  • Exact-head GitHub checks are complete and green: Desktop Core, all four smoke shards, both integration shards, relay E2E, macOS build, Windows Rust, release candidate, aggregate Desktop, and DCO.

Residual risk: validation used Chromium/mock bridge rather than native Tauri/WKWebView; native assistive-technology, VoiceOver, and manual zoom/theme behavior were not exercised. The exact-head browser, mutation, responsive, and CI evidence is sufficient for the changed contracts.

@thomaspblock
thomaspblock merged commit 9b32e05 into main Aug 21, 2026
24 checks passed
@thomaspblock
thomaspblock deleted the projects-v6-pt5-visual-cleanups branch August 21, 2026 12:45
tlongwell-block pushed a commit that referenced this pull request Aug 21, 2026
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>

Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>

* origin/main:
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)

Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
TheSentinel454 added a commit that referenced this pull request Aug 21, 2026
* origin/main: (64 commits)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  fix(desktop): preserve huddle speech boundaries (#6397)
  test(desktop): use a wordlist-safe separator in passphrase word-count test (#6356)
  fix(models): curate Databricks alias-aware labels for 5 missing endpoints (#6360)
  ...

Signed-off-by: Luke Tornquist <tornquist@squareup.com>
TheSentinel454 added a commit that referenced this pull request Aug 21, 2026
…kflow-management

* origin/main: (27 commits)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  fix(desktop): preserve huddle speech boundaries (#6397)
  test(desktop): use a wordlist-safe separator in passphrase word-count test (#6356)
  fix(models): curate Databricks alias-aware labels for 5 missing endpoints (#6360)
  ...

Signed-off-by: Luke Tornquist <tornquist@squareup.com>

# Conflicts:
#	desktop/src/features/workflows/ui/WorkflowDeleteDialog.tsx
#	desktop/src/features/workflows/ui/WorkflowsView.tsx
wpfleger96 pushed a commit that referenced this pull request Aug 21, 2026
…ntion-phase1

* origin/main: (37 commits)
  fix(desktop): sender names in notifications + macOS click-through routing (#6427)
  docs: clarify two-layer moderation ownership (#6481)
  Fix mobile thread tail and iOS channel header (#6399)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  ...

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
wpfleger96 pushed a commit that referenced this pull request Aug 21, 2026
…c-agent-commit-identity

* origin/main: (40 commits)
  chore(release): release Buzz Desktop version 0.5.18 (#6489)
  fix(desktop): simplify duplicate agent provenance (#6401)
  test(benchmarks): expand Buzz-native dataset (#6448)
  fix(desktop): sender names in notifications + macOS click-through routing (#6427)
  docs: clarify two-layer moderation ownership (#6481)
  Fix mobile thread tail and iOS channel header (#6399)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  ...

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@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