Skip to content

feat(desktop): Projects follow-ups — access restrictions, fast loading, activity feed polish - #5073

Merged
thomaspblock merged 9 commits into
mainfrom
projects-v2
Aug 7, 2026
Merged

feat(desktop): Projects follow-ups — access restrictions, fast loading, activity feed polish#5073
thomaspblock merged 9 commits into
mainfrom
projects-v2

Conversation

@thomaspblock

@thomaspblock thomaspblock commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-up batch on the Projects overview (continues merged #1677):

  • Repository access restrictions — repositories the viewer can't reach are surfaced with a reason instead of failing silently. Channel-ACL denials (which arrive as the same 404 as a missing repo, for anti-enumeration) are re-classified using the repository's channel binding and the viewer's memberships (useRepositoryAccess.ts, projectRepoAvailability.ts).
  • Projects loads in seconds instead of minutes — enumeration no longer crawls every kind:5 deletion event on the relay. It fetches project/repo announcements first, then queries deletions scoped to those coordinates via chunked #a filters (3 queries instead of hundreds on staging).
  • Activity feed layout polish — bare event-type glyph beside the headline (no badge circle), timeline spine runs through the avatars connecting consecutive cards, linkable actor/project names are bold in theme foreground, rounded hover state, alignment fixes.
  • Create button pinned — the "+" create menu is pinned to the pane's top-right corner (equal 16px insets) and no longer scrolls away with the page header.
  • List controls as a table header — the scope selector (left) and sort + layout toggle (right) render as the first row of the list container on the Projects/Repositories/PRs/Issues tabs; in card view the identical bar stands alone with the cards below (ProjectsListHeaderBar.tsx).
  • Repository rows show the git location — subtitle is github.com/org/repo for external repos or owner/repo (resolved profile name) for Buzz-hosted ones, instead of repeating the project name (repositoryDisplayPath).
  • Uniform work-item row heights — issue rows previously ran the author chip in inline flow, letting the 20px avatar grow the line box ~3px taller than PR rows; both lists now share the same flex subtitle.

📸 Screenshots: feed layout / pinned button · list header / repo subtitles / row heights.

Note: two empty chore: retrigger CI commits exist on the branch from working around the Aug 6 GitHub Actions incident; happy to drop them with a signoff rebase before undrafting if preferred. Latest main is merged in (a0cc35220).

Test plan

  • Desktop unit tests (4,493 pass after merging main), Biome, tsc
  • New unit tests for scoped deletion enumeration and repo availability re-classification
  • New unit tests for repositoryDisplayPath (external, Buzz-hosted, unresolvable)
  • Screenshot verification of feed layout, connector spine, and pinned button (top + scrolled states) — posted to the PR
  • Screenshot verification of the list header row (list + card), repo subtitles, and matching PR/issue row heights — posted to the PR
  • Manual pass against staging (projects list load time, restricted-repo states)

The relay answers channel-ACL denials with the same 404 as a missing
repository (anti-enumeration), so the git error alone can't tell "never
initialized" from "no access". Re-classify missing results client-side
using the repository's buzz-channel binding and the viewer's memberships:
new access/unbound unavailable reasons with dedicated card indicator and
README-panel copy (linking to the bound channel when visible), viewer
accessibility helpers with an "accessible" repository scope filter, and a
timeline connector treatment for the activity feed.

Also adds min-w-0 to the sidebar layer in AppShell: without it,
min-width:auto keeps the layer at full window width next to the community
rail and pushes the main pane past the right edge.

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

Projects previously enumerated every kind:5 deletion event on the relay
to find tombstones, which took minutes on staging. Fetch announcements
first, then query kind:5 with #a filters chunked over their coordinates.

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

Activity cards show the bare event-type glyph beside the headline, run
the timeline spine through the avatars, and bold the linkable actor and
project names in theme foreground. The create menu is pinned to the
pane's top-right corner instead of scrolling with the header.

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

Copy link
Copy Markdown
Contributor Author

Screenshots of the UI changes in this PR (mock-bridge E2E build, light theme).

Activity feed layout

Bare event-type glyph beside the headline (no badge circle), the timeline spine runs through the avatars connecting consecutive cards, and the linkable actor/project names are bold in theme foreground while the rest of the meta line stays muted.

01-activity-feed

Create button pinned — top of page

The "+" create menu sits in the pane's top-right corner with equal 16px insets from the top and right edges.

02-plus-pinned-top

Create button pinned — scrolled

After scrolling, the page header is gone and the tab bar is stuck to the top, but the create button hasn't moved — it's an overlay on the non-scrolling pane, not a sticky element.

03-plus-pinned-scrolled

thomaspblock added a commit that referenced this pull request Aug 7, 2026
The scope selector and sort/view controls now render as the first row of
the list container (a standalone bar with the same proportions in card
view). Repository rows show where the git data lives (github.com/org/repo
or owner/repo for Buzz-hosted) instead of repeating the project name, and
issue rows use the same flex subtitle as PR rows so both lists share an
identical row height.

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

Copy link
Copy Markdown
Contributor Author

🤖 Screenshots for the list header / repository subtitle batch (dd6d0567a).

List view: controls are the table's first row

The scope selector (left) and sort + layout toggle (right) now render as a header row inside the list container — one shared border, divider below, subtle background tint.

01-list-table-header

Card view: same bar, same proportions

In the card layout the identical bar stands alone (fully rounded) with the cards flowing below.

02-card-header-bar

Repository rows show where the git data lives

Instead of repeating the (often identical) project name, the subtitle is now github.com/org/repo for external repos or owner/repo (resolved profile name) for Buzz-hosted ones.

03-repo-location-subtitle

PR and issue rows share an identical height

Issue subtitles previously used inline flow, letting the 20px author avatar grow the line box ~3px taller than PR rows. Both now use the same flex subtitle.

04-pr-rows

05-issue-rows

thomaspblock added a commit that referenced this pull request Aug 7, 2026
@thomaspblock
thomaspblock marked this pull request as ready for review August 7, 2026 13:11
@thomaspblock
thomaspblock requested a review from a team as a code owner August 7, 2026 13:11

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

Reviewed commit dd6d056 (Projects list controls/header redesign). I found no actionable correctness or blocking issues.

Validation: TypeScript typecheck, full unit suite (4,497 passed), desktop production build, local file-size/px-text/pubkey-truncation checks, and all GitHub CI checks passed. Local Playwright execution was unavailable because the build artifact/browser setup was not present; the GitHub Desktop smoke/integration E2E checks passed.

@thomaspblock
thomaspblock merged commit fb73561 into main Aug 7, 2026
26 checks passed
@thomaspblock
thomaspblock deleted the projects-v2 branch August 7, 2026 17:23
atishpatel added a commit that referenced this pull request Aug 7, 2026
…-log-harness

* origin/main:
  feat(desktop): adding rich link previews to messages (#3818)
  fix(buzz-agent): Responses reasoning summary, Anthropic display:summarized, ACP v2 messageId (#5195)
  fix(desktop): retain distinct agent instances in autocomplete (#5202)
  fix(desktop): defer channel visibility change to Save (#5203)
  feat(desktop): Projects follow-ups — access restrictions, fast loading, activity feed polish (#5073)
  refactor(cli): replace probe/decider/detail split with single typed extractor (#5191)
  fix(desktop): drop unhandled rejection from throwing window.Notification (#5143)
  fix(desktop): fence localStorage SecurityError from killing the React tree (#5142)
  fix(desktop): make terminal output selectable (#4980)
  fix(desktop): use WEBKIT_DMABUF_RENDERER_FORCE_SHM for NVIDIA/AppImage (#3654) (#4505)
  Make public starter channels best effort (#5192)
  Mobile: add anchored reaction popover (#5025)
  feat(mobile): add bee pull-to-refresh (#5059)

Signed-off-by: Atish Patel <atish@squareup.com>
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