Aggregate node doesn't wait for all Switch node branches to complete

Problem 1: Gmail node sends multiple emails instead of one when using Switch with multiple branches
Problem 2: After adding Aggregate node to fix this, it doesn’t wait for all Switch branches to complete
I have a catering quote workflow where customers can select 1, 2, or 3 dishes from a Tally form. The workflow splits selected dishes, routes them through a Switch node to different calculation branches, appends each result to Google Sheets, then should send ONE email with a PDF attachment.
Original problem: When a user selects 2 dishes, the Gmail node executes 2 times and sends 2 emails. When user selects 3 dishes, it sends 3 emails. I want only 1 email per order.
What I tried to fix it: I added an Aggregate node after “Append row in sheet” to combine all items into one, so Gmail would only execute once.
New problem after adding Aggregate: The Aggregate node doesn’t wait for all branches to complete. It fires after receiving the first item, before other branches finish executing. So now I get 1 email, but it only contains data from the first dish, not all of them.
Workflow structure:
Tally Form → Copy File → Code (split dishes into 2-3 items) → Switch (3 outputs)

┌───────────────────┼───────────────────┐
↓ ↓ ↓
Calc Salmon Calc Shrimp Calc Bolognese
↓ ↓ ↓
└───────────────────┼───────────────────┘

Append row in sheet

Aggregate (doesn’t wait for all branches!)

Sum → Download → Gmail
What is the error message (if any)?
No error message. The workflow executes but:
Without Aggregate: Gmail sends 2-3 emails instead of 1
With Aggregate: Gmail sends 1 email but Aggregate only captures data from first branch, not all
Please share your workflow
json(tutaj wkleisz swój workflow - skopiuj go z n8n używając Ctrl+A potem Ctrl+C)
Share the output returned by the last node
Expected: Aggregate should output 1 item containing data from ALL selected dishes (2 or 3), then Gmail sends 1 email with total sum.
Actual: Aggregate outputs 1 item containing data from only the FIRST dish that was processed, ignoring other branches.
Information on your n8n setup
n8n version: (wpisz swoją wersję - znajdziesz ją w Settings)
Database (default: SQLite): SQLite
n8n EXECUTIONS_PROCESS setting (default: own, main): own
Running n8n via: Docker

Aggregate won’t wait.

Only Merge Node will wait for all input.

Create a Merge node between the 3 path with Google Sheet node