n8n-io/n8n · error · Error

${String(dropped.length)} case(s) did not round-trip: the fi

Error message

${String(dropped.length)} case(s) did not round-trip: the fields above were sent but are absent from the suite export. A lang-tracer deployment can silently ignore a key it predates (`seed` needs #113, `attach` needs #119) — upgrade it, then re-push. The cases in the suite are NOT what you authored until you do.

What it means

After pushing cases to lang-tracer, the CLI re-exports the suite and diffs each case against what was authored. If keys that were sent are missing from the export, it concludes the deployment silently dropped them — known gaps are `seed` (needs lang-tracer PR #113) and `attach` (needs #119). The throw is deliberate because the stored suite is not what you authored.

Source

Thrown at packages/@n8n/instance-ai/evaluations/cli/langtracer-push.ts:294

	if (written.length === 0) return;

	const after = await client.exportSuite(suiteId);
	const dropped = written
		.map((item) => ({
			fileSlug: item.fileSlug,
			keys: comparableDiff(after.files[`${item.fileSlug}.json`], item.testCase),
		}))
		.filter((result) => result.keys.length > 0);

	if (dropped.length === 0) {
		console.log(`  verified ${String(written.length)} case(s) round-trip intact`);
		return;
	}

	for (const result of dropped) {
		console.error(`  ! ${result.fileSlug}: server did not store ${result.keys.join(', ')}`);
	}
	throw new Error(
		`${String(dropped.length)} case(s) did not round-trip: the fields above were sent but are absent from the suite export. ` +
			'A lang-tracer deployment can silently ignore a key it predates (`seed` needs #113, `attach` needs #119) — ' +
			'upgrade it, then re-push. The cases in the suite are NOT what you authored until you do.',
	);
}

function printBucket(label: string, slugs: string[]): void {
	const pad = label.padEnd(9);
	console.log(`  ${pad} ${String(slugs.length)}${slugs.length ? `  (${slugs.join(', ')})` : ''}`);
}

main().catch((error: unknown) => {
	console.error(error instanceof Error ? error.message : String(error));
	process.exit(1);
});

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Upgrade the lang-tracer deployment to a version that includes PR #113 (`seed`) and #119 (`attach`).
  2. Re-run `langtracer-push` after the upgrade so the dropped keys are accepted.
  3. If you cannot upgrade immediately, temporarily remove `seed`/`attach` from the affected cases so the round-trip is clean, then restore them post-upgrade.
Defensive patterns

Strategy: validation

Validate before calling

// Before pushing, query the lang-tracer deployment version / changelog
// and skip cases using keys it predates:
const supportsSeed = serverVersion.gte('0.x.y'); // post-#113
const safeCases = cases.filter(c => supportsSeed || !('seed' in c));

Try / catch

try { await push(cases); } catch (e) {
  if (e instanceof Error && e.message.includes('did not round-trip')) { /* upgrade lang-tracer, retry */ }
  else throw e;
}

Prevention

When it happens

Trigger: Pushing cases that use `seed` or `attach` fields against a lang-tracer deployment older than the versions that introduced those keys; pointing the CLI at a stale/staging lang-tracer instance.

Common situations: Upgrading the eval CLI but not the lang-tracer server; running against a teammate's older local lang-tracer; CI using a cached older lang-tracer image.

Related errors


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