n8n-io/n8n · error · Error
Seed declares two workflows named "${duplicate}". The harnes
Error message
Seed declares two workflows named "${duplicate}". The harness rewrites seed workflow names to keep concurrent runs apart, and it cannot tell which mention in the history means which workflow — give them distinct names in the fixture What it means
Thrown by remapSeedArtifactIds() after id remapping, when two workflows in the seed share the same name. n8n itself allows duplicate workflow names, but this harness cannot: the rename pass rewrites name mentions in history by matching the name text, so two same-named workflows would both be rewritten onto the first one's new name and history would point at the wrong workflow. The harness refuses rather than mangle the seed.
Source
Thrown at packages/@n8n/instance-ai/evaluations/harness/conversation-seed.ts:381
if (id.length < 8) {
throw new Error(`Seed artifact id "${id}" is too short to remap safely (need ≥8 chars)`);
}
let newId = generateNanoId();
while (originalIds.has(newId)) newId = generateNanoId();
serialized = serialized.replaceAll(id, newId);
}
const remapped = ConversationSeedSchema.parse(jsonParse(serialized));
// n8n itself allows duplicate workflow names, so a scrubbed real seed could
// legitimately carry two. This harness can't take them: the rename below rewrites
// mentions by matching the name text, so both workflows' mentions would collapse
// onto the first one's new name and the history would point at the wrong workflow.
// Refuse rather than mangle — a limit of the rewrite, not an n8n rule.
const names = remapped.workflows.map((workflow) => workflow.name);
const duplicate = names.find((name, index) => names.indexOf(name) !== index);
if (duplicate !== undefined) {
throw new Error(
`Seed declares two workflows named "${duplicate}". The harness rewrites seed workflow ` +
'names to keep concurrent runs apart, and it cannot tell which mention in the history ' +
'means which workflow — give them distinct names in the fixture',
);
}
// Uniquify names after the id pass, so the rename can't perturb id matching.
const workflows = remapped.workflows.map((workflow) => ({
...workflow,
name: uniquifySeedName(workflow.name, freshSeedNameSuffix()),
}));
// Any mention in the seeded history follows the workflow, so the agent's own
// record of what it built still matches what is on the instance.
//
// ONE pass over each string, longest original name first. Renaming per
// workflow instead would feed each rewrite into the next: with "Order" and
// "Order Sync", renaming "Order" first turns every "Order Sync" mention intoView on GitHub (pinned to 5ac6606e81)
Solutions
- Give each seed workflow a distinct name before importing.
- When scrubbing a real trace, suffix same-named workflows to disambiguate.
- Regenerate the seed so names are unique.
Example fix
// before
workflows: [
{ id: 'wf_abc12345', name: 'Daily Report', ... },
{ id: 'wf_def67890', name: 'Daily Report', ... },
]
// after
workflows: [
{ id: 'wf_abc12345', name: 'Daily Report (v1)', ... },
{ id: 'wf_def67890', name: 'Daily Report (v2)', ... },
] Defensive patterns
Strategy: validation
Validate before calling
// Validate workflow name uniqueness before the remap rename pass.
function assertUniqueWorkflowNames(seed: ConversationSeed): void {
const names = seed.workflows.map((w) => w.name);
const dup = names.find((n, i) => names.indexOf(n) !== i);
if (dup) throw new Error(`Duplicate workflow name "${dup}" in seed fixture; the rename pass needs distinct names.`);
} Prevention
- Disambiguate same-named workflows when scrubbing a real trace (n8n permits dupes; the harness does not).
- Add a fixture linter rejecting duplicate workflow names.
- Re-generate seeds rather than hand-editing names.
When it happens
Trigger: A scrubbed real seed that legitimately carried two same-named workflows (n8n permits it), or a hand-authored fixture that duplicated a workflow block including the name.
Common situations: Scrubbing a real thread trace and leaving two workflows with the same display name; copy-paste of a workflow block without renaming.
Related errors
- Seed declares two agents with id "${duplicateAgentId}". Each
- Seed artifact id "${id}" is too short to remap safely (need
- Workflow ${formatWorkflow(dbWorkflow)} has no node to start
- File does not seem to contain valid workflows.
- Cannot decrease maxIterations when resuming a run. Expected
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/02ce0108668478eb.
Report an issue: GitHub.