windmill-labs/windmill · error · Error

No local file for ${nodePath} — is it a `// pipeline` script

Error message

No local file for ${nodePath} — is it a `// pipeline` script in f/${f}?

What it means

Local-file miss during local execution in the pipeline run command: the topological order includes a node whose script source couldn't be loaded from disk. In --local mode every runnable must exist as a // pipeline script file under f/{f}; this node either isn't one (wrong kind, marker-only, or a non-pipeline script that slipped into the plan) or its file was deleted/moved after the graph was built. The input at fault is the local file for the named node path.

Source

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

  // Execute in topological order, stopping on the first failure.
  for (const nodePath of order) {
    if (!opts.json) log.info(colors.gray(`▶ running ${nodePath}…`));
    // `--arg` spreads after `--upload` so an explicit value wins for the same
    // param; the internal dispatch guard spreads LAST so neither binding can
    // re-enable backend dispatch (the CLI owns the whole closure here).
    const partitionValue = partitionValueFor(nodePath);
    const nodeArgs = {
      ...(partitionValue !== undefined ? { partition: partitionValue } : {}),
      ...(uploadArgs.get(nodePath) ?? {}),
      ...(plainArgsByPath.get(nodePath) ?? {}),
      _wmill_skip_asset_dispatch: true,
    };
    let id: string;
    if (opts.local) {
      const ls = localScripts!.get(nodePath);
      if (!ls) {
        throw new Error(
          `No local file for ${nodePath} — is it a \`// pipeline\` script in f/${f}?`,
        );
      }
      id = await wmill.runScriptPreview({
        workspace: workspace.workspaceId,
        requestBody: {
          content: ls.content,
          language: ls.language as any,
          path: nodePath,
          args: nodeArgs,
          temp_script_refs: tempScriptRefs,
          // `// tag` routes to the same worker the deployed pipeline would.
          ...(ls.tag ? { tag: ls.tag } : {}),
        } as any,
      });
    } else {
      id = await wmill.runScriptByPath({
        workspace: workspace.workspaceId,

View on GitHub (pinned to e474e8803c)

Solutions

  1. Create/restore the script file at the named path and mark it // pipeline
  2. Remove stale references (e.g. deleted scripts still referenced in flows) and rebuild the graph
  3. Drop --local and run deployed, where the server holds the script source
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cli/src/commands/pipeline/pipeline.ts:996 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/73b06bc0af7d80f4. Report an issue: GitHub.