{"record":{"id":"5152c621b9c58130","repo":"n8n-io/n8n","slug":"no-valid-checks-after-filtering-requested-opti","errorCode":null,"errorMessage":"No valid checks after filtering. Requested: ${options.checks.join(', ')}. Available: ${allCheckNames.join(', ')}","messagePattern":"No valid checks after filtering\\. Requested: (.+?)\\. Available: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@n8n/ai-workflow-builder.ee/evaluations/evaluators/binary-checks/index.ts","lineNumber":44,"sourceCode":"): Evaluator<EvaluationContext> {\n\tconst allChecks: BinaryCheck[] = [...DETERMINISTIC_CHECKS, ...(options.llm ? LLM_CHECKS : [])];\n\n\tconst allCheckNames = allChecks.map((c) => c.name);\n\n\tlet selectedChecks: BinaryCheck[];\n\n\tif (options.checks && options.checks.length > 0) {\n\t\tconst validNames = new Set(allCheckNames);\n\t\tconst unrecognized = options.checks.filter((name) => !validNames.has(name));\n\n\t\tfor (const name of unrecognized) {\n\t\t\tconsole.warn(`Warning: unrecognized check name \"${name}\" in --checks filter`);\n\t\t}\n\n\t\tselectedChecks = allChecks.filter((c) => options.checks!.includes(c.name));\n\n\t\tif (selectedChecks.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`No valid checks after filtering. Requested: ${options.checks.join(', ')}. Available: ${allCheckNames.join(', ')}`,\n\t\t\t);\n\t\t}\n\t} else {\n\t\tselectedChecks = allChecks;\n\t}\n\n\treturn {\n\t\tname: EVALUATOR_NAME,\n\n\t\tasync evaluate(workflow: SimpleWorkflow, ctx: EvaluationContext): Promise<Feedback[]> {\n\t\t\tconst checkCtx: BinaryCheckContext = {\n\t\t\t\tprompt: ctx.prompt,\n\t\t\t\tnodeTypes: options.nodeTypes,\n\t\t\t\tannotations: ctx.annotations,\n\t\t\t\tllm: options.llm,\n\t\t\t\t// Intentionally omit llmCallLimiter: binary-checks LLM judges are small,\n\t\t\t\t// cheap calls that should run in parallel, not throttled by the shared limiter.","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/ai-workflow-builder.ee/evaluations/evaluators/binary-checks/index.ts#L26-L62","documentation":"The binary-checks evaluator filters its catalog (`DETERMINISTIC_CHECKS` plus `LLM_CHECKS` when an LLM is supplied) by the `--checks` option. Unrecognized names only produce `console.warn`, but if NONE of the requested names match the available catalog, the evaluator refuses to build rather than silently run zero checks. The error lists both what you asked for and what is available.","triggerScenarios":"Passing `--checks typo-name` or `--checks llm-only-check` while no `--judge-llm` / LLM is configured (LLM-only checks are not in the catalog without a model). Also: requesting a check that was renamed/removed in a newer version.","commonSituations":"Copy-pasting a checks list from docs that are out of sync with the installed version; enabling a check name from memory; or expecting an LLM-driven check to be available without supplying an LLM.","solutions":["Re-run without `--checks` to see the full available set, or read the 'Available:' list in the error message and align your flags to it.","If you requested an LLM check, ensure the judge LLM is configured so `LLM_CHECKS` are part of the catalog.","If a check was renamed, update your script/CI to the new name."],"exampleFix":"// before\ncreateBinaryChecksEvaluator({ nodeTypes, checks: ['valid-json', 'no-unconnected-nodes'] }); // 'valid-json' not a real check\n// after\ncreateBinaryChecksEvaluator({ nodeTypes, checks: ['valid-connections', 'no-unconnected-nodes'] }); // names from allCheckNames","handlingStrategy":"validation","validationCode":"import { DETERMINISTIC_CHECKS, LLM_CHECKS } from './checks';\n\nfunction selectChecks(requested: string[] | undefined, hasLlm: boolean): string[] {\n  const catalog = new Set([...DETERMINISTIC_CHECKS, ...(hasLlm ? LLM_CHECKS : [])].map((c) => c.name));\n  if (!requested || requested.length === 0) return [...catalog];\n  const unknown = requested.filter((r) => !catalog.has(r));\n  if (unknown.length) console.warn('unknown checks:', unknown.join(', '));\n  const selected = requested.filter((r) => catalog.has(r));\n  if (selected.length === 0) throw new Error(`no valid checks; available: ${[...catalog].join(', ')}`);\n  return selected;\n}\n// use selected instead of passing --checks blindly","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Before constructing the evaluator, intersect the requested names with the catalog and warn on unknowns.","Keep the check-name list in one module so docs, CLI completion, and validation share a source of truth.","Add a unit test that feeds a fully-unknown list and asserts the error."],"tags":["evaluations","binary-checks","validation","configuration"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}