n8n-io/n8n · error · Error

The opening turn attaches seeded workflow "${attachedSeedWor

Error message

The opening turn attaches seeded workflow "${attachedSeedWorkflow}", but the restore produced no workflow for that id — refusing to run the case unattached (it would silently become a find-it test).

What it means

Thrown when the opening conversation turn declares an `attach.workflow` referencing a seeded workflow id, but the remap+restore produced no live workflow for that id. The case schema already refuses an `attach` that names a non-existent seed id, so a miss here means the restore/remap dropped it. The harness refuses to send the turn with no attachment because that would silently downgrade a hand-off case into a find-it case (wrong test shape, misleading results).

Source

Thrown at packages/@n8n/instance-ai/evaluations/harness/build-workflow.ts:566

			() => {},
		);

		await delay(SSE_SETTLE_DELAY_MS);

		// The opening turn may hand the agent a seeded workflow, the way the editor does.
		// Resolved AFTER the restore so it carries the id that exists on the instance;
		// the case schema already refused an `attach` no seeded workflow declares.
		const attachedSeedWorkflow = conversation[0]?.attach?.workflow;
		const restoredForAttach =
			attachedSeedWorkflow === undefined
				? undefined
				: seedWorkflowsBySeedId.get(attachedSeedWorkflow);
		// The schema already refused an `attach` no seeded workflow declares, so a miss
		// here means the restore/remap dropped it. Fail loudly: sending no attachment
		// would silently downgrade a hand-off case to a find-it one.
		if (attachedSeedWorkflow !== undefined && restoredForAttach === undefined) {
			seedingFailed = true;
			throw new Error(
				`The opening turn attaches seeded workflow "${attachedSeedWorkflow}", but the restore produced no workflow for that id — refusing to run the case unattached (it would silently become a find-it test).`,
			);
		}
		const openingAttachments: InstanceAiWorkflowAttachment[] | undefined = restoredForAttach
			? [{ type: 'workflow', id: restoredForAttach.id, name: restoredForAttach.name }]
			: undefined;
		// Name the out-of-band attachment in the RECORDED turn, or the judge and the
		// prompt-aware checks read a text-less hand-off as a bare empty message — see
		// `attachedWorkflowNote`. Mirrors `openingMessageSuffix`, which diverges
		// sent-vs-recorded the other way.
		const recordedOpeningMessage = [attachedWorkflowNote(restoredForAttach?.name), openingMessage]
			.filter(Boolean)
			.join(' ');

		let proxyDecisionStats: ProxyDecisionStats | undefined;
		if (isMultiTurn) {
			proxyDecisionStats = await driveMultiTurnConversation({
				client,

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Confirm the id in conversation[0].attach.workflow exactly matches a workflow id declared in the seed's workflows array.
  2. Resolve any remap invariant failures (453/454/455) surfaced as 'Seeding failed' first — they may be why the workflow is missing.
  3. Check restoreThread created every seed workflow (count restoredWorkflowIds); if the backend dropped one, investigate the backend log.
Defensive patterns

Strategy: validation

Validate before calling

// Before building, assert every attach id resolves to a declared seed workflow.
const attachId = conversation[0]?.attach?.workflow;
if (attachId !== undefined) {
  const declaredIds = new Set(seed.workflows.map((w) => w.id));
  if (!declaredIds.has(attachId)) {
    throw new Error(`conversation[0].attach.workflow "${attachId}" is not among declared seed workflow ids; fix the fixture.`);
  }
}

Prevention

When it happens

Trigger: A seed workflow referenced by conversation[0].attach.workflow is dropped during remapSeedArtifactIds or by restoreThread (e.g. backend rejected it, the id was too short and refused at 454, the workflow failed schema parse after remap). The attach reference survives but the restored map does not contain it.

Common situations: Seed fixture has an attach pointing at a workflow id that the remap invariants (453/454/455) silently or noisily removed; backend restore partially failed; a fixture hand-edited so the attach id no longer matches any declared workflow.

Related errors


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