Skip to content

feat(desktop): make Projects workspaces selectable - #6368

Merged
thomaspblock merged 9 commits into
mainfrom
projects-v6-pt2-selectable-workspaces
Aug 20, 2026
Merged

feat(desktop): make Projects workspaces selectable#6368
thomaspblock merged 9 commits into
mainfrom
projects-v6-pt2-selectable-workspaces

Conversation

@thomaspblock

Copy link
Copy Markdown
Contributor

Summary

Projects workspaces now support consistent selection across projects, repositories, reviews, tasks, and channel results. A user can collect related entities, see the active selection without losing their current workspace, and pass a bounded, injection-safe representation to an agent for discussion.

Detail views now keep repository source and availability explicit while preserving contextual actions across local and remote workspaces. Missing or inaccessible repositories produce a recoverable state instead of leaving the workspace ambiguous.

This is part 2 of the Projects v6 stack. Parts 3 and 4 will add context-aware collaboration and navigation/detail-page polish.

Related issue

Related: #6335

Testing

  • Full pre-push gate passed: file-size checks, Biome, TypeScript, Desktop unit tests, Tauri checks, and Rust tests
  • Project context safety suite: 9/9 passed, including bounded untrusted overview data and hidden-context stripping
  • Updated Playwright coverage exercises grouped selection, selection-aware agent context, repository source states, and detail actions

Unify grouped selection, contextual actions, agent chat, and local repository controls so Projects workflows stay focused across overview and detail views.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
… hairline pod inset

The context rail retains the chat panel while collapsed, section dividers
were removed, the detached pod carries a hairline inset, and cloned repos
mock the repo-named path — update the stale assertions accordingly.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep ProjectsView within the repository's 1,000-line ceiling by colocating
the narrow context trigger with its sheet. The extracted control preserves
the same accessible label, pressed state, test IDs, and forwarded focus ref.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep AppSidebar below the repository ceiling after preserving the
scrollable primary navigation by moving its public prop contract into the
existing AppSidebar.types module.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep the selectable-workspaces slice below the file-size ceiling without
changing the overview chat interaction.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Move the bounded overview-context and hidden-context stripping substrate
into part two so its selection-context tests and prompt-safety contract do
not depend on the next stacked PR.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock
thomaspblock requested a review from a team as a code owner August 20, 2026 02:32

@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.

Verdict: REQUEST CHANGES

Reviewed: f88cda9eb886500ec7d205e1d265ac6f654aa433..f74677ea46da9e42b03f5ceaf50b2c22e48d700e (exact head f74677ea46da9e42b03f5ceaf50b2c22e48d700e)

Risk: high. This change sends relay/git-controlled project metadata into hidden agent prompt context and changes repository-owned selection state across a large renderer/Tauri surface.

