Skip to content

Fix sidebar grouping for paired remote projects - #16315

Closed
LuisUrrutia wants to merge 11 commits into
stablyai:mainfrom
LuisUrrutia:fix/remote-project-grouping
Closed

LuisUrrutia wants to merge 11 commits into
stablyai:mainfrom
LuisUrrutia:fix/remote-project-grouping

Conversation

@LuisUrrutia

@LuisUrrutia LuisUrrutia commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor

ELI5

Grouping a project owned by a paired Orca server used to depend on the global Active Server setting. If Active Server was set to Local, creating or moving that remote project into a group could appear to work while leaving it ungrouped.

Group actions now follow the selected project's owner. The menu offers only compatible groups, names the catalog when more than one is visible, and reports an error when the owner cannot confirm the action.

What Changed

  • Route group creation, moves, removals, and drag commits through the selected project's execution host, including cases where different hosts reuse the same project ID.
  • Limit each project menu to groups from its catalog and label ambiguous menus with Local or the paired server's display name. Single-catalog menus keep the shorter Move to group label.
  • Keep local and direct SSH projects in the client-owned catalog while isolating paired runtime catalogs. Delete cascades clear every client-catalog member without touching a colliding runtime group.
  • Fence confirmed creates, renames, and deletes against older catalog responses. Creation keeps a refreshed row for the same physical host, while updates replace stale or duplicate rows within their owner catalog.
  • Show actionable feedback when the owning host does not confirm a create, move, removal, or drag-and-drop mutation.

Why

The sidebar can show projects and groups from several Orca runtimes at once. Before this change, contextual group creation followed Active Server while moves followed the project's owner. A group ID created in the client catalog could then be sent to a paired server that had no such group.

The selected project already identifies the runtime that owns the mutation, so contextual actions now use that owner. Active Server remains the fallback for operations without project context.

Direct SSH projects execute on another machine but store their groups in the client catalog. Treating the physical SSH host as the catalog owner broke compatible moves and delete cleanup. The implementation now follows storage ownership for routing while preserving physical-host identity when deduplicating concurrent create responses.

Linked Issue

Related to #10755

Visual Proof

Before: scripts and tooling stayed ungrouped after being moved into REMOTE GROUP. The remote monorepo menu also offered the client-owned LuisUrrutia group and the remote-owned REMOTE GROUP without identifying their catalogs.

Before: a remote project menu offers local and remote groups without identifying their catalogs

After (Local catalog): the local skills project shows Move to group: Local and only offers the local LuisUrrutia group.

After: a local project menu says Move to group: Local and offers only the local group

After (Work catalog): the paired tooling project shows Move to group: Work and only offers TEST, a group owned by that server.

After: a paired remote project menu says Move to group: Work and offers only that remote's group

When the sidebar contains projects from one catalog, the label remains Move to group.

Testing

  • I manually tested these changes locally

  • Automated tests added/updated, or explained why not below

  • git range-diff 1d1b73c40850a0e362186e0f0ec593cf613caa84..6c10780bda9fecc557efd798094512d79e6c4f40 upstream/main..HEAD: 9 commits remained patch-equivalent. Commits 1 and 11 retained main's create/refresh deduplication while adding the PR's owner routing and catalog fences.

  • pnpm test with the PR's focused files plus main's project-group creation race suite: 18 files and 148 tests passed.

  • pnpm tc: passed all TypeScript projects.

  • pnpm run check:code-quality:changed: 0 new standard, type-aware, or React Doctor findings across 42 analyzed files.

  • pnpm run build:desktop: passed typecheck, Linux/macOS/Windows relay builds for x64 and arm64, WSL relays, CLI, Electron, skill verification, and the web projection. The optional /usr/local/bin/orca-dev symlink reported a non-fatal permission warning.

  • git diff --check upstream/main...HEAD: passed.

  • macOS Electron CDP before this rebase verified the Local and Work labels, catalog-filtered destinations, and unconfirmed-move toast. The rebase changed only the create/refresh race integration, which the focused tests cover. Native Linux and Windows runtime validation is left to PR CI.

AI Disclosure

OpenAI Codex (GPT-5.6 Sol) diagnosed, implemented, reviewed, rebased, and tested the change.

Review

  • Cross-platform: the branch changes renderer and store TypeScript without adding platform-specific paths, shortcuts, shells, native modules, or child processes. build:desktop compiled every Linux, macOS, and Windows relay target.
  • Remote and SSH: paired runtime actions follow the project owner. Local and direct SSH projects share the client-owned catalog, while paired runtime catalogs remain isolated. No RPC parameter, stream opcode, published payload, or other remote wire contract changed.
  • Failure and concurrency: unconfirmed mutations return feedback, and host-scoped fences prevent older catalog reads from overwriting confirmed create, rename, or delete results. Creation retains main's rule that same-ID Local and direct-SSH rows remain distinct.
  • Performance: catalog filtering, fences, and upserts operate on existing in-memory arrays. Visible catalog detection is memoized, and the branch adds no polling or network calls.
  • Security and UI: the branch adds no credential, privilege, input, or executable boundary. It reuses the existing menu, toast, localization, and design-system primitives.

