Repository navigation
Workspace tab strip and a grouped, pinnable workspace sidebar with PR badges - #201
Merged
Merged
Conversation
This was referenced Oct 12, 2026
pondorasti
marked this pull request as draft
October 13, 2026 21:00
pondorasti
force-pushed
the
codevisor/papaya
branch
from
October 13, 2026 21:00
52f7dd4 to
0c08e7e
Compare
pondorasti
force-pushed
the
codevisor/papaya
branch
from
October 13, 2026 23:58
d52eb01 to
8e7c4f6
Compare
The macOS workspace tabs move back into a horizontal strip above the content, and the sidebar lists each workspace as a single row instead of nesting its tabs. - Tab strip: restores the Chrome-style strip removed in a0241c0 (edge stacking, scrolling, close stability, ⌘1–⌘9 hints). It shows once a workspace has more than one listed tab, keeps the live chat and terminal status icons, and a drag commits one synced move on release. - Sidebar: one row per workspace with a rolled-up status (error, waiting, working, unread, or an idle dot), its machine, hover archive, and a New Tab / Rename / Archive menu. Rows can be grouped by project or by machine; drags reorder within a group. - Keyboard: ⌥⌘←/→ and ⇧⌘[/] step tabs, ⌥⌘↑/↓ step workspaces. The directional Focus Split commands keep their menu items but lose their key equivalents. - Tab stepping and ⌘1–⌘9 skip tabs that hold only hidden agent terminals, matching what the strip shows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ects macOS's /usr/bin/openssl is LibreSSL, which signs `x509 -req` with SHA-1 unless told otherwise. The tunnel's TLS (rustls/webpki) rejects SHA-1 certificates, so every client's relay handshake failed (DecryptError) and the relay-only Dev Cloud machine showed "Can't reach Dev Cloud". The runner's own health check still passed, which hid it; Linux CI signs with SHA-256 by default. Every request and signature now passes -sha256, and the digest is recorded beside the certificate names so certificates an earlier run signed with SHA-1 are regenerated once, automatically. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Builds on the restored tab strip and one-row-per-workspace sidebar. Sidebar - Workspace rows are two lines (name over project · worktree · machine) with the chat's own leading icon: its status when it has one, else its model. - Group By None / Project / Machine, as collapsible project and machine rows; the list heading names the grouping. Drags reorder within a group. - Right-click to Pin: pinned workspaces get their own section at the top. - An Archived section at the bottom, collapsed by default and paged, restores a workspace with a click (after confirming) or from its menu. - The options menu nests Grouping and Show; Show toggles each row's Updated time and PR badge. PR badges - GET /v1/fs/git/pull-request asks the machine's own `gh` for the current branch's pull request (60s cache, shared in-flight lookups), with checks rolled up to passing / failing / pending / none. Null, never an error, when gh can't tell. - The macOS sidebar refreshes visible workspaces every few minutes and shows GitHub's Octicons (MIT, bundled) colored by state and checks; clicking opens the PR. - Row icons share one size and weight: 14pt, 1pt strokes. Keyboard - ⇧⌘[ / ⇧⌘] step sidebar items while the sidebar shows, and the workspace's tabs while it is hidden; ⌥⌘←/→ step the workspace's tabs; ⌥⌘↑/↓ step workspaces. Collapsed groups are skipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Settings ▸ Developer gains a Feature Flags section with a "Sidebar refresh" toggle, off by default and stored per device. Off, clients keep main's sidebar (restored as ClassicSidebarView), its shortcuts (⌥⌘ + arrows focus splits, ⇧⌘[ / ⇧⌘] walk its tab rows) and no tab strip. On, the refreshed sidebar, tab strip and shortcuts apply; switching is live. The refreshed sidebar's section headers use 11pt semibold measured against Mail's, and let the split view's native sidebar material show under the system theme. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…adings NavigationSplitView draws its sidebar column without the sidebar glass's vibrancy, so row text came out dark grey and headings lighter than Mail's. The sidebar content now renders in a nested hosting view inside the column, which gets the native vibrancy (measured against Mail: black row text, identical headings), replacing the black-at-27% heading color. Heading titles draw with an AppKit label, since SwiftUI rasterizes 11pt semibold with thinner strokes than AppKit; they are now pixel-identical to Mail's. Pinned, the list heading, and Archived all collapse the same way, with a hover-only 11pt semibold chevron at the trailing edge. The Archived count and the list heading's options button are gone; grouping and row details live in the list's context menu. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cons Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Synced machines carry the same logical project id, so a project on two machines is now one folder rather than one per machine. Its rows name their machine when there is more than one, and its New Chat starts on this Mac's default machine when the project lives there. The folder heading no longer names a machine, so the heading subtitle is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Group-by-project now uses the app's own linking model, as Settings › Projects and the composer's picker do: every machine's record of the same repository (its server-derived repo key) is one folder, whatever the per-machine project ids. Projects without a remote stay on their own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main removed agent terminal tabs (1ae2c95), so every tab is listed again: the tab strip, ⌘1–⌘9, and tab stepping use the workspace's tabs directly, and the tab icon no longer has an agent-owned variant. The classic sidebar files this branch had deleted and restored now carry main's versions, and its tab rows drop the hidden-terminal filtering as main's did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pondorasti
force-pushed
the
codevisor/papaya
branch
from
October 14, 2026 00:04
8e7c4f6 to
95d0812
Compare
pondorasti
marked this pull request as ready for review
October 14, 2026 00:04
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings back the horizontal workspace tab strip on macOS (removed in a0241c0) and rebuilds the sidebar around one row per workspace, which can be grouped, pinned and archived, and shows each workspace's pull request.
The refreshed sidebar is behind a Sidebar refresh feature flag (Settings ▸ Developer ▸ Feature Flags), off by default; with it off, the classic sidebar from
mainis unchanged.The main commits:
Smaller follow-ups after these: the Properties menu, row and group context menus, and project folders that span machines.
Tab strip
PaneTab,PaneTabStrip,WorkspaceTabBar), shown once a workspace has more than one listed tab.moveTabon release.Sidebar
ProjectGroup, the same model as Settings › Projects and the composer's picker. Each machine's record of the same git remote is one folder; projects without a remote stay on their own. Rows in a folder name their machine when there is more than one, and the folder's New Chat starts on the default machine when the project lives there.NavigationWorkspaces.archived). Clicking a row asks before restoring; the hover button and the menu restore directly.Native sidebar rendering
NavigationSplitViewdraws its sidebar column without the sidebar glass's vibrancy:.primarytext came out dark grey (0.19) instead of black, and headings lighter than Mail's.NSHostingViewinside the column (SidebarVibrancyHost), which gets the native vibrancy. It replaces the earlier black-at-27% heading color.NSTextField: SwiftUI rasterizes 11pt semibold about 10% lighter than AppKit, even from the sameNSFont.PR badges
GET /v1/fs/git/pull-request?path=…runs the machine's owngh pr viewfor the current branch, with prompts disabled and a 15s timeout.passing/failing/pending/none.ghcall.null(never an error) on a detached HEAD, a non-GitHub remote, or whenghis missing or signed out.Resources/Octicons-LICENSE.txt): green open, red failing checks, orange running, grey draft, purple merged, red closed. Clicking opens the PR.checks.Keyboard
Dev Cloud fix (
scripts/dev-net.mjs)macOS's
/usr/bin/opensslis LibreSSL, which signs with SHA-1 by default. The tunnel's rustls rejects SHA-1 certificates, so every relay handshake failed (DecryptError) and the relay-only Dev Cloud showed "Can't reach Dev Cloud". Certificates are now signed with-sha256, and stale SHA-1 ones are regenerated automatically. Linux CI was never affected.Testing
bun run checkpasses on this branch rebased ontomain(2b51f6b): JS format, lint, ratchet, boundaries, typecheck, coverage (100% gates), dev and release script tests, Swift format and lint, Swift tests, macOS transcript tests, and the iOS build.git-pull-request.test.ts(10, fakegh, including the environment fallback and malformed answers), thegit-reviewroute (3, including the shared lookup and the 60s cache expiry),ListReorderTests(group moves), anddev-net.test.mjs(SHA-256 certificates).main.The PR badge fixtures (#421–#424) and their
test/pr-badge-*branches are closed and deleted.🤖 Generated with Claude Code