Skip to content

cmux NEXT Cloud: a new machine gets a readable default name, not its raw id - #28257

Closed
teamleaderleo wants to merge 3 commits into
feat-cmux-nextfrom
leo/cloud-default-machine-name
Closed

teamleaderleo wants to merge 3 commits into
feat-cmux-nextfrom
leo/cloud-default-machine-name

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-10-30: "How about more cmux-platform audits, improvements, features, fixes, optimizations, polish, plus the ui that gets people (or agents) using it". Earlier, 2026-10-29: "let's just get the cloud and its respective ui up to snuff".

Friction

On the app server link (the cmux-next backend), a Cloud machine created with no typed name came back with name: null and no slug, so CloudMachine.title (displayName ?? slug ?? id) titled a person's very first machine by its raw id (vm_…) in the sidebar, menus and the create confirmation. The classic /api/vm link names it itself (its slug), so only the app server path was hit.

Change

  • CloudService.createMachine: on the app server link, a create with no name (or a blank one) sends a readable default, Cloud Machine, then Cloud Machine 2, 3, …, the first free one among this account's machine titles and the creations still in flight (compared trimmed and case-insensitively).
  • The pick is pinned on the CloudMachineCreation, so a Retry sends exactly the same params with the same idempotency key (an approval is answered only for the exact params the backend holds). It is not put into CloudMachineRequest.name, because a named request is a request option the app server create refuses.
  • CloudMachine.defaultName(taken:base:numbered:) (CmuxNextCloud) is the pure pick; the two strings live in the Cloud table (cloud.machine.defaultName, cloud.machine.defaultNameNumbered) in all 21 languages.
  • Older records that already have a null name keep their id as the title (no rename is invented for them).

Screenshots

Native, cloud-capture fixture route (HQ pr-capture-cloud.yml, staging test account on the app server link, cloudFixture.link: app): the sidebar is hidden so an unnamed newCloudMachine from the CLI asks in its sheet; the capture never presses Create (the confirmation is person-only), so nothing is made. State: the state below (steps: auth.status, list-machines, toggleSidebar, action run newCloudMachine, debug.dialog).

Recaptured at this head (39840f5) and at its base commit on feat-cmux-next (7a2d52d) with the same steps on the cloud-capture route, cropped to the confirmation. The cloud-capture route runs only on Blacksmith macOS, which cannot take a 2x whole-mini display, so these are 1x.

Light Dark
Before (7a2d52d, base) before light before dark
After (39840f5, head) after light after dark

Viewed after image: yes
Visual verdict: The confirmation gains one plain "Name: Cloud Machine" line with no layout, control or spacing change, so it sits fine next to ChatGPT or Claude.

debug.dialog before: lines "Asked by an agent or a script. … / Size: 2 vCPU, 4 GB memory, 16 GB disk". After: "… / Name: Cloud Machine / Size: 2 vCPU, 4 GB memory, 16 GB disk" (the name the machine is created and listed with).

Video: after (after.mp4)

UI review checklist

design/ui-review-checklist.md walked: copy only, no layout, motion, spacing or colour change. The confirmation and sidebar show a name instead of an id; one space between words; no narration; no new control.

Tests

