coleam00/Archon · warning

workflow.source_legacy_live

workflow.source_legacy_live

Error message

⚠️ This run started before Archon captured workflow source, so there is nothing recorded to resume from. Continuing against the current source on disk, which may differ from what the run originally executed.

What it means

Current Archon captures the workflow YAML source at run start and resumes from those recorded bytes. Runs created before source capture existed have no recorded bytes, so on resume the executor warns and continues against the current file on disk, which may differ from what the run originally executed. This is the only warning-and-continue resume path and retires once legacy runs are gone.

Source

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

      // would re-read `commands.folder` and `defaults:` from the workspace it acts on and
      // reinterpret the frozen bytes through them.
      workflowSourceRoots = capturedSourceRoots(recordedSource.root, loaded.manifest.source_config);
      getLog().debug(
        { workflowRunId: workflowRun.id, captureRoot: recordedSource.root },
        'workflow.source_restored'
      );
    } catch (error) {
      return await failRunOnSource(
        `This run's captured workflow source at ${recordedSource.root} is missing or altered ` +
          `(${(error as Error).message}). The run cannot be resumed against different source; ` +
          'start a fresh run to execute the current workflow.'
      );
    }
  } else if (isResume) {
    // Created before source capture existed. Its original bytes were never recorded and
    // cannot be reconstructed, so it resumes the way it always did — against live source.
    // This is the ONLY warning-and-continue path, and it retires with those runs.
    getLog().warn({ workflowRunId: workflowRun.id }, 'workflow.source_legacy_live');
    await safeSendMessage(
      platform,
      conversationId,
      '⚠️ This run started before Archon captured workflow source, so there is nothing ' +
        'recorded to resume from. Continuing against the current source on disk, which may ' +
        'differ from what the run originally executed.'
    );
  } else if (preparedSource) {
    // The normal fresh path: the caller captured BEFORE selecting a workflow and
    // discovered from that capture, so the YAML being executed and the commands and
    // scripts beside it are one consistent set of bytes.
    //
    // Move the staged capture under this run's artifacts, so it lives and dies with the
    // rest of the run's output instead of accumulating in a staging directory nothing
    // reclaims. Same filesystem, so this is a rename.
    const finalCaptureRoot = getRunSourceCapturePath(artifactsDir);
    try {
      if (preparedSource.captureRoot !== finalCaptureRoot) {

View on GitHub (pinned to 0773b97458)

Solutions

  1. Review the current workflow file on disk and confirm it still matches the original run's intent before letting the resume proceed; revert incompatible edits.
  2. If fidelity matters, cancel/fail the legacy run and start a fresh run — new runs capture their source and resume faithfully.
  3. If divergence is acceptable, acknowledge the warning and let the resume continue against live source.
  4. As an upgrade task, sweep for runs lacking captured source and close them out so this path retires.

Example fix

# before: blindly resuming the legacy run (executes current on-disk YAML)
$ archon workflow resume <legacyRunId>
# after: start a fresh run whose source is captured and resumes are faithful
$ archon workflow run <workflowName> ...
Defensive patterns

Strategy: validation

Validate before calling

// Detect a legacy run before resuming and decide whether fidelity matters:
const run = await store.getWorkflowRun(runId);
if (!run.workflowSource) {
  console.warn('Legacy run: no captured source; resume will use live on-disk YAML');
  // diff the current file against the known-original semantics, or start a new run
}

Type guard

function hasCapturedSource(run: { workflowSource?: string | null }): run is { workflowSource: string } {
  return typeof run.workflowSource === 'string' && run.workflowSource.length > 0;
}

Prevention

When it happens

Trigger: Any resume (isResume) of a workflow run persisted before source capture was introduced, i.e. the run record carries no captured workflow source; fires on executor.ts:2655 for CLI, chat, and web resume alike.

Common situations: Installations upgraded across the source-capture release with runs paused since before the upgrade; operators resume a weeks-old paused run after the workflow file was edited, so the resumed execution silently differs from the original.

Related errors


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