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
- Inspect the persisted approved-execution state file under the team state root for corruption
- Delete or re-create the approved execution binding via the normal approve flow
- 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
- Validate persisted state after crashes
- Never hand-edit team state JSON
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
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- mode must be a non-empty string
- fileName must be a non-empty string
- approved_execution_binding_ambiguous:${approvedExecutionStat
- scale_down_cleanup_debt_invalid_team_state_root:${worker.nam
- scale_down_cleanup_debt_invalid_worktree_metadata:${worker.n
AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27).
Data as JSON: /api/errors/2cf52617f78d4d43.
Report an issue: GitHub.