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

shutdown_confirm_issues_required:failed=${gate.failed}:rerun

Error message

shutdown_confirm_issues_required:failed=${gate.failed}:rerun=omx team shutdown ${sanitized} --confirm-issues

What it means

Shutdown gate refusal in issue-confirmation mode: the gate is not allowed, failed tasks exist, and the caller did not pass --confirm-issues or force. The message embeds the failed count and the exact rerun command with --confirm-issues.

Source

Thrown at src/team/runtime.ts:4937

    : '';
  const governance = resolveGovernancePolicy(
    manifest?.governance,
    manifest?.policy as Partial<TeamGovernance> | undefined,
  );

  const classification = await withTeamTaskMembershipBarrier(sanitized, cwd, async () => {
    const current = await classifyShutdown({
      teamName: sanitized,
      cwd,
      config: config!,
      governance,
      confirmIssues,
    });
    const { gate, requiresIssueConfirmation } = current;

    if (!force && !gate.allowed) {
      if (requiresIssueConfirmation) {
        throw new Error(
          `shutdown_confirm_issues_required:failed=${gate.failed}:rerun=omx team shutdown ${sanitized} --confirm-issues`,
        );
      }
      throw new Error(
        `shutdown_gate_blocked:pending=${gate.pending},blocked=${gate.blocked},in_progress=${gate.in_progress},failed=${gate.failed}`,
      );
    }

    const now = new Date().toISOString();
    const existingPhase = await readTeamPhaseState(sanitized, cwd);
    const terminalReason = force ? 'forced_shutdown' : 'shutdown_gate_passed';
    await writeTeamPhaseState(sanitized, {
      current_phase: existingPhase?.current_phase ?? 'team-exec',
      max_fix_attempts: existingPhase?.max_fix_attempts ?? 3,
      current_fix_attempt: existingPhase?.current_fix_attempt ?? 0,
      transitions: existingPhase?.transitions ?? [],
      updated_at: now,
      terminal_epoch: existingPhase?.terminal_epoch ?? now,

View on GitHub (pinned to 3ad79a8a6f)

Solutions

  1. Re-run the exact command in the message with --confirm-issues (e.g. `omx team shutdown <team> --confirm-issues`) to acknowledge failed tasks
  2. Investigate and fix the failed tasks first, so the gate allows a normal shutdown
  3. Use force only if destroying the team despite failures is intentional

Example fix

# before
omx team shutdown myteam

# after
omx team shutdown myteam --confirm-issues
Defensive patterns

Strategy: validation

Validate before calling

const { gate, requiresIssueConfirmation } = await evaluateShutdownGate(teamName, { confirmIssues: false });
if (requiresIssueConfirmation && gate.failed > 0) throw new Error('pass --confirm-issues or fix failures');

Try / catch

try { await shutdownTeam(t, cwd, { force: false }); } catch (e) { if (/^shutdown_confirm_issues_required:/.test((e as Error).message)) await shutdownTeam(t, cwd, { confirmIssues: true }); else throw e; }

Prevention

When it happens

Trigger: Calling shutdown without force while the shutdown gate finds failed tasks and requiresIssueConfirmation is true — the API demands explicit acknowledgement of failed issues before teardown.

Common situations: Shutting down a team where some tasks failed; operators scripting shutdown without accounting for the confirm-issues gate; governance configured to require issue confirmation on shutdown.

Related errors


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