From bead746bb8f8ab93b1ee8c85b810b02b747003d6 Mon Sep 17 00:00:00 2001 From: centdix Date: Sat, 21 Feb 2026 19:06:48 +0000 Subject: [PATCH] fix: socat zombie reaping, reconcile filter, and polling logs - Consume proc.exited promise to prevent zombie socat processes - Use container name prefix filter instead of ancestor (matches containers from older image builds) - Improve polling logs to show retry count and waiting state Co-Authored-By: Claude Opus 4.6 --- dev-dashboard/backend/src/socat.ts | 5 +++-- dev-dashboard/backend/src/workmux.ts | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dev-dashboard/backend/src/socat.ts b/dev-dashboard/backend/src/socat.ts index b00f3978e8..06c39da7f9 100644 --- a/dev-dashboard/backend/src/socat.ts +++ b/dev-dashboard/backend/src/socat.ts @@ -38,7 +38,6 @@ export async function startForwarding(branch: string, wtDir: string): Promise {}); entry.ports.push({ host: port, proc }); console.log(`[socat] forwarding :${port} → ${containerIp}:${port} (branch=${branch}, pid=${proc.pid})`); } @@ -96,7 +97,7 @@ export async function reconcileForwarding(getWorktreeDir: (branch: string) => st // No orphans found (pkill exits non-zero when no match) } - const ps = await $`docker ps --filter ancestor=windmill-sandbox --format {{.Names}}`.text(); + const ps = await $`docker ps --filter name=wm- --format {{.Names}}`.text(); const names = ps.trim().split("\n").filter(Boolean); for (const name of names) { diff --git a/dev-dashboard/backend/src/workmux.ts b/dev-dashboard/backend/src/workmux.ts index f7dfca188e..dc35a9c011 100644 --- a/dev-dashboard/backend/src/workmux.ts +++ b/dev-dashboard/backend/src/workmux.ts @@ -173,11 +173,13 @@ export async function addWorktree( // so we poll in the background rather than blocking the API response. if (profile === "agent-yolo" && wtDir) { (async () => { - for (let i = 0; i < 15; i++) { + console.log(`[socat] waiting for container to start for ${branch}...`); + for (let i = 1; i <= 15; i++) { await new Promise(r => setTimeout(r, 2000)); if (await startForwarding(branch, wtDir)) return; + console.log(`[socat] container not ready for ${branch}, retrying (${i}/15)...`); } - console.error(`[socat] gave up waiting for container for ${branch}`); + console.error(`[socat] gave up waiting for container for ${branch} after 30s`); })(); } }