Commit Graph

25304 Commits

Author SHA1 Message Date
Guillaume Jacquart
394253553d test(core): Rebuild the shared node fixture for each lifecycle hook test
`mock<IWorkflowExecutionDataProcess>({ workflowData })` deep-proxies the object
it wraps. The proxy leaves auto-created mock functions on the shared fixture
node, so `node.disabled` reads as a function in every test that runs after it.

Any code that reads a node flag then sees a truthy value. The sub-workflow
progress tests are the first to do so, and they counted zero reachable nodes.

Rebuild the node in the shared `beforeEach`, next to the existing `settings`
reset.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-06 11:01:02 +02:00
Guillaume Jacquart
5604256701
fix(editor): Tokenize the progress arc thickness and correct its contract docs
Use `--spacing--5xs` for the arc thickness instead of a hardcoded 2px. The
token is the same 2px, and the chat package's override of it is scoped to
`.n8n-chat`, so the arc is unchanged.

Correct the push payload docs. `currentNodeIndex` counts the distinct child
nodes reached; it is not an execution-order index, and it parks while a loop
iterates. `totalNodes` is an upper bound, and the editor no longer renders it
as a denominator.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-06 10:50:08 +02:00
Guillaume Jacquart
529d5997b7
feat(core): Gate sub-workflow progress behind an env feature flag
The progress stream is off unless `N8N_ENV_FEAT_SUBWORKFLOW_PROGRESS` is set,
so the feature can ship to master dark and be enabled per instance.

Gated at hook registration rather than at emit time, so with the flag off a
sub-execution registers no extra handlers, walks no graph and sends no pushes.
The `N8N_ENV_FEAT_` prefix also exposes the same switch to the editor through
the env-feature-flag channel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-06 10:50:08 +02:00
Guillaume Jacquart
9e7f7ff30d
fix(editor): Grow the sub-workflow progress arc clockwise from the top
A conic gradient's 0deg already sits at 12 o'clock and advances clockwise, so the
`from -90deg` offset — an SVG/canvas convention, where 0deg is 3 o'clock — started
the arc at 9 o'clock and swept it the wrong way. At 25% it filled the upper-left
quadrant instead of the upper-right, and at 90% the remaining gap sat at the
bottom-left rather than just short of the top, losing the "almost closed" read.

Found by pinning --node--progress--fraction to fixed values against a running
instance with the transition disabled. The unit tests assert the fraction value,
which was right all along — only where the ink landed was wrong.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-06 10:50:08 +02:00
Guillaume Jacquart
aa7edc2b03
perf(editor): Keep sub-workflow progress off the execution hot path
Two costs that scaled with the number of sub-executions rather than with
anything visible, both of which a parent loop over a few hundred items would
have multiplied.

The progress arc no longer trickles between steps. The trickle needed a
1s interval, and because the composable was called unconditionally, every
default node on the canvas ran one whether a sub-workflow was executing or
not. The arc's own reason for existing was weak once the point was granted
that the rotating running border already shows the node is alive, so this
drops the behaviour rather than gating the timer.

The reachable-node count is now computed on first emit instead of at hook
registration, and node events return early when no parent pushRef resolves.
Executions with no editor session — the overwhelming majority — no longer
walk the child workflow's graph at all. Nodes are still tallied before that
bail-out, so an editor attaching mid-run sees a truthful count.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-06 10:50:08 +02:00
Guillaume Jacquart
eec68f3f45
feat(editor): Show sub-workflow progress on the node border
Replaces the in-body progress bar with a determinate arc on the node's own
border, plus a step count in the status-icon slot that gives way to the success
checkmark on finish. The running child node name reuses the subtitle line, so
nothing shifts as the child advances.

The arc is drawn on its own layer rather than sharing the running halo's ring:
compositing the two there made the shimmer's bright head vanish behind the solid
arc and read as a flicker. It trickles between steps, bounded to half a step, so
a slow child node doesn't read as a stalled bar, and stops short of a full turn
so only completion closes the loop.

The step count carries no denominator. Nodes reached is knowable, the total is
only estimated, so the count is reported unclamped and the estimate is used just
to scale the arc. That total now counts only nodes reachable from the
sub-workflow's entry point (plus their AI/tool sub-nodes), which stops leftover
trigger branches and disconnected islands from scaling the arc down.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-06 10:50:08 +02:00
Guillaume Jacquart
d4a052a3fc
fix(editor): Ignore stale sub-workflow finished events when clearing progress
`clear` deleted the progress entry using only the parent execution id and node
name, while `updateProgress` already ignored events from a superseded child.
That asymmetry meant a late `subworkflowExecutionFinished` from a previous child
could wipe the overlay of a newer one that is still running.

