n8n-io/n8n · warning · Error

No scenarios to build

Error message

No scenarios to build

What it means

After loading test cases and filtering out cases with no user turn to build from (e.g. replay-seeded only), if the final build list is empty and no --tier was specified, the CLI throws. This is the non-tier variant of the empty-list guard at line 516. It indicates that no actionable test cases survived loading and filtering.

Source

Thrown at packages/@n8n/instance-ai/evaluations/cli/build-mcp-manifest.ts:517

			const file = join(workflowDir, `${slug}.json`);
			if (!existsSync(file)) {
				console.log(`  [${slug}] skip: scenario file missing`);
				continue;
			}
			casesBySlug.set(slug, testCaseSchema.parse(readJson(file, `test case ${slug}`)).conversation);
		}
	}
	// Drop cases with no user turn to build from (e.g. `replay`-seeded only).
	for (const [slug, conv] of [...casesBySlug]) {
		if (!conv.some((t) => t.role === 'user' && t.text.trim().length > 0)) {
			console.log(`  [${slug}] skip: no user turn to build from`);
			casesBySlug.delete(slug);
		}
	}
	args.slugs = [...casesBySlug.keys()];
	if (args.slugs.length === 0) {
		throw new Error(
			args.tier ? `No scenarios match --tier "${args.tier}"` : 'No scenarios to build',
		);
	}

	const projectScopes = uniqueProjectScopes([
		args.buildCwd ? resolve(args.buildCwd) : undefined,
		repoRoot,
		repoRoot ? undefined : process.cwd(),
	]);
	// Removed on process exit by the staging module itself.
	const mcpConfigPath = stageMcpConfigFromClaudeJson(args.mcpServerName, projectScopes);

	const tasks: Array<{ slug: string; iteration: number }> = [];
	for (const slug of args.slugs) {
		for (let i = 1; i <= args.iterations; i++) {
			tasks.push({ slug, iteration: i });
		}
	}

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. List available slugs: ls packages/@n8n/instance-ai/evaluations/data/workflows/
  2. Check that positional slug arguments match filenames (without .json extension)
  3. Review console output for 'skip:' lines explaining why individual cases were dropped
  4. If using --source langtracer, verify the suite has cases with user turns
Defensive patterns

Strategy: validation

Validate before calling

// Verify slugs exist as files before running:
import { existsSync, readdirSync } from 'fs';
const available = new Set(readdirSync(workflowDir).filter(f => f.endsWith('.json')).map(f => f.replace('.json', '')));
const missing = args.slugs.filter(s => !available.has(s));
if (missing.length > 0) console.warn(`Slugs not found: ${missing.join(', ')}`);
if (args.slugs.length > 0 && args.slugs.every(s => !available.has(s))) {
  throw new Error('No scenarios to build — none of the requested slugs exist');
}

Prevention

When it happens

Trigger: Running with explicit slugs that do not exist as files, an empty workflow directory, all loaded cases being replay-seeded only (no user turns), or a langtracer suite returning zero cases.

Common situations: Slug typos in positional arguments. Empty or newly created workflow directory. All cases filtered out because they have no user turns (only seed/assistant turns). The langtracer suite is empty or all cases were excluded by slug filtering.

Related errors


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