Skip to content

Cloud start: record why the harness login was or was not passed - #31264

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
cloud-login-skip-reason
Nov 1, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
cloud-login-skip-reason

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

The coordinator's ask: "A silent .skip is a bug anyway, because users get the bare "rejected" card with no reason. Have passHarnessLogin record why it skipped in the start report, and log it: the DEV/dogfood gate, caller owns, guest kind, and the machine's login reading."

Why

A Cloud start that passes no Claude login leaves the machine's Claude signed out, and every turn there fails with "The provider rejected Claude Code's credentials on this Cloud machine". That is the item 14 and handoff captures, even after #31183. The start skipped without saying which check stopped it, and no capture could tell.

Change

  • CloudHarnessLoginDecision (CmuxNextCloudCredentials) owns the decision that CloudStartChat.loginStep made, unchanged, and names its reason: build-gate-off, no-transfer-for-harness, signed-out, caller-not-owner, guest-not-owner, guest-kind-unread, machine-login-kept, install-cached or confirm-first.
  • The guest probe prints vm-kind:<kind>, so an exec that failed reads as guest-kind-unread. Before, a failed exec and a team guest looked the same.
  • passHarnessLogin logs a one-line summary (public, with no token or provider output) and keeps it on the machine's cloud.machines row as harness_login, with the outcome (installed, declined, or the transfer's fixed failure text). An example: skip (guest-not-owner): gate on, provider claude, signed in yes, caller owns yes, guest team, machine login -, cached yes.
  • No change in behaviour: the same checks in the same order. CmuxNextApp is one line shorter.

Tests

CloudStartChatLoginTests: every reason, the summary's exact text, and the probe's marker parsing (plus a real run of the probe). Fleet: the app compile and the suite (results in the comments).

Agent session: agent session

🤖 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

Records why a Cloud start skips passing its harness login, so a machine left signed out carries its reason in the log and the cloud.machines row instead of a silent skip that showed only the bare "rejected" card.

  • New CloudHarnessLoginDecision names the deciding check: the DEV/dogfood gate, no transfer for the harness, signed out, caller not owner, guest not owner, guest kind unread, machine login kept, install cached, or confirm first.
  • The guest probe prints vm-kind:<kind>, so an exec that failed reads as guest-kind-unread instead of looking like a team guest.
  • passHarnessLogin logs a one-line public summary and keeps it on the machine as harness_login, with the outcome (installed, declined, or the transfer's fixed failure text).
  • No behavior change: the same checks run in the same order.

Written for commit a333023. Summary will update on new commits.

View guided diff Turn on auto-fix

A Cloud start that passed no login skipped silently, leaving Claude on the
machine signed out and every turn on the bare "The provider rejected Claude
Code's credentials on this Cloud machine" card, with no record of which
check stopped it.

CloudHarnessLoginDecision (CmuxNextCloudCredentials) now owns the decision
and names its reason: the DEV/dogfood gate, the harness, the sign-in,
whether the caller owns the machine, the guest's vm-kind (read after a
marker, so a failed exec reads as unread, not as a team guest), and the
machine's login reading. passHarnessLogin logs its summary (public) and
keeps it on the machine's cloud.machines row as harness_login, with the
outcome (installed, declined or the transfer's fixed failure text).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at a333023
Follow-ups:

  • [follow-up] When callerOwnsVM throws, the record reads skip (caller-not-owner) … -> failed: X. A separate owner-check-failed reason would be clearer.
  • [follow-up] Log a failed outcome at .error again (it is now only in the .info summary).
  • [follow-up] theGuestProbeReadsTheVMKind assumes the test host has no /etc/cmux/vm-kind. Accept any marked value.

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

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

Review a333023: 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=pr31264 -f ref=cloud-login-skip-reason -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 1d72f53; does not block

Default changes

This pull request changes 1 default at a33302363ab0 (what everyone gets without configuring anything):

  • tunable-source.CmuxNextApp/Control/AppControl+Cloud.swift:cloudMachineRow: "3c145083c906db9c6af8a5959063d52dc2257be50c6e72a054c4f8355c6f37d7" -> "8fb82d32c139efd4f87bfb9626fc1e02866be2682aaa6507219220e93972d22a"

Signed off on this commit by review (subagent claude-opus-5-5 medium).

Merge receipt: merged as 18db361f6459 with these defaults changed, signed off by review (subagent claude-opus-5-5 medium).

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

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@teamleaderleo
teamleaderleo merged commit 18db361 into feat-cmux-next Nov 1, 2026
156 of 170 checks passed
@teamleaderleo
teamleaderleo deleted the cloud-login-skip-reason branch November 1, 2026 19:51
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 1, 2026
@blacksmith-sh

blacksmith-sh Bot commented Nov 1, 2026

Copy link
Copy Markdown

Found 6 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp2pxua37q/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpa6i9b2ji/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs

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

teamleaderleo added a commit that referenced this pull request Nov 2, 2026
… ruling)

The start's login decision (#31264) now treats a team guest like an owner
one once the platform says the caller created the machine, and runs the
transfer's creator allowance there. CloudPresenter uses the current gate
(passesHarnessLoginHere).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5

This branch was previously deployed

1 inactive deployment
ci-routing-agent — a3330236 Deployed Nov 1, 2026 by teamleaderleo via namespace autofix #11586
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