Agent skill upstream boundary

  • Not applicable, or this change follows docs/reference/agent-skill-sharing-upstream-boundary.md and copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

Project groups remain catalog-owned. The branch does not introduce groups that span the client catalog and paired runtime hosts, and the catalog suffix appears only when multiple catalogs are visible.

Checklist

  • This PR is small and focused
  • I explained what changed and why (including ELI5)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

@LuisUrrutia
LuisUrrutia marked this pull request as ready for review August 24, 2026 23:36
@coderabbitai

coderabbitai Bot commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Project-group creation, movement, removal, and ordering now route through the repository’s execution host. Project groups are filtered by repository ownership before they appear as move targets. Drag sessions retain repository, host, and group identifiers. Store mutations validate repository and destination ownership before selecting local or runtime execution targets. Tests cover runtime routing, direct-SSH compatibility, duplicate repository IDs, worktree repository resolution, and sidebar drag behavior.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 18.42% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 38 functions across 40 files. (1 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise, specific, and directly describes the primary change: fixing sidebar grouping for paired remote projects.
Description check ✅ Passed The description follows the required template and clearly explains the change, motivation, testing, visual behavior, compatibility considerations, and AI usage. It includes a linked issue, although it…
Full details: Docstring Coverage

Explanation

Docstring coverage is 18.42% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 38 functions across 40 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 53b339bf-603c-4776-b703-51bac6b238fd

📥 Commits

Reviewing files that changed from the base of the PR and between 4f525f1 and 29ac59c55834e5a5203b3ed74986b92368eb66d6.

📒 Files selected for processing (10)
  • src/renderer/src/components/sidebar/WorktreeContextMenu.tsx
  • src/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.ts
  • src/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs-owner-host.test.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs.ts
  • src/renderer/src/store/slices/project-group-owner-routing.test.ts
  • src/renderer/src/store/slices/project-group-owner-routing.ts
  • src/renderer/src/store/slices/repos-remote-project-groups.test.ts
  • src/renderer/src/store/slices/repos.test.ts
  • src/renderer/src/store/slices/repos.ts
💤 Files with no reviewable changes (1)
  • src/renderer/src/store/slices/repos.test.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.

@LuisUrrutia
LuisUrrutia force-pushed the fix/remote-project-grouping branch from 29ac59c to 208708b Compare August 24, 2026 23:51

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/renderer/src/components/sidebar/project-header-drag-contract.ts (1)

19-30: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Preserve host identity for whole-repository reorders.

When usesProjectGroupOrdering is false, onCommitRepoOrder receives only string[]. Duplicate repoId values cannot identify the dragged host row. A drag can reorder the wrong host row.

Pass a host-qualified repository identity, or the dragged source index, through whole-repository ordering. Add a duplicate-ID regression test with no project groups.

Also applies to: 39-42


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 263dde7d-ea02-436e-ad4a-94106050449c

📥 Commits

Reviewing files that changed from the base of the PR and between 29ac59c55834e5a5203b3ed74986b92368eb66d6 and 9ba577abf711dc32597d8bd4fdb234806b2ab288.

📒 Files selected for processing (8)
  • src/renderer/src/components/sidebar/project-header-drag-commit.test.ts
  • src/renderer/src/components/sidebar/project-header-drag-commit.ts
  • src/renderer/src/components/sidebar/project-header-drag-contract.ts
  • src/renderer/src/components/sidebar/project-header-drag-start.test.ts
  • src/renderer/src/components/sidebar/project-header-drag-start.ts
  • src/renderer/src/components/sidebar/project-header-drag.ts
  • src/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.ts
  • src/renderer/src/components/sidebar/worktree-list/rows/SectionHeader.tsx

Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review.

@LuisUrrutia
LuisUrrutia force-pushed the fix/remote-project-grouping branch 2 times, most recently from 8001d7b to 6da43ba Compare August 25, 2026 08:18
@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

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

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: cd737d3b-7ae3-4852-a3af-7061b2b3462b

📥 Commits

Reviewing files that changed from the base of the PR and between 8217e68 and 6da43ba1ede3bbfd8272bc279db4e290c044e816.

📒 Files selected for processing (19)
  • src/renderer/src/components/sidebar/project-header-drag-commit.test.ts
  • src/renderer/src/components/sidebar/project-header-drag-commit.ts
  • src/renderer/src/components/sidebar/project-header-drag-contract.ts
  • src/renderer/src/components/sidebar/project-header-drag-start.test.ts
  • src/renderer/src/components/sidebar/project-header-drag-start.ts
  • src/renderer/src/components/sidebar/project-header-drag.ts
  • src/renderer/src/components/sidebar/use-worktree-context-menu-commands.ts
  • src/renderer/src/components/sidebar/use-worktree-context-menu-model.tsx
  • src/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.ts
  • src/renderer/src/components/sidebar/worktree-list/rows/SectionHeader.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs-owner-host.test.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs.ts
  • src/renderer/src/store/project-groups/project-group-mutations.ts
  • src/renderer/src/store/repos/repo-state.ts
  • src/renderer/src/store/slices/project-group-owner-routing.test.ts
  • src/renderer/src/store/slices/project-group-owner-routing.ts
  • src/renderer/src/store/slices/repos-remote-project-groups.test.ts
  • src/renderer/src/store/slices/repos.test.ts
💤 Files with no reviewable changes (1)
  • src/renderer/src/store/slices/repos.test.ts
🚧 Files skipped from review as they are similar to previous changes (14)
  • src/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.ts
  • src/renderer/src/store/slices/repos-remote-project-groups.test.ts
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs.ts
  • src/renderer/src/components/sidebar/project-header-drag-commit.ts
  • src/renderer/src/store/slices/project-group-owner-routing.ts
  • src/renderer/src/components/sidebar/project-header-drag-contract.ts
  • src/renderer/src/components/sidebar/project-header-drag-start.ts
  • src/renderer/src/store/slices/project-group-owner-routing.test.ts
  • src/renderer/src/components/sidebar/project-header-drag-start.test.ts
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs-owner-host.test.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/SectionHeader.tsx
  • src/renderer/src/components/sidebar/project-header-drag-commit.test.ts
  • src/renderer/src/components/sidebar/project-header-drag.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.

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

Actionable comments posted: 3


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 49069027-5c84-467a-854f-aa028a13c362

📥 Commits

Reviewing files that changed from the base of the PR and between 704c1883eee757d8b86c801e4842642fb8d8e515 and dbc06b457361ad988e881d1a1c91806e994c82c3.

📒 Files selected for processing (23)
  • src/renderer/src/components/sidebar/WorktreeContextMenu.tsx
  • src/renderer/src/components/sidebar/WorktreeContextMenuView.tsx
  • src/renderer/src/components/sidebar/project-group-menu-actions.ts
  • src/renderer/src/components/sidebar/project-group-menu-label.ts
  • src/renderer/src/components/sidebar/use-worktree-card-foundation.ts
  • src/renderer/src/components/sidebar/use-worktree-context-menu-commands.ts
  • src/renderer/src/components/sidebar/use-worktree-context-menu-model.tsx
  • src/renderer/src/components/sidebar/worktree-card-surface.tsx
  • src/renderer/src/components/sidebar/worktree-context-menu-props.ts
  • src/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.ts
  • src/renderer/src/components/sidebar/worktree-list/grouping/build-rows.ts
  • src/renderer/src/components/sidebar/worktree-list/grouping/group-sections.ts
  • src/renderer/src/components/sidebar/worktree-list/grouping/row-types.ts
  • src/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.ts
  • src/renderer/src/components/sidebar/worktree-list/rows/SectionHeader.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.test.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs-owner-host.test.tsx
  • src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/store/slices/project-group-owner-routing.test.ts
  • src/renderer/src/store/slices/project-group-owner-routing.ts
  • src/renderer/src/store/slices/repos-remote-project-groups.test.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.

Comment thread src/renderer/src/i18n/locales/en.json Resolved
@LuisUrrutia

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/renderer/src/components/sidebar/worktree-list/listing/host-filtering.ts (1)

26-39: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use the shared helper in every repository filter.

src/renderer/src/components/sidebar/use-worktree-card-foundation.ts still contains the same implementation. Import this helper there and remove the duplicate to prevent host-resolution behavior from diverging.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 540a7aaf-9d02-4864-bbcb-d5af0bb02422

📥 Commits

Reviewing files that changed from the base of the PR and between dbc06b457361ad988e881d1a1c91806e994c82c3 and 7aa6db9c404568317706fa228bef4fd52e74194b.

📒 Files selected for processing (10)
  • src/renderer/src/components/sidebar/WorktreeList.group-headers.test.ts
  • src/renderer/src/components/sidebar/project-group-menu-label.test.ts
  • src/renderer/src/components/sidebar/project-group-menu-label.ts
  • src/renderer/src/components/sidebar/use-worktree-card-foundation-project-group-label.test.tsx
  • src/renderer/src/components/sidebar/use-worktree-card-foundation.ts
  • src/renderer/src/components/sidebar/worktree-list/listing/host-filtering.ts
  • src/renderer/src/components/sidebar/worktree-list/listing/use-host-visible-scope.ts
  • src/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.ts
  • src/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.test.tsx
  • src/renderer/src/i18n/locales/en.json

Included review availability: Your plan provides up to 10 included reviews per hour; 6 remain after this review.

@LuisUrrutia
LuisUrrutia force-pushed the fix/remote-project-grouping branch 2 times, most recently from be944c3 to d7a9482 Compare August 29, 2026 21:35
@greptile-apps

greptile-apps Bot commented Aug 29, 2026 •

Copy link
Copy Markdown

Greptile Summary

The PR makes sidebar project-group operations catalog-aware so local, direct-SSH, and paired-runtime projects are routed and displayed according to their owning catalog.

  • Routes create, move, remove, rename, delete, and drag operations through host-qualified ownership.
  • Filters group menus by catalog and adds host labels when multiple catalogs are visible.
  • Adds catalog mutation fencing, owner-scoped upserts, collision handling, failure feedback, and extensive tests.

Confidence Score: 5/5

The PR appears safe to merge because no blocking failure remains within the eligible follow-up review scope.

No blocking failure remains.

Important Files Changed

Filename Overview
src/renderer/src/store/project-groups/project-group-mutations.ts Adds host-qualified mutation routing, catalog validation, mutation fences, owner-scoped upserts, and catalog-aware delete cascades.
src/renderer/src/store/slices/project-group-owner-routing.ts Centralizes the distinction between client-owned local/SSH catalogs and isolated paired-runtime catalogs.
src/renderer/src/store/selectors.ts Resolves repository rows for worktrees using host-qualified identity to handle cross-host ID collisions.
src/renderer/src/components/sidebar/project-group-menu-actions.ts Routes contextual group actions through the selected project owner and reports unconfirmed mutations.
src/renderer/src/components/sidebar/project-header-drag-commit.ts Preserves the dragged project's host and group identity through drag completion.
src/renderer/src/components/sidebar/worktree-list/listing/project-group-catalog-visibility.ts Detects whether multiple visible catalogs require host-qualified group-menu labels.
src/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.tsx Restricts project-header destinations to compatible groups and renders catalog-aware action labels.

Sequence Diagram

sequenceDiagram
  participant U as Sidebar user
  participant UI as Project group UI
  participant S as Renderer store
  participant H as Owning catalog host
  U->>UI: Create, move, remove, or drag project
  UI->>UI: Resolve project and catalog owner
  UI->>S: Mutation with owner host ID
  S->>H: Local API or paired-runtime RPC
  H-->>S: Confirmed group or project state
  S->>S: Fence older refreshes and owner-scope update
  S-->>UI: Render catalog-filtered groups
Loading

Reviews (2): Last reviewed commit: "fix(project-groups): keep catalog mutati..." | Re-trigger Greptile

@LuisUrrutia
LuisUrrutia force-pushed the fix/remote-project-grouping branch 3 times, most recently from 89a6ece to 5113604 Compare September 5, 2026 11:25
@LuisUrrutia
LuisUrrutia force-pushed the fix/remote-project-grouping branch from 5113604 to 6c10780 Compare September 7, 2026 19:49
Manual group creation followed the focused host while moves followed the
repository owner. The all-host sidebar could therefore offer a client group
that a paired runtime could not resolve.

Route project-created groups and moves through the repository owner, and hide
group destinations that belong to another catalog.
Project header drags re-resolved a bare repo ID through a map that can retain only one host. Duplicate local/runtime IDs could therefore persist order through the wrong catalog.

Capture the source group and host when the drag starts, then carry both to the project-group mutation.
@mrchess

mrchess commented Oct 13, 2026

Copy link
Copy Markdown

@LuisUrrutia is this still in progress? It still reproduces on v1.4.224, after #27288 landed. With a local work group and a paired host that has its own work group, both "Move to group" menus list work twice, and picking the paired copy leaves the project with projectGroupId: null (the same silent null as #13699).

#27288 rewrote most of the files this PR touches, so it probably needs a rebase. I have a much smaller change on current main that covers only the menus: each menu lists the groups held by the host the move goes to, and the workspace menu looks up its project on the worktree's own host. It has tests and before/after screenshots. I'm happy to open it as a stopgap that this PR can replace, or leave it if you plan to rebase. Which would you prefer?

Before After
Project ⋯ menu Project menu before: Move to group lists work twice Project menu after: Move to group lists work once
Workspace right-click menu Workspace menu before: Move to group lists work twice Workspace menu after: Move to group lists work once

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