Skip to content

feat(projects): unify navigation and reviewed channel requests - #6597

Merged
thomaspblock merged 9 commits into
projects-channel-first-pt1-agent-clifrom
projects-channel-first-pt5-navigation-requests
Aug 25, 2026
Merged

feat(projects): unify navigation and reviewed channel requests#6597
thomaspblock merged 9 commits into
projects-channel-first-pt1-agent-clifrom
projects-channel-first-pt5-navigation-requests

Conversation

@thomaspblock

Copy link
Copy Markdown
Contributor

Summary

  • resolve project homes consistently from both channel and project routes
  • preserve repository, file, commit, task, and review context when expanding workspace sheets
  • add encrypted owner-reviewed project-channel requests for managed agents

This is Part 5 of the channel-first Projects stack, based on #6595. The final part contains overview, aggregation, and visual polish.

Testing

  • focused request parsing, project route, home-channel, workspace-sheet, and sidebar tests: 20/20 passed
  • ACP tests: 816 passed; CLI tests: 370 passed
  • Desktop unit suite: 5,444/5,444 passed
  • E2E-mode Desktop build passed
  • Rust clippy, TypeScript, Biome, and differential file-size checks passed
  • full pre-push gate passed

Post-Deploy Monitoring & Validation

  • open the same project home from Channels and Projects, then exercise file/work-item deep links and an agent add-channel request
  • healthy signals: identical home surface, preserved repository context, one approval dialog, and no channel before approval
  • failure signals: normal channel fallback, wrong repository detail, duplicate requests, or unreviewed channel creation; mitigate by reverting this PR

@thomaspblock
thomaspblock requested a review from a team as a code owner August 23, 2026 01:59
@thomaspblock
thomaspblock marked this pull request as draft August 23, 2026 03:54
@thomaspblock
thomaspblock force-pushed the projects-channel-first-pt4-project-home branch 3 times, most recently from 2805103 to 553495e Compare August 23, 2026 21:56
Base automatically changed from projects-channel-first-pt4-project-home to projects-channel-first-pt1-agent-cli August 23, 2026 22:32
Open project homes consistently from channel and project routes, preserve file/work-item deep links, and let agents request owner-reviewed project channels.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Co-authored-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock
thomaspblock force-pushed the projects-channel-first-pt5-navigation-requests branch from 9381411 to 07d2ce6 Compare August 23, 2026 22:45
thomaspblock and others added 2 commits August 23, 2026 22:14
## Summary
- make the Projects overview follow the active section with consistent
context, empty states, and row alignment
- add an animated section-local search that preserves sort and
responsive tab behavior
- simplify sidebar and list controls while keeping large project
collections incrementally mounted

This is Part 6 of the channel-first Projects stack, based on #6597. The
final part contains project workspace aggregation and the default
project-home template.

## Testing
- focused search, activity digest, agent selection, related-channel, and
overview-context tests: 26/26 passed
- Desktop unit suite: 5,451/5,451 passed
- E2E-mode Desktop build passed
- TypeScript, Biome, and differential file-size checks passed
- full pre-push gate passed

## Post-Deploy Monitoring & Validation
- exercise every Projects overview section, search transition, selection
state, and right context rail in staging Desktop
- healthy signals: stable tabs, aligned rows, correct section context,
and responsive large-list interaction
- failure signals: search flicker, stale context, wrapped toolbar rows,
missing empty actions, or input lag; mitigate by reverting this PR

---------

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
## Summary
- seed new project homes with a built-in operational canvas while
preserving custom templates and None
- make category create actions open the matching project-aware modal and
keep selection presentation type-specific
- aggregate Tasks and Commits across every repository with responsive
project/repository grouping and a repository Overview tab

This is the final part of the channel-first Projects stack, based on
#6600.

## Testing
- focused project template, work-item aggregation, and overview-context
tests: 16/16 passed
- Desktop unit suite: 5,455/5,455 passed
- E2E-mode Desktop build passed
- TypeScript, Biome, and differential file-size checks passed
- full pre-push gate passed

## Post-Deploy Monitoring & Validation
- create a project, inspect its canvas, and exercise Tasks/Commits
across a project with several repositories
- healthy signals: populated project canvas, one chronological commit
list with repository attribution, and complete task aggregation
- failure signals: missing canvas, single-repository-only counts,
duplicate repository groups, or category actions opening the wrong flow;
mitigate by reverting this PR

---------

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
matt2e pushed a commit that referenced this pull request Aug 25, 2026
## Summary
- make the Projects overview follow the active section with consistent
context, empty states, and row alignment
- add an animated section-local search that preserves sort and
responsive tab behavior
- simplify sidebar and list controls while keeping large project
collections incrementally mounted

This is Part 6 of the channel-first Projects stack, based on #6597. The
final part contains project workspace aggregation and the default
project-home template.

## Testing
- focused search, activity digest, agent selection, related-channel, and
overview-context tests: 26/26 passed
- Desktop unit suite: 5,451/5,451 passed
- E2E-mode Desktop build passed
- TypeScript, Biome, and differential file-size checks passed
- full pre-push gate passed

## Post-Deploy Monitoring & Validation
- exercise every Projects overview section, search transition, selection
state, and right context rail in staging Desktop
- healthy signals: stable tabs, aligned rows, correct section context,
and responsive large-list interaction
- failure signals: search flicker, stale context, wrapped toolbar rows,
missing empty actions, or input lag; mitigate by reverting this PR

