windmill-labs/windmill · error
A pipeline node already exists at '${path}'. Use edit_pipeli
Error message
A pipeline node already exists at '${path}'. Use edit_pipeline_node to change it instead. What it means
pipelineAiHelpers proposeNode rejects creating a node where the resolved pipeline graph already has a node (deployed pipeline runnable) at that path; building new would shadow it as a draft, so the model must use edit_pipeline_node.
Source
Thrown at frontend/src/lib/components/assets/AssetGraph/pipelineAiHelpers.ts:245
return undefined
}
},
proposeNode: async ({ path, language, content, outputKind }) => {
deps.ensureEditable?.()
// build_pipeline_node creates a NEW node in the OPEN folder. Reject a path
// outside the folder (it would silently stage into this folder's bundle)
// and a path that collides with an existing node (the model should use
// edit_pipeline_node instead of shadowing a deployed node as a draft).
assertInFolder(path)
assertPipelineAnnotation(content)
const drafts = deps.getDrafts()
if (drafts.has(path)) {
throw new Error(
`A draft already exists at '${path}'. Use edit_pipeline_node to change it instead.`
)
}
if (deps.getResolvedGraph().runnables.some((r) => r.path === path)) {
throw new Error(
`A pipeline node already exists at '${path}'. Use edit_pipeline_node to change it instead.`
)
}
// Authoritative new-node check: the resolved graph may not have hydrated yet
// (the session preview can race open_preview), and it only lists pipeline
// runnables — so probe the backend. ANY deployed script at this path means
// "build new" would shadow it on deploy; the model should edit instead.
const workspace = deps.getWorkspace()
if (workspace) {
let deployedExists = false
try {
await ScriptService.getScriptByPath({ workspace, path })
deployedExists = true
} catch {
// 404 → no deployed script at this path, safe to create a new node.
}
if (deployedExists) {
throw new Error(View on GitHub (pinned to e474e8803c)
Solutions
- Use edit_pipeline_node to change the existing pipeline node.
- Choose a fresh path for a new node.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at frontend/src/lib/components/assets/AssetGraph/pipelineAiHelpers.ts:245 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/42be7824ae50395c.
Report an issue: GitHub.