n8n-io/n8n · error · Error

${name} must be a positive number, got "${raw}".

Error message

${name} must be a positive number, got "${raw}".

What it means

parsePositiveNumber is the fractional-tolerant sibling of parsePositiveInt, used for flags that may be decimals (e.g. temperature-like values). It rejects undefined/empty (returns undefined) but throws on NaN, non-finite, zero, or negative values.

Source

Thrown at packages/@n8n/instance-ai/evaluations/cli/pairwise.ts:124

		baseUrl: get('--base-url') ?? process.env.N8N_EVAL_BASE_URL ?? 'http://localhost:5678',
		keepWorkflows: has('--keep-workflows'),
	};
}

function parsePositiveInt(raw: string | undefined, name: string): number | undefined {
	if (raw === undefined || raw === '') return undefined;
	const n = Number(raw);
	if (!Number.isFinite(n) || n <= 0 || !Number.isInteger(n)) {
		throw new Error(`${name} must be a positive integer, got "${raw}".`);
	}
	return n;
}

function parsePositiveNumber(raw: string | undefined, name: string): number | undefined {
	if (raw === undefined || raw === '') return undefined;
	const n = Number(raw);
	if (!Number.isFinite(n) || n <= 0) {
		throw new Error(`${name} must be a positive number, got "${raw}".`);
	}
	return n;
}

// ---------------------------------------------------------------------------
// Dataset loading
// ---------------------------------------------------------------------------

interface DatasetExample {
	id: string;
	prompt: string;
	dos?: string;
	donts?: string;
}

async function loadExamples(args: PairwiseArgs, logger: EvalLogger): Promise<DatasetExample[]> {
	if (args.examplesJsonl) {
		return loadExamplesFromJsonl(args.examplesJsonl, logger);

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Re-run with a positive number (decimals allowed) for the named flag.
  2. If zero is genuinely valid for your use case, file a change to the validator; do not bypass it.
  3. Validate the value in your wrapper script before invoking the CLI.

Example fix

// before: pnpm pairwise --temperature 0
// after:  pnpm pairwise --temperature 0.2
Defensive patterns

Strategy: validation

Validate before calling

function asPositiveNumber(raw: string | undefined, name: string): number | undefined {
  if (raw === undefined || raw === '') return undefined;
  const n = Number(raw);
  if (!Number.isFinite(n) || n <= 0) throw new Error(`${name} must be a positive number`);
  return n;
}

Type guard

const isPositiveNumber = (v: unknown): v is number =>
  typeof v === 'number' && Number.isFinite(v) && v > 0;

Prevention

When it happens

Trigger: Passing `--threshold 0`, `--rate -0.5`, or a non-numeric string to a flag validated by parsePositiveNumber.

Common situations: Misremembering a flag as accepting zero; passing a percentage as 0..1 vs 0..100 and hitting zero; shell quoting turning a number into garbage.

Related errors


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