plans/sandbox-gaps.md
Remaining gaps in the current cloud sandbox implementation as of 2026-03-13
This document records what still looks meaningfully incomplete after wiring full-app snapshot sync, version restore/checkout sync, cloud restart behavior for AI edits, and startup reconciliation.
.env.local and related env writes now trigger a cloud snapshot sync, but they do not force a cloud app restart.
That means:
For env changes, “snapshot synced” is not the same as “runtime config applied”.
respondToAppInput still assumes a local process with stdin.
For cloud sandboxes:
input-requested eventsAny remote process that asks an interactive question will still not participate correctly in the existing prompt/response UX.
Desktop now uses a 10-minute idle GC to match local behavior, and it can ask the engine to reconcile stale sandboxes on startup.
What still does not exist on the engine contract side:
So the desktop flow works, but lifecycle policy is still mostly client-driven.
Normal stop/restart paths now destroy cloud sandboxes, but crash/forced-quit cases can still orphan them until reconciliation runs.
That is acceptable as a fallback, but it is still weaker than server-enforced expiry and ownership cleanup.
The preview toolbar still derives the displayed path from the proxied iframe URL, not from the canonical direct sandbox URL.
So the current UI still leaks proxy routing details rather than showing the pure sandbox path model from the original plan.
The current UI has:
It still lacks dedicated UX for:
The current desktop-side provider contract is basically:
Still likely missing for production use:
appPath is still sent to the engineThe create request still sends the local absolute app path.
That is not required for the general remote execution model and leaks local machine structure unnecessarily.
Coverage is better now. There is cloud E2E coverage for:
Still missing targeted coverage for: