Context
I have a chain of 3 n8n workflows :
- main — generates combinations, loops, calls
intermediaireper item - intermediaire — receives items via
Execute Workflow Trigger, batches them viaLoop Over Items, calls sub/sub per batch via anExecute Workflownode - sub/sub — receives items via
Execute Workflow Trigger, processes them throughCode → Convert to File → Gemini → Formatter → Airtable Create
The chain main → intermediaire works fine. The chain intermediaire → sub/sub does not.
Symptom
When intermediaire calls sub/sub, an execution for sub/sub is created (visible in the Executions tab, status: success, mode: integrated), but :
- duration : ~20 ms
runData: empty{}(no node executed, not even the trigger)nodeExecutionStack: empty- yet the
Execute Workflownode in the parent shows 1 item in its output
Running sub/sub manually with pinned data works perfectly (~3.5 s, all nodes execute as expected). The bug only happens when it’s called from the parent.
What I’ve tried
- Disabled the typed input schema on the
sub/subtrigger (inputSource: "passthrough") → still empty. - Deleted and recreated the
Execute Workflow Triggernode → same result. - Upgraded n8n to the latest version → same result.
- Patched the workflow JSON directly via REST API to force
inputSource: "passthrough"and remove aneventsfield that I initially suspected (typo"worklfow_call"). The APIGETreturns the cleaned version, but the execution snapshot still embeds the old/buggy parameters — meaning the engine reads from a stored copy that diverges from what I PUT. - Verified that the snapshot of the sister workflow
intermediaire(which works) has the exact same internal valueevents: "worklfow_call"— so that field is not the bug.
Key difference between working and failing workflows
| intermediaire (works) | sub/sub (fails) | |
|---|---|---|
inputSource |
workflowInputs (typed schema) |
passthrough |
Parent’s Execute Workflow mapping |
defineBelow with typed values |
defineBelow with typed values |
The parent’s Execute Workflow node uses mappingMode: "defineBelow" with a schema: [...] declaring 7 typed inputs (codeNorme, codeElement, recordId, paramValues, pdfUrl, categorie, data).
My current hypothesis : when the parent sends data via the defineBelow typed schema, the sub-workflow trigger must also be in inputSource: workflowInputs mode with a matching schema. Setting it to passthrough causes the items to be silently dropped at trigger time.
I have just patched sub/sub’s trigger via API with inputSource: "workflowInputs" and a matching schema. Testing.
Questions
- Is this hypothesis correct ? Is
passthroughincompatible with a parent that sends viadefineBelowtyped mapping ? The docs are unclear. - Why does the API
GETshow one set of params for the trigger but the execution snapshot embeds different ones ? Is there a server-side cache or normalization layer ? - Is there a way to make a sub-workflow trigger accept ANY upstream input regardless of how the parent maps it (true wildcard) ?
- Is there a recommended pattern to avoid this kind of trigger/caller schema desync in long chains of sub-workflows ?
Environment
- n8n version :
2.20.7-exp.0(Self Hosted) (the bug occured only after I came back to a previous version of my Hostinger because i accidently deleted n8n and my workflows, I don’t know if that’s related) - Trigger node :
n8n-nodes-base.executeWorkflowTrigger, typeVersion1.1 - Caller node :
n8n-nodes-base.executeWorkflowwithwaitForSubWorkflow: false - Binary data mode :
filesystem
Any pointer welcome — I’ve burned several hours on this.
