{"record":{"id":"f9bfc0f7c7487291","repo":"windmill-labs/windmill","slug":"flag-tok-matched-no-script-in-f-f","errorCode":null,"errorMessage":"${flag} '${tok}' matched no script in f/${f}.","messagePattern":"(.+?) '(.+?)' matched no script in f/(.+?)\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"cli/src/commands/pipeline/pipeline.ts","lineNumber":642,"sourceCode":"    // endpoint can't emit, so input-only entrypoints are cut here as they are\n    // under `--local` (else they'd auto-run empty).\n    await enrichDeployedNonAutorunTriggers(workspace.workspaceId, graph);\n  }\n\n  // Resolve a `--upload`/`--arg` script token to its graph node, with an\n  // actionable error when the short name is ambiguous or matches nothing.\n  const resolveScriptTokenOrThrow = (tok: string, flag: string): string => {\n    const id = resolveToken(graph, tok);\n    if (!id || !id.startsWith(\"script:\")) {\n      const matches = graph.runnables.filter(\n        (r) => r.usage_kind === \"script\" && (r.path.split(\"/\").pop() ?? r.path) === tok,\n      );\n      if (matches.length > 1) {\n        throw new Error(\n          `${flag} '${tok}' matches multiple scripts (${matches.map((r) => r.path).sort().join(\", \")}) — use the full path.`,\n        );\n      }\n      throw new Error(`${flag} '${tok}' matched no script in f/${f}.`);\n    }\n    return id;\n  };\n\n  // `--upload <script>[:<param>]=<file|s3://key>` binds an object to a\n  // data_upload/webhook entry point so it becomes a runnable start (and its\n  // downstream is no longer cut) — the arg is injected at execution. Repeatable\n  // per script (accumulated) so a multi-S3Object entry can bind each param.\n  const boundBindingsByPath = new Map<string, UploadBinding[]>();\n  const boundNodeIds = new Set<string>();\n  for (const spec of opts.upload ?? []) {\n    const binding = parseUploadBinding(spec);\n    const id = resolveScriptTokenOrThrow(binding.scriptTok, \"--upload\");\n    const p = scriptPathOf(id);\n    (boundBindingsByPath.get(p) ?? boundBindingsByPath.set(p, []).get(p)!).push(binding);\n    boundNodeIds.add(id);\n  }\n","sourceCodeStart":624,"sourceCodeEnd":660,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/pipeline/pipeline.ts#L624-L660","documentation":"No-match guard in resolveScriptTokenOrThrow: the token given to --upload or --arg resolved to no script node in the workspace graph under folder f (checked both as full id and as basename match). The input at fault is the script token as typed — wrong name, wrong folder, or a script that isn't part of the pipeline graph the command loaded.","triggerScenarios":"Thrown at cli/src/commands/pipeline/pipeline.ts:642 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the script's path with wmill flow ls / in the UI and pass the full path","Verify you're targeting the right folder (the graph is scoped to f/{f})","If the script should participate, ensure it's part of the pipeline (e.g. marked // pipeline) so it appears in the graph"],"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"}