coleam00/Archon · error

workflow.parent_resume_nothing_to_resume

workflow.parent_resume_nothing_to_resume

Error message

the parent had no resumable state

What it means

When a child workflow run changes state and the executor tries to resume its parent, it hydrates the parent's resumable state. A parent paused on a child_workflow gate is always resumable by invariant, so a null hydration result means the parent's pause record is missing or inconsistent. The executor logs a warning, notifies the operator the run is stuck, and abandons the resume rather than proceeding with undefined state.

Source

Thrown at packages/workflows/src/executor.ts:1717

    // hydrate's last step; a lost CAS throws WorkflowNotResumableError instead) —
    // the parent stays 'paused' and manually resumable, so log and stand down.
    if (err instanceof Error && err.name === 'WorkflowNotResumableError') {
      // Benign race: a concurrent (manual or duplicate) resume won the CAS and
      // now owns the parent. Not an error — no user-facing message (it IS resuming).
      getLog().info(
        { parentRunId, childRunId: childRun.id },
        'workflow.parent_auto_resume_lost_race'
      );
    } else {
      getLog().error({ err: err as Error, parentRunId }, 'workflow.parent_resume_hydrate_failed');
      await notifyStuck('preparing the parent for resume failed');
    }
    return;
  }
  if (!hydrated) {
    // A parent paused on a child_workflow gate is always resumable (see the
    // child_workflow branch in hydrateResumableRun), so null here is unexpected.
    getLog().warn({ parentRunId }, 'workflow.parent_resume_nothing_to_resume');
    await notifyStuck('the parent had no resumable state');
    return;
  }

  getLog().info(
    { parentRunId, childRunId: childRun.id, childStatus: childRun.status },
    'workflow.parent_auto_resume_started'
  );
  try {
    await executeWorkflow(
      deps,
      platform,
      conversationId,
      parentCwd,
      parentWorkflow,
      parent.user_message ?? '',
      conversationDbId,
      {

View on GitHub (pinned to 0773b97458)

Solutions

  1. Inspect the parent run's persisted pause/resumable state; if the child_workflow pause record was lost, restore it from backup or recreate the pause state.
  2. Resume the parent directly with `archon workflow resume <parentRunId>` so it re-hydrates its own gate state instead of relying on the child-triggered path.
  3. If the parent is genuinely inconsistent, fail or cancel it explicitly and start a fresh run of the workflow.
  4. Check for pruning jobs or interrupted writes that could have removed the record; report persistent cases with run IDs since null here should be impossible.

Example fix

# before: resuming the child in isolation (parent has no state)
$ archon workflow resume <childRunId>
# after: resume the parent whose gate state is intact (or restart it)
$ archon workflow resume <parentRunId>
Defensive patterns

Strategy: validation

Validate before calling

// Confirm the parent actually has resumable state before relying on a child-triggered resume:
const status = await store.getWorkflowRunStatus(parentRunId);
if (status !== 'paused' && status !== 'waiting') {
  throw new Error(`Parent ${parentRunId} has no resumable pause state (${status})`);
}

Type guard

function isResumableParent(status: string | null): status is 'paused' | 'waiting' {
  return status === 'paused' || status === 'waiting';
}

Prevention

When it happens

Trigger: resumeParent flow (executor.ts:1717): a child run's completion/pause triggers parent resume, and hydrateResumableRun returns hydrated === null for the parent — e.g. the parent's child_workflow gate pause record was deleted, pruned, overwritten by an out-of-band resume/cancel, or never persisted due to an interrupted write.

Common situations: Manual DB cleanup or retention pruning that removed the parent's pause metadata; resuming a child whose parent was already cancelled/failed with its pause state cleared; a crash between pausing the parent and writing its resumable record; store state shape changed by an upgrade.

Related errors


AI-assisted analysis of coleam00/Archon@0773b97458 (2026-09-01). Data as JSON: /api/errors/8729106c43a946a1. Report an issue: GitHub.