Blocking findings

  1. Selected-item metadata bypasses the advertised prompt-injection and size boundary. buildProjectSelectionAgentContext and withProjectSelectionAgentContext copy every selected id, title, and shareLink without a count/size cap (desktop/src/features/projects/lib/projectDetailAgentContext.ts:88-120), then projectDetailAgentContextBlock interpolates those fields raw (:220-225). The adjacent detail/overview paths neutralize and bound untrusted metadata (:199-217,228-244), but this path does not. At this exact head, an executable 2,001-item hostile selection produced a 242,355-character / 6,013-line hidden payload, retained all 2,001 rows, and preserved a newline-delimited SYSTEM: Ignore prior instructions line. The existing test uses one benign single-line item (projectDetailAgentContext.test.mjs:136-149) and cannot detect this. Cap selected entries and total serialization, neutralize/quote every untrusted selected field, constrain kind, and add hostile-newline plus oversize tests against the final payload; mutation-prove the regression.

  2. Selection chat can retain repository A's hidden context after switching to repository B. useProjectRepositoryPanel captures selectionAgentContext and always prefers it over the current fallback (desktop/src/features/projects/ui/useProjectRepositoryPanel.ts:36-39,65-85). Repository switching resets URL/work-item/source/tab and the provider's visible selection (ProjectDetailScreen.tsx:775-795), but never clears/rebuilds that captured context. The chat panel can therefore remain in repo B while sending repo A's hidden metadata. Clear/rebuild the captured context on repository/tab/work-item ownership changes and add an E2E that inspects the sent payload after switching repositories. Current coverage opens selection chat but never changes ownership afterward (desktop/tests/e2e/project-pr-review.spec.ts:1674-1746).

  3. Keyboard focus can land on an invisible, ambiguously named selection checkbox. The row selection wrapper is opacity-0 until mouse hover or selection, with no focus-within/focus-visible reveal, while the focusable checkbox defaults to aria-label="Select" (desktop/src/features/projects/ui/ProjectEntityListRow.tsx:83-129,205-234). The same hover-only pattern appears in ProjectWorkItemRow.tsx:52-60 and ProjectsActivityFeed.tsx:405-413. A keyboard user can tab to an invisible 14×14 control and cannot identify which entity “Select” refers to. Reveal it on keyboard focus, give it an entity-specific accessible name, and cover a Tab/focus-visible journey. The current E2E clicks test IDs, so it does not prove keyboard discoverability.

Contracts traced: selection reducer/provider → overview/detail rows → repository panel ownership → agent context serialization; repository switch/reset behavior; Tauri project-git split and Desktop E2E coverage; VISION/Projects alignment.

Validation at matching clean HEAD:

  • git diff --check f88cda9e...HEAD — pass
  • full Desktop unit package — 5,117/5,117 pass
  • pnpm typecheck — pass
  • focused Playwright selection journey — pass after E2E build
  • independent hostile-context executable probe — reproduced finding 1 above
  • CI was still running at verdict time; both Desktop E2E integration shards had passed, while Desktop Core/smoke/native build jobs remained in progress

Manual/native evidence: not run. Exact-artifact zoom/theme/layout and real focus appearance remain unproven; automated Chromium coverage does not substitute for that evidence.

Residual risk: the broad 74-file UI change still needs exact-artifact keyboard/visual validation after these blockers are fixed. Any new head requires delta review and rerunning the affected proof.

Bound and neutralize selection metadata before it reaches hidden agent
context, invalidate captured context when repository ownership changes,
and make entity-specific selection controls visible to keyboard focus.

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

Copy link
Copy Markdown
Contributor Author

🤖 Addressed all three blocking findings in 3ac8ea269.

Selected-item metadata bypasses the advertised prompt-injection and size boundary.

Selection context now validates kinds, normalizes and quotes every untrusted field, caps captured items at 100, and enforces a 16,000-character serialization budget with explicit omission counts. Hostile-newline, 2,001-item, and maximum-field-size tests exercise the final payload.

Selection chat can retain repository A's hidden context after switching to repository B.

Captured selection context is now bound to repository/tab/work-item ownership. A mismatch immediately falls back to the current page context and clears the stale capture. The new E2E switches from buzz to relay-tools, sends an agent message, and verifies the signed command payload contains the new repository and not repository A's selected task.

Keyboard focus can land on an invisible, ambiguously named selection checkbox.

All three selection surfaces now reveal controls on focus, show a focus ring, and expose entity-specific names such as Select Ship the fix. The overview selection E2E now reaches the checkbox with Tab, verifies focus-driven visibility, and selects it with Space.

Validation: 5,119/5,119 Desktop unit tests, 11/11 focused context-security tests, 2/2 focused Playwright journeys, TypeScript, Biome, file-size checks, and the complete pre-push gate passed. Parts 3 and 4 were restacked on this corrected head.

@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: f88cda9eb886500ec7d205e1d265ac6f654aa433..3ac8ea269749a09ef03f2340bb327f2ecab9a647 (exact head 3ac8ea269749a09ef03f2340bb327f2ecab9a647)
Risk: medium — this is a broad, user-visible Desktop interaction change whose code regressions are now covered, but whose real native keyboard/visual behavior remains unverified.

