Repro
nix develop
just run_local --no-doppler on a fresh checkout (no bun install run yet)
Actual
✗ Starting frontend Failed 36s
frontend dev server did not become ready
Error: frontend dev server did not become ready
error: recipe run_local failed on line 13 with exit code 1
All backend services come up healthy — only the frontend step fails, with no indication of why.
Root cause
apps/web/node_modules doesn't exist yet. frontend::start() in tooling/xtask/crates/xtask_local/src/local/frontend.rs spawns bun run dev and polls the port for ~36s; without deps installed, bun/Vite never binds the port in that window, so it hits the generic "did not become ready" bail with no mention of the missing install.
run_local doesn't run bun install anywhere, so this hits every fresh clone.
Proposed fix
In start(), check for apps/web/node_modules before spawning bun run dev and bail with a clear message (mirroring the existing "port already in use" bail right above it), e.g.:
apps/web/node_modules is missing — run \bun install` from the repo root first.`

Repro
nix developjust run_local --no-doppleron a fresh checkout (nobun installrun yet)Actual
✗ Starting frontend Failed 36s
frontend dev server did not become ready
Error: frontend dev server did not become ready
error: recipe run_local failed on line 13 with exit code 1
All backend services come up healthy — only the frontend step fails, with no indication of why.
Root cause
apps/web/node_modulesdoesn't exist yet.frontend::start()intooling/xtask/crates/xtask_local/src/local/frontend.rsspawnsbun run devand polls the port for ~36s; without deps installed,bun/Vite never binds the port in that window, so it hits the generic "did not become ready" bail with no mention of the missing install.run_localdoesn't runbun installanywhere, so this hits every fresh clone.Proposed fix
In
start(), check forapps/web/node_modulesbefore spawningbun run devand bail with a clear message (mirroring the existing "port already in use" bail right above it), e.g.: