diff --git a/packages/cli-workflow/src/thread-scan.ts b/packages/cli-workflow/src/thread-scan.ts index 43aeabd..7b7ef0d 100644 --- a/packages/cli-workflow/src/thread-scan.ts +++ b/packages/cli-workflow/src/thread-scan.ts @@ -232,13 +232,15 @@ export async function resolveThreadListStatus( } // No .running marker + no __end__ + source "active" → check if worker is dead (crashed) const ctlResult = await readWorkerCtl(storageRoot, row.hash); - if (ctlResult.ok) { - try { - process.kill(ctlResult.value.pid, 0); - } catch { - // Worker PID is dead, thread never finished — crashed - return "failed"; - } + if (!ctlResult.ok) { + // No ctl file means worker never registered or was already cleaned up — dead thread + return "failed"; + } + try { + process.kill(ctlResult.value.pid, 0); + } catch { + // Worker PID is dead, thread never finished — crashed + return "failed"; } return "active"; }