The three prior code blockers are repaired:

  • Selected metadata is allowlisted, normalized, field-capped, capture-capped, quoted, and constrained by a 16,000-character serialization budget, with hostile oversized-input coverage (desktop/src/features/projects/lib/projectDetailAgentContext.ts:10-19,100-148,248-280; desktop/src/features/projects/lib/projectDetailAgentContext.test.mjs:157-222).
  • Captured selection carries an ownership key and is synchronously rejected when repository/tab/work-item ownership changes, with effect cleanup as defense in depth (desktop/src/features/projects/ui/useProjectRepositoryPanel.ts:36-41,67-88; desktop/src/features/projects/ui/ProjectDetailScreen.tsx:195-197; desktop/tests/e2e/project-pr-review.spec.ts:1761-1830).
  • The three affected row/card surfaces reveal entity-specific selection controls on focus, expose entity-specific accessible names, and have a Tab/focus/Space browser regression (desktop/src/features/projects/ui/ProjectEntityListRow.tsx:83-129,209-234; desktop/src/features/projects/ui/ProjectWorkItemRow.tsx:52-68; desktop/src/features/projects/ui/ProjectsActivityFeed.tsx:401-421; desktop/tests/e2e/project-pr-review.spec.ts:1684-1702).

Blocking evidence gap: no inspectable exact-head native Desktop receipt, MP4/screenshots, semantic/AX snapshot, artifact hash, or cleanup record was supplied or discoverable. Chromium proves DOM focus and opacity, but not macOS-delivered Tab focus, WKWebView rendering, visible focus pixels, or Space activation in the shipped Tauri shape. Before clearance, run the exact clean head through the native Desktop harness and show Tab → entity-specific checkbox → visible focus ring → Space selection, with receipt/media/semantic evidence, successful cleanup, and a causal failing mutant. TESTING.md and tools/native-review/README.md make this the appropriate proof shape for visible native behavior.

Validation at matching clean HEAD: full Desktop unit package 5,119/5,119 passed; focused context suite 11/11 passed; exact E2E build plus both repaired Playwright journeys 2/2 passed; git diff --check passed. Causal mutations independently failed the hostile-context, owner-reset, and focus-visibility regressions, then the restored exact-head suites passed and both worktrees were clean. CI observed at review time had macOS build and both Desktop integration shards green; Desktop Core, four smoke shards, and Windows Rust were still running.

Non-blocking: the 14×14 pointer target remains a usability concern, although the requested keyboard contract is implemented and causally covered in Chromium.

Residual risk: native keyboard delivery and final visual rendering remain unverified until the required exact-artifact journey is provided.

Keep the smoke suite on user-reachable controls and retained-panel semantics so it verifies the selectable workspace behavior without stale layout assumptions.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
thomaspblock added a commit that referenced this pull request Aug 20, 2026
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Exact-head native macOS receipt for 01648bf30c7b2db6dd98c22a62c5fb577bd3d89e.

  • Clean projects-v6-pt2-selectable-workspaces worktree, launched through just production as Buzz Dev (projects-v6-pt2-selectable-workspaces).
  • Native debug binary SHA-256: 74ae3c7040f08348cfa43e1fe6dcc0bad1ecb37295416d4b839b8254441fbc7b.
  • Journey: Projects → Tasks → List layout; focus first row action; macOS-delivered Tab; macOS-delivered Space.

Tab reaches the visible entity-specific checkbox

The macOS accessibility snapshot after Tab reported:
role=AXCheckBox, title=Select Hardware — Shipped & Confirmed: design review + 3 decisions (Andrea), value=0, focused=true.

08-tab-focus-ring-crop

Screenshot SHA-256: 535ee15a01350547250efb971ae7fefd4ef2829e6bb911e481a1062495aeac51.

Space selects the task

