{"record":{"id":"36affbefae2b012b","repo":"windmill-labs/windmill","slug":"from-opts-from-can-t-start-a-run-row-backe","errorCode":null,"errorMessage":"--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-s","messagePattern":"--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-s","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"cli/src/commands/pipeline/pipeline.ts","lineNumber":761,"sourceCode":"      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(\n      `No schedule or manual root in f/${f} to start a bounded run from.`,\n    );\n  } else if ((opts.to ?? []).length === 0) {\n    // Multiple roots, no `--from`, no `--to` → run the whole pipeline.\n    runAll = true;\n  } else {\n    throw new Error(\n      `f/${f} has ${starts.size} possible starts — pass --from <script> when using --to. Candidates: ${scriptsOf(starts).sort().join(\", \")}`,\n    );\n  }","sourceCodeStart":743,"sourceCodeEnd":779,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/pipeline/pipeline.ts#L743-L779","documentation":"Error \"--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-s\" thrown in windmill-labs/windmill.","triggerScenarios":"Thrown at cli/src/commands/pipeline/pipeline.ts:761 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Bind the trigger's input explicitly with --upload (e.g. --upload webhook_script:payload=file.json) so it and its downstream run in the cascade","Start from an eligible script downstream of the trigger instead","Remove --from and use --to to bound the run from the single schedule/manual root"],"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"}