n8n-io/n8n · error · NodeOperationError
${error}
Error message
${error} What it means
Catch-all around executeWorkflow in the Retriever Workflow node: launching the sub-workflow threw. The raw error is normalized (json-serializable message) so it reliably reaches the execution log instead of being lost in serialization.
Solutions
- Read the embedded message — sub-workflow crash or configuration error
- Run the sub-workflow directly to reproduce and fix it
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at packages/@n8n/nodes-langchain/nodes/retrievers/RetrieverWorkflow/RetrieverWorkflow.node.ts:408 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/bd24f914d030f92d.
Report an issue: GitHub.
Appendix: source
Thrown at packages/@n8n/nodes-langchain/nodes/retrievers/RetrieverWorkflow/RetrieverWorkflow.node.ts:408
let receivedData: ExecuteWorkflowData;
try {
receivedData = await this.executeFunctions.executeWorkflow(
workflowInfo,
items,
config?.getChild(),
{
parentExecution: {
executionId: workflowProxy.$execution.id,
workflowId: workflowProxy.$workflow.id,
},
returnLastRunOnly: true, // Retrieved documents are the sub-workflow's final-run output, not its intermediate pipeline steps.
},
);
} catch (error) {
// Make sure a valid error gets returned that can by json-serialized else it will
// not show up in the frontend
throw new NodeOperationError(this.executeFunctions.getNode(), error as Error);
}
const receivedItems = receivedData.data?.[0] ?? [];
const returnData: Document[] = [];
for (const [index, itemData] of receivedItems.entries()) {
const pageContent = objectToString(itemData.json);
returnData.push(
new Document({
pageContent: `### ${index + 1}. Context data:\n${pageContent}`,
metadata: {
...baseMetadata,
itemIndex: index,
executionId: receivedData.executionId,
},
}),
);
}View on GitHub (pinned to 5ac6606e81)