{"record":{"id":"741fad3da772b3f4","repo":"windmill-labs/windmill","slug":"could-not-start-a-run-for-node-path","errorCode":null,"errorMessage":"Could not start a run for node '${path}'.","messagePattern":"Could not start a run for node '(.+?)'\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"frontend/src/lib/components/copilot/chat/pipeline/core.ts","lineNumber":315,"sourceCode":"\t\t\t\tresult: 'Success'\n\t\t\t})\n\t\t\treturn `Discarded the unsaved draft at '${path}'.`\n\t\t}\n\t},\n\t{\n\t\tdef: testPipelineNodeToolDef,\n\t\trequiresConfirmation: true,\n\t\tconfirmationMessage: 'Run pipeline node',\n\t\tshowDetails: true,\n\t\tautoCollapseDetails: false,\n\t\tfn: async ({ args, workspace, helpers, toolId, toolCallbacks }) => {\n\t\t\tconst pipeline = requirePipeline(helpers)\n\t\t\tconst { path, args: runArgs } = testPipelineNodeSchema.parse(args)\n\t\t\treturn executeTestRun({\n\t\t\t\tjobStarter: async () => {\n\t\t\t\t\tconst jobId = await pipeline.testNode(path, runArgs ?? undefined)\n\t\t\t\t\tif (!jobId) {\n\t\t\t\t\t\tthrow new Error(`Could not start a run for node '${path}'.`)\n\t\t\t\t\t}\n\t\t\t\t\treturn jobId\n\t\t\t\t},\n\t\t\t\tworkspace,\n\t\t\t\ttoolCallbacks,\n\t\t\t\ttoolId,\n\t\t\t\tstartMessage: `Starting run of '${path}'...`,\n\t\t\t\tcontextName: 'script'\n\t\t\t})\n\t\t}\n\t}\n]\n\n/**\n * Pipeline-specific guidance appended to the global system prompt when a\n * /pipeline editor is open. Describes the annotation model and the direct-draft\n * workflow so the model uses the pipeline tools rather than the generic\n * write_script draft tools.","sourceCodeStart":297,"sourceCodeEnd":333,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/frontend/src/lib/components/copilot/chat/pipeline/core.ts#L297-L333","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nawait pipeline.testNode('tranform_1', args) // typo -> null jobId -> throws\n// after\nawait pipeline.testNode('transform_1', args)","handlingStrategy":"validation","validationCode":"const nodeExists = pipeline.getNodes?.().some(n => n.id === path) // or verify against pipeline JSON\nif (!nodeExists) {\n  // fix the path before calling testNode\n}","typeGuard":"function isJobId(v) { return typeof v === 'string' && v.length > 0 }","tryCatchPattern":"try {\n  const jobId = await pipeline.testNode(path, args)\n  if (!jobId) throw new Error(`Node '${path}' does not exist or is not testable`)\n} catch (e) {\n  // verify node path in the pipeline editor, then retry\n}","preventionTips":["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"],"tags":["pipeline","job-execution","ai-copilot"],"backgroundTag":"job-start-failed","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}