Repository navigation
Cloud start: record why the harness login was or was not passed - #31264
Conversation
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
|
Review (subagent claude-opus-5-5 medium): SHIP at a333023
|
|
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); base red: the same failure on the base 1d72f53; does not block Default changesThis pull request changes 1 default at
Signed off on this commit by Merge receipt: merged as Regenerate the snapshot with Shipped in:
|
|
Owned by an agent session · session |
|
Found 6 test failures on Blacksmith runners: Failures
|
… 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
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
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 thatCloudStartChat.loginStepmade, 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-cachedorconfirm-first.vm-kind:<kind>, so an exec that failed reads asguest-kind-unread. Before, a failed exec and a team guest looked the same.passHarnessLoginlogs a one-line summary (public, with no token or provider output) and keeps it on the machine'scloud.machinesrow asharness_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.CmuxNextAppis 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
Need help on this PR? Tag
@codesmith-botwith 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.machinesrow instead of a silent skip that showed only the bare "rejected" card.CloudHarnessLoginDecisionnames 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.vm-kind:<kind>, so an exec that failed reads asguest-kind-unreadinstead of looking like a team guest.passHarnessLoginlogs a one-line public summary and keeps it on the machine asharness_login, with the outcome (installed,declined, or the transfer's fixed failure text).Written for commit a333023. Summary will update on new commits.