After Space, the same focused AXCheckBox reported value=1; the native tree also exposed heading 1 task and button Clear selection.

10-space-selected-crop

Screenshot SHA-256: d6b2984c86e7622d10e37c3f9fbf69928fcb152e259b3afe5b9be37e8aa32b4d.

Causal mutant and cleanup

Removing only group-focus-within:opacity-100 made the focused journey fail at project-pr-review.spec.ts:1704: expected opacity 1, received 0. Restoring the exact-head class and rebuilding made the same focused smoke test pass (1 passed).

Cleanup succeeded: the native app/process group exited and Vite port 30355 was released. The worktree was restored clean.

Keep deep-link smoke coverage focused on the workspace detail pane now that selectable context intentionally repeats entity headings.

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: f88cda9eb886500ec7d205e1d265ac6f654aa433..01648bf30c7b2db6dd98c22a62c5fb577bd3d89e (exact live head rechecked immediately before submission)
Risk: medium — the repaired security/ownership/keyboard contracts remain intact, but the exact-head required Desktop suite is deterministically red and native keyboard/visual behavior remains unproved.

The production delta since the prior reviewed repair head is empty: 3ac8ea...01648bf changes only three Playwright specs. The repaired contracts still hold:

  • selected metadata remains allowlisted, capture-capped, normalized/field-capped, final-budgeted, and quoted (desktop/src/features/projects/lib/projectDetailAgentContext.ts:100-148,248-280); the exact-head focused context suite passed 11/11;
  • captured selection context is synchronously rejected when repository/tab/work-item ownership changes, with effect cleanup as defense in depth (desktop/src/features/projects/ui/useProjectRepositoryPanel.ts:36-41,67-88; desktop/src/features/projects/ui/ProjectDetailScreen.tsx:219-221);
  • the affected row/card controls retain entity-specific accessible names and focus reveal. The exact-head focused Chromium journey passed 1/1: adjacent control → Tab → named checkbox → visible opacity → Space → selected count (desktop/tests/e2e/project-pr-review.spec.ts:1683-1714).

Blocking findings

  1. [P2] Required exact-head Desktop CI is red on a deterministic test regression. Desktop Smoke E2E (2) fails on the initial run and both retries at desktop/tests/e2e/entity-link-recipient-cards.spec.ts:265. Its unscoped getByRole("heading", { name }) now matches both the intended project-pull-request-detail heading and the retained project-context-card heading. An independent exact-head focused rerun reproduced the same strict-mode ambiguity. The umbrella Desktop check consequently fails. Scope the assertion to the intended detail surface (and the equivalent issue-detail assertion), rerun the full smoke shard, and obtain green required checks. The unrelated attachment-row flake passed retry and is not this blocker.

  2. Required exact-artifact native proof remains absent. The clean checkout, PR discussion, and exact-head Actions artifact inventory contain no native-review receipt, MP4/screenshots, semantic/AX snapshot, artifact hash, cleanup result, or feature-specific failing mutant for 01648bf. Chromium establishes the DOM contract, but not macOS-delivered Tab focus, WKWebView focus pixels, or Space activation in the shipped Tauri shape. Clearance still requires an inspected exact-clean-head native Tab → entity-specific checkbox → visible focus ring → Space selection journey, including receipt/media/semantic/cleanup evidence and a causal mutant.

Exact-head evidence: clean detached checkout matched live PR head; git diff --check passed; focused context suite 11/11 passed; focused keyboard journey 1/1 passed; the failing entity-link test independently reproduced 1/1 failed; Desktop Core, macOS build, Windows Rust, integration shards, and smoke shards 1/3/4 passed; smoke shard 2 and umbrella Desktop failed.

Non-blocking: the checkbox pointer target remains 14×14 (h-3.5 w-3.5), below WCAG 2.2’s 24×24 target-size baseline. A visually unchanged 24×24 label/hit area would improve usability.

