feat(projects): unify navigation and reviewed channel requests - #6597
Conversation
2805103 to
553495e
Compare
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>
9381411 to
07d2ce6
Compare
## 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>
## 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>
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
There was a problem hiding this comment.
: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
-
An unrelated project assertion can take over another channel’s route.
ChannelRouteScreenrendersProjectChannelHomefromfindProjectHomeByChannelId(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 byhasAuthoritativeHomeBinding(: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’sbuzz-channeland 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
hasAuthoritativeHomeBindingduring 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.
-
A second valid owner-review request is silently and permanently discarded while the first dialog is open.
acceptrecords every request ID inseenRequestIdsand only afterward returns ifpendingRequestIdis occupied (desktop/src/features/projects/useProjectChannelRequests.ts:37-55). There is no accepted-request queue;bufferedRequestsis 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-clipassed 379/379 plus one ignored doctest. Systems targeted evidence:projectHomeChannel.test.mjs7/7,projectChannelRequest.test.mjs2/2, anduseAddProjectChannel.test.mjs4/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 (
playwrightworker entry /playwright-coremissing); 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..HEADpassed. 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 Corewas 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.
90f046d
into
projects-channel-first-pt1-agent-cli
Summary
This is Part 5 of the channel-first Projects stack, based on #6595. The final part contains overview, aggregation, and visual polish.
Testing
Post-Deploy Monitoring & Validation