Repository navigation
cmux-next sidebar: workspaces marked Done fold into one Done (N) row - #23633
Conversation
…t the end of their list (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
…at the end of their list A group's members and a section's loose rows keep their manual order; the ones marked Done (Mark as Done, SidebarTaskStatus.done) list behind one "Done (N)" row at the end, which a click opens below it. The active workspace keeps its place. No fold while filtering or with the session tree. Debug toggle sidebar.doneFold, on by default. The row helpers visible/listsTabs/disclosure move from make onto SidebarLayoutOptions so SidebarLayout.swift shrinks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base cb27a38; does not block |
|
Owned by chief-sidebar on cosmic-gray · session |
|
Bead |
This comment has been minimized.
This comment has been minimized.
|
Review (claude-review-subagent): BLOCK at d5b9dd3 I read the full diff against merge-base 7771639, plus the drop resolver ( Blocking1. Drops near a folded "Done (N)" row land in the wrong place, and you can no longer drop below a group's end.
2. A drop gap never opens when the target index belongs to a hidden Done member. 3. Selecting a hidden Done workspace from somewhere other than the list leaves it undrawn. Checked and fine
Nits
|
|
|
… its place (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
…pace selected elsewhere shows Review of #23633: drops resolve by the drawn rows' model indexes, so a drag lays the list out with every Done workspace in its place. A selection patch whose new active workspace is listed but not drawn hands over to a layout, which keeps the active workspace in place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Review (claude-review-subagent): SHIP at 87531eb All three findings from the earlier BLOCK are fixed. Read with local git only (incremental diff d5b9dd3..87531eb, plus the drag, tab-drop, settle and selection paths). Nothing was built or run. Drag layouts. Every list layout built during a drag goes through
So the resolver, the gap and the displayed rows all see the unfolded layout while
The model-level layouts ( Drag start. Selection patch. The new early-out returns false only when the new active workspace is listed but not drawn. Test.
Optional: Non-blocking notes:
|
…over it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
|
|
…again Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
This comment has been minimized.
This comment has been minimized.
|
Review (claude-review-subagent): SHIP at 7c19da8 Scope:
No blocking findings. Not built or run, per the review scope. |
…bar-done-fold # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Logic/SidebarTunables.swift
|
Found 9 test failures on Blacksmith runners: Failures
|
…d.title added) The catalog had come out with its keys reordered, a +4082/-3951 diff for one added key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
|
Review (claude-review-subagent): SHIP at 1a7130a Scope: only the new commit since the last SHIP (d77cefa..1a7130a). Read with local git and a Python json comparison; nothing built.
No findings. |
Conflicts with the Done fold (#23633), every row's PR badge (#23495) and machine marks (#22763): - Loose rows: the tree's rows (depth, chevron, roll-up) go through foldingDone, which leaves them as they are while the tree is on, so the Done fold and the tree compose. - SidebarSessionTree keeps base's pullRequests beside the folds; the list and observation read both `drawn` (the tree with folds) and `pullRequests`. - WorkspaceRowView adds base's machineMark and this branch's fold button and roll-up. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d2c-88e4-7fc2-b58e-9a55abdaced8&host=cosmic-gray
Brings in the Done fold (#23633). Group by Status keeps working with it: - every SidebarRowKey switch takes both .status and .doneFold; - status rows use the base's SidebarLayoutOptions.visible, listsTabs and disclosure (the port's own copies are gone); - movesRows keeps the Done fold's move (a row marked Done, or no longer); - the Done fold does not apply inside status sections: a workspace marked Done shows under its Priority state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray
…w N more (#23671) * test(cmux-next sidebar): Done workspaces fold into one Done (N) row at the end of their list (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * cmux-next sidebar: workspaces marked Done fold into one Done (N) row at the end of their list A group's members and a section's loose rows keep their manual order; the ones marked Done (Mark as Done, SidebarTaskStatus.done) list behind one "Done (N)" row at the end, which a click opens below it. The active workspace keeps its place. No fold while filtering or with the session tree. Debug toggle sidebar.doneFold, on by default. The row helpers visible/listsTabs/disclosure move from make onto SidebarLayoutOptions so SidebarLayout.swift shrinks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * test(cmux-next sidebar): a Done workspace selected elsewhere shows in its place (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * cmux-next sidebar: Done rows show while a drag runs, and a Done workspace selected elsewhere shows Review of #23633: drops resolve by the drawn rows' model indexes, so a drag lays the list out with every Done workspace in its place. A selection patch whose new active workspace is listed but not drawn hands over to a layout, which keeps the active workspace in place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * cmux-next sidebar: the Done row's chevron sits before its count, not over it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * cmux-next sidebar: turning the Done fold on or off lays the list out again Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * test(cmux-next sidebar): a long group shows its first rows then Show N more (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * cmux-next sidebar: a long group or list shows its first rows then Show N more Past sidebar.groupRowLimit rows (Debug tunable, 10 by default, 0 shows all) a group's members or a section's loose rows show their first rows, the ones that need you and the active one, then a "Show N more" row; a click lists every row with a "Show fewer" row. Done workspaces fold first and count toward neither. The rows show whole while a drag runs, a group past the limit folds by a full layout, and needing you is a row move past the limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * test(sidebar): groups past a section's row limit stay shown (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * fix(sidebar): a section's row limit counts its loose workspaces only; its groups always show Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * sidebar strings: keep the catalog in base order (only sidebar.doneFold.title added) The catalog had come out with its keys reordered, a +4082/-3951 diff for one added key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * sidebar strings: keep the catalog in base order (only the Show more strings added) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * sidebar: Show more is off by default (sidebar.groupRowLimit 0) A limit of 10 by default hid rows that existing behavior depends on (SidebarCloseWhileScrolledTests scrolls to row 20 of 40). Ship the limit as an opt-in Debug tunable; turning it on is its own change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * cmux NEXT sidebar: say why a click keeps the old active row and why Group by Folder has no row limit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
Leo's ask-13d9bbd5e3: a drag must not reposition other rows. Since #23633 a drag unfolds every "Done (N)" row at the lift (every Done workspace shows in its place and the rows below move down), then folds them again at the drop. Red on base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray
…ow no longer move down and back (#24361) * cmux-next sidebar: test that a drag keeps the Done rows folded (red) Leo's ask-13d9bbd5e3: a drag must not reposition other rows. Since #23633 a drag unfolds every "Done (N)" row at the lift (every Done workspace shows in its place and the rows below move down), then folds them again at the drop. Red on base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray * cmux-next sidebar: a drag keeps the Done rows folded; a drop gap at a folded index opens where the row will show The lift and the drop moved every row below a Done fold (the fold opened for the drag and closed at the drop). Drops already resolve by model indexes, which a fold keeps, so the drag keeps the folds; a drop gap whose index the fold hides opens before the next drawn row, or before the Done row. Show N more (off by default) still opens for a drag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray Sidebar-Look: no visual change * cmux-next sidebar: the older drop resolver ends a group at its last drawn member before its Done row With the Done rows folded during a drag, the group's last drawn member was not its last row (the Done row is), so the older resolver never let a drop past it leave the group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray * cmux-next sidebar: review fixes: a group a Done row ends reads as unfolded to the older resolver; an open fold's gap opens above it Codex review of #24361 at 7ef5886: - An all-Done group drew only its header, so a drop below it went into it: the header reads as folded, so its bottom leaves the group. - A last drawn member with tab rows: the tab rows join the member, so below them leaves the group (the resolver's tab rows never leave one). - An open Done fold draws its rows below it, out of model order: a gap at one of their indexes opens above the fold, where the new row will show. Tests resolve real drops through the Rust resolver. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray * cmux-next sidebar: drag-keeps-done-fold test sets the tunable inline (main-actor calls outside a nonisolated closure) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray * cmux-next sidebar: test that a drag an open Done fold would split draws its rows together Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray * cmux-next sidebar: a drag an open Done fold would split (Done and unfinished rows together) unfolds, so its rows slide as one slot Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray Sidebar-Look: no visual change * cmux-next sidebar: any drag that carries a Done row draws unfolded (a lone Done row would add a fold row the base lacks) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray Sidebar-Look: no visual change * cmux-next sidebar: tests for an open fold's trailing tab rows and a group drag's Done row Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray * cmux-next sidebar: an open Done fold's last workspace and its tab rows end the group for the older resolver Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16040-fd0b-7dd0-9487-1a3a198d9f5c&host=cosmic-gray * test(sidebar): preserve external tab targets around Done folds Adds the external tab drag regression found by independent review. Native red execution is pending hosted verification; no native tests ran on GCP. Sidebar-Look: no visual change Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a1754c-2766-7023-bf29-cd2c77d2b6be&host=gcp-codex-lane-10 * fix(sidebar): keep external tab insertion targets during drags Normalize folded group endings only for internal workspace drops. External tab drags keep their existing unfolded geometry and preserve each visible tab target. This avoids losing before-tab targets or trapping the bottom group exit. Native execution remains pending hosted tests. Sidebar-Look: no visual change Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a1754c-2766-7023-bf29-cd2c77d2b6be&host=gcp-codex-lane-10 * fix(sidebar): a folded group that still draws items stays open for the drop resolver A group whose Done fold hides every workspace but still shows link, tab or app rows read as folded, so a drop on its header appended after the items instead of going to the group's top. Review P2 at e1a0ba1. Sidebar-Look: no visual change Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-8ac862c5f65d08f98445 * fix(sidebar): a link below a folded group's last workspace keeps that workspace in the group for the resolver Codex review (BLOCK at 40bbd1c): endingGroup marked the last drawn workspace isLastInGroup even when a link or app row of the group is drawn below it, so a drop on that workspace's lower edge left the group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-8ac862c5f65d08f98445 * docs(sidebar-owner): log #24361's drop-resolver commits (no visual change) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-8ac862c5f65d08f98445 * release-notes: give #24361's highlight a way to try it test_the_repository_highlights_validate needs a tryIt action or a docs link per entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(sidebar): a group that draws an open subgroup stays open for the drop resolver A Done fold that hides every direct workspace no longer reads the header as folded while a nested subgroup still shows below it, so a drop on the header's middle goes into the group (Sol review on #24361). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-8ac862c5f65d08f98445 * docs(sidebar): log the subgroup resolver fix in the sidebar owner note Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-8ac862c5f65d08f98445 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
This is slice S4 of Leo's sidebar-organization ask (item A, the "Done (N)" fold).
What changes
Workspaces you marked Done (Mark as Done, Set Workspace Status → Done) leave their place and list behind one "Done (N)" row at the end of their group, or at the end of the loose rows. Click the row to show them below it; click again to fold them.
SidebarModel.movesRows). A group holding Done workspaces folds and opens by a full layout instead of the splice.SidebarListView.openDoneFolds), not saved.sidebar.doneFold, on by default.SidebarLayout.swiftshrinks (474 → 461 lines): its row helpersvisible,listsTabsanddisclosuremoved ontoSidebarLayoutOptions, and the filter's path-to-match onto a static helper.Tests
Tests/CmuxNextAppTests/SidebarDoneFoldTests.swift(committed first):Capture
Three workspaces marked Done (with the app's Mark as Done action) fold into one closed "Done (3)" row under the others.
Capture
steps-386849ff85at7c19da8f8742(fleet build, capture mini, text checked for private data)Review
sidebar.doneFoldon or off now lays the list out again. Fleet compile passed at 7c19da8.Changelog
Agent session: cosmic-gray
🤖 Generated with Claude Code