Residual risk: theme, zoom, narrow-layout, native keyboard delivery, and final focus rendering remain unverified. Any new head invalidates this verdict until its delta and exact-head evidence are reviewed.

@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Final-head delta receipt: ffb765e49 differs from the native-evidence head 01648bf30 only in desktop/tests/e2e/entity-link-recipient-cards.spec.ts; desktop/src and desktop/src-tauri have an empty delta, so the exercised WKWebView/native binary is unchanged.

The test-only delta scopes duplicate entity headings to their PR/issue detail panes. The previously failing focused smoke journey now passes (1 passed), Biome passes, and the complete pre-push gate passed. Parts 3 and 4 were restacked again; jedwards27 remains requested for review.

@thomaspblock
thomaspblock enabled auto-merge (squash) August 20, 2026 05:04

@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

Re-review verdict at ffb765e49e2db60fdb167fe58440f3c6d5efa17b: REQUEST CHANGES.

The prior deterministic smoke failure is repaired, and I found no remaining material code defect. The remaining blocker is exact-artifact native evidence for this user-visible keyboard/focus interaction.

Revalidated

  • 01648bf..ffb765e changes only desktop/tests/e2e/entity-link-recipient-cards.spec.ts; the PR/issue heading assertions are now correctly scoped to project-pull-request-detail and project-issue-detail (:263-277). Two independent clean exact-head runs of the formerly failing entity-link journey passed 1/1.
  • Production bytes under desktop/src and desktop/src-tauri are unchanged from 01648bf, preserving the previously reviewed selected-metadata bounds and synchronous repository-owner reset/rejection behavior.
  • Focused context-security coverage passed 11/11, including hostile metadata, capture/final serialization bounds, and selected-context footer coverage.
  • Exact-head required Desktop CI is green, including Desktop Core/build, smoke shards 1–4, integration shards 1–2, relay E2E, macOS, Windows Rust, Rust lint, DCO, and the umbrella Desktop check. In particular, smoke shard 2 now passes.
  • Both posted native PNGs were independently opened and hash-checked. They visibly show an unchecked focused checkbox followed by the checked state.

Blocking evidence gap

The screenshots and reported AX/cleanup claims are encouraging, but they are not an inspectable runbook-grade native journey. The PR does not provide the native receipt, full interaction recording, semantic/AX snapshot, step diagnostics, environment/isolation record, cleanup evidence, or a feature-specific failed-mutant native receipt. The cited causal mutant is the Chromium assertion at project-pr-review.spec.ts:1704, not a nonzero native-harness journey.

For a user-visible control whose acceptance criterion is Tab → entity-specific checkbox → visible focus ring → Space selection, static before/after images cannot prove the input path, semantic focus target, or state transition. A live native receipt also does not carry to a later head solely because production bytes match.

Please attach/open the native harness evidence directory for the exact final head—receipt, MP4, semantic snapshot, cleanup/isolation record, and feature-specific failed-mutant receipt—or rerun that native journey at ffb765e and publish those artifacts. Then this can be cleared without another broad code review if the head remains unchanged.

Non-blocking residual

ProjectEntityListRow.tsx:97-108 leaves the pointer target at 14×14 (h-3.5 w-3.5), below WCAG 2.2’s 24×24 target-size baseline. A visually unchanged 24×24 label/hit box around the 14×14 glyph would reduce misclick risk; I am not blocking this PR on it.

thomaspblock added a commit that referenced this pull request Aug 20, 2026
Publish the sanitized exact-head receipt, MP4, AX snapshots, cleanup record, and causal native mutant needed for inspectable review.

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

Copy link
Copy Markdown
Contributor Author

🤖 Runbook-grade native evidence is now published for exact final head ffb765e49e2db60fdb167fe58440f3c6d5efa17b.

Inspectable bundle

The exact native journey delivered macOS Tab to an entity-specific AXCheckBox, measured 732 bright focus-ring pixels, delivered Space, and observed checkbox value 1, heading 1 task, and Clear selection.

