Build Log
Alloy Lockfile Repair, Live Deploy, and Workspace ID Bug Sweep
August 1, 2026
Finished the Alloy multi-tenancy deploy saga, then found and fixed 4 live NOT-NULL workspace_id bugs that were silently breaking every real execution start/continue/cancel and runner heartbeat.
Timeline
What shipped
Fixed the second and third missing native-binary lockfile entries (@tailwindcss/oxide-linux-x64-gnu, @unrs/resolver-binding-linux-x64-gnu) via the same disposable-git-worktree repair procedure used for the first (lightningcss) fix
Diagnosed the Vercel Hobby-plan 12-Serverless-Function deployment cap as the real, final blocker — not a code bug — after the build itself started succeeding
Restarted and verified Alloy's local dev server end-to-end after a .env.local repair (done by Zeb, not by Claude — env files are off-limits to read/edit directly)
Ran unit tests via npm test, manually ran the 4 real-DB integration test files, and attempted the Playwright e2e suite (which mostly did not execute — 61 of 64 specs never ran because the global auth setup itself failed against a stale legacy route)
Found and fixed a genuine, live-shipping bug: createControlledExecution's raw SQL INSERT into executions and execution_commands never populated the NOT NULL workspace_id column added by this same multi-tenancy migration
Found and fixed the same bug class in a second function: the execution-cancel raw SQL CTE's execution_commands INSERT also missing workspace_id
Found and fixed the same bug class in recordRunnerHeartbeat: the runner_instances INSERT missing workspace_id, surfaced live via a real 500 on /api/runner/register when manually starting the runner
Threaded workspaceId through recordRunnerHeartbeat's signature and all 5 real call sites (the route, and 3 real-DB proof scripts)
Swept the entire raw-SQL surface of lib/db/queries.ts and lib/commons/queries.ts (the only 2 files dependency-cruiser permits direct db access) for the same shape — confirmed no further gaps
Identified (but did not fix — test maintenance, not app bug) 17 unit tests and 1 e2e auth-setup test that assert against legacy bare-route files, now stale after Phase 1c's /w/[slug]/ route migration
Identified a real test-infrastructure gap: 2 of 4 real-DB integration test files are silently excluded from npm test's own script glob, and 2 more ran with zero output in the combined run despite passing in isolation