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

  1. Add at least one selector: positional slugs, --changed, --filter <csv>, or --tier <name>
  2. Use --changed to push only git-modified case files
  3. 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

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


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