n8n-io/n8n · error · Error
select cases to push: pass <slugs...>, --changed, --filter,
Error message
select cases to push: pass <slugs...>, --changed, --filter, or --tier
What it means
The langtracer-push CLI requires at least one case selector to prevent accidentally pushing all on-disk cases to a remote suite. Valid selectors are: positional slugs, --changed (git-modified files), --filter (substring match on slug), or --tier (cases whose datasets include a tier). If none is provided after parsing, the push is rejected as a safety guard at line 125.
Source
Thrown at packages/@n8n/instance-ai/evaluations/cli/langtracer-push.ts:126
return { helpRequested: true };
default:
if (arg.startsWith('--')) {
throw new Error(`Unknown flag: ${arg.split('=', 1)[0]} (use --help)`);
}
result.slugs.push(arg);
i += 1;
break;
}
}
if (!result.suite) throw new Error('--suite <slug|id> is required');
const hasSelector =
result.slugs.length > 0 ||
result.changed ||
result.filter !== undefined ||
result.tier !== undefined;
if (!hasSelector) {
throw new Error('select cases to push: pass <slugs...>, --changed, --filter, or --tier');
}
return { helpRequested: false, args: result };
}
function nextArg(argv: string[], i: number, flag: string): string {
const value = argv[i + 1];
if (value === undefined || value.startsWith('--')) throw new Error(`Missing value for ${flag}`);
return value;
}
/** New/untracked + staged + modified `data/{workflows,agents}/*.json` slugs, from git. */
function gitChangedSlugs(): string[] {
const out = execFileSync('git', ['status', '--porcelain', '--untracked-files=all'], {
encoding: 'utf-8',
});
const slugs: string[] = [];
for (const line of out.split('\n')) {View on GitHub (pinned to 5ac6606e81)
Solutions
- Add at least one selector: positional slugs, --changed, --filter <csv>, or --tier <name>
- Use --changed to push only git-modified case files
- Use explicit slugs: pnpm eval:langtracer-push --suite baseline my-case-1 my-case-2
Example fix
# before pnpm eval:langtracer-push --suite baseline # after pnpm eval:langtracer-push --suite baseline --changed
Defensive patterns
Strategy: validation
Validate before calling
const hasSelector =
result.slugs.length > 0 ||
result.changed ||
result.filter !== undefined ||
result.tier !== undefined;
if (!hasSelector) {
throw new Error('select cases to push: pass <slugs...>, --changed, --filter, or --tier');
} Prevention
- Always include at least one selector (--changed, --filter, --tier, or positional slugs)
- Remember that --exclude alone is a modifier, not a selector
- Use --changed for the common case of pushing recently modified cases
When it happens
Trigger: Running `pnpm eval:langtracer-push --suite baseline` with no selector. Also fires when only --exclude is given (it is a modifier, not a selector) or only --dry-run is given.
Common situations: Developer forgets to specify which cases to push. Uses only --exclude thinking it selects cases. Assumes --dry-run does not need a selector. Assumes --set-kind or --contains-user-data counts as a selector.
Related errors
- --set-kind must be "regression" or "capability_gap"
- Unknown flag: ${arg.split('=', 1)[0]} (use --help)
- --suite <slug|id> is required
- Missing value for ${flag}
- --max-attempts must be >= 1
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/ba630a47ddda3dbd.
Report an issue: GitHub.