Removing only group-focus-within:opacity-100 produced the requested native-harness failure: Tab still reached the named AX checkbox, but the visual measurement fell from 732 to 0 pixels and the harness exited 1. Restoring the class returned the same harness to 732 pixels and exit 0.

Tab: focused and visible

Focused native checkbox

Space: selected

Selected native checkbox

Causal mutant: semantic focus, no visible pixels

Invisible focused checkbox under mutant

The public bundle redacts workspace content while preserving the exact checkbox pixels, full interaction timeline, semantic states, diagnostics, hashes, and pass/fail receipts. The PR head remains unchanged and required CI is green.

@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: f88cda9eb886500ec7d205e1d265ac6f654aa433..ffb765e49e2db60fdb167fe58440f3c6d5efa17b (exact live head ffb765e49e2db60fdb167fe58440f3c6d5efa17b)
Risk: medium — broad user-visible Desktop selection/state behavior, including relay/git-controlled metadata entering hidden agent context and repository-owned captured state.

The final blocking evidence gap is resolved. I downloaded and inspected the published native bundle at evidence commit 957886d08456598630bcd982db8ebb28c732dde6, verified every file against MANIFEST.sha256, opened the focused/selected/mutant pixels, sampled the complete 30-second H.264 journey, and inspected the exact/mutant/restored receipts, AX snapshots, diagnostics, harness source, environment, and cleanup record.

Revalidated contracts

  • Prompt boundary: selected items remain kind-allowlisted, capture-capped, normalized and field-capped (desktop/src/features/projects/lib/projectDetailAgentContext.ts:100-148), then quoted and constrained by the final 16,000-character selection budget (:248-280). The exact-head focused security suite previously passed 11/11, including hostile and oversized input.
  • Ownership reset: captured agent context carries its repository/tab/work-item owner key and is rejected synchronously when ownership changes, with effect cleanup as defense in depth (desktop/src/features/projects/ui/useProjectRepositoryPanel.ts:36-41,67-88).
  • Keyboard/focus: the row control has an entity-specific accessible name and visible focus-within ring (desktop/src/features/projects/ui/ProjectEntityListRow.tsx:83-128). Exact-head native evidence shows macOS Tab reaching AXCheckBox named Select …, value 0, focused true, and 732 measured bright ring pixels; Space changes value to 1 and exposes 1 task plus Clear selection.
  • Causal native mutant: removing only group-focus-within:opacity-100 preserves AX focus but reduces measured visible pixels from 732 to 0 and exits 1. Restoring it returns 732 pixels and exit 0. This distinguishes semantic focus from actually visible focus.
  • Prior smoke regression: the final 01648bf..ffb765e delta scopes duplicate PR/issue heading assertions to their intended detail panes (desktop/tests/e2e/entity-link-recipient-cards.spec.ts:263-277). Smoke shard 2 and all other required Desktop checks are green at the exact head.

Validation

At matching clean local HEAD ffb765e49e2db60fdb167fe58440f3c6d5efa17b:

  • git diff --check f88cda9e..HEAD — pass.
  • Local head equals live PR head; worktree clean.
  • shasum -a 256 -c MANIFEST.sha256 over the 23-file native bundle — 23/23 pass.
  • Native media inspected: 30.0s, H.264, 288×384, 60fps; focus, selection, and mutant states match the semantic receipts.
  • Required exact-head CI — pass: Desktop Core/build, smoke 1–4, integration 1–2, Desktop E2E Relay, Windows Rust, Rust lint, DCO, and umbrella Desktop.

No new full local package run was needed for this evidence-only re-review; exact-head code and CI are unchanged from the prior integrated pass.

Non-blocking residual

The pointer target remains 14×14 (h-3.5 w-3.5) at ProjectEntityListRow.tsx:97-108, below the 24×24 WCAG 2.2 target-size baseline. A visually unchanged 24×24 label/hit area would reduce misclick risk. Theme, zoom, and narrow-layout native probes were not supplied, but no material unresolved defect remains in the reviewed contract.

