cmux-next palette: titles end in "…" exactly when the action asks first, outside Phone

Merged
TE
15d ago
+360-339

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.performNow hands an action with a missing required argument to the palette, and PaletteArgumentFlow asks for it). #23332 applied this to the Phone actions. This PR fixes the rows outside Phone where the code shows the title is wrong.

ActionOldNewWhy
palette.browserClearHistoryClear Browser HistoryClear Browser History…Required range (an enumeration) and browserProfile (a target the focused pane doesn't supply). The palette asks for both first.
history.openOpen History EntryOpen History Entry…Required id. The palette asks for it as text.
app.hideHide AppHide App…Required app (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.unhideShow Hidden AppShow Hidden App…Required app, same as Hide App.
openTeamPickerTeam PickerTeam Picker…Required team with suggestions. The palette pushes a list of teams (PaletteArgumentCurrentValueTests.teamStepMarksAndSelectsTheCurrentTeam, PaletteInsteadOfDialogTests).
remote.openBrowserTab (DEV only)Open Remote Browser TabOpen Remote Browser Tab…Required address.
cloudDiagnosticsCloud Diagnostics…Cloud DiagnosticsTakes no arguments. The handler runs the diagnostics and shows the result in a toast with Copy, so nothing is asked.
workspaceGroup.editConfigEdit Group Config…Edit Group ConfigTakes no arguments. The handler is SettingsHandlers.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.md are updated.

PaletteMenuVocabularyTests.auditedTitlesEndInAnEllipsisExactlyWhenTheyAsk lists 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):

  • Set Space Terminal Defaults… (space.setDefaults): both arguments are optional and the handler never calls ask, so from the palette it runs at once and clears the space's defaults. That looks like a missing ask, not a title problem.
  • Copy Machine Link / Copy Machine Port (cloudCopyLink, cloudCopyPort): a required port, but they are context-menu rows on a machine and the menu may supply the port.
  • Titles with "…" that open a sheet, a picker, a Settings panel, a confirmation or a palette page (Rename…, Set … Icon…, Settings-opening rows, Roll Back to Previous Version… (destructive, confirms), Restart cmux-tui… (confirms)). They ask, so they keep the "…".
  • The "Close Group" item: palette-audit.md on 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

  • Changed: Command palette titles end in "…" only when the command asks for something first (Clear Browser History…, Hide App…, Team Picker…; Cloud Diagnostics and Edit Group Config no longer do).

Observed / Not run

Observed: python3 scripts/cmux-next/prepush-gate.py reported no new violations. ./scripts/localize-changes reports no errors for the changed keys, and the catalog's total parity errors drop from 41584 to 41546. The rest are needs_review states 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


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with 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. PaletteMenuVocabularyTests now verifies all eight rows, palette-audit.md is updated, and generated outputs were regenerated by the autofix.

Scoped out

  • Set Space Terminal Defaults… stays as-is: both args are optional and the handler never asks, which looks like a missing ask rather than a title problem
  • Copy Machine Link and Copy Machine Port keep no "…": the context menu may supply the required port
  • Titles that open a sheet, picker, Settings, confirmation, or palette page keep their "…" because they do ask
  • Close Group is unchanged because the audit note doesn't identify which of the three group-close actions it means