diff --git a/.lane/memory/apps/host/src/gateway.ts/01M4YVZ6KGNQ7MFS1RP81MQCE0-a-hosted-channel-s-location.md b/.lane/memory/apps/host/src/gateway.ts/01M4YVZ6KGNQ7MFS1RP81MQCE0-a-hosted-channel-s-location.md index 0eb4e3c3..daefd1f8 100644 --- a/.lane/memory/apps/host/src/gateway.ts/01M4YVZ6KGNQ7MFS1RP81MQCE0-a-hosted-channel-s-location.md +++ b/.lane/memory/apps/host/src/gateway.ts/01M4YVZ6KGNQ7MFS1RP81MQCE0-a-hosted-channel-s-location.md @@ -4,9 +4,9 @@ anchor: function handle created: 2026-10-15T04:08:49Z norm: '1' sig: e597b5fbc8e664ce -body_hash: aae4da1d5b13a0a7 -raw_hash: 887a83004e69e816 -vouched: 2026-10-19T17:59:13Z +body_hash: ef8527c95dcbf51a +raw_hash: 3d4e766de43b3348 +vouched: 2026-10-19T18:26:01Z lines: 266-519 --- diff --git a/.lane/memory/apps/host/src/gateway.ts/01M4Z2BCKRNHVMYEMC0KH3Q6BN-a-hosted-channel-must-be-rea.md b/.lane/memory/apps/host/src/gateway.ts/01M4Z2BCKRNHVMYEMC0KH3Q6BN-a-hosted-channel-must-be-rea.md index f4bc996b..676b95f5 100644 --- a/.lane/memory/apps/host/src/gateway.ts/01M4Z2BCKRNHVMYEMC0KH3Q6BN-a-hosted-channel-must-be-rea.md +++ b/.lane/memory/apps/host/src/gateway.ts/01M4Z2BCKRNHVMYEMC0KH3Q6BN-a-hosted-channel-must-be-rea.md @@ -4,9 +4,9 @@ anchor: function handle created: 2026-10-15T06:00:20Z norm: '1' sig: e597b5fbc8e664ce -body_hash: aae4da1d5b13a0a7 -raw_hash: 887a83004e69e816 -vouched: 2026-10-19T17:59:13Z +body_hash: ef8527c95dcbf51a +raw_hash: 3d4e766de43b3348 +vouched: 2026-10-19T18:26:02Z lines: 281-561 --- diff --git a/.lane/memory/apps/host/src/gateway.ts/01M5APK9YCQH467YNMKAC8BT5B-a-move-to-a-cloud-workspace.md b/.lane/memory/apps/host/src/gateway.ts/01M5APK9YCQH467YNMKAC8BT5B-a-move-to-a-cloud-workspace.md new file mode 100644 index 00000000..8660c874 --- /dev/null +++ b/.lane/memory/apps/host/src/gateway.ts/01M5APK9YCQH467YNMKAC8BT5B-a-move-to-a-cloud-workspace.md @@ -0,0 +1,12 @@ +--- +id: 01M5APK9YCQH467YNMKAC8BT5B +anchor: function handle +created: 2026-10-19T18:25:49Z +norm: '1' +sig: e597b5fbc8e664ce +body_hash: ef8527c95dcbf51a +raw_hash: 3d4e766de43b3348 +lines: 379-692 +--- + +a move to a cloud workspace ends by starting it, so the listing must report computing for the whole move or the app opens the chat while the service refuses it and never retries diff --git a/apps/host/src/gateway.ts b/apps/host/src/gateway.ts index 13ade3fc..f68e9a15 100644 --- a/apps/host/src/gateway.ts +++ b/apps/host/src/gateway.ts @@ -585,7 +585,11 @@ async function handle( const first = !moves.has(request.channel); moves.add(request.channel); try { - await move(request.channel, request.target, (waiting) => send({ id, waiting })); + const run = () => move(request.channel, request.target, (waiting) => send({ id, waiting })); + // A move to a cloud workspace ends by starting it, which the app must wait out like Run in + // cloud before it opens the chat. + if (request.target === "compute") await lifecycle(request.channel, "starting", run); + else await run(); } finally { if (first) moves.delete(request.channel); // A failed move lifts its fence, which listings and reopened chats must see.