feat(sidebar): project workspace rows into pane splits

Closed
TE
4d ago
+225-8

Problem

Workspace rows in the left sidebar currently export only the reorder/move payload. Pane drops therefore cannot project the workspace's surfaces, even though Cloud rows already use the live SurfaceResourceGroup capability.

Change

Workspace rows now export an opaque live surface-resource capability alongside the existing sidebar reorder payload. The captured group follows sidebar panel order and preserves exact remote placement identity. Pane destinations resolve it through the existing tab-transfer registry and SurfaceCatalog.projectGroup path; sidebar drops continue to consume the reorder payload.

Validation

  • python3 scripts/verify-local.py --repo . --affected origin/main passed app-source wiring, test wiring, and feature-flag checks.
  • Added/updated behavioral coverage in cmuxTests/SidebarWorkspaceDragDelegateTests.swift.
  • git diff --check passes.
  • Native Swift/XCTest execution was unavailable in the Linux cloud container.

Changelog

Added: workspace sidebar rows can be projected into pane splits while retaining normal sidebar reorder behavior.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Makes workspace rows in the left sidebar droppable into pane splits by exporting a live SurfaceResourceGroup alongside the existing reorder payload. Pane destinations resolve the group through the tab-transfer registry; sidebar drops keep consuming the reorder payload.

  • The exported group captures the workspace's panel order and exact remote placement identity, rather than exporting the whole remote workspace the row happens to mirror.
  • Workspace-level groups are marked with representsWorkspace, which gates supportsNonDestructivePaneProjection so local workspace rows stay reorder-only and pane drops can't move local panes out of their source workspace.
  • Sidebar reorder pasteboard types are excluded from pane-transfer routing so reorder drags aren't misread as projections.

Summary by CodeRabbit

  • New Features
    • Dragging eligible remote workspaces now supports transferring their panes while preserving their workspace and tab associations.
  • Bug Fixes
    • Sidebar tab-reorder drags are no longer mistaken for pane transfers.
    • Workspace drag registrations are cleaned up when the drag source is released.