Skip to content

feat: rich workspace switching, filterable pickers, and grouped repo list - #148

Closed
hewigovens wants to merge 1 commit into
mainfrom
h/workspace-picker
Closed

feat: rich workspace switching, filterable pickers, and grouped repo list#148
hewigovens wants to merge 1 commit into
mainfrom
h/workspace-picker

Conversation

@hewigovens

@hewigovens hewigovens commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Stacked on #146. Closes the picker/navigator direction discussed in #145.

Core

  • workspace_list now reads workspace names and each workspace's committed @ from the in-memory view — description, recency, conflicts, and changed-file counts with zero snapshots of sibling checkouts — replacing the N+1 jj subprocess pattern (paths resolved once per name and cached, purged when a workspace disappears).
  • New workspace_primary_root resolves any checkout to its primary repo via the .jj/repo marker; exposed through UniFFI for both shells.

SwiftUI shell

  • One repo / workspace toolbar control replaces the repo title menu and the status-bar workspace picker: a shared PickerPanel (anchored non-activating panel, instant open, filter field, palette-style keyboard nav) with rich workspace rows, repositories, and global actions. The bookmark picker adopts the same component with Tracked/Local Only sections and a New Bookmark button.
  • Repository list groups recent jj-workspace entries under their primary repo's card (default + siblings as rows); pinning a workspace keeps it top-level.
  • Forget & Delete from Disk now confirms with a sheet, closes the workspace's window before deleting, and any window whose workspace vanished underneath it (in-app or externally) closes quietly instead of alerting.

Tests

  • Rust: workspace status fields, no-snapshot invariant, primary-root resolution.
  • Swift: repo-list grouping (nesting, orphans, pinned promotion).

GPUI parity gaps (rich dropdown, grouped list) are tracked in agents/shell-parity.md.

@hewigovens
hewigovens marked this pull request as ready for review August 18, 2026 08:36

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fbfe125aea

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shell/mac/Sources/JayJay/Repo/Bookmarks/BookmarkPicker.swift
Comment thread shell/mac/Sources/JayJay/Repo/Bookmarks/BookmarkPicker.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b99f4101b5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shell/mac/Sources/JayJay/Repo/ContentView/RepoContentView+Sheets.swift Outdated
Comment thread crates/jayjay-core/src/repo/workspace.rs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 30e892105b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shell/mac/Sources/JayJay/Repo/ViewModel/Core/RepoViewModel+AsyncSupport.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3c45357a46

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shell/mac/Sources/JayJay/Onboarding/WelcomeView.swift

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2016567db6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/jayjay-core/src/repo/workspace.rs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6a2b536f80

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/jayjay-core/src/repo/workspace.rs Outdated
Base automatically changed from h/workspace-chips to main August 18, 2026 11:25

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 94fe40a726

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shell/mac/Sources/JayJay/Repo/ContentView/RepoContentView+Sheets.swift Outdated
Comment thread shell/mac/Sources/JayJay/Onboarding/RepoListGrouping.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5f701d1bb4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shell/mac/Sources/JayJay/Repo/ContentView/RepoContentView+Sheets.swift Outdated
Comment thread shell/mac/Sources/JayJay/Repo/ViewModel/Core/RepoViewModel+AsyncSupport.swift Outdated
Comment thread shell/mac/Sources/JayJay/Onboarding/WelcomeView.swift Outdated
Comment thread shell/mac/Sources/JayJay/Repo/RepoTitlePicker.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4a14f43528

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/jayjay-core/src/repo/workspace.rs Outdated
Comment thread shell/mac/Sources/JayJay/Repo/ViewModel/Core/RepoViewModel.swift Outdated
Comment thread shell/mac/Sources/JayJay/Repo/ContentView/RepoContentView+Toolbar.swift Outdated
Comment thread crates/jayjay-core/src/repo/workspace.rs Outdated
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c517b683a4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shell/mac/Sources/JayJay/Repo/ViewModel/Core/RepoViewModel+Refresh.swift Outdated
Comment thread shell/mac/Sources/JayJay/App/Window/RepoWindowManager.swift

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 16ae6a3d1d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/jayjay-core/src/repo/workspace_removal.rs Outdated
Comment thread shell/mac/Sources/JayJay/Shared/Picker/PickerPanel.swift

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 484de397e8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/jayjay-core/tests/workspaces.rs

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review


P2 Badge Quiesce repo work before closing vanished workspaces

When another process forgets this workspace while a mutation or raw-jj task is in flight, this path closes the window without calling prepareForRemoval(). Tasks registered by runRepoTask/awaitRepoTask retain the view model and repository after the view disappears, so they can finish a stale mutation or start its completion refresh against the workspace that was just forgotten; route this close through an awaitable shutdown barrier before releasing the window. agents/code-review.mdL19-L22

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0892a0538c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/jayjay-core/src/repo/workspace.rs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 83fbb8bfcd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/jayjay-core/src/repo/workspace.rs Outdated
@hewigovens
hewigovens force-pushed the h/workspace-picker branch 2 times, most recently from f453208 to 9cc23e4 Compare August 20, 2026 10:58

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9cc23e44c7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +75 to +78
Err(CoreError::Internal {
message:
"workspace list kept changing while roots were resolving; refresh and try again"
.to_owned(),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve workspace rows when listing never stabilizes

When external jj operations advance the head during all three root-resolution attempts, this new error reaches the DAG-rebase refresh path, where RepoViewModel+Rebase.swift:43 converts it to [] and line 71 publishes that empty list. The workspace picker can therefore remain empty after an otherwise successful rebase because watcher refreshes arriving during the rebase are dropped. Fresh evidence beyond the earlier refresh-path finding is that this separate rebase result path still discards the error; make its workspace result optional and retain the previous rows, as the main refresh path now does. agents/code-review.mdL19-L22

Useful? React with 👍 / 👎.

…list

Enrich core workspace listing with per-workspace status read from the in-memory view, cached operation-scoped path resolution, and primary repository discovery without snapshotting sibling working copies.

Replace the repository title menu, status-bar workspace picker, and bookmark picker with filterable anchored panels that provide rich workspace rows, grouped bookmark sections, repository switching, and creation actions.

Group recent workspace checkouts beneath their primary repository and keep unresolved entries available while lookups complete.

Harden workspace forget and deletion by binding actions to the listed operation and root, quiescing every matching window and repository task, atomically quarantining delete targets, and publishing guarded forget operations safely across the SwiftUI and GPUI shells.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 85b311c8a5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
if let Some(op_id) = cache_op_id
&& let Some(path) = self.workspace_paths.read().unwrap().path(op_id, name)
&& Path::new(path).is_dir()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Revalidate cached workspace ownership before reuse

When a cached checkout is renamed or removed and an unrelated directory is created at the same path without publishing a jj operation, this is_dir() check accepts the replacement and reports is_path_resolved = true; the workspace picker can then open an unrelated repository or directory as the registered workspace. Fresh evidence beyond the earlier operation-generation cache issue is the filesystem-only replacement covered by workspace_removal_guard_rejects_a_replaced_checkout_directory, which does not change the operation ID. Cache and verify the checkout identity or confirm that its .jj metadata still carries the expected workspace name and repository before reusing the path. agents/code-review.mdL33-L36

Useful? React with 👍 / 👎.

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