Pass the child execution id through from the push handler and only clear when it
matches the stored entry, mirroring the existing guard in `updateProgress`. The
id is optional so a caller with no specific child (such as a reset) still clears
unconditionally.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-06 10:50:08 +02:00
Guillaume Jacquart
4ff9c1204b
perf(core): Throttle sub-workflow progress pushes and limit them to direct children
The progress stream forwarded from a sub-workflow to the parent's canvas was
effectively unthrottled. The previous guard only suppressed consecutive
`nodeExecuteBefore` events for the same node with no intervening
`nodeExecuteAfter` — a sequence the engine does not produce — so steady state
was two messages per child node execution. Each of those is a pubsub broadcast
in scaling mode and a full canvas re-map in the editor, so a looping child
workflow could emit thousands of messages for one run.

Replace it with a trailing-edge throttle: the leading edge still emits
immediately so the overlay appears at once, subsequent events inside the window
coalesce into a single pending snapshot, and a trailing timer sends the latest
state. The overlay only renders the running node name, an "X / Y" counter and a
bar, so intermediate states are disposable. A 200-iteration child now emits two
messages instead of ~400. `workflowExecuteAfter` drops any pending snapshot,
since the finished event clears the overlay outright.

Also stop forwarding progress for nested sub-workflows. Only the workflow open
on the canvas renders the overlay, so a grandchild's parent node is not on
screen and the editor discarded those messages anyway. Resolving the direct
parent's pushRef instead of walking the whole ancestor chain removes that
wasted traffic and simplifies the lookup.

