Repository navigation
cmux NEXT: GUI Delete Group and group edits name the group's sidebar document item - #23059
Conversation
…ent item (#22996) Delete Group, Ungroup, Rename, color, icon, fold, pin, move-into and reorder of a group sent the group id they were given. When that was the personal id (grp_…), the daemon lists the group as itm_g_grp_… and the reducer refused unknown_item, which the app showed as "The sidebar did not make this move". The CLI writes the personal row and worked. SidebarDocStore now resolves a group id to the document item it names (the id itself when the document holds a group under it, else itm_g_<id>) before it builds the ops. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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)
Unclear: CI failed on
Not re-run automatically: Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base d10176f; does not block
Agents: |
|
Bead |
… review) SidebarDocStore.item(group:) reuses SidebarDocRecords.groupItem(personal:), and New Subgroup named by a personal group id plans under its document item instead of refusing "group required". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Correctness review (subagent) on c023e11: PASS The reviewer read the code only; nothing was built.
|
|
Check classification at c75bf8a: |
|
GUI check on the tagged build The app ran in the background on this Mac (
No step showed "The sidebar did not make this move". |
…ext-22996-group-delete
|
Check classification at 87babe7 (after merging
|
…ext-22996-group-delete
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. |
|
Check classification,
|
…ext-22996-group-delete
This comment has been minimized.
This comment has been minimized.
…ext-22996-group-delete
|
Check classification at 027e13e. None of these reds is caused by this PR:
Merged |
|
Review (subagent, correctness first): SHIP at 97584f3 This review read the PR's own 5 files, diffed against the current
My own check at this head: the PR diff is unchanged since c75bf8a, which the first review's follow-ups produced. The later commits only merge |
…ext-22996-group-delete
|
Review (subagent, correctness first): SHIP at 0717db1 0717db1 only merges Check classification at 97584f3:
|
|
Check classification at 0717db1: |
|
|
|
Review (subagent, correctness first): SHIP at 24cbbf2 The head moved from 0717db1 only through a merge of feat-cmux-next (24cbbf2). The PR's own diff is byte-identical (5 files, +72/−10; the hash of the changed lines is f2864eb5 at both heads), so the earlier SHIP review carries over. The dev build |
|
Found 9 test failures on Blacksmith runners: Failures
|
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Fixes #22996
On the sidebar document, Delete Group from the GUI said "The sidebar did not make this move", and Rename and the other group edits failed the same way. The CLI's
cmux workspace group <group> deleteworked for the same group.Cause. The daemon lists a personal group (
grp_…) as the document itemitm_g_grp_…. The app's group edits put whatever group id they were given into thesidebar.applyop. When that was the personal id, the reducer refused itunknown_item, and the app shows any refusal other than cross-machine or provider-owned as "The sidebar did not make this move". The CLI writes the personal row instead, and the daemon syncs that row into the document.Reproduced on an isolated throwaway headless daemon from the installed cmux NEXT (its own session, HOME and socket; never the user's session): one group with one member.
sidebar.apply [{op: group.update, id: itm_g_grp_…, patch: {name}}]and thengroup.ungroupwith the same id: both commit.group.ungroupwithid: grp_…:validation.invalid,reason: unknown_item.Fix.
SidebarDocStore.item(group:)resolves a group id to the document item it names: the id itself when the document holds a group under it (a group the document made, or an item id already), elseitm_g_<id>. Every op that names a group goes through it: Ungroup/Delete, Rename, color, icon, fold (both paths), pin, move into a group, and group reorder.Tests.
SidebarDocGroupEditTargetTests(CmuxNextAppTests) runs on a shortened copy of a realsidebar.getdocument: a personal id resolves to itsitm_g_item, an item id and a group the document made keep their own id, and a non-group or missing id is passed through unchanged.No capture: no pixels change. The diff is sidebar-document store logic (which group id the ops name). The visible effect is that Delete Group, Ungroup and Rename now succeed instead of showing a refusal; that behavior is checked in the tagged-build GUI run in the PR comments.
Changelog
Fixed: In cmux NEXT, Delete Group, Ungroup, Rename and the other group edits from the sidebar work again instead of saying "The sidebar did not make this move".
Observed / Not run
Observed (head 49a2f3a; the PR diff is unchanged since c75bf8a, the later commits only merge
feat-cmux-next):g22996, then stopped):sidebar.applywithitm_g_grp_…commits; withgrp_…it returnsvalidation.invalid/unknown_item.da2983250a9823b6d3e188dc, aws-m4pro-7, Xcode 26.6):package-test-lane.sh suite Packages/macOS/CmuxNext SidebarDocGroupEditTargetTests,SidebarDocSubgroupPersonalParentTests,SidebarDocGroupTargetTests,SidebarDocShownGroupIDTests,SidebarDocGroupEditorTargetTests. All 5 suites passed.22996-gui-delete-group(joba5d0cd0a0b102524f4f90819, c75bf8a). In the GUI on throwaway groups, Delete Group, Ungroup and Rename worked with no refusal (details in the comment below).scripts/cmux-next/prepush-gate.py: no new violations.Not run: the full CmuxNext suite. CI's
cmux-next swift testcovers it.Red/green: the new test calls
SidebarDocStore.item(group:in:), which the base does not have, so on the base it fails to compile rather than failing an assertion. The behavioral red on the base is the daemon repro above.🤖 Generated with Claude Code