Skip to content

feat(host): move a hosted channel straight to a cloud workspace - #522

Merged
iamnbutler merged 3 commits into
mainfrom
hosted-compute
Oct 19, 2026
Merged

iamnbutler merged 3 commits into
mainfrom
hosted-compute

Conversation

@iamnbutler

Copy link
Copy Markdown
Contributor

Fixes #499

A hosted channel whose workspace is this host now offers Move to → cloud workspace (and ace move <channel> --compute) whenever Cloud compute is available for its project.

Approach: a direct transfer, not a local round trip. Both ends already speak the transfer protocol, so the hosted case only changes where the snapshot comes from. toCompute freezes and exports the channel at its hosting service, exactly as a move back to this host does (exportHosted, now shared with toLocal), then imports it into the compute service and activates it there, as for a local channel. Nothing is written to local storage. Chaining local → cloud would need two fences, two transfers, and an extra failure state between them, so it isn't simpler.

  • Lanes are checked the same way before the fence; the hosted channel's lanes are on this host.
  • A failure before activation thaws the source, so the channel is still on the hosting service, and the error says so. An unanswered activation keeps the fence, and running the same move again finishes it, as for the other moves.
  • After activation, the hosting service's frozen copy remains, as after a move back to this host.
  • The record's hosted switches to the compute service with compute, so this host's workspace link to the old service closes.
  • The move dialog's cloud text still fits: tools move from this Mac to a container, and untracked files stay on this Mac.

Also fixed: while any channel moved to a cloud workspace, the listing called new URL("compute") on the fence's target and threw, so listings broke for the whole move. The listing now reports the destination as "cloud workspace".

Smoke test (separate ACE_HOME with ace serve --loopback from this branch, the team's deployed channel and compute services, Claude Opus): created a hosted channel in iamnbutler/toddler-game-center, had its agent start and lane push a lane, saw move-targets offer this host and cloud workspace, then moved it. The listing showed moving: "cloud workspace", and the move finished in about 13 s. In the cloud workspace, the agent recalled the earlier chat and found the lane's commit at its old path. I then deleted the channel and its workspace. Not exercised: the thaw after a failed import or activation.

Built in Ace

No — Claude Code subagent outside Ace, run by the lead during a batch of fixes.

A hosted channel whose workspace is this host now offers Move to cloud workspace. The move
freezes and exports it at its hosting service, imports it into the compute service, and
activates it there, never going through local storage. A failure before activation thaws the
source. Listings also stop failing while a channel moves to a cloud workspace, since its
fence's target is not a URL.

Why: apps/host/src/move.ts#function toCompute | a hosted source is frozen and exported at its service, never read from the parked local store, and any failure before activation thaws it
Why: apps/host/src/gateway.ts#function local | a move's fence names "local", "compute", or a service URL; only a URL may be parsed as one
@iamnbutler
iamnbutler merged commit 6841c7b into main Oct 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Move a hosted channel straight to a cloud workspace

1 participant