{"record":{"id":"7601738e4343f0dc","repo":"Yeachan-Heo/oh-my-codex","slug":"detached-leader-release-timed-out","errorCode":null,"errorMessage":"detached leader release timed out","messagePattern":"detached leader release timed out","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/cli/index.ts","lineNumber":7105,"sourceCode":"      const abortPath = `${payload.readyPath}.abort`;\n      const releaseDeadline = Date.now() + 30_000;\n      let interrupted: NodeJS.Signals | undefined;\n      const interrupt = (signal: NodeJS.Signals): void => { interrupted = signal; };\n      process.once(\"SIGINT\", () => interrupt(\"SIGINT\"));\n      process.once(\"SIGTERM\", () => interrupt(\"SIGTERM\"));\n      process.once(\"SIGHUP\", () => interrupt(\"SIGHUP\"));\n      while (true) {\n        if (interrupted) throw new Error(`detached leader interrupted before release: ${interrupted}`);\n        const release = readDetachedLeaderReport(releasePath);\n        if (release?.kind === \"release\" && release.nonce === nonce && release.sessionId === payload.sessionId && release.sessionName === payload.sessionName && release.leaderPid === process.pid) {\n          detachedHudProof = parseDetachedHudAuthorityProof(release.hud);\n          break;\n        }\n        const abort = readDetachedLeaderReport(abortPath);\n        if (abort?.kind === \"abort\" && abort.nonce === nonce && abort.sessionId === payload.sessionId && abort.sessionName === payload.sessionName && abort.leaderPid === process.pid) {\n          throw new Error(\"detached launch aborted before release\");\n        }\n        if (Date.now() >= releaseDeadline) throw new Error(\"detached leader release timed out\");\n        blockMs(20);\n      }\n      rmSync(releasePath, { force: true });\n      rmSync(abortPath, { force: true });\n    }\n    const child = spawn(process.platform === \"win32\" ? \"powershell.exe\" : \"/bin/sh\", process.platform === \"win32\" ? [\"-NoProfile\", \"-Command\", payload.codexCmd] : [\"-c\", payload.codexCmd], {\n      cwd: payload.cwd,\n      stdio: \"inherit\",\n      ...(process.platform === \"win32\" ? {} : { detached: true }),\n    });\n    let escalation: NodeJS.Timeout | undefined;\n    const signalChildTree = (signal: NodeJS.Signals, force = false): void => {\n      if (!child.pid) return;\n      try {\n        if (process.platform === \"win32\") execFileSync(\"taskkill\", [\"/PID\", String(child.pid), \"/T\", ...(force ? [\"/F\"] : [])], { stdio: \"ignore\" });\n        else process.kill(-child.pid, signal);\n      } catch {}\n    };","sourceCodeStart":7087,"sourceCodeEnd":7123,"githubUrl":"https://github.com/Yeachan-Heo/oh-my-codex/blob/3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2/src/cli/index.ts#L7087-L7123","documentation":"The leader polls release/abort report files on a 20ms loop until a deadline; if neither appears in time, it throws this timeout.","triggerScenarios":"Date.now() exceeds releaseDeadline without a valid release or abort report — launcher process hung, killed, or too slow to write the report file.","commonSituations":"Heavily loaded machine, tmux server startup latency, report file path permissions issues, or the parent CLI crashed before writing the report.","solutions":["Check that the report directory is writable and not on a slow/stalled filesystem","Look for a crashed or hung parent launcher process (check its logs) and retry","Report a bug if the deadline is consistently too short for your environment (large sessions, cold tmux server)"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { await launchDetached(); } catch (e) {\n  if ((e as Error).message === 'detached leader release timed out') await sleep(2000), launchDetached(); // one retry\n  else throw e;\n}","preventionTips":["Keep report directories on fast local filesystems","Monitor the parent launcher for crashes","Warm the tmux server before launching many sessions"],"tags":["timeout","detached-session","polling"],"backgroundTag":"operation-timed-out","analyzedSha":"3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2","analyzedAt":"2026-08-27T22:18:39.783Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}