Repository navigation
fix(next): let legacy workspace defaults take front-tab names - #24627
Conversation
|
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)
red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: Tour of |
|
Bead |
|
Found 11 test failures on Blacksmith runners: Failures
...and 1 more test failures. View all on Blacksmith
|
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. |
|
Independent Codex review at exact head The review initially found that a user-requested
|
|
Final exact-head Codex review: SHIP at The changed paths remain capability-gated: unsupported legacy daemons may auto-label Fleet focused test receipts submitted against this exact head:
|
…e compile red) f8c226e (#24627) put WorkspaceNameSource = .auto into public signatures of WorkspaceAutoName and NewWorkspaceName, whose files import CmuxNextDaemon internally, so the package fails: 'method cannot be declared public because its parameter uses an internal type' (fleet build 8018ebc67c25fa7941552b29). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in a public signature f8c226e (#24627) put WorkspaceNameSource with a .auto default into public methods of WorkspaceAutoName and NewWorkspaceName under an internal import, so CmuxNextWorkspaceNaming (and the app) no longer compiled on feat-cmux-next: "method cannot be declared public because its parameter uses an internal type" (fleet compile-check job 4cfef6fb3a72b0fdc49577fe).
…e compile red) f8c226e (#24627) put WorkspaceNameSource = .auto into public signatures of WorkspaceAutoName and NewWorkspaceName, whose files import CmuxNextDaemon internally, so the package fails: 'method cannot be declared public because its parameter uses an internal type' (fleet build 8018ebc67c25fa7941552b29). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…'s daemon; the comment sequence is internal #24627 (f8c226e) wrote `daemon.supports(...)` in TabMoves.newWorkspaceName, a static func with no daemon in scope, so `daemon` was Darwin's daemon(Int32, Int32) and the app did not compile. It now reads the source workspace's daemon as WorkspaceAutoNameWiring.allowsLegacyDefaults does (no daemon: legacy defaults apply). #24610 (b9c80fa) set FilePageProvider's private latestCommentsSequence from FilePageProvider+Comments.swift, another file; it is internal now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…extDaemon where public API uses its types WorkspaceAutoName.swift and NewWorkspaceName.swift declare public functions that take WorkspaceNameSource (a CmuxNextDaemon type, default .auto) but imported CmuxNextDaemon without public; with InternalImportsByDefault the import is internal, so the package build failed (method cannot be declared public because its parameter uses an internal type). Broken by f8c226e (#24627) and 70be1be (#24628). The module's other two files already use public import. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…provenance (base compile red) f8c226e (#24627) called daemon.supports(...) in a static func, where 'daemon' is libc's daemon(3): "value of type '@sendable (Int32, Int32) -> Int32' has no member 'supports'" (fleet build d138f9d81f9b9457563917d5). Use the workspace's daemon, as WorkspaceAutoNameWiring does (no daemon: legacy defaults allowed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in a public signature f8c226e (#24627) put WorkspaceNameSource with a .auto default into public methods of WorkspaceAutoName and NewWorkspaceName under an internal import, so CmuxNextWorkspaceNaming (and the app) no longer compiled on feat-cmux-next: "method cannot be declared public because its parameter uses an internal type" (fleet compile-check job 4cfef6fb3a72b0fdc49577fe).
…der's comment sequence is visible to its extension Two more compile errors on feat-cmux-next from #24627 and #24610 (fleet compile-check job 0c66846f79c254a414e309b4): - TabMoves.newWorkspaceName called `daemon.supports(...)` in a static func, which resolved to libc's daemon(3); it now asks the source workspace's daemon through services.machines.daemon(forWorkspace:), as WorkspaceAutoNameWiring does. - FilePageProvider+Comments.swift wrote the private latestCommentsSequence of FilePageProvider.swift; it is internal now.
…NextWorkspaceNaming, TabMoves) - b9c80fa (#24610) reads latestCommentsSequence from FilePageProvider+Comments.swift while it stayed private to FilePageProvider.swift: now internal to the module. - f8c226e (#24627) and 70be1be (#24628) put WorkspaceNameSource (CmuxNextDaemon) in public signatures of NewWorkspaceName and WorkspaceAutoName under an internal import: now a public import. - f8c226e (#24627) read `daemon` in TabMoves.newWorkspaceName, where no such value exists (it resolved to Darwin's daemon(3)): it now asks the source workspace's own daemon, as WorkspaceAutoNameWiring.allowsLegacyDefaults does (no daemon: legacy defaults allowed). CmuxNextApp and CmuxNextWorkspaceNaming did not compile on feat-cmux-next (cmux-ci steps f1cbf88c2b78e129fd383836, 7ddea01f7ac1bccd493aebbb, compile check 197c7d71ec98e5f8efdb2136). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in a public signature f8c226e (#24627) put WorkspaceNameSource with a .auto default into public methods of WorkspaceAutoName and NewWorkspaceName under an internal import, so CmuxNextWorkspaceNaming (and the app) no longer compiled on feat-cmux-next: "method cannot be declared public because its parameter uses an internal type" (fleet compile-check job 4cfef6fb3a72b0fdc49577fe).
…der's comment sequence is visible to its extension Two more compile errors on feat-cmux-next from #24627 and #24610 (fleet compile-check job 0c66846f79c254a414e309b4): - TabMoves.newWorkspaceName called `daemon.supports(...)` in a static func, which resolved to libc's daemon(3); it now asks the source workspace's daemon through services.machines.daemon(forWorkspace:), as WorkspaceAutoNameWiring does. - FilePageProvider+Comments.swift wrote the private latestCommentsSequence of FilePageProvider.swift; it is internal now.
…in a public signature f8c226e (#24627) put WorkspaceNameSource with a .auto default into public methods of WorkspaceAutoName and NewWorkspaceName under an internal import, so CmuxNextWorkspaceNaming (and the app) no longer compiled on feat-cmux-next: "method cannot be declared public because its parameter uses an internal type" (fleet compile-check job 4cfef6fb3a72b0fdc49577fe).
…der's comment sequence is visible to its extension Two more compile errors on feat-cmux-next from #24627 and #24610 (fleet compile-check job 0c66846f79c254a414e309b4): - TabMoves.newWorkspaceName called `daemon.supports(...)` in a static func, which resolved to libc's daemon(3); it now asks the source workspace's daemon through services.machines.daemon(forWorkspace:), as WorkspaceAutoNameWiring does. - FilePageProvider+Comments.swift wrote the private latestCommentsSequence of FilePageProvider.swift; it is internal now.
…; the comment sequence is readable from its extension
- TabMoves.newWorkspaceName(for:services:) called daemon.supports(...) with no
daemon in scope, so Swift resolved libc's daemon(_:_:) ("value of type
'@sendable (Int32, Int32) -> Int32' has no member 'supports'"); it asks
services.machines.daemon(forTab:) like the other moves. Broken by
f8c226e (#24627).
- FilePageProvider.latestCommentsSequence was private while
FilePageProvider+Comments.swift (another file) reads and writes it; it is
internal. Broken by b9c80fa (#24610).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ain, so the tip compiles #24627 (f8c226e) and #24628 (70be1be) gave public NewWorkspaceName.forLastTab and the public WorkspaceAutoName label/persistedName/confirmsRename methods a WorkspaceNameSource parameter defaulting to .auto, but NewWorkspaceName.swift and WorkspaceAutoName.swift import CmuxNextDaemon internally: 'method cannot be declared public because its parameter uses an internal type' and 'enum case auto is internal and cannot be referenced from a default argument value'. Both files now import it publicly, as WorkspaceAutoNamer.swift and WorkspaceAutoNameReader.swift do. Both PRs' behavior is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mpiles #24627 (f8c226e) wrote `daemon.supports(...)` in TabMoves.newWorkspaceName, a static func with no daemon in scope, so `daemon` was Darwin's daemon(Int32, Int32) and the app did not compile. It now reads the source workspace's daemon as WorkspaceAutoNameWiring.allowsLegacyDefaults does (no daemon: legacy defaults apply). (The FilePageProvider comment-sequence error from #24610 was fixed upstream by #24646.) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The feat-cmux-next app build broke after this PR. The fix is landed on feat-cmux-next in 3821f97..f3868c3, and the app compile check passes at f3868c3. What it changes:
|
…g, TabMoves) - f8c226e (#24627) and 70be1be (#24628) put WorkspaceNameSource (CmuxNextDaemon) in public signatures of NewWorkspaceName and WorkspaceAutoName under an internal import: now a public import. - f8c226e (#24627) read `daemon` in TabMoves.newWorkspaceName, where no such value exists (it resolved to Darwin's daemon(3)): it now asks the source workspace's own daemon, as WorkspaceAutoNameWiring.allowsLegacyDefaults does (no daemon: legacy defaults allowed). CmuxNextWorkspaceNaming and CmuxNextApp did not compile on feat-cmux-next (cmux-ci steps 7ddea01f7ac1bccd493aebbb, 1bb712123db802d37528912d's base; compile check 197c7d71ec98e5f8efdb2136 failed, 4e844280c3dc77e7adf90253 passed with this fix). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…; the comment sequence is readable from its extension
- TabMoves.newWorkspaceName(for:services:) called daemon.supports(...) with no
daemon in scope, so Swift resolved libc's daemon(_:_:) ("value of type
'@sendable (Int32, Int32) -> Int32' has no member 'supports'"); it asks
services.machines.daemon(forTab:) like the other moves. Broken by
f8c226e (#24627).
- FilePageProvider.latestCommentsSequence was private while
FilePageProvider+Comments.swift (another file) reads and writes it; it is
internal. Broken by b9c80fa (#24610).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
|
Shipped in:
|
Each fails on the bare tip (full run at 2ee04b0; again alone at e869761, step 280e825d1b47e01c8df4b8ff). Stale premises (the test follows the change's intent): - IconFamilyAttributeTests: 5e7966c made folding finished thoughts the default; the test passes that default. - ContextMenuStandardTests: #24707 (0bf7675) put Inspect Element in the tab bar's + menu. - AcpmuxRefusedDaemonTests: #24795 (c7daff2) rewrote the refusal copy (no socket path; Quit that app; the holder-less refusal reconnects on its own) and left its own test on the old copy. - AgentPaneTranscriptStepTests, AgentPageProviderEventsTests: since #24617 (4abd404) a new subscription's events go out a main-actor turn later; the tests wait for them (bounded by the suite time limit). Real breaks (the code is fixed): - ActionSurfaceParityTests: #24707 made the sidebar section menu 13 top-level rows (the limit is 12); its Inspect Element goes in the Options folder. - TabSelectionActionsTests: Save and Close Tab (#23176) had a target reason for a menu row only, so the palette's run on a terminal tab was enabled and then refused; the reason now covers the untargeted run too. - SettingsSchemaExportTests: #24631 (78d7472) added four New Tab widget settings (clock, timer, warm greeting, quote) without strings or an agent policy: their 8 strings in all 21 locales, and the agent may set them. - NativeTooltipGuardTests: Mac Screen (ffc998b, 0372726) and No Color (c3bd2b2) drew raw tool tips: the No Color swatch uses themedToolTip, the toolbar's own helper is renamed setThemedHelp (it already set themedToolTip), the menu bar status item is marked native. - WorkspaceNameSourceTests: #24627 (f8c226e) counted any renamed '~' as unnamed (nameRevision > 0); only the automatic namer's '~' is. - AgentPaneMediaNoAutoActionTests: #24619 (5ff4b0c) resolved every image.load through the raster-only image roots, so a chat's own SVG or PDF was refused; non-raster files resolve in the chat's roots again. - BrowserProfileLinkMenuTests: e01bdd4 gave menu symbols their natural size; a profile's symbol is centered in the 16 pt square again, so names line up. - PhoneProcessRunner (passed alone, failed in the full run): a captured run ended before its stderr was read; it now waits for the end of stderr too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each fails on the bare tip (full run at 2ee04b0; again alone at e869761, step 280e825d1b47e01c8df4b8ff). Stale premises (the test follows the change's intent): - IconFamilyAttributeTests: 5e7966c made folding finished thoughts the default; the test passes that default. - ContextMenuStandardTests: #24707 (0bf7675) put Inspect Element in the tab bar's + menu. - AcpmuxRefusedDaemonTests: #24795 (c7daff2) rewrote the refusal copy (no socket path; Quit that app; the holder-less refusal reconnects on its own) and left its own test on the old copy. - AgentPaneTranscriptStepTests, AgentPageProviderEventsTests: since #24617 (4abd404) a new subscription's events go out a main-actor turn later; the tests wait for them (bounded by the suite time limit). Real breaks (the code is fixed): - ActionSurfaceParityTests: #24707 made the sidebar section menu 13 top-level rows (the limit is 12); its Inspect Element goes in the Options folder. - TabSelectionActionsTests: Save and Close Tab (#23176) had a target reason for a menu row only, so the palette's run on a terminal tab was enabled and then refused; the reason now covers the untargeted run too. - SettingsSchemaExportTests: #24631 (78d7472) added four New Tab widget settings (clock, timer, warm greeting, quote) without strings or an agent policy: their 8 strings in all 21 locales, and the agent may set them. - NativeTooltipGuardTests: Mac Screen (ffc998b, 0372726) and No Color (c3bd2b2) drew raw tool tips: the No Color swatch uses themedToolTip, the toolbar's own helper is renamed setThemedHelp (it already set themedToolTip), the menu bar status item is marked native. - WorkspaceNameSourceTests: #24627 (f8c226e) counted any renamed '~' as unnamed (nameRevision > 0); only the automatic namer's '~' is. - AgentPaneMediaNoAutoActionTests: #24619 (5ff4b0c) resolved every image.load through the raster-only image roots, so a chat's own SVG or PDF was refused; non-raster files resolve in the chat's roots again. - BrowserProfileLinkMenuTests: e01bdd4 gave menu symbols their natural size; a profile's symbol is centered in the 16 pt square again, so names line up. - PhoneProcessRunner (passed alone, failed in the full run): a captured run ended before its stderr was read; it now waits for the end of stderr too. 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)
Problem
Leo reported: "likewise the auto naming for workspaces and tabs where's that". Legacy cmux workspaces can arrive as
~or an empty name, but NEXT only recognizedworkspace-Nas daemon-owned. Those rows were treated as manually named, so a useful front-tab label could never reach the sidebar.Change
Treat the empty and home-folder defaults retained by older daemons as automatic names. A meaningful front-tab label can now replace them, while a non-empty workspace title still wins. The regression coverage exercises both the model predicate and the live label rule.
Changelog
~and empty workspace defaults now accept automatic front-tab names.Validation
python3 scripts/verify-local.py --only swift-syntax --swift-changedpassed locally.Scope
This is the small sidebar behavior fix for legacy defaults. The classic prompt/model auto-namer remains a separate structural HOLD.
Agent session: big-red
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes legacy workspace naming so
~and empty default names on older daemons are recognized as automatic, letting front-tab labels replace them in the sidebar while preserving user-renamed names.WorkspaceModel.isUnnamed(_:)treats empty and~names as daemon defaults only when the daemon lacks name-source provenance.WorkspaceAutoName.isUserNamedandNewWorkspaceName.forLastTabgate onnameSourceandnameRevision, so a user-renamed~survives while legacy defaults still take front-tab names.forLastTaband the reader detectallowsLegacyDefaultsfrom the daemon'sworkspaceNameSourcecapability; new daemons never treat~as automatic.Written for commit 9034131. Summary will update on new commits.