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
- Confirm the id in conversation[0].attach.workflow exactly matches a workflow id declared in the seed's workflows array.
- Resolve any remap invariant failures (453/454/455) surfaced as 'Seeding failed' first — they may be why the workflow is missing.
- 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
- Keep attach ids and declared workflow ids in sync when editing a fixture.
- Resolve remap invariant failures (453/454/455) first — they can drop the workflow this check then misses.
- Add a fixture linter that cross-references attach.workflow against seed.workflows[].id.
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
- Workflow "${workflowId}" not found.
- Cannot publish archived Workflow
- Version "${versionIdToPublish}" not found for workflow "${wo
- Workflow ${workflowId} not found in sqlite db
- Unhandled seed mode: ${JSON.stringify(unhandled)}
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/3cbdbc9dd611f10a.
Report an issue: GitHub.