---------

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Wrench added 6 commits August 25, 2026 11:57
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
…-cli' into wrench/pr6597-stack-repair

Co-authored-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>
Signed-off-by: Wrench <0eabe6ea5758c1e4c5b68cea4ac42b32c479072883cb28da8110b4a47c32b9a1@buzz.block.builderlab.xyz>

# Conflicts:
#	desktop/src/features/channels/ui/ChannelScreen.tsx
@thomaspblock
thomaspblock marked this pull request as ready for review August 25, 2026 18: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.

:bot: Jude’s code review agent

Verdict: REQUEST CHANGES

Reviewed e7220100e45a14d90e637da810af20adec916de4..90ffff85ce189da21d3fcb1278add9714212b0f0 at exact clean head 90ffff85ce189da21d3fcb1278add9714212b0f0.

Risk: high — this changes project/channel route ownership and an encrypted, owner-reviewed creation flow carried by ephemeral relay events.

Blocking findings

  1. An unrelated project assertion can take over another channel’s route. ChannelRouteScreen renders ProjectChannelHome from findProjectHomeByChannelId (desktop/src/app/routes/ChannelRouteScreen.tsx:136-139,276-285), but that resolver filters only by legacy status, channel ID, visibility, and age (desktop/src/features/projects/lib/projectHomeChannel.ts:5-19). It does not apply the owner/maintainer-backed repository proof already encoded by hasAuthoritativeHomeBinding (:32-45). The project route does apply that proof (desktop/src/features/projects/ui/ProjectDetailScreen.tsx:682-699), so the routes disagree: an unrelated signer can publish a listed kind-30621 with someone else’s buzz-channel and replace that normal channel route with their project chrome, while the equivalent project route refuses it. Existing tests explicitly reject bare/unauthorized bindings (projectHomeChannel.test.mjs:49-75) but the new resolver test omits repository authorization (:83-96).

    Author action: require hasAuthoritativeHomeBinding during channel-route resolution, and add regression cases for bare, unauthorized, and competing authorized/unauthorized assertions.

    Verification owner: author adds the regression; reviewer mutation-checks that removing the gate fails it.

  2. A second valid owner-review request is silently and permanently discarded while the first dialog is open. accept records every request ID in seenRequestIds and only afterward returns if pendingRequestId is occupied (desktop/src/features/projects/useProjectChannelRequests.ts:37-55). There is no accepted-request queue; bufferedRequests is only startup trust-data buffering (:31-33,59-67). Dismiss and success merely clear the current ID (:110-115,150-154). Because kind 24200 is ephemeral and the CLI has already reported that the draft was sent for review (crates/buzz-core/src/kind.rs:461-470; crates/buzz-cli/src/commands/projects.rs:61-74), request B cannot be recovered: replay would also be rejected as seen.

    Author action: queue accepted requests and advance after dismiss/success, or implement an explicit rejection/notification protocol. Add a state-machine regression proving A → B → resolve A → B displayed, while duplicate A remains suppressed.

    Verification owner: author adds the regression; reviewer mutation-checks that restoring the early drop fails it.

Validation

  • Independent systems/integration and product/UI passes both confirmed both blockers and found no additional material defect.
  • Product/UI exact-head evidence before cleanup: full Desktop unit package 5,553/5,553 passed; Desktop TypeScript typecheck passed; cargo test -p buzz-cli passed 379/379 plus one ignored doctest. Systems targeted evidence: projectHomeChannel.test.mjs 7/7, projectChannelRequest.test.mjs 2/2, and useAddProjectChannel.test.mjs 4/4. These green tests do not exercise either blocker.
  • Product/UI smoke built the E2E app and reached 206 passes before the local pnpm store/worktree dependency links disappeared (playwright worker entry / playwright-core missing); 891 tests did not run. This is a reviewer-tooling confidence gap, not an author defect or product failure.
  • My clean checkout: git diff --check e7220100e45a14d90e637da810af20adec916de4..HEAD passed. A local targeted Node invocation was not executable before dependency installation (ERR_MODULE_NOT_FOUND: typescript), so I do not count it as behavioral evidence.
  • GitHub at final refresh: smoke and integration shards reported green; Desktop Core was still in progress. This is not the reason for REQUEST CHANGES.

Manual/native evidence: not run. The blocking ownership and queue defects are established from contract boundaries and source state transitions; native UI proof would not clear them.

Residual risk: dismiss/app-restart recovery remains non-durable for ephemeral requests; approval-dialog focus/keyboard/error/retry behavior was not completed in-browser; no native harness evidence was captured; and the broad workspace/deep-link surface remains unit/source-checked rather than exact-artifact witnessed. Product/UI could not perform a post-test SHA/tree recheck because its checkout was removed during reconciliation, so its commands are attributed to the pinned exact-head worktree used to launch them, not a later cleanliness claim. Any new head requires full delta review.

@thomaspblock
thomaspblock merged commit 90f046d into projects-channel-first-pt1-agent-cli Aug 25, 2026
30 checks passed
@thomaspblock
thomaspblock deleted the projects-channel-first-pt5-navigation-requests branch August 25, 2026 21:34
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