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

approved_execution_binding_malformed:${sanitized}

Error message

approved_execution_binding_malformed:${sanitized}

What it means

Thrown when resolving the persisted approved team execution continuity state returns status 'malformed' — the saved approved-execution binding cannot be parsed or is invalid.

Source

Thrown at src/team/runtime.ts:5633

  return { commitHygieneArtifacts }
}

/**
 * Resume monitoring an existing team.
 */
export async function resumeTeam(teamName: string, cwd: string): Promise<TeamRuntime | null> {
  const sanitized = resolveTeamNameForCurrentContext(teamName, cwd);
  const config = await readTeamConfig(sanitized, cwd);
  if (!config) return null;
  config.lifecycle_profile = 'default';
  const leaderCwd = config.leader_cwd ?? cwd;
  const approvedExecutionState = await resolvePersistedApprovedTeamExecutionContinuityState(
    sanitized,
    leaderCwd,
    config.team_state_root ?? resolveCanonicalTeamStateRoot(leaderCwd),
  );
  if (approvedExecutionState.status === 'malformed') {
    throw new Error(`approved_execution_binding_malformed:${sanitized}`);
  }
  if (approvedExecutionState.status === 'ambiguous') {
    throw new Error(
      `approved_execution_binding_ambiguous:${approvedExecutionState.binding.prd_path}:${approvedExecutionState.binding.task}`,
    );
  }
  if (approvedExecutionState.status === 'stale') {
    throw new Error(
      `approved_execution_binding_stale:${approvedExecutionState.binding.prd_path}:${approvedExecutionState.binding.task}`,
    );
  }
  if (config.worker_launch_mode === 'prompt') {
    const handleTeamConfig = { ...config, name: sanitized };
    const hasLivePromptWorker = config.workers.some((worker) => isPromptWorkerAlive(handleTeamConfig, worker));
    if (!hasLivePromptWorker) return null;

    const missingHandles = config.workers
      .filter((worker) => {

View on GitHub (pinned to 3ad79a8a6f)

Solutions

  1. Inspect the persisted approved-execution state file under the team state root for corruption
  2. Delete or re-create the approved execution binding via the normal approve flow
  3. If caused by an upgrade, re-run the approval step to regenerate state in the new format
Defensive patterns

Strategy: validation

Validate before calling

const state = await resolvePersistedApprovedTeamExecutionContinuityState(name, cwd, root); if (state.status === 'malformed') { /* reset binding */ }

Type guard

(s): s is { status: 'ok' } => s.status === 'ok'

Prevention

When it happens

Trigger: Calling resume/continuity APIs for a team whose persisted approved execution state file is corrupt, truncated, or fails schema validation.

Common situations: Manually edited or partially written team state JSON, version upgrades that changed the binding schema, or crashes while persisting the binding.

Understand the failure class

Related errors


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