{"record":{"id":"67a26a8d0efe30e8","repo":"windmill-labs/windmill","slug":"from-opts-from-isn-t-a-pipeline-script","errorCode":null,"errorMessage":"--from '${opts.from}' isn't a `// pipeline` script — it appears in the local graph only as a macro consumer (lineage). Mark it `// pipeline` to run it.","messagePattern":"--from '(.+?)' isn't a `// pipeline` script — it appears in the local graph only as a macro consumer \\(lineage\\)\\. Mark it `// pipeline` to run it\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"cli/src/commands/pipeline/pipeline.ts","lineNumber":751,"sourceCode":"        (r) => r.usage_kind === \"script\" && (r.path.split(\"/\").pop() ?? r.path) === opts.from,\n      );\n      if (matches.length > 1) {\n        throw new Error(\n          `--from '${opts.from}' matches multiple scripts (${matches.map((r) => r.path).sort().join(\", \")}) — pass the full path.`,\n        );\n      }\n      throw new Error(`--from '${opts.from}' matched no script in f/${f}.`);\n    }\n    if (macroLibPaths.has(scriptPathOf(resolved))) {\n      throw new Error(\n        `--from '${opts.from}' is a \\`// macros\\` library — definition-only, injected into consuming scripts at run time, never a runnable step.`,\n      );\n    }\n    // A `--local` display-only node (a non-`// pipeline` DuckDB script surfaced\n    // only because it calls a macro) has no previewable content — reject it\n    // clearly rather than admitting it and silently producing an empty plan.\n    if (notRunnablePaths.has(scriptPathOf(resolved))) {\n      throw new Error(\n        `--from '${opts.from}' isn't a \\`// pipeline\\` script — it appears in the local graph only as a macro consumer (lineage). Mark it \\`// pipeline\\` to run it.`,\n      );\n    }\n    if (!resolved.startsWith(\"script:\")) {\n      throw new Error(\n        `--from '${opts.from}' is an asset, not a runnable — start a run from a script (assets are produced, not run).`,\n      );\n    }\n    if (!fromEligible.has(resolved)) {\n      throw new Error(\n        `--from '${opts.from}' can't start a run: row-backed event triggers (kafka/mqtt/nats/postgres/sqs/gcp/email) and input-only entrypoints (webhook/data_upload) fan out per-event or need caller-supplied input — bind it with --upload to run it.`,\n      );\n    }\n    start = resolved;\n  } else if (starts.size === 1) {\n    start = [...starts][0];\n  } else if (starts.size === 0) {\n    throw new Error(","sourceCodeStart":733,"sourceCodeEnd":769,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/pipeline/pipeline.ts#L733-L769","documentation":"Kind guard for --from in the pipeline run command: the token resolved to a script that appears in the local graph only as a macro consumer (lineage display) — a non-// pipeline DuckDB script surfaced by --local solely because it calls a macro. It has no previewable/runnable content, so starting a bounded run from it would silently produce an empty plan. The message says exactly what to change: mark the script // pipeline to make it runnable.","triggerScenarios":"Thrown at cli/src/commands/pipeline/pipeline.ts:751 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add the // pipeline tag to the script's header so it becomes a runnable pipeline step","Pick a different start script that is already // pipeline","Drop --local if you meant to run the deployed graph, where dispatch eligibility differs"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}