Repository navigation
Conversation
The hub runs with --conditions=intx-src, which resolves the vendored workspace packages to their TypeScript source, but it launched the sandbox child that performs every file read and write without it. The child then followed the packages' default export to a built dist that ships nowhere, and every designer and coder tool call failed with "Cannot find module '@intx/tools-posix'".
…rong Chrome for Testing now publishes a headless shell for 64-bit ARM Linux, so install it there too; the hub assumed no such build existed and installed nothing on an arm64 host, such as the VM Colima runs. With no browser installed, check-app crashed scanning the missing $HOME/browsers folder instead of reporting the browser rule, and the sandbox command runner discarded stderr, so a designer saw an empty checklist and a failed status with no reason. Treat the missing folder as "browser not installed", and keep a failed command's stderr in its output.
srt sets TMPDIR to /tmp/claude for every sandboxed command but never creates that folder inside the sandbox's own /tmp. Bun's WebView needs a temp folder for Chrome's profile, so check-app failed with "Failed to spawn Chrome" before Chrome ran. The command shim now creates TMPDIR first.
On Linux srt relays the sandbox's proxy ports to the host over Unix sockets in the host's temp folder and binds them into the sandbox before the hub's default-deny read policy lands, which wipes them. Every connection through the proxy was reset, so a coder's workspace setup failed to download any package. After initializing the sandbox, name the bridge sockets in allowRead so srt binds them back over the deny.
This was referenced Nov 2, 2026
Closed
Contributor
|
#81 folded in all of #66's
|
Contributor
Author
|
Superseded: #81 carried these sandbox fixes to main (the source conditions flag, arm64 Chrome, the TMPDIR shim and the bridge sockets), so this branch no longer adds anything. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follows #29, which let bubblewrap start inside the Compose hub. Once it could, four more faults surfaced one at a time, each of which the agents could only report as "my workspace is broken". One commit per fault, in the order they were met.
What changed
apps/hub/src/builds/posix-sandbox.ts): the sandbox child that performs every file read and write is launched with--conditions=intx-srclike the hub, so@intx/tools-posixresolves to source instead of adistthat ships nowhere. Error before:Cannot find module '@intx/tools-posix' from '/app/apps/hub/src/builds/posix-child.ts'.starter.ts,workflows/coder/check/check-app.ts,posix-sandbox.ts): Chrome for Testing now publishes an arm64 Linux headless shell, so it is installed there; check-app reports a missing browser instead of crashing on the absent$HOME/browsers; a failed command keeps its stderr in its output. Before, a designer saw an empty checklist anddesign_check_failedwith no reason.posix-sandbox.ts): the command shim creates$TMPDIR, which srt points at/tmp/claudewithout creating it inside the sandbox's fresh/tmp. Bun's WebView needs a temp folder for Chrome's profile; before, it failed withFailed to spawn Chrome ... ERR_DLOPEN_FAILED.posix-sandbox.ts): on Linux srt relays the sandbox's proxy ports to the host over Unix sockets in the host's temp folder and binds them before the hub's default-deny read policy lands, which wipes them. After initializing the sandbox, the bridge sockets are named inallowReadso srt binds them back. Before, every request through the proxy was reset and the coder'sbun installfailed on every tarball withConnectionClosed.How it was verified
On Colima 0.10.3 (Ubuntu 24.04.4, arm64) with the hub rebuilt from these commits, each check ran through the hub's own
createPosixBuildExecutor, not a hand-written sandbox config:write_filecall inside the sandbox.bun installcompletes.Specialist runs freeze their tool bundle when created, so runs started before a hub rebuild keep failing until they are replaced; that is worth its own issue.
tsc --noEmit -p .passes with these files in place, and theapps/hub/src/buildstests pass.