Tests now exercise real engine before/after sequences rather than the synthetic
double-`nodeExecuteBefore` the old throttle keyed on.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-06 10:50:07 +02:00
Guillaume Jacquart
995e73c24c
feat(editor): Show live sub-workflow progress on Execute Sub-workflow node 2026-10-06 10:50:07 +02:00
Guillaume Jacquart
b07a288a26
feat(core): Forward sub-workflow node progress to the parent execution 2026-10-06 10:50:06 +02:00
Matsu
7db7fa42c8
fix: Multiple migration timestamps withing a single PR (#40379) 2026-10-06 07:28:47 +00:00
Matsu
3f2144f062
chore: Update turbo.json oxlint configurations (#40377) 2026-10-06 07:27:56 +00:00
n8n-assistant[bot]
a11777054a
🚀 Release 2.43.0 (#40376)
Co-authored-by: n8n-release-helper[bot] <265227495+n8n-release-helper[bot]@users.noreply.github.com>
2026-10-06 07:10:16 +00:00
n8n-assistant[bot]
a448b8d2df
chore: Update e2e impact map (#40370)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-06 05:24:45 +00:00
n8n-assistant[bot]
b82ad639e8
chore: Lower boundaries baseline (no-changelog) (#40369)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-06 03:30:05 +00:00
Mayank SIngh
439e8ba2e7
fix(core): Reload static data for queued executions (#39668)
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
2026-10-05 21:31:11 +00:00
Uddish Verma
0280644e77
refactor(API): Migrate GET /settings/log-streaming/event-types to the decorator pattern (no-changelog) (#40234)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:55:04 +00:00
Eugene
308ec2cc1c
feat(editor): Show Agent plans in preview chat (no-changelog) (#40006) 2026-10-05 15:42:28 +00:00
Michael Drury
5c0aff8cbc
fix(editor): Restore full-width Agent preview (#39986) 2026-10-05 15:41:33 +00:00
Robin Braumann
314c430bfc
fix(core): Limit background task continuation to the latest stop group (#40333) 2026-10-05 15:40:03 +00:00
Sandra Zollner
f7cfb520bf
feat(editor): Submit selected project changes from the promote modal (#39609) 2026-10-05 15:31:23 +00:00
Anne Aguirre
a2fd4189f1
feat(core): Persist agent budget spend in the database (#40138)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-10-05 15:11:29 +00:00
Sam Wooler
5f73c7cdcb
feat(API): Support multipart request bodies on Public API controller routes (no-changelog) (#40074) 2026-10-05 15:08:34 +00:00
Emilia
02f08035b4
chore(core): Bump task-runner-launcher to 1.5.1 (#40324)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-05 15:00:51 +00:00
Mike Repeć
680f9582e1
feat(core): Add engine suspension at node boundaries for resumable executions (#37649)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-10-05 15:00:01 +00:00
Robin Braumann
f055d9cd11
docs(core): Explain background task continuation selection (#40321) 2026-10-05 14:33:56 +00:00
Charlie Kolb
b5fe251ba5
refactor(core): Move ownership transfer registry to backend services (#40308) 2026-10-05 14:30:21 +00:00
José Braulio González Valido
b7071c91c7
fix(ai-builder): Treat a blank folder path as no folder in the build tool (#40116)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 13:57:14 +00:00
Charlie Kolb
206fc6f317
refactor(core): Move instance write access service (#40307) 2026-10-05 13:54:20 +00:00
Jakub Kadlubiec
01f072b520
chore: Move Chat Hub ownership to Assistant team (no-changelog) (#40243)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:38:29 +00:00
Nour Alhadi Mahmoud
548bd57802
fix(core): Load workflow publish history in a separate query (#40171)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:30:49 +00:00
Robin Braumann
4939dbc787
feat(core): Stop background workflows in Preview (no-changelog) (#40291) 2026-10-05 13:19:23 +00:00
Thanasis G
022f4a6477
feat(Azure OpenAI Chat Model Node): Add the deployment dropdown (#39643)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:15:57 +00:00
Pierantonio Cangianiello
8fa89ee02f
docs(engine): Add ADR on binary data access from a data plane in a separate process (no-changelog) (#40179) 2026-10-05 12:55:40 +00:00
Sebastien Powell
8f13f2830a
feat(core): Add remote search and programmatic focus to N8nCombobox so the MCP selects can leave N8nSelect (#40140) 2026-10-05 12:43:11 +00:00
Benjamin Schroth
9183d0422c
fix(core): Resolve the request target against the dispatcher origin (#39506) 2026-10-05 12:28:43 +00:00
James Martin
073239e6d5
chore(core): Implements JWKS service to provide key pair for signing tokens (no-changelog) (#39718)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 12:22:32 +00:00
Riqwan Thamir
7779f47a7d
fix(core): Retry transient Observer model failures (no-changelog) (#40263) 2026-10-05 12:16:57 +00:00
Andreas Fitzek
79924a5d93
refactor(core): Drop TypeORM imports from event bus, LDAP reset, ownership, evaluation, and tags (no-changelog) (#39353)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 12:14:47 +00:00
Andreas Fitzek
1942447e90
feat(core): Add a shared OAuth discovery and JWKS client (no-changelog) (#40012)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 12:11:52 +00:00
Savelii
44d9adfc7e
fix(core): Use the new client ID and secret for OAuth2 client credentials (#39891)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-10-05 12:02:55 +00:00
Ali Elkhateeb
fa8b8b243e
refactor(API): Migrate LDAP sync endpoints to PublicApiController (#40280)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 12:00:55 +00:00
Eugene
c4c31a529c
feat(core): Add parent-Agent plan tools (no-changelog) (#39542) 2026-10-05 11:59:50 +00:00
Yuliia Pominchuk
92ae1b336f
feat(editor): Show whose credential a node uses and let others switch from it (#40281) 2026-10-05 11:59:20 +00:00
Bernhard Wittmann
e3aa15d7d7
fix(editor): Check Teams credential again after it is saved (no-changelog) (#40264) 2026-10-05 11:56:23 +00:00
Savelii
360ec09cf2
fix(editor): Enable Save when SSO role provisioning switches back to manual (#39925)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:23:06 +00:00
Savelii
1cac1e056d
fix(core): Keep concurrent credential tests from sharing one node type registry (#40054)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:08:25 +00:00
Riqwan Thamir
fe07e84d0f
fix(core): Keep skill activation and memory compaction from breaking the prompt cache (no-changelog) (#40245)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 10:48:35 +00:00
Stephen Wright
6610987057
fix(Azure OpenAI Chat Model Node): Support Responses-only deployments (#39403)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-05 10:46:42 +00:00
n8n-cat-bot[bot]
94a49d08ce
feat(Crypto Node): Add RSA-OAEP hash option (#39853)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Jonathan <jon@n8n.io>
Co-authored-by: Jon <jonathan.bennetts@gmail.com>
2026-10-05 10:09:39 +00:00