{"record":{"id":"7be14aca9f7e7e95","repo":"Yeachan-Heo/oh-my-codex","slug":"question-ui-pane-paneid-disappeared-immediately","errorCode":null,"errorMessage":"Question UI pane ${paneId} disappeared immediately after launch.","messagePattern":"Question UI pane (.+?) disappeared immediately after launch\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/question/renderer.ts","lineNumber":322,"sourceCode":"function launchQuestionPane(\n  execTmux: ExecTmuxSync,\n  sleepImpl: SleepSync,\n  args: string[],\n  launchedAt: string,\n  returnTarget: string | undefined,\n): {\n  renderer: 'tmux-pane';\n  target: string;\n  launched_at: string;\n  return_target?: string;\n  return_transport?: 'tmux-send-keys';\n} {\n  const rawPane = execTmux(args);\n  const paneId = parsePaneIdFromTmuxOutput(rawPane);\n  if (!paneId) throw new Error('Failed to create tmux question renderer container.');\n  sleepImpl(QUESTION_RENDERER_PANE_SETTLE_MS);\n  if (!isLaunchedQuestionPaneAlive(paneId, execTmux)) {\n    throw new Error(`Question UI pane ${paneId} disappeared immediately after launch.`);\n  }\n  return {\n    renderer: 'tmux-pane',\n    target: paneId,\n    launched_at: launchedAt,\n    ...(returnTarget ? { return_target: returnTarget, return_transport: 'tmux-send-keys' as const } : {}),\n  };\n}\n\nfunction resolveQuestionUiProcessArgs(\n  recordPath: string,\n  options: {\n    cwd: string;\n    env?: NodeJS.ProcessEnv;\n  },\n): string[] {\n  const omxBin = resolveOmxCliEntryPath({\n    argv1: process.argv[1],","sourceCodeStart":304,"sourceCodeEnd":340,"githubUrl":"https://github.com/Yeachan-Heo/oh-my-codex/blob/3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2/src/question/renderer.ts#L304-L340","documentation":"After creating the question pane, launchQuestionPane waits QUESTION_RENDERER_PANE_SETTLE_MS and then checks the pane still exists via isLaunchedQuestionPaneAlive. If the pane is gone, the command it was created to run exited immediately (or tmux reaped it), so the renderer is treated as dead on arrival rather than leaving the user with an invisible question UI.","triggerScenarios":"The spawned shell/command exiting instantly (bad OMX CLI entry path, immediate crash, missing node); pane destroyed by a competing window manager or supersede logic; tmux remain-on-exit off so the pane closes when the command exits.","commonSituations":"The omx binary path resolved incorrectly so the pane's command fails at exec; Node version mismatch crashing the CLI; a previous question pane supersede racing the new pane; extremely slow disk causing exec failure.","solutions":["Run the pane command manually (the CLI with 'question --ui --state-path ...') to see the immediate crash reason.","Verify the OMX CLI entry path resolves (see resolveOmxCliEntryPath errors) and node runs it without error.","Retry the launch; if a supersede/kill race is suspected, ensure prior question panes are closed before relaunching."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// reproduce the pane command manually to verify it stays alive:\n// tmux split-window 'node /path/to/omx question --ui --state-path /tmp/q.json'","typeGuard":null,"tryCatchPattern":"try { launchQuestionRenderer(opts); } catch (e) { if (e instanceof Error && /disappeared immediately after launch/.test(e.message)) { await delay(500); return launchQuestionRenderer(opts); /* one retry */ } throw e; }","preventionTips":["Verify the CLI entry path runs cleanly before wiring it into a pane.","Close stale question panes before launching new ones.","Watch stderr of the pane command during development to catch instant crashes."],"tags":["tmux","renderer","process-exit"],"backgroundTag":"child-process-exited-immediately","analyzedSha":"3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2","analyzedAt":"2026-08-27T22:18:39.783Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}