windmill-labs/windmill · error
Could not start a run for node '${path}'.
Error message
Could not start a run for node '${path}'. What it means
testPipelineNode asks the editor helper pipeline.testNode(path, args) to kick off a test run and return a job id. When the helper resolves with a falsy job id, the tool cannot point at a run and throws this error.
Source
Thrown at frontend/src/lib/components/copilot/chat/pipeline/core.ts:315
result: 'Success'
})
return `Discarded the unsaved draft at '${path}'.`
}
},
{
def: testPipelineNodeToolDef,
requiresConfirmation: true,
confirmationMessage: 'Run pipeline node',
showDetails: true,
autoCollapseDetails: false,
fn: async ({ args, workspace, helpers, toolId, toolCallbacks }) => {
const pipeline = requirePipeline(helpers)
const { path, args: runArgs } = testPipelineNodeSchema.parse(args)
return executeTestRun({
jobStarter: async () => {
const jobId = await pipeline.testNode(path, runArgs ?? undefined)
if (!jobId) {
throw new Error(`Could not start a run for node '${path}'.`)
}
return jobId
},
workspace,
toolCallbacks,
toolId,
startMessage: `Starting run of '${path}'...`,
contextName: 'script'
})
}
}
]
/**
* Pipeline-specific guidance appended to the global system prompt when a
* /pipeline editor is open. Describes the annotation model and the direct-draft
* workflow so the model uses the pipeline tools rather than the generic
* write_script draft tools.View on GitHub (pinned to e474e8803c)
Solutions
- Verify the node path matches an existing step id in the open pipeline (check the editor or pipeline JSON)
- Retry with the exact path of a runnable node; for flows/subflows ensure the underlying step itself can run
- Check the pipeline editor for validation errors that block test runs
- If args were supplied, clear or correct runArgs so they match the node's expected input schema
Example fix
// before
await pipeline.testNode('tranform_1', args) // typo -> null jobId -> throws
// after
await pipeline.testNode('transform_1', args) Defensive patterns
Strategy: validation
Validate before calling
const nodeExists = pipeline.getNodes?.().some(n => n.id === path) // or verify against pipeline JSON
if (!nodeExists) {
// fix the path before calling testNode
} Type guard
function isJobId(v) { return typeof v === 'string' && v.length > 0 } Try / catch
try {
const jobId = await pipeline.testNode(path, args)
if (!jobId) throw new Error(`Node '${path}' does not exist or is not testable`)
} catch (e) {
// verify node path in the pipeline editor, then retry
} Prevention
- Copy node paths directly from the pipeline editor, never from memory
- Keep run args aligned with the node's input schema
- Watch for renames/deletions of steps between reading and testing
When it happens
Trigger: pipeline.testNode(path, runArgs) resolves undefined/null — typically the node path does not exist in the pipeline, the node type is not testable, or the editor refused to start a run without surfacing its own error.
Common situations: LLM hallucinates or mis-spells the node path (e.g. wrong step id); node was deleted/renamed in the editor; passing run args to a node that takes none via a schema mismatch.
Related errors
- No pipeline editor is open. Pipeline tools only work on a /p
- Pipeline nodes must be in the open folder — use 'f/${folder}
- Pipeline node content must declare the pipeline annotation o
- Runnable "${target.key}" is not inline. Use read_workspace_i
- Runnable "${target.key}" language is ${expected}. Use backen
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/741fad3da772b3f4.
Report an issue: GitHub.