Repository navigation
cmux-next palette: titles end in "…" exactly when the action asks first, outside Phone - #23360
Conversation
Six palette actions collect a required argument before they run, so their titles now end in "…": Clear Browser History… (time range and profile), Open History Entry… (entry), Hide App… and Show Hidden App… (app), Team Picker… (team) and the DEV-only Open Remote Browser Tab… (host address). Two run at once and lose the "…": Cloud Diagnostics shows its result in a toast, and Edit Group Config opens cmux-next.json, as Open cmux-next.json does. English and all 20 translations change; the Khmer Edit Group Config, which was English, is translated. PaletteMenuVocabularyTests checks the rule for these rows, and palette-audit.md's rows follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdc6-7623-8ee3-fa94b3900ccd&host=cosmic-gray
|
Owned by palette-audit on cosmic-gray · session |
|
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); no finished base run on f90fbd9 to compare; do not merge until green; see lane-rules |
|
Bead |
|
Found 5 test failures on Blacksmith runners: Failures
|
…outside #expect) (#23386) #23332/#23360 put contains(where: \.isRequired) inside #expect, which Swift Testing expands to a throwing call ("call can throw, but it is not marked with try"), so the CmuxNext test target does not build on feat-cmux-next. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-a3a7-70f3-960d-db7379df3d8d&host=cosmic-gray Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…eaches (#23423) * test(ci): the fleet compile check compiles the test targets a change can break (red) fleet/compile-check compiles only the app executable, so #23360 (a throwing call in #expect without try, CmuxNextActionsTests) and #23163 (a FakeClient that missed #21258's requirement, CmuxNextAppTests) passed it and broke feat-cmux-next's test build. This test pins the plan the check must compile and the new package-test-lane.sh compile-tests argument check; neither exists yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci(fleet compile-check): also compile the test targets the change reaches fleet/compile-check compiled only the app executable, which links no test target, and merge_compile_guard accepts it in place of a queued Release compile. #23360 (CmuxNextActionsTests) and #23163 (CmuxNextAppTests) passed it while every Mac job that builds tests sat queued, and broke the base's test build. The workflow now reads the head's merge base with feat-cmux-next from the compare API and runs `package-test-lane.sh compile-tests MERGE_BASE` on a fleet Mac beside the Linux app compile; success needs both. The plan (scripts/ci/compile_test_plan.py) is the CmuxNext test targets that depend on a changed target in the existing SwiftPM target graph (the routing cmux_next_route.py gives the swift test tier), plus the macOS package lane's packages whose sources or path dependencies changed. Each CmuxNext test target builds with `swift build --target`, so nothing links or runs. The Linux pool cannot do it: its SDK has no Testing module. A head whose package-test-lane.sh predates the phase gets no verdict (error), with "merge feat-cmux-next and dispatch again". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci: the test-target compile is an advisory check; fleet/compile-check is the app compile again coord-deputy: an ~11 min Mac queue on every PR's merge gate costs too much. fleet-compile-check.yml and merge_compile_guard.py are back to feat-cmux-next's (the Linux app compile, same status semantics). fleet-test-compile.yml runs on pull requests into feat-cmux-next that touch Packages/ or vendor/: a Linux job plans with compile_test_plan.py over the merge commit's diff; an empty plan passes there in seconds and queues no Mac; a plan runs `package-test-lane.sh compile-tests BASE` as a light fleet step, and the check `fleet/test-compile (advisory)` goes red only when a planned test target does not compile. It is a bridge until the Linux pool image carries cmuxterm-hq #2750 (Testing search paths). Tests: the guard ignores the advisory check, red or pending, and it never stands in for the Release compile; CI and app-host changes plan nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * test(ci): compile-tests stays red after a later setup failure; one fallback per package; advisory verdicts Red on c150a5c: a target failure followed by a later package's setup failure exits before the failure marker, so the check only warns; a refused --target falls back to --build-tests once per target; the job's 45 min timeout is shorter than the client's queue plus run timeouts, so a slow fleet ends red; exit 128 after the marker maps to a warning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci(fleet-test-compile): a compile failure stays red; a slow fleet never does - package-test-lane.sh compile-tests prints the failure marker as soon as a target fails, so a later package's setup failure cannot hide it. - A refused --target falls back to --build-tests once per package, in place of its remaining targets. - fleet-test-compile.yml: red on the marker whatever the exit; the job timeout (55 min) outlasts the client's queue plus run timeouts (45 min), so a timeout is a warning, never red. - cmux-next.yml runs tests/test_ci_compile_test_plan.py with the merge guard tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray * ci(package tests): compile_test_plan.py is a global input of the package test job package-test-lane.sh compile-tests runs it, so test_ci_select_package_tests.py requires it in GLOBAL_INPUTS (red on b96188a: "scripts the package test job runs are not global inputs"). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fdac-78a0-ac2e-a3aef81402c7&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
…rows, archive check) - Mark Chat as Read…, Pin/Unpin Chat in Priority… and Snooze Chat for 1 Hour… end in "…": from the palette each asks which chat (#23360's rule, now in PaletteMenuVocabularyTests' audited list). The row's own menu names its chat, so it reads Mark as Read and Snooze for 1 Hour (Pin or Unpin stays the chat's live title). English and all 20 translations change; the two menu labels take the hover buttons' translations. - Archive Chat on a row's chat (`agent-chat:`) is refused while the Priority view is off, with the reason the other row actions give (a target reason, so Archive Chat on the focused chat still runs). - A row closing its slot takes no clicks: the rows' document skips it in hitTest, so a right-click there opens no menu for a chat that left. - A row still opening when a later move retargets it keeps clipping until that move ends (a placement count per row, like the main list's `opens`), so its preview does not draw over the row below. - With motion off, rows land through `animator()` inside `Motion.withoutAnimation`, as `RowMotion` does, so a move in flight cannot pull them back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray
…rows, archive check) (#23597) * cmux NEXT sidebar: Priority view follow-up tests (red first) Behavioral tests for the review findings of #23527 and #23577, before their fixes: - the palette's Priority row actions ask which chat, so their titles end in "…" (PaletteMenuVocabularyTests' audited list), while the row's own menu, which names the chat, asks nothing; - with the Priority view off, Archive Chat on a row's chat is refused like the other row actions, and the focused chat's Archive still runs; - acpmux refusing an archive shows the row again; - motion: the sidebar switch off on its own, a second reorder during a slide, a motion-off change during a slide, a row retargeted while it opens keeps its clip, and a closing row takes no clicks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray * cmux NEXT sidebar: Priority view follow-ups (palette titles, closing rows, archive check) - Mark Chat as Read…, Pin/Unpin Chat in Priority… and Snooze Chat for 1 Hour… end in "…": from the palette each asks which chat (#23360's rule, now in PaletteMenuVocabularyTests' audited list). The row's own menu names its chat, so it reads Mark as Read and Snooze for 1 Hour (Pin or Unpin stays the chat's live title). English and all 20 translations change; the two menu labels take the hover buttons' translations. - Archive Chat on a row's chat (`agent-chat:`) is refused while the Priority view is off, with the reason the other row actions give (a target reason, so Archive Chat on the focused chat still runs). - A row closing its slot takes no clicks: the rows' document skips it in hitTest, so a right-click there opens no menu for a chat that left. - A row still opening when a later move retargets it keeps clipping until that move ends (a placement count per row, like the main list's `opens`), so its preview does not draw over the row below. - With motion off, rows land through `animator()` inside `Motion.withoutAnimation`, as `RowMotion` does, so a move in flight cannot pull them back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray * cmux NEXT sidebar: the row archive's Priority view check lives with the row actions Keeps SidebarPriorityFeed.swift as it was, so the Priority remote chats branch merges without a conflict there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray * cmux NEXT sidebar: the view-off test runs the focused chat's Archive with an agent chat focused Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray * cmux-next: regenerate action exports for the Priority row actions Copied from the CI cmux-next-generated-patch artifact (run 39644207201). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A palette title ends in "…" exactly when choosing it asks for more before it acts (macOS HIG, and how the palette runs an action:
ActionRegistry.performNowhands an action with a missing required argument to the palette, andPaletteArgumentFlowasks for it). #23332 applied this to the Phone actions. This PR fixes the rows outside Phone where the code shows the title is wrong.palette.browserClearHistoryrange(an enumeration) andbrowserProfile(a target the focused pane doesn't supply). The palette asks for both first.history.openid. The palette asks for it as text.app.hideapp(a string, no target). The palette asks for it. The sidebar item's own Hide App (sidebar.item.hideApp) acts on its target at once and keeps no "…".app.unhideapp, same as Hide App.openTeamPickerteamwith suggestions. The palette pushes a list of teams (PaletteArgumentCurrentValueTests.teamStepMarksAndSelectsTheCurrentTeam,PaletteInsteadOfDialogTests).remote.openBrowserTab(DEV only)address.cloudDiagnosticsworkspaceGroup.editConfigSettingsHandlers.openCmuxConfig, the same one behind Open cmux-next.json, which has no "…".English and all 20 translations change by just the "…" (U+2026). The one exception is the Khmer Edit Group Config, which was still English and is now translated. The audit's matching rows in
plans/cmux-next/palette-audit.mdare updated.PaletteMenuVocabularyTests.auditedTitlesEndInAnEllipsisExactlyWhenTheyAsklists these eight rows. For each one it checks that the title's "…" matches whether the action has a required argument. All eight fail on the base.Left alone (borderline, not changed):
space.setDefaults): both arguments are optional and the handler never callsask, so from the palette it runs at once and clears the space's defaults. That looks like a missing ask, not a title problem.cloudCopyLink,cloudCopyPort): a requiredport, but they are context-menu rows on a machine and the menu may supply the port.palette-audit.mdon feat-cmux-next has no note about Close Group, so nothing changed for it. The menu label "Close Group" is shared by three actions (tabGroup.close,screenGroup.close,workspaceGroup.closeWorkspaces), and their palette titles are Close Tab Group, Close Screen Group and Close All Workspaces in Group. Which of these the audit meant is still an open question.Generated outputs (
plans/cmux-next/action-surfaces.json,webviews/test/fixtures/palette-eval,web/data/cmux-shortcuts.generated.json) are not hand-edited. The autofix regenerates them.Changelog
Observed / Not run
Observed:
python3 scripts/cmux-next/prepush-gate.pyreported no new violations../scripts/localize-changesreports no errors for the changed keys, and the catalog's total parity errors drop from 41584 to 41546. The rest areneeds_reviewstates already on the base. A JSON diff shows that only the eight intended keys changed in the four catalogs.Not run: Swift build and tests (not run locally, per repo rules). The new test's red on the base and green on the head come from reading the code and were not executed. A fleet compile is dispatched for the head.
No capture: copy-only change to eight palette and menu titles (an ellipsis added or removed). There is no layout or interaction change.
Agent session: cosmic-gray
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Completes the "…" rule for palette titles outside the Phone family: a title now ends in "…" exactly when choosing it asks the user for more input first, matching what #23332 did for Phone actions and the macOS Human Interface Guidelines.
Six actions gain "…" because the palette collects a required argument before running them: Clear Browser History…, Open History Entry…, Hide App…, Show Hidden App…, Team Picker…, and Open Remote Browser Tab… (DEV only). Two lose it because they run at once: Cloud Diagnostics (shows a result toast) and Edit Group Config (opens cmux-next.json, like Open cmux-next.json). English and the 20 translations change by only the ellipsis (U+2026); the Khmer Edit Group Config, previously untranslated English, is now translated.
PaletteMenuVocabularyTestsnow verifies all eight rows,palette-audit.mdis updated, and generated outputs were regenerated by the autofix.Scoped out
Written for commit 4f867f5. Summary will update on new commits.