n8n-io/n8n · error · Error

Unknown binary check(s)

Error message

Unknown binary check(s): ${unknown.join(', ')}. Available: ${available}

What it means

resolveChecks validates the --only names against every registered binary check (deterministic + LLM), not just the eligible set, so a typo'd check name is rejected rather than silently skipped. The message lists both the unknown names and all valid ones, turning the failure into a self-correcting usage error.

Solutions

  1. Correct the check name to one of the listed available names
  2. Re-run without --only to execute the full eligible set
  3. Copy names exactly — they are case-sensitive identifiers
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/@n8n/instance-ai/evaluations/binaryChecks/index.ts:129 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/e43cdb064ebc9606. Report an issue: GitHub.

Appendix: source

Thrown at packages/@n8n/instance-ai/evaluations/binaryChecks/index.ts:129

		dimension: check.dimension,
		status,
		...(result.comment ? { comment: result.comment } : {}),
	};
}

function resolveChecks(only: string[] | undefined, ctx: BinaryCheckContext): BinaryCheck[] {
	const allChecks = [...DETERMINISTIC_CHECKS, ...LLM_CHECKS];
	const eligible = ctx.modelId ? allChecks : DETERMINISTIC_CHECKS;

	if (!only || only.length === 0) return eligible;

	// Validate names against all registered checks, not just eligible ones,
	// so LLM checks are skipped (not rejected) when modelId is missing.
	const allNames = new Set(allChecks.map((c) => c.name));
	const unknown = only.filter((name) => !allNames.has(name));
	if (unknown.length > 0) {
		const available = Array.from(allNames).join(', ');
		throw new Error(`Unknown binary check(s): ${unknown.join(', ')}. Available: ${available}`);
	}

	return eligible.filter((c) => only.includes(c.name));
}

View on GitHub (pinned to 5ac6606e81)