Skip to content

feat(projects): support multiple repositories - #4671

Open
thomaspblock wants to merge 28 commits into
mainfrom
feat/multi-repository-projects
Open

feat(projects): support multiple repositories#4671
thomaspblock wants to merge 28 commits into
mainfrom
feat/multi-repository-projects

Conversation

@thomaspblock

Copy link
Copy Markdown
Contributor

Summary

  • adopt the finalized NIP-MP project model so one project can enumerate and switch between multiple NIP-34 repositories
  • add project and repository navigation, activity summaries, existing-repository attachment, and repository access-channel management
  • preserve privacy-safe activation provenance for agent-authored patches, pull requests, issues, and associated commits

Test plan

  • Run desktop typecheck and unit tests
  • Run focused NIP-MP, repository access, and provenance tests
  • Run Rust formatting and desktop lint checks
  • Run the complete pre-push suite after merging current main
  • Manually verify project creation, repository attachment, switching, and access repair on staging
  • Manually verify public-channel and private-agent origin labels on newly created Git activity

Add an owner-authored project event that groups NIP-34 repositories while preserving standalone repositories as legacy single-repository projects.
Load grouped project announcements throughout the desktop experience and keep Git operations scoped to the selected repository. Preserve legacy single-repository projects while adding shareable repository selection and end-to-end coverage.
Publish the project grouping alongside its initial NIP-34 repository and make partial-write retries idempotent. Add protocol validation and end-to-end coverage for accepted, rejected, and lost-acknowledgement paths.
Add repository selection and creation within projects, expose repository-level activity, and preserve usability when connected relays lack project announcement support.
…-projects

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Resolve Inbox work against its owning repository so project navigation and canonical PR or issue actions remain correctly scoped after the model merge.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Preserve repository-aware project routing while incorporating current main behavior and test selectors.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep pull request attribution compact while distinguishing people from agents without obscuring repository context.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Distinguish Buzz-hosted repositories from linked GitHub repositories, provide a safe local clone flow for public GitHub remotes, and replace misleading empty states with actionable availability feedback.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Pass the parent project through repository detail views and normalize repository-only filters when returning to project lists.

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

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep the Node configuration free of an obsolete TypeScript diagnostic now that process is typed.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Point the shared Xcode scheme at the Buzz application product name.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Reuse the compact avatar and identity-only tooltip across issue and pull-request rows so work-item authors render consistently.

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

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Bring issue conversations to pull-request timeline parity while keeping rapid comments ordered safely.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Preserve both project kind names while integrating the latest CLI and git transport changes.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Use the finalized project contract and exhaustive secure folding so multi-repository projects remain complete without allowing grouping metadata to hide repositories.

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

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Let project owners group repositories that already exist while retaining the current create-and-add flow and NIP-MP ownership boundaries.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Bind project repositories to explicit access channels, reuse project data efficiently, and retain privacy-safe activation context on agent-authored Git activity.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Centralize the paired session and Git attribution environment updates so the managed-agent runtime stays within its enforced file-size ceiling.

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

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Keep the shared provider payload contract synchronized with the privacy-safe Git attribution environment.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Update project smoke assertions for provenance, repository hosts, and multi-repository layouts while keeping repository cards visually consistent.

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock
thomaspblock marked this pull request as ready for review August 4, 2026 08:21
@thomaspblock
thomaspblock requested a review from a team as a code owner August 4, 2026 08:22
@thomaspblock
thomaspblock enabled auto-merge (squash) August 4, 2026 10:27
thomaspblock added a commit that referenced this pull request Aug 4, 2026
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Screenshots of the multi-repository project flows (captured from this branch against the E2E mock relay).

One project, multiple repositories

The Projects list shows the buzz project grouping 2 repositories, alongside standalone repositories that remain legacy single-repository projects.

01-projects-list

Repository picker inside a project

The project header carries a repository picker listing every repository in the project. The active repository drives the Files/Commits/Issues/PR tabs.

02-repository-picker

Switching the active repository

Selecting relay-tools switches all project content to that repository — the selection is URL-backed (repositoryId=…), so it deep-links and survives reloads.

03-switched-repository

Adding repositories to a project

The + button next to the picker offers both flows: create a new repository, or attach an existing standalone one.

04-add-repository-menu

Create with an access channel

New repositories are bound to an access channel at creation time (members of the channel get Git access), fixing the earlier "repository not initialized" failure mode.

05-create-repository-dialog

Attach an existing repository

Standalone repositories (here design-system) can be attached to the project — the previous mobile-app creation toast is still visible bottom-right.

06-attach-existing-dialog

Four repositories under one project

After creating mobile-app and attaching design-system, the picker lists all four repositories under the buzz project.

07-four-repositories

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.

1 participant