CloudMachineDefaultNameTests (new: first pick, counting from 2, first free number, trimmed/case-insensitive, an unnamed record's title) plus the create-flow suites (CloudCreateRetryKeyTests, CloudCreateWithoutAskingTests, CloudLegacyCreateConfirmTests, CloudCreationProOfferTests, CloudRequestAskerGoneTests, CloudEnvironmentBootFlowTests, CloudMachineRequestCardTests, CloudNewMachineTests) on the fleet: all 9 suites passed at fae9a11 (cmux-ci step key leo-default-name-fae9a117, summary artifact c1eda766398b0f92320bd189), and all 9 again at the head 39840f5 (cmux-ci step key f28257-39840f52)

Risk

Low. App server link only; the legacy create is unchanged. A machine an agent or CLI creates with no name on the app server link now carries a name ("Cloud Machine N") the person can rename.

Independent review: SHIP at 39840f5 (Codex gpt-6-astra, high).

Agent session: agent session

🤖 Generated with Claude Code

…raw id

The cmux-next backend stores no name and no slug for an unnamed machine, so
the first Cloud machine was titled vm_... in the sidebar and menus. A create
with no typed name on the app server path now sends "Cloud Machine" (then
"Cloud Machine 2", ...), unique among the account's machines and creations
in flight, pinned on the creation so a Retry sends the same params.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

teamleaderleo commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 30, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Found 4 test failures on Blacksmith runners:

Failures

Test View Logs
main.DeveloperIdAppTests.test_download_prints_the_active_profile_only/
test_download_prints_the_active_profile_only
View Logs
stubs: /System/Library/Frameworks/Security.framework/Versions/A/Security has no stub/
Security has no stub
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_CFRetain']/
CoreFoundation, missing 1: ['_CFRetain']
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_log2']/
CoreFoundation, missing 1: ['_log2']
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

…flight asked for

Review of fae9a11: an unnamed create that started while a create typed
"Cloud Machine" was still in flight also got "Cloud Machine". Every app
server create now holds its name (typed or default) until it ends.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Default changes

This pull request changes 3 defaults at 39840f523e46 (what everyone gets without configuring anything):

  • tunable-source.CmuxNextCloud/API/CloudMachine+DefaultName.swift:defaultName: (none) -> "a8ff48b5b84f8ccda86dca0cb10448a9081db7c698471fe1269d973e6abbe943"
  • tunable-source.CmuxNextDaemonService/CloudStrings.swift:defaultMachineName: (none) -> "c3f432b9fd2988b7fa5821abdf8fbb9952a89b52885128f6468d7c6711eb1393"
  • tunable-source.CmuxNextDaemonService/CloudStrings.swift:defaultMachineName#: (none) -> "840285accd574586b4aede4a69551ffa6e6a52174a10aad63a22475619cb5777"

Signed off on this commit by review (codex gpt-6-astra high, next-review).

Regenerate the snapshot with python3 scripts/ci/defaults_guard.py snapshot.

@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 39840f5: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr28257 -f ref=leo/cloud-default-machine-name -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: 3 commit(s) change the sidebar's drawing code without a Sidebar-Look: trailer or an entry in plans/cmux-next/sidebar-owner.md is not red on the base 1d98fce; do not merge until green; see lane-rules

…ed or default

Review of 5bde26a: a Retry must send the exact params the held approval
has, so the creation keeps whichever name its first app server attempt
sent, not only a picked default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at 39840f5

No blocking findings.

Reviewed the full diff and supplied surrounding code. Tests were not run; additional repository reads were blocked by the environment’s approval policy.

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 39840f5: an independent review passed this exact head (next-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

teamleaderleo added a commit that referenced this pull request Oct 31, 2026
…lt name, not its raw id (#28517)

* cmux NEXT Cloud: a new machine gets a readable default name, not its raw id

The cmux-next backend stores no name and no slug for an unnamed machine, so
the first Cloud machine was titled vm_... in the sidebar and menus. A create
with no typed name on the app server path now sends "Cloud Machine" (then
"Cloud Machine 2", ...), unique among the account's machines and creations
in flight, pinned on the creation so a Retry sends the same params.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT Cloud: a default machine name skips names other creates in flight asked for

Review of fae9a11: an unnamed create that started while a create typed
"Cloud Machine" was still in flight also got "Cloud Machine". Every app
server create now holds its name (typed or default) until it ends.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT Cloud: a creation pins the name its first attempt sent, typed or default

Review of 5bde26a: a Retry must send the exact params the held approval
has, so the creation keeps whichever name its first app server attempt
sent, not only a picked default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

This PR's whole change is already on feat-cmux-next: it landed as the carry #28517 (ab0b77a), with the same six files, and every line this PR adds is on the base now. A squash of this PR would add nothing.

The body now has fresh before/after captures at this head and its base commit (1x: the cloud-capture route can't take a 2x display), and the 9 Cloud create suites passed again at 39840f5. No landing is needed. It stays open only because the landing helper doesn't close PRs; the owner can close it as superseded by #28517.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Superseded: this whole change landed through the carry #28517 (ab0b77a).

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 39840f52 Deployed Oct 30, 2026 by teamleaderleo via namespace autofix #7835
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant