Skip to content

Cloud start: wait for the tab capability after updating an outdated machine - #31995

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
lane/cloud-update-waits-capability
Nov 2, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
lane/cloud-update-waits-capability

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The no-folder Cloud start updates an outdated machine before opening the chat tab (#31145). It waited only for the machine's link to change, not for the capability it needed. A new link can come up before its handshake advertises agent-session-tabs-v1, so the open was refused although the update had worked.

A DEV end-to-end capture of a799d97 showed this: the first start failed with "this machine's cmux-tui cannot hold agent chat tabs yet: update it", and the next send's retry on the same machine succeeded.

CloudOutdatedMachine.updateBeforeUsingCapability now waits, still bounded by 90 s, for holds() itself. holdsTabs reads the observable daemon store's identity, so the wait wakes on the new handshake rather than polling. The link parameter is gone, so CmuxNextApp loses one line.

Leo's ask (the no-project Cloud chat): "i want us to be able to do this too".

Testing

  • New CloudOutdatedMachineTests.aNewLinkWithoutTheCapabilityYetIsWaitedFor: the update returns, and the capability arrives one turn later.
    • On base, the old wait returns at once on the link change: holdsTabs is false at return, and the open is refused.
    • On this head, it waits until the capability arrives.
  • The existing three tests still cover update-then-capability, a bounded timeout and an already-current machine.
  • prepush-gate.py: no new violations, app_lines -1.

Observed / Not run

  • Observed: the capture result above, and the prepush gate.
  • Not run yet: the Swift suite and the app compile, which run on the fleet after push.

Changelog

Fixed: a new Cloud chat no longer fails its first start right after the machine updates.

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

Fixes the no-folder Cloud start so a freshly updated machine no longer refuses its first chat open. The update wait now checks for the agent-session-tabs-v1 capability itself, not just for the link to change; a new link can come up before its handshake advertises the capability, which previously caused the open to be refused even though the update had succeeded.

  • CloudOutdatedMachine.updateBeforeUsingCapability now waits on holds() (bounded by the same 90 s), waking on the new handshake via the observable daemon store instead of polling.
  • The unused link parameter is removed from the method and its call site.
  • Adds a test where the capability arrives a turn after the link change; the existing tests for update-then-capability, timeout, and already-current machines still pass.

Written for commit 0fb6eef. Summary will update on new commits.

View guided diff Turn on auto-fix

…ability itself

The no-folder start's update-before-open (#31145) waited only for the
machine's link to change. A new link can come up before its handshake
carries agent-session-tabs-v1, so the open was refused although the
update had worked: a DEV capture at a799d97 failed its first start with
"cannot hold agent chat tabs yet" and the next send's retry succeeded.
Wait, bounded by the same 90 s, for the capability.

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

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 0fb6eef: 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=pr31995 -f ref=lane/cloud-update-waits-capability -f platform=macos -f backend_mode=local

Shipped in:

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 2, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 0fb6eef. Follow-ups: none. The wait wakes on DaemonStore.identity (@observable) through holdsTabs; the daemon object is stable across the update; a failed update or missing capability still ends within 90 s with the caller's refusal; the new test fails on the old link-change wait.

@teamleaderleo
teamleaderleo merged commit e3f8960 into feat-cmux-next Nov 2, 2026
162 of 176 checks passed
@teamleaderleo
teamleaderleo deleted the lane/cloud-update-waits-capability branch November 2, 2026 08:12

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 0fb6eefa Deployed Nov 2, 2026 by teamleaderleo via wait for same-key tree publisher #100174
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