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

  1. Verify the node path matches an existing step id in the open pipeline (check the editor or pipeline JSON)
  2. Retry with the exact path of a runnable node; for flows/subflows ensure the underlying step itself can run
  3. Check the pipeline editor for validation errors that block test runs
  4. 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

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


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/741fad3da772b3f4. Report an issue: GitHub.