windmill-labs/windmill · error · Error

f/${f} has ${starts.size} possible starts — pass --from <scr

Error message

f/${f} has ${starts.size} possible starts — pass --from <script> when using --to. Candidates: ${scriptsOf(starts).sort().join(", ")}

What it means

Multi-root ambiguity guard in the pipeline run command: no --from was given, --to is present (bounding requires a single start), and the folder's graph has several eligible roots (schedule/manual runnables). The message lists the candidate start scripts sorted; the CLI refuses to guess which root to bound the run from.

Source

Thrown at cli/src/commands/pipeline/pipeline.ts:776

      );
    }
    if (!fromEligible.has(resolved)) {
      throw new 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-supplied input — bind it with --upload to run it.`,
      );
    }
    start = resolved;
  } else if (starts.size === 1) {
    start = [...starts][0];
  } else if (starts.size === 0) {
    throw new Error(
      `No schedule or manual root in f/${f} to start a bounded run from.`,
    );
  } else if ((opts.to ?? []).length === 0) {
    // Multiple roots, no `--from`, no `--to` → run the whole pipeline.
    runAll = true;
  } else {
    throw new Error(
      `f/${f} has ${starts.size} possible starts — pass --from <script> when using --to. Candidates: ${scriptsOf(starts).sort().join(", ")}`,
    );
  }

  // Resolve --to end node(s): split on comma, resolve each. An unresolved or
  // ambiguous token is a hard error — silently ignoring it would run a
  // different subset than the user asked for.
  const toTokens = (opts.to ?? []).flatMap((t) => t.split(",")).map((t) => t.trim()).filter(
    Boolean,
  );
  const ends: string[] = [];
  const unresolved: string[] = [];
  for (const tok of toTokens) {
    const id = resolveToken(graph, tok);
    if (!id) unresolved.push(tok);
    else ends.push(id);
  }
  if (unresolved.length > 0) {

View on GitHub (pinned to e474e8803c)

Solutions

  1. Pass --from <script> choosing one of the listed candidates
  2. Drop --to to run all roots / the whole pipeline in topological order
  3. Narrow the folder (f flag) so only one root is in scope
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cli/src/commands/pipeline/pipeline.ts:776 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/7364f0e4a0287c89. Report an issue: GitHub.