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
- List available slugs: ls packages/@n8n/instance-ai/evaluations/data/workflows/
- Check that positional slug arguments match filenames (without .json extension)
- Review console output for 'skip:' lines explaining why individual cases were dropped
- 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
- List available slugs before specifying positional arguments
- Review 'skip:' log lines to understand why cases were dropped
- Ensure test cases have at least one user turn to build from
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
- No scenarios match --tier "${args.tier}"
- --max-attempts must be >= 1
- --source langtracer requires --suite <slug>
- Missing value for ${flag}
- Invalid integer for ${flag}
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/24ae84cd1494f4c9.
Report an issue: GitHub.