Skip to content

Spool/session sharing plan#1

Open
xinyao27 wants to merge 72 commits into
mainfrom
spool/session-sharing-plan
Open

Spool/session sharing plan#1
xinyao27 wants to merge 72 commits into
mainfrom
spool/session-sharing-plan

Conversation

@xinyao27

Copy link
Copy Markdown
Collaborator

Summary

Describe the user-visible change.

Screenshots

  • Add screenshots or a screen recording for any new or changed UI behavior.
  • If there is no visual change, say No visual change.

Testing

  • pnpm lint
  • pnpm typecheck
  • pnpm test
  • pnpm build
  • Added or updated high-quality tests that would catch regressions, or explained why tests were not needed

AI Review Report

Summarize the code review you ran with your AI coding agent. Include the main risks it checked, what it flagged, and what you changed or verified as a result.
Confirm that the review explicitly checked cross-platform compatibility for macOS, Linux, and Windows, including shortcuts, labels, paths, shell behavior, and any Electron-specific platform differences touched by this PR.

Security Audit

Provide a basic security audit summary from your AI coding agent. Call out any input handling, command execution, path handling, auth, secrets, dependency, or IPC risks that were reviewed, plus any follow-up needed.

Notes

Call out any platform-specific behavior, risks, or follow-up work.

@cursor

cursor Bot commented Jul 16, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

xinyao27 added 16 commits July 16, 2026 11:08
Migrate all 24 shadcn UI wrappers from radix-ui to @base-ui/react@1.6.0
and sweep every consumer call site. Style is new-york-v4 (no Base golden
counterpart), so wrappers were transformed in place keeping exact classes;
only primitives, part names, data-attribute/CSS-var hooks, and call-site
props changed. Remove the radix-ui dependency.

- Wrappers: accordion, collapsible, tabs, toggle, toggle-group, button
  (real Base Button primitive), badge/button-group (useRender), label
  (native <label>), separator, progress, scroll-area, checkbox, slider,
  tooltip, popover (+ anchor bridge), hover-card (preview-card), dialog,
  sheet, dropdown-menu/context-menu (Menu), select, command (Dialog only;
  cmdk untouched).
- Consumers: 512 asChild->render (ts-morph codemod) + 33 hand-migrated;
  VisuallyHidden->sr-only (5 files); ~220 semantic prop fixes across 134
  files (delay/openDelay, onOpenAutoFocus->initialFocus, type+value arrays,
  onSelect->onClick, position->alignItemWithTrigger, etc.).
