Repository navigation
refactor(sidebar): group worktree-list files by domain - #14486
Conversation
|
Too many files changed for review (148 files, 100 file limit). Bypass the limit by tagging |
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe pull request reorganizes the sidebar worktree-list code into grouping, listing, rows, viewport, navigation, and drag modules. It adds grouping and row models, project-group handling, host-label utilities, virtual-row helpers, scroll detectors, reveal helpers, DOM utilities, and drop-indicator rendering. Existing consumers, tests, comments, max-line baselines, reliability-gate commands, and theme tokens now reference the reorganized modules and behavior. 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/renderer/src/components/sidebar/worktree-list/rows/indentation.ts (1)
2-25: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueShorten the layout rationale comments.
Keep only the layout invariant that the code does not show. Remove step-by-step explanation and prefer one line per comment.
As per coding guidelines, “Comments must be concise, non-obvious, and brief—prefer one line.”
Also applies to: 58-59, 79-80, 86-87, 100-101, 116-117, 142-143, 198-199, 214-215
Source: Coding guidelines
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 1301c67c-07f0-4823-9fd7-1d675b7d09ce
📒 Files selected for processing (119)
config/max-lines-baseline.txtconfig/reliability-gates.jsoncmobile/src/worktree/workspace-pr-status-groups.tssrc/renderer/src/components/WorktreeJumpPalette.tsxsrc/renderer/src/components/cmd-j/palette-filter-options.tssrc/renderer/src/components/cmd-j/palette-project-results.tssrc/renderer/src/components/hover-reveal-touch-action-visibility.test.tssrc/renderer/src/components/right-sidebar/AiVaultSessionVirtualList.tsxsrc/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.test.tsxsrc/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.tsxsrc/renderer/src/components/right-sidebar/ai-vault-virtual-rows.tssrc/renderer/src/components/sidebar/SidebarGroupByToggle.test.tsxsrc/renderer/src/components/sidebar/SidebarGroupByToggle.tsxsrc/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.tssrc/renderer/src/components/sidebar/WorktreeList.lineage-child-real-card.test.tsxsrc/renderer/src/components/sidebar/WorktreeList.tsxsrc/renderer/src/components/sidebar/empty-project-placeholder-repos.tssrc/renderer/src/components/sidebar/host-section-rows.test.tssrc/renderer/src/components/sidebar/host-section-rows.tssrc/renderer/src/components/sidebar/imported-worktrees-card-candidates.tssrc/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.tssrc/renderer/src/components/sidebar/project-group-header-dom.test.tssrc/renderer/src/components/sidebar/project-group-header-drop.test.tssrc/renderer/src/components/sidebar/project-group-header-drop.tssrc/renderer/src/components/sidebar/project-header-drop.test.tssrc/renderer/src/components/sidebar/project-header-drop.tssrc/renderer/src/components/sidebar/rendered-sidebar-worktree-order.tssrc/renderer/src/components/sidebar/worktree-card-presentation.tsxsrc/renderer/src/components/sidebar/worktree-drag-units.tssrc/renderer/src/components/sidebar/worktree-header-section-boundaries.tssrc/renderer/src/components/sidebar/worktree-keyboard-cycle.test.tssrc/renderer/src/components/sidebar/worktree-keyboard-cycle.tssrc/renderer/src/components/sidebar/worktree-list/drag/drop-commit-context.tssrc/renderer/src/components/sidebar/worktree-list/drag/groups.tssrc/renderer/src/components/sidebar/worktree-list/drag/pointer-commit.tssrc/renderer/src/components/sidebar/worktree-list/drag/pointer-flush.tssrc/renderer/src/components/sidebar/worktree-list/drag/row-state.tssrc/renderer/src/components/sidebar/worktree-list/drag/status-target.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-document-drop.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-lineage-drop-commit.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-native-autoscroll.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-native-drag.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-pointer-autoscroll.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-pointer-drag.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-pointer-window-events.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-runtime.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-session.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-status-row-drag.tssrc/renderer/src/components/sidebar/worktree-list/headers/FolderPathStatusIndicator.tsxsrc/renderer/src/components/sidebar/worktree-list/headers/HostSectionHeader.tsxsrc/renderer/src/components/sidebar/worktree-list/headers/SectionHeader.tsxsrc/renderer/src/components/sidebar/worktree-list/headers/event-guards.tssrc/renderer/src/components/sidebar/worktree-list/headers/project-group-header-actions.tsxsrc/renderer/src/components/sidebar/worktree-list/headers/repo-header-project-actions.tsxsrc/renderer/src/components/sidebar/worktree-list/imported-worktrees-card-visibility.tssrc/renderer/src/components/sidebar/worktree-list/option-dom.tssrc/renderer/src/components/sidebar/worktree-list/render-row-item-rows.tssrc/renderer/src/components/sidebar/worktree-list/reveal/ancestors.tssrc/renderer/src/components/sidebar/worktree-list/reveal/folder-reveal.test.tssrc/renderer/src/components/sidebar/worktree-list/reveal/folder-reveal.tssrc/renderer/src/components/sidebar/worktree-list/reveal/mounted-row.tssrc/renderer/src/components/sidebar/worktree-list/reveal/pending-inputs.tssrc/renderer/src/components/sidebar/worktree-list/reveal/use-highlight.tssrc/renderer/src/components/sidebar/worktree-list/reveal/use-pending.tssrc/renderer/src/components/sidebar/worktree-list/reveal/use-requests.tssrc/renderer/src/components/sidebar/worktree-list/rows/folder-row.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/groups.test.tssrc/renderer/src/components/sidebar/worktree-list/rows/groups.tssrc/renderer/src/components/sidebar/worktree-list/rows/imported-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/rows/indentation.test.tssrc/renderer/src/components/sidebar/worktree-list/rows/indentation.tssrc/renderer/src/components/sidebar/worktree-list/rows/item-row.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/notice-rows.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/render-row-lookup.tssrc/renderer/src/components/sidebar/worktree-list/rows/renderable-rows.tssrc/renderer/src/components/sidebar/worktree-list/rows/virtual-row-context.tssrc/renderer/src/components/sidebar/worktree-list/rows/virtual-row-dispatch.tsxsrc/renderer/src/components/sidebar/worktree-list/scroll/hard-scroll-up.test.tssrc/renderer/src/components/sidebar/worktree-list/scroll/hard-scroll-up.tssrc/renderer/src/components/sidebar/worktree-list/scroll/scroll-adjustment.test.tssrc/renderer/src/components/sidebar/worktree-list/scroll/tuning.tssrc/renderer/src/components/sidebar/worktree-list/scroll/use-scroll-to-top.test.tssrc/renderer/src/components/sidebar/worktree-list/scroll/use-scroll-to-top.test.tsxsrc/renderer/src/components/sidebar/worktree-list/scroll/use-scroll-to-top.tssrc/renderer/src/components/sidebar/worktree-list/scroll/use-suppression.tssrc/renderer/src/components/sidebar/worktree-list/scroll/visible-refresh.test.tssrc/renderer/src/components/sidebar/worktree-list/sidebar-editable-target.tssrc/renderer/src/components/sidebar/worktree-list/stable-empty-store-slices.tssrc/renderer/src/components/sidebar/worktree-list/use-agent-send-target-worktree.tssrc/renderer/src/components/sidebar/worktree-list/use-effective-collapsed-groups.tssrc/renderer/src/components/sidebar/worktree-list/use-sidebar-host-visible-scope.tssrc/renderer/src/components/sidebar/worktree-list/use-sidebar-section-rows.tssrc/renderer/src/components/sidebar/worktree-list/use-sidebar-worktree-selection.tssrc/renderer/src/components/sidebar/worktree-list/use-sidebar-worktree-sort-order.tssrc/renderer/src/components/sidebar/worktree-list/use-status-mutations.tssrc/renderer/src/components/sidebar/worktree-list/use-visible-sidebar-worktrees.tssrc/renderer/src/components/sidebar/worktree-list/viewport/VirtualizedWorktreeViewport.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/active-descendant-option.tssrc/renderer/src/components/sidebar/worktree-list/viewport/host-filtering.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/host-filtering.tssrc/renderer/src/components/sidebar/worktree-list/viewport/review-cache-inputs.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/review-cache-inputs.tssrc/renderer/src/components/sidebar/worktree-list/viewport/sticky-headers.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-active-row.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-folder-path-statuses.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-group-toggle.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-keyboard.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-row-measurement.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-virtualizer.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-visible-review-refresh.tssrc/renderer/src/components/sidebar/worktree-list/viewport/viewport-props.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.tssrc/renderer/src/components/sidebar/worktree-list/virtual-row-dom-attributes.tssrc/renderer/src/components/sidebar/worktree-list/worktree-visibility-menu-label.tssrc/renderer/src/components/sidebar/worktree-list/worktree-visible-refresh-listener.tssrc/renderer/src/components/sidebar/worktree-sidebar-reveal.tssrc/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts
💤 Files with no reviewable changes (7)
- src/renderer/src/components/sidebar/worktree-list/sidebar-editable-target.ts
- src/renderer/src/components/sidebar/worktree-list/worktree-visible-refresh-listener.ts
- src/renderer/src/components/sidebar/worktree-list/imported-worktrees-card-visibility.ts
- src/renderer/src/components/sidebar/worktree-list/worktree-visibility-menu-label.ts
- src/renderer/src/components/sidebar/worktree-list/virtual-row-dom-attributes.ts
- src/renderer/src/components/sidebar/worktree-list/stable-empty-store-slices.ts
- src/renderer/src/components/sidebar/worktree-list/render-row-item-rows.ts
Follow-up to #14465 / #14467. Keep the landed extract and reorganize the flat worktree-list dump into drag/, headers/, reveal/, rows/, scroll/, and viewport/. Fold tiny modules into their owners, move leftover sidebar-root files into the module, and retarget imports and source-path tests. Layout-only; no behavior change.
Inlining virtual-row-dom-attributes left a second import from the same module, which fails audit:code-quality:native --deny-warnings.
|
@coderabbitai Fixing. Will be in the next commit |
|
Tip For best results, initiate chat on the files or code changes.
You are interacting with an AI system. |
Shorten explanations to focus on the essential why, removing redundant detail and improving readability without changing functionality.
715b46a to
b91ad74
Compare
|
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. |
There was a problem hiding this comment.
Actionable comments posted: 3
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 1e133943-8578-4b15-8e68-3f56c63ee7b1
📒 Files selected for processing (109)
config/max-lines-baseline.txtsrc/renderer/src/components/WorktreeJumpPalette.tsxsrc/renderer/src/components/cmd-j/palette-filter-options.tssrc/renderer/src/components/cmd-j/palette-project-results.tssrc/renderer/src/components/hover-reveal-touch-action-visibility.test.tssrc/renderer/src/components/sidebar/SidebarGroupByToggle.test.tsxsrc/renderer/src/components/sidebar/SidebarGroupByToggle.tsxsrc/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.tssrc/renderer/src/components/sidebar/WorktreeList.tsxsrc/renderer/src/components/sidebar/empty-project-placeholder-repos.tssrc/renderer/src/components/sidebar/host-section-rows.test.tssrc/renderer/src/components/sidebar/host-section-rows.tssrc/renderer/src/components/sidebar/imported-worktrees-card-candidates.tssrc/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.tssrc/renderer/src/components/sidebar/project-group-header-dom.test.tssrc/renderer/src/components/sidebar/project-group-header-drop.test.tssrc/renderer/src/components/sidebar/project-group-header-drop.tssrc/renderer/src/components/sidebar/project-header-drop.test.tssrc/renderer/src/components/sidebar/project-header-drop.tssrc/renderer/src/components/sidebar/rendered-sidebar-worktree-order.tssrc/renderer/src/components/sidebar/worktree-drag-units.tssrc/renderer/src/components/sidebar/worktree-header-section-boundaries.tssrc/renderer/src/components/sidebar/worktree-keyboard-cycle.test.tssrc/renderer/src/components/sidebar/worktree-keyboard-cycle.tssrc/renderer/src/components/sidebar/worktree-list/drag/drop-commit-context.tssrc/renderer/src/components/sidebar/worktree-list/drag/groups.tssrc/renderer/src/components/sidebar/worktree-list/drag/pointer-commit.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-drop-commit-context.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-pointer-drag.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-pointer-window-events.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-session.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-status-mutations.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-status-row-drag.tssrc/renderer/src/components/sidebar/worktree-list/grouping/build-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/grouping/build-rows.tssrc/renderer/src/components/sidebar/worktree-list/grouping/group-keys.tssrc/renderer/src/components/sidebar/worktree-list/grouping/group-sections.tssrc/renderer/src/components/sidebar/worktree-list/grouping/host-labels.tssrc/renderer/src/components/sidebar/worktree-list/grouping/imported-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/grouping/project-group-sections.tssrc/renderer/src/components/sidebar/worktree-list/grouping/project-grouping.tssrc/renderer/src/components/sidebar/worktree-list/grouping/row-builders.tssrc/renderer/src/components/sidebar/worktree-list/grouping/row-types.tssrc/renderer/src/components/sidebar/worktree-list/grouping/section-order.tssrc/renderer/src/components/sidebar/worktree-list/grouping/worktree-group-keys.tssrc/renderer/src/components/sidebar/worktree-list/grouping/worktree-grouping.tssrc/renderer/src/components/sidebar/worktree-list/listing/EmptyState.tsxsrc/renderer/src/components/sidebar/worktree-list/listing/host-filtering.test.tssrc/renderer/src/components/sidebar/worktree-list/listing/host-filtering.tssrc/renderer/src/components/sidebar/worktree-list/listing/render-row.tssrc/renderer/src/components/sidebar/worktree-list/listing/renderable-rows.tssrc/renderer/src/components/sidebar/worktree-list/listing/review-cache-inputs.test.tssrc/renderer/src/components/sidebar/worktree-list/listing/review-cache-inputs.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-agent-send-target.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-collapsed-groups.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-external-worktree-cards.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-filters.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-folder-path-statuses.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-host-visible-scope.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-reused-array-identity.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.tssrc/renderer/src/components/sidebar/worktree-list/navigation/active-descendant-option.tssrc/renderer/src/components/sidebar/worktree-list/navigation/folder-reveal.test.tssrc/renderer/src/components/sidebar/worktree-list/navigation/folder-reveal.tssrc/renderer/src/components/sidebar/worktree-list/navigation/mounted-row-reveal.tssrc/renderer/src/components/sidebar/worktree-list/navigation/pending-reveal-inputs.tssrc/renderer/src/components/sidebar/worktree-list/navigation/render-row-lookup.tssrc/renderer/src/components/sidebar/worktree-list/navigation/reveal-ancestors.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-active-row.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-keyboard.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-pending-reveal.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-reveal-highlight.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-reveal-requests.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-selection.tssrc/renderer/src/components/sidebar/worktree-list/rows/FolderPathStatusIndicator.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/HostSectionHeader.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/ProjectGroupDialogs.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/SectionHeader.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/folder-row.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/header-event-guards.tssrc/renderer/src/components/sidebar/worktree-list/rows/item-row.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/notice-rows.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/option-dom.tssrc/renderer/src/components/sidebar/worktree-list/rows/project-group-header-actions.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs.tssrc/renderer/src/components/sidebar/worktree-list/rows/virtual-row-dispatch.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/VirtualizedWorktreeViewport.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/drop-indicators.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/hard-scroll-up.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/hard-scroll-up.tssrc/renderer/src/components/sidebar/worktree-list/viewport/scroll-adjustment.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/sticky-headers.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-row-measurement.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-suppression.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-virtualizer.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-visible-review-refresh.tssrc/renderer/src/components/sidebar/worktree-list/viewport/viewport-props.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-row-context.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.tssrc/renderer/src/components/sidebar/worktree-list/viewport/visible-refresh.test.tssrc/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts
🚧 Files skipped from review as they are similar to previous changes (39)
- src/renderer/src/components/sidebar/project-group-header-drop.ts
- src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts
- src/renderer/src/components/WorktreeJumpPalette.tsx
- src/renderer/src/components/sidebar/worktree-keyboard-cycle.test.ts
- src/renderer/src/components/sidebar/project-header-drop.ts
- src/renderer/src/components/sidebar/empty-project-placeholder-repos.ts
- src/renderer/src/components/sidebar/imported-worktrees-card-candidates.ts
- src/renderer/src/components/sidebar/host-section-rows.test.ts
- src/renderer/src/components/sidebar/worktree-list/rows/folder-row.tsx
- src/renderer/src/components/sidebar/WorktreeList.tsx
- src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.ts
- src/renderer/src/components/sidebar/project-header-drop.test.ts
- src/renderer/src/components/sidebar/project-group-header-dom.test.ts
- src/renderer/src/components/sidebar/worktree-drag-units.ts
- src/renderer/src/components/cmd-j/palette-project-results.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.test.ts
- src/renderer/src/components/sidebar/project-group-header-drop.test.ts
- config/max-lines-baseline.txt
- src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.ts
- src/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/sticky-headers.test.ts
- src/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts
- src/renderer/src/components/sidebar/worktree-list/drag/use-status-row-drag.ts
- src/renderer/src/components/sidebar/worktree-list/rows/virtual-row-dispatch.tsx
- src/renderer/src/components/sidebar/host-section-rows.ts
- src/renderer/src/components/sidebar/SidebarGroupByToggle.test.tsx
- src/renderer/src/components/sidebar/worktree-list/drag/use-pointer-window-events.ts
- src/renderer/src/components/sidebar/worktree-list/drag/pointer-commit.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/viewport-props.ts
- src/renderer/src/components/sidebar/worktree-list/drag/use-pointer-drag.ts
- src/renderer/src/components/cmd-j/palette-filter-options.ts
- src/renderer/src/components/sidebar/worktree-header-section-boundaries.ts
- src/renderer/src/components/sidebar/worktree-list/rows/notice-rows.tsx
- src/renderer/src/components/sidebar/worktree-list/drag/use-session.ts
- src/renderer/src/components/sidebar/worktree-list/drag/groups.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.ts
- src/renderer/src/components/hover-reveal-touch-action-visibility.test.ts
- src/renderer/src/components/sidebar/worktree-list/rows/item-row.tsx
- src/renderer/src/components/sidebar/worktree-keyboard-cycle.ts
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 3
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 1e133943-8578-4b15-8e68-3f56c63ee7b1
📒 Files selected for processing (109)
config/max-lines-baseline.txtsrc/renderer/src/components/WorktreeJumpPalette.tsxsrc/renderer/src/components/cmd-j/palette-filter-options.tssrc/renderer/src/components/cmd-j/palette-project-results.tssrc/renderer/src/components/hover-reveal-touch-action-visibility.test.tssrc/renderer/src/components/sidebar/SidebarGroupByToggle.test.tsxsrc/renderer/src/components/sidebar/SidebarGroupByToggle.tsxsrc/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.tssrc/renderer/src/components/sidebar/WorktreeList.tsxsrc/renderer/src/components/sidebar/empty-project-placeholder-repos.tssrc/renderer/src/components/sidebar/host-section-rows.test.tssrc/renderer/src/components/sidebar/host-section-rows.tssrc/renderer/src/components/sidebar/imported-worktrees-card-candidates.tssrc/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.tssrc/renderer/src/components/sidebar/project-group-header-dom.test.tssrc/renderer/src/components/sidebar/project-group-header-drop.test.tssrc/renderer/src/components/sidebar/project-group-header-drop.tssrc/renderer/src/components/sidebar/project-header-drop.test.tssrc/renderer/src/components/sidebar/project-header-drop.tssrc/renderer/src/components/sidebar/rendered-sidebar-worktree-order.tssrc/renderer/src/components/sidebar/worktree-drag-units.tssrc/renderer/src/components/sidebar/worktree-header-section-boundaries.tssrc/renderer/src/components/sidebar/worktree-keyboard-cycle.test.tssrc/renderer/src/components/sidebar/worktree-keyboard-cycle.tssrc/renderer/src/components/sidebar/worktree-list/drag/drop-commit-context.tssrc/renderer/src/components/sidebar/worktree-list/drag/groups.tssrc/renderer/src/components/sidebar/worktree-list/drag/pointer-commit.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-drop-commit-context.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-pointer-drag.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-pointer-window-events.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-session.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-status-mutations.tssrc/renderer/src/components/sidebar/worktree-list/drag/use-status-row-drag.tssrc/renderer/src/components/sidebar/worktree-list/grouping/build-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/grouping/build-rows.tssrc/renderer/src/components/sidebar/worktree-list/grouping/group-keys.tssrc/renderer/src/components/sidebar/worktree-list/grouping/group-sections.tssrc/renderer/src/components/sidebar/worktree-list/grouping/host-labels.tssrc/renderer/src/components/sidebar/worktree-list/grouping/imported-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/grouping/project-group-sections.tssrc/renderer/src/components/sidebar/worktree-list/grouping/project-grouping.tssrc/renderer/src/components/sidebar/worktree-list/grouping/row-builders.tssrc/renderer/src/components/sidebar/worktree-list/grouping/row-types.tssrc/renderer/src/components/sidebar/worktree-list/grouping/section-order.tssrc/renderer/src/components/sidebar/worktree-list/grouping/worktree-group-keys.tssrc/renderer/src/components/sidebar/worktree-list/grouping/worktree-grouping.tssrc/renderer/src/components/sidebar/worktree-list/listing/EmptyState.tsxsrc/renderer/src/components/sidebar/worktree-list/listing/host-filtering.test.tssrc/renderer/src/components/sidebar/worktree-list/listing/host-filtering.tssrc/renderer/src/components/sidebar/worktree-list/listing/render-row.tssrc/renderer/src/components/sidebar/worktree-list/listing/renderable-rows.tssrc/renderer/src/components/sidebar/worktree-list/listing/review-cache-inputs.test.tssrc/renderer/src/components/sidebar/worktree-list/listing/review-cache-inputs.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-agent-send-target.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-collapsed-groups.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-external-worktree-cards.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-filters.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-folder-path-statuses.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-host-visible-scope.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-reused-array-identity.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-section-rows.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.tssrc/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.tssrc/renderer/src/components/sidebar/worktree-list/navigation/active-descendant-option.tssrc/renderer/src/components/sidebar/worktree-list/navigation/folder-reveal.test.tssrc/renderer/src/components/sidebar/worktree-list/navigation/folder-reveal.tssrc/renderer/src/components/sidebar/worktree-list/navigation/mounted-row-reveal.tssrc/renderer/src/components/sidebar/worktree-list/navigation/pending-reveal-inputs.tssrc/renderer/src/components/sidebar/worktree-list/navigation/render-row-lookup.tssrc/renderer/src/components/sidebar/worktree-list/navigation/reveal-ancestors.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-active-row.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-keyboard.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-pending-reveal.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-reveal-highlight.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-reveal-requests.tssrc/renderer/src/components/sidebar/worktree-list/navigation/use-selection.tssrc/renderer/src/components/sidebar/worktree-list/rows/FolderPathStatusIndicator.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/HostSectionHeader.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/ProjectGroupDialogs.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/SectionHeader.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/folder-row.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/header-event-guards.tssrc/renderer/src/components/sidebar/worktree-list/rows/item-row.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/notice-rows.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/option-dom.tssrc/renderer/src/components/sidebar/worktree-list/rows/project-group-header-actions.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/repo-header-project-actions.tsxsrc/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs.tssrc/renderer/src/components/sidebar/worktree-list/rows/virtual-row-dispatch.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/VirtualizedWorktreeViewport.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/drop-indicators.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/hard-scroll-up.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/hard-scroll-up.tssrc/renderer/src/components/sidebar/worktree-list/viewport/scroll-adjustment.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/sticky-headers.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-row-measurement.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-suppression.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.tsxsrc/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-virtualizer.tssrc/renderer/src/components/sidebar/worktree-list/viewport/use-visible-review-refresh.tssrc/renderer/src/components/sidebar/worktree-list/viewport/viewport-props.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-row-context.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.test.tssrc/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.tssrc/renderer/src/components/sidebar/worktree-list/viewport/visible-refresh.test.tssrc/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts
🚧 Files skipped from review as they are similar to previous changes (39)
- src/renderer/src/components/sidebar/project-group-header-drop.ts
- src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts
- src/renderer/src/components/WorktreeJumpPalette.tsx
- src/renderer/src/components/sidebar/worktree-keyboard-cycle.test.ts
- src/renderer/src/components/sidebar/project-header-drop.ts
- src/renderer/src/components/sidebar/empty-project-placeholder-repos.ts
- src/renderer/src/components/sidebar/imported-worktrees-card-candidates.ts
- src/renderer/src/components/sidebar/host-section-rows.test.ts
- src/renderer/src/components/sidebar/worktree-list/rows/folder-row.tsx
- src/renderer/src/components/sidebar/WorktreeList.tsx
- src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.ts
- src/renderer/src/components/sidebar/project-header-drop.test.ts
- src/renderer/src/components/sidebar/project-group-header-dom.test.ts
- src/renderer/src/components/sidebar/worktree-drag-units.ts
- src/renderer/src/components/cmd-j/palette-project-results.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.test.ts
- src/renderer/src/components/sidebar/project-group-header-drop.test.ts
- config/max-lines-baseline.txt
- src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.ts
- src/renderer/src/components/sidebar/worktree-list/drag/use-header-drag.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/sticky-headers.test.ts
- src/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts
- src/renderer/src/components/sidebar/worktree-list/drag/use-status-row-drag.ts
- src/renderer/src/components/sidebar/worktree-list/rows/virtual-row-dispatch.tsx
- src/renderer/src/components/sidebar/host-section-rows.ts
- src/renderer/src/components/sidebar/SidebarGroupByToggle.test.tsx
- src/renderer/src/components/sidebar/worktree-list/drag/use-pointer-window-events.ts
- src/renderer/src/components/sidebar/worktree-list/drag/pointer-commit.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/viewport-props.ts
- src/renderer/src/components/sidebar/worktree-list/drag/use-pointer-drag.ts
- src/renderer/src/components/cmd-j/palette-filter-options.ts
- src/renderer/src/components/sidebar/worktree-header-section-boundaries.ts
- src/renderer/src/components/sidebar/worktree-list/rows/notice-rows.tsx
- src/renderer/src/components/sidebar/worktree-list/drag/use-session.ts
- src/renderer/src/components/sidebar/worktree-list/drag/groups.ts
- src/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.ts
- src/renderer/src/components/hover-reveal-touch-action-visibility.test.ts
- src/renderer/src/components/sidebar/worktree-list/rows/item-row.tsx
- src/renderer/src/components/sidebar/worktree-keyboard-cycle.ts
🛑 Comments failed to post (2)
src/renderer/src/components/sidebar/worktree-list/listing/EmptyState.tsx (2)
5-11: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Wire the extracted component into
WorktreeList.tsx.The supplied graph context still shows
SidebarWorktreeListEmptyStatedefined insrc/renderer/src/components/sidebar/WorktreeList.tsxat Lines 5-36, while this file defines another copy. Remove the old local definition and import this component. Otherwise this new module can remain unused and the two implementations can diverge.
23-30: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Use the shared renderer Button primitive and style tokens.
This renderer UI adds a native
<button>with a local class list, including an arbitrarytext-[11px]size. Use the approved primitive fromsrc/renderer/src/components/ui/and tokens fromsrc/renderer/src/assets/main.cssfor this action.As per path instructions:
src/renderer/src/**/*.{ts,tsx,css}must use tokens fromsrc/renderer/src/assets/main.cssand shadcn primitives fromsrc/renderer/src/components/ui/.Source: Path instructions
|
Fixing:
Will be in the next commit. |
|
Tip For best results, initiate chat on the files or code changes.
You are interacting with an AI system. |
host-filtering.test.ts moved from viewport/ to listing/; keep the runtime-routing.active-server-preference gate pointing at the real file.
Define theme-aware color tokens for workspace PR-state indicators (done, in-review, in-progress) to ensure consistent identity across theme switches. Update references to use the new tokens and refactor EmptyState button to use the Button component.
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 65e2b972-58c4-4ce2-9eaa-64e547c638aa
📒 Files selected for processing (3)
src/renderer/src/assets/main.csssrc/renderer/src/components/sidebar/worktree-list/grouping/group-keys.tssrc/renderer/src/components/sidebar/worktree-list/listing/EmptyState.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
- src/renderer/src/components/sidebar/worktree-list/grouping/group-keys.ts
- src/renderer/src/components/sidebar/worktree-list/listing/EmptyState.tsx
…rktree-list-domains
React Doctor fails static analysis when refs are written in render. Commit reused array identity and the Smart live-signal latch after paint, and return the attention map from the sort memo instead of stashing it on a render-time ref.
* refactor(sidebar): group worktree-list files by domain Follow-up to #14465 / #14467. Keep the landed extract and reorganize the flat worktree-list dump into drag/, headers/, reveal/, rows/, scroll/, and viewport/. Fold tiny modules into their owners, move leftover sidebar-root files into the module, and retarget imports and source-path tests. Layout-only; no behavior change. * fix(sidebar): merge duplicate virtual-rows imports Inlining virtual-row-dom-attributes left a second import from the same module, which fails audit:code-quality:native --deny-warnings. * refactor(sidebar): condense indentation comments Shorten explanations to focus on the essential why, removing redundant detail and improving readability without changing functionality. * refactor: organize worktree-list into lifecycle dest folders * fix react doctor * fix: update reliability-gates path after worktree-list reorg host-filtering.test.ts moved from viewport/ to listing/; keep the runtime-routing.active-server-preference gate pointing at the real file. * Extract workspace status colors to design tokens Define theme-aware color tokens for workspace PR-state indicators (done, in-review, in-progress) to ensure consistent identity across theme switches. Update references to use the new tokens and refactor EmptyState button to use the Button component. * fix(sidebar): stop mutating refs during worktree-list render React Doctor fails static analysis when refs are written in render. Commit reused array identity and the Smart live-signal latch after paint, and return the attention map from the sort memo instead of stashing it on a render-time ref.
Ports the collections feature across three upstream refactors: the shared/types barrel drop (stablyai#14447) — Collection type now lives in shared/collection-types.ts; the worktree-list decomposition (stablyai#14486) — sidebar integration re-woven into worktree-list/{drag,grouping,listing, rows,viewport} modules; and the per-domain test split (stablyai#14728) — web-preload collections coverage moved to its own domain test file. Splits collection RPC methods out of repo.ts to respect max-lines. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013SqQZ3Ssc7LJnAvacUkVhx
* refactor(sidebar): group worktree-list files by domain Follow-up to stablyai#14465 / stablyai#14467. Keep the landed extract and reorganize the flat worktree-list dump into drag/, headers/, reveal/, rows/, scroll/, and viewport/. Fold tiny modules into their owners, move leftover sidebar-root files into the module, and retarget imports and source-path tests. Layout-only; no behavior change. * fix(sidebar): merge duplicate virtual-rows imports Inlining virtual-row-dom-attributes left a second import from the same module, which fails audit:code-quality:native --deny-warnings. * refactor(sidebar): condense indentation comments Shorten explanations to focus on the essential why, removing redundant detail and improving readability without changing functionality. * refactor: organize worktree-list into lifecycle dest folders * fix react doctor * fix: update reliability-gates path after worktree-list reorg host-filtering.test.ts moved from viewport/ to listing/; keep the runtime-routing.active-server-preference gate pointing at the real file. * Extract workspace status colors to design tokens Define theme-aware color tokens for workspace PR-state indicators (done, in-review, in-progress) to ensure consistent identity across theme switches. Update references to use the new tokens and refactor EmptyState button to use the Button component. * fix(sidebar): stop mutating refs during worktree-list render React Doctor fails static analysis when refs are written in render. Commit reused array identity and the Smart live-signal latch after paint, and return the attention map from the sort memo instead of stashing it on a render-time ref.
ELI5
Neil already split
WorktreeListinto a folder of files. This PR just sorts that folder into smaller rooms (drag, headers, rows, and so on) and throws away a few postage-stamp files that did not need to live alone. The sidebar still works the same way.What Changed
Follow-up to #14465 / #14467. Layout-only; no drag, reveal, virtualizer, or selection behavior change.
worktree-list/extract into domain folders:drag/,headers/,reveal/,rows/,scroll/,viewport/.filters,sort,selection,section-rows, dialogs, empty state,use-reused-array-identity).worktree-list-/use-worktree-prefixes once the folder provides context.groups, host-filtering, virtual-rows, indentation, review-cache inputs, scroll-to-top / hard-scroll-up, folder-reveal, colocated tests).Why
The extract on main is a flat dump with long redundant names and several 4–13 line files. Related modules were left at
sidebar/instead of living with the list. This is the folder scheme from the earlier incomplete extract, applied to main's landed files.Linked Issue
Follow-up to #14465 / #14467.
Visual Proof
N/A — file-layout reorg only. No UI, styling, or interaction change.
Testing
pnpm exec tsc --noEmit -p config/tsconfig.tc.web.jsonpnpm exec oxlintonworktree-list/+WorktreeList.tsxnode config/scripts/check-max-lines-ratchet.mjsproject-group-header-dom,worktree-keyboard-cycle, hover-reveal file list,WorktreeList.lineage-child-card,FolderWorkspaceWorktreesPanel,host-section-rows(293 tests passed)sidebar/worktree-list-groupsor flatworktree-list/use-worktree-*importsReview
Layout-only rename/move. Existing
eslint-disable max-linesonrows/groups.tsandrows/groups.test.tswas preserved (already grandfathered; baseline paths renamed). Cross-platform / SSH / folder-workspace comments kept intact.Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)