coleam00/Archon · error

workflow.parent_resume_workflow_not_found

workflow.parent_resume_workflow_not_found

Error message

the parent workflow '${parent.workflow_name}' could not be found

What it means

During child-run resume/discovery, the parent run's `workflow_name` no longer resolves to a workflow definition, so the engine cannot reconstruct the parent to resume the child. It marks the situation stuck and reports the missing workflow.

Source

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

    // rather than silently running other source.
    const continuation = await resolveContinuationWorkflow(deps, parent, parentCwd);
    if (continuation) {
      parentWorkflow = continuation.workflow;
    } else {
      // No recorded source: a parent predating capture, which resumes live as it always did.
      const { workflows } = await discoverWorkflowsWithConfig(parentCwd, deps.loadConfig);
      parentWorkflow = resolveWorkflowName(
        parent.workflow_name,
        workflows.map(w => w.workflow)
      );
    }
  } catch (err) {
    getLog().error({ err: err as Error, parentRunId }, 'workflow.parent_resume_discovery_failed');
    await notifyStuck('workflow discovery failed');
    return;
  }
  if (!parentWorkflow) {
    getLog().warn(
      { parentRunId, workflowName: parent.workflow_name },
      'workflow.parent_resume_workflow_not_found'
    );
    await notifyStuck(`the parent workflow '${parent.workflow_name}' could not be found`);
    return;
  }

  let hydrated: Awaited<ReturnType<typeof hydrateResumableRun>>;
  try {
    hydrated = await hydrateResumableRun(deps, parent);
  } catch (err) {
    // Nothing has been mutated yet on a pre-CAS throw (resumeWorkflowRun's CAS is
    // 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(

View on GitHub (pinned to 0773b97458)

Solutions

  1. Restore the workflow definition file with the original name (restore from git)
  2. If the rename was intentional, cancel the stuck child and re-launch under the new workflow name
  3. Check the earlier `workflow.parent_resume_discovery_failed` error log if discovery itself threw

Example fix

# before: workflows/review-pr.yaml deleted while a child run waits
# after
git checkout dev -- workflows/review-pr.yaml
# then resume the run
Defensive patterns

Strategy: validation

Validate before calling

// Before resuming, confirm the parent's workflow definition still resolves
const wf = await workflows.resolve(parent.workflow_name);
if (!wf) throw new Error(`workflow '${parent.workflow_name}' no longer exists; restore it before resuming`);

Type guard

function workflowExists(w: unknown): w is { name: string } {
  return typeof w === 'object' && w !== null && 'name' in w;
}

Try / catch

try {
  await resumeChild(childRunId);
} catch (err) {
  if (/could not be found/.test(err.message)) {
    console.warn(`restore workflow '${parent.workflow_name}' (e.g. git checkout) or relaunch under the new name`);
  } else throw err;
}

Prevention

When it happens

Trigger: Child resume path looks up the parent workflow by `parent.workflow_name` and discovery returns no definition (workflow file deleted/renamed, bundled workflow removed, or discovery threw separately).

Common situations: Renaming or deleting a workflow YAML while runs referencing it were in flight; upgrading Archon where a bundled workflow was removed; typo'd workflow name in an old run row.

Related errors


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