deploy-quinn-my's build job hung ~40 min at the lixbuild step inside the
Forgejo runner's act Docker container, then died on the job timeout — the
long-standing reason quinn.my never deployed via CI.
Root cause: lixbuild's frontend builder runs `execa("vite", ["build"],
{ stdio: "pipe" })`. vite spawns esbuild's persistent service process, which
inherits execa's stdout/stderr pipe fds. When vite exits, execa keeps waiting
for those pipes to reach EOF, but the lingering esbuild service holds them
open — so execa (and thus lixbuild) blocks forever. The deadlock only shows in
the container; on a normal shell esbuild's service tears down cleanly. quinn.www
never hit this because quinn.www/root builds with `vite build` directly.
Switch my/frontend-public to `vite build` (exactly what lixbuild runs
internally, minus the piped-execa wrapper). Verified: identical dist output,
3.5s build, and it matches the already-working quinn.www pattern in the same
runner. (The underlying lixbuild stdio:"pipe" bug should be fixed at source in
@lilith/lix-build so every frontend consumer benefits — tracked separately.)
Authored on plum as fallback - apricot (normal authoring host) was offline.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>