Any new head invalidates this approval until its delta and affected evidence are reviewed.

@thomaspblock
thomaspblock merged commit 2b7be93 into main Aug 20, 2026
24 checks passed
@thomaspblock
thomaspblock deleted the projects-v6-pt2-selectable-workspaces branch August 20, 2026 14:42
wpfleger96 pushed a commit that referenced this pull request Aug 20, 2026
…as-aware-labels

* origin/main:
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
tellaho added a commit that referenced this pull request Aug 20, 2026
…ress

* origin/main:
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  fix(desktop): show complete repository trees (#5102)
  Add appearance preference previews (#6193)
  fix(desktop): restore emoji recents (#6263)
  chore: serialize mobile pre-push checks (#6322)
  fix(buzz-acp): loosen workspace-scan guardrail to allow named paths (#6261)
  fix(buzz-dev-mcp): expand leading ~ in read_file/str_replace paths (#6271)
  perf(desktop): move five hot renderer paths from JS into Rust (#6024)
  fix(media): accept portrait video resolutions (#6058)
  fix(desktop): hide archived channels from #/Tab autocomplete (#6156)
  Unify mobile channel details (#6113)
  Revert "fix(acp): gate relay-signed workflow messages on their attributed author" (#6311)

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>

# Conflicts:
#	desktop/src/features/messages/ui/MentionAutocomplete.test.mjs
thomaspblock added a commit that referenced this pull request Aug 20, 2026
## Summary
- give inline project agents bounded visible-page and selection context
while reusing the shared message-thread presentation
- add contextual collaboration actions for discussing project entities
in related channels
- align project list metadata, context rails, and work-item
communication actions with the active workspace

This is Part 3 of the Projects v6 stack, following #6368. Part 4
contains the remaining navigation and detail-page polish.

## Testing
- Desktop unit suite: 5,125/5,125 passed
- Projects smoke specs: 62/62 passed
- TypeScript, Biome, typography, pubkey, and differential file-size
checks passed
- full pre-push gate passed

## Post-Deploy Monitoring & Validation
- validate Projects overview/detail agent chat and discuss-in-channel
journeys in the first staging Desktop session
- healthy signals: context matches the active project/repository/work
item, messages remain in the chosen channel, and restored conversations
exclude unrelated DM history
- failure signals: stale or cross-project context, duplicate/missing
thread rows, or collaboration actions targeting the wrong channel;
mitigate by reverting this PR

Related: #6335

---------

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
morgmart added a commit that referenced this pull request Aug 20, 2026
…handoff

* origin/main:
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  fix(desktop): show complete repository trees (#5102)
  Add appearance preference previews (#6193)
  fix(desktop): restore emoji recents (#6263)
  chore: serialize mobile pre-push checks (#6322)

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
wpfleger96 pushed a commit that referenced this pull request Aug 20, 2026
…el-directory

* origin/main:
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)

Signed-off-by: Hayt <9e1c23a3fd83f61da34420e4e88ff1b16e45cafcc0cd9019eb07d4ecfa8ca9b0@buzz.block.builderlab.xyz>
wpfleger96 added a commit that referenced this pull request Aug 20, 2026
…el-directory

* origin/main:
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Hayt <9e1c23a3fd83f61da34420e4e88ff1b16e45cafcc0cd9019eb07d4ecfa8ca9b0@buzz.block.builderlab.xyz>
atishpatel added a commit that referenced this pull request Aug 20, 2026
…ounting-and-solo

* origin/main: (48 commits)
  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)
  fix(acp): guard against unrequested public relay skills (#6394)
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  ...

Signed-off-by: Atish Patel <atishpatel2012@gmail.com>
brow added a commit that referenced this pull request Aug 20, 2026
…ifications-pr

* origin/main: (33 commits)
  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)
  fix(acp): guard against unrequested public relay skills (#6394)
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  ...

Signed-off-by: Tom Brow <tomb@block.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