- Menu/select item highlight focus:*->data-highlighted:* (Base UI items
  don't take DOM focus); PopoverAnchor bridged to Positioner anchor prop.

Behavior deltas flagged in .migration/: tabs manual activation, menu
checkbox/radio no close-on-select, a few dropped non-forwarded positioner
props, and ResourceUsageStatusSegment tooltip delays. tsc (node+cli+web),
build:web, and oxlint all pass.
Two Radix->Base UI gaps that type-check but break at runtime (found in QA):

- Menu labels crashed the menu on open. Base UI Menu.GroupLabel /
  ContextMenu.GroupLabel throw ("MenuGroupContext is missing") unless nested
  in a Group, but shadcn labels are free-floating section headers (as Radix
  allowed) — right-clicking the sidebar threw. Render DropdownMenuLabel /
  ContextMenuLabel as a plain styled <div> instead.

- Menu item onSelect silently stopped firing. Base UI Menu.Item activates via
  onClick, not onSelect (which now maps to the native DOM handler and
  type-checks), so the typecheck-driven sweep missed it. Convert 286 menu-item
  sites onSelect->onClick (DropdownMenuItem/ContextMenuItem/CheckboxItem/
  RadioItem + the Item alias), adding closeOnClick={false} where the handler
  used preventDefault (Radix keep-open). cmdk CommandItem.onSelect and custom
  components' own onSelect props are untouched.

Merge duplicate onClick where items had both onSelect and onClick.
tsc (node+cli+web) and build:web pass.
Per-component .migration/*.md (changes, left-alone, behavior deltas, manual QA)
plus project.md summarizing the whole-project migration, behavior deltas, and
the post-QA runtime fixes (menu GroupLabel crash, menu-item onSelect->onClick).
Drop the separate 4px workspace-column drag/spacer strip and its
WORKSPACE_COLUMN_DRAG_REGION_CLASS_NAME export; instead set the shared
WorkspacePaneFrame tab strip to h-[36px] so the middle column's top band
matches the 36px titlebar/sidebar header directly (no spacer element). The
strip keeps its data-terminal-focus-release-surface (window drag + terminal
focus release).
xinyao27 added 30 commits July 16, 2026 20:26
Session refs are catalog-revision bound, so carrying rows into a new revision exposed aliases the owner had already invalidated. Tailnet discovery also waited for every peer probe, letting offline nodes block healthy desktops.
Migrate all 24 shadcn UI wrappers from radix-ui to @base-ui/react@1.6.0
and sweep every consumer call site. Style is new-york-v4 (no Base golden
counterpart), so wrappers were transformed in place keeping exact classes;
only primitives, part names, data-attribute/CSS-var hooks, and call-site
props changed. Remove the radix-ui dependency.

- Wrappers: accordion, collapsible, tabs, toggle, toggle-group, button
  (real Base Button primitive), badge/button-group (useRender), label
  (native <label>), separator, progress, scroll-area, checkbox, slider,
  tooltip, popover (+ anchor bridge), hover-card (preview-card), dialog,
  sheet, dropdown-menu/context-menu (Menu), select, command (Dialog only;
  cmdk untouched).
- Consumers: 512 asChild->render (ts-morph codemod) + 33 hand-migrated;
  VisuallyHidden->sr-only (5 files); ~220 semantic prop fixes across 134
  files (delay/openDelay, onOpenAutoFocus->initialFocus, type+value arrays,
  onSelect->onClick, position->alignItemWithTrigger, etc.).
- Menu/select item highlight focus:*->data-highlighted:* (Base UI items
  don't take DOM focus); PopoverAnchor bridged to Positioner anchor prop.

Behavior deltas flagged in .migration/: tabs manual activation, menu
checkbox/radio no close-on-select, a few dropped non-forwarded positioner
props, and ResourceUsageStatusSegment tooltip delays. tsc (node+cli+web),
build:web, and oxlint all pass.
Two Radix->Base UI gaps that type-check but break at runtime (found in QA):

- Menu labels crashed the menu on open. Base UI Menu.GroupLabel /
  ContextMenu.GroupLabel throw ("MenuGroupContext is missing") unless nested
  in a Group, but shadcn labels are free-floating section headers (as Radix
  allowed) — right-clicking the sidebar threw. Render DropdownMenuLabel /
  ContextMenuLabel as a plain styled <div> instead.

- Menu item onSelect silently stopped firing. Base UI Menu.Item activates via
  onClick, not onSelect (which now maps to the native DOM handler and
  type-checks), so the typecheck-driven sweep missed it. Convert 286 menu-item
  sites onSelect->onClick (DropdownMenuItem/ContextMenuItem/CheckboxItem/
  RadioItem + the Item alias), adding closeOnClick={false} where the handler
  used preventDefault (Radix keep-open). cmdk CommandItem.onSelect and custom
  components' own onSelect props are untouched.

Merge duplicate onClick where items had both onSelect and onClick.
tsc (node+cli+web) and build:web pass.
Per-component .migration/*.md (changes, left-alone, behavior deltas, manual QA)
plus project.md summarizing the whole-project migration, behavior deltas, and
the post-QA runtime fixes (menu GroupLabel crash, menu-item onSelect->onClick).
Drop the separate 4px workspace-column drag/spacer strip and its
WORKSPACE_COLUMN_DRAG_REGION_CLASS_NAME export; instead set the shared
WorkspacePaneFrame tab strip to h-[36px] so the middle column's top band
matches the 36px titlebar/sidebar header directly (no spacer element). The
strip keeps its data-terminal-focus-release-surface (window drag + terminal
focus release).
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