coleam00/Archon · error · Error
Dry-run failed; missing stubs: ${blockingMissingStubs.join('
Error message
Dry-run failed; missing stubs: ${blockingMissingStubs.join(', ')} / Dry-run failed. See the trace for details. What it means
A dry-run simulation failed. If any missing stubs actually blocked nodes (excluding ones an `all_done` join tolerated, per #2869), the error names them; otherwise it points the operator at the trace. Thrown after result.missingStubs is filtered against toleratedMissingStubs.
Source
Thrown at packages/cli/src/commands/workflow.ts:1809
execCode: options.execCode,
defaultStubs: options.defaultStubs,
pauseAtGates: options.pauseAtGates,
config: dryRunConfig,
aiProfile: applyResolvedRunModelOverrides(dryRunBaseProfile, dryRunModelOverrides),
});
if (options.json) {
await writeJsonLine(result);
} else {
await writeStdout(`${formatDryRunTrace(result)}\n`);
}
if (result.outcome === 'failed') {
// Same filter `checkFixture` applies: a stub an `all_done` join tolerated
// never blocked anything, so naming it as a cause of this failure points
// the reader at the wrong node (#2869).
const blockingMissingStubs = result.missingStubs.filter(
nodeId => !result.toleratedMissingStubs.includes(nodeId)
);
throw new Error(
blockingMissingStubs.length > 0
? `Dry-run failed; missing stubs: ${blockingMissingStubs.join(', ')}`
: 'Dry-run failed. See the trace for details.'
);
}
return;
}
// Validate mutually exclusive flags (defensive — cli.ts checks these for UX, but
// workflowRunCommand is the authoritative boundary for programmatic callers)
if (options.branchName !== undefined && options.noWorktree) {
throw new Error(
'--branch and --no-worktree are mutually exclusive.\n' +
' --branch creates an isolated worktree (safe).\n' +
' --no-worktree runs directly in your repo (no isolation).\n' +
'Use one or the other.'
);
}View on GitHub (pinned to 0773b97458)
Solutions
- Add stub entries for the named node ids and re-run the dry-run
- If no stubs are named, inspect the run trace to find the failing node and fix the workflow or inputs
- Check whether stub node ids still match the current YAML node names
Example fix
// before (stubs.yaml) build: ok // after (add the missing node) build: ok test: ok
Defensive patterns
Strategy: try-catch
Validate before calling
const stubs = parseStubsFile(stubsPath);
const nodeIds = workflow.nodes.map(n => n.id);
const missing = nodeIds.filter(id => !(id in stubs));
if (missing.length) console.warn('Nodes without stubs:', missing.join(', ')); Try / catch
try {
await runDryRun(args);
} catch (e) {
const m = String(e.message).match(/missing stubs: (.*)$/);
if (m) {
for (const nodeId of m[1].split(', ').map(s => s.trim())) addStub(nodeId);
return runDryRun(args);
}
throw e; // no stubs named: inspect the trace
} Prevention
- Regenerate stub files whenever node ids change in the YAML
- Run dry-runs with --stubs-init to seed a fresh stub file
- Check the trace on failures without named stubs
When it happens
Trigger: `archon workflow run wf --dry-run --stubs ...` where the simulation reached a node with no stub value that was required to proceed.
Common situations: Incomplete stub file for a new node added to the workflow; stub node ids renamed after a YAML refactor; genuine workflow failure unrelated to stubs.
Related errors
- Cannot execute run '${detachedPreCreatedRun.id}': it belongs
- ${optionWithoutDryRun} requires --dry-run.
- --dry-run cannot be combined with ${incompatibleFlag}.
- --stubs-init cannot be combined with --stubs.
- --stubs-init cannot be combined with --default-stubs.
AI-assisted analysis of coleam00/Archon@0773b97458 (2026-09-01).
Data as JSON: /api/errors/7013d758f727df05.
Report an issue: GitHub.