Yeachan-Heo/oh-my-codex · error · Error

tmux pane is not proven live: ${reconciledPaneId}

Error message

tmux pane is not proven live: ${reconciledPaneId}

What it means

Thrown by restoreStandaloneHudPane's reconciliation path: split-window output could not be parsed, exactly one new pane carrying the split receipt was found via topology diff, a cleanup debt was persisted for it, but readExactPaneProofSync(reconciledPaneId) then returned status 'gone'. The freshly created HUD pane already died (or the proof read raced with reaping), so the library cannot bind a PID to the cleanup debt and throws.

Source

Thrown at src/team/tmux-session.ts:3120

    }
    const newlyObservedPaneIds = afterTopology.panes
      .filter((pane) => !beforeSplitPaneIds.has(pane.paneId) && pane.startCommand.includes(splitReceipt))
      .map((pane) => pane.paneId);
    if (newlyObservedPaneIds.length === 1) {
      const reconciledPaneId = newlyObservedPaneIds[0]!;
      persistRestoredHudCleanupDebtSync(cwd, {
        schema_version: 1,
        operation: 'restored_hud_cleanup',
        pane_id: reconciledPaneId,
        pane_pid: null,
        leader_pane_id: normalizedLeaderPaneId,
        leader_pane_pid: options.expectedLeaderPanePid ?? leaderPanePid,
        leader_pane_owner_id: options.expectedLeaderPaneOwnerId?.trim() || null,
        hud_owner_leader_pane_id: normalizedLeaderPaneId,
      }, options.stateRoot);
      const reconciledProof = readExactPaneProofSync(reconciledPaneId);
      if (reconciledProof.status === 'unavailable') throw new ExactPaneProofUnavailableError(reconciledProof);
      if (reconciledProof.status === 'gone') throw new Error(`tmux pane is not proven live: ${reconciledPaneId}`);
      persistRestoredHudCleanupDebtSync(cwd, {
        schema_version: 1,
        operation: 'restored_hud_cleanup',
        pane_id: reconciledPaneId,
        pane_pid: reconciledProof.pid,
        leader_pane_id: normalizedLeaderPaneId,
        leader_pane_pid: options.expectedLeaderPanePid ?? leaderPanePid,
        leader_pane_owner_id: options.expectedLeaderPaneOwnerId?.trim() || null,
        hud_owner_leader_pane_id: normalizedLeaderPaneId,
      }, options.stateRoot);
    }
    throw new Error('restored_hud_split_output_ambiguous');
  }
  persistRestoredHudCleanupDebtSync(cwd, {
    schema_version: 1,
    operation: 'restored_hud_cleanup',
    pane_id: paneId,
    pane_pid: null,

View on GitHub (pinned to 3ad79a8a6f)

Solutions

  1. Check whether the pane died because the HUD command failed: run the same node <omxEntry> hud --watch command manually in a split
  2. Verify the node binary and omx CLI entry paths are valid from the pane's working directory and shell
  3. Look for concurrent restores/users killing panes and serialize them
  4. Retry the restore after fixing the HUD startup failure
Defensive patterns

Strategy: try-catch

Validate before calling

// Smoke-test the HUD command before restoring
execSync(`${nodePath} ${omxEntry} hud --watch --check`, { stdio: 'pipe' }); // if such a check mode exists

Try / catch

try { restoreStandaloneHudPane(id, cwd, opts); } catch (e) { if (e instanceof Error && e.message.startsWith('tmux pane is not proven live')) { /* new HUD pane died on spawn: test HUD command manually, fix node/entry paths, retry */ } else throw e; }

Prevention

When it happens

Trigger: The HUD pane created by split-window exits before its liveness proof is read — HUD process fails immediately (node/entry path invalid on the spawned shell, env assignment failure), or the pane is killed by a concurrent actor right after creation.

Common situations: resolveLeaderNodePath/resolveOmxCliEntryPath resolving differently inside the pane's shell (PATH differences); shell quoting/env issues in the exec env command on the target cwd; pane killed by a parallel restore; aggressive pane exit reaping.

Related errors


AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27). Data as JSON: /api/errors/902f18b1301bd2e9. Report an issue: GitHub.