Commit Graph

22940 Commits

Author SHA1 Message Date
Danny Martini
5e328c3412 docs(experiment): summarize CRIU scale-to-zero findings
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:55:10 +02:00
Danny Martini
421f306b2b feat(experiment): log which request extended a periodic run window
"periodic run extended by traffic (GET /rest/settings, 0 in flight)"
— names the newest real request plus the in-flight count, same
observability idea as the woken-by log line.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 16:56:11 +02:00
Danny Martini
33c77abd9d feat(experiment): periodic heartbeat wake and n8n log streaming (milestone 3)
- RESTORE_INTERVAL (default 30s) / RUN_DURATION (default 2s): while
  suspended, n8n is periodically restored and allowed to run briefly so
  scheduled work (cron triggers, queued timers) can fire; dumped again
  after the window unless real traffic arrived, in which case the idle
  watcher takes over. RESTORE_INTERVAL=0 disables the heartbeat.
- n8n's log file is streamed to the activator's stdout so pod logs
  carry n8n output. The child keeps writing to a plain file (criu can't
  restore log-collector pipe fds without --inherit-fd bookkeeping);
  the activator tails it instead.
- restoreLocked resets the idle clock — previously the idle watcher
  dumped a freshly restored n8n ~200ms into its run window.

Observed while testing: n8n's /metrics scrape throws in prom-client's
processCpuTotal after a restore (process CPU time restarts near zero,
counter delta goes negative). Cosmetic for now, upstream-shaped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 16:48:30 +02:00
Danny Martini
203cff895f fix(experiment): avoid sidecar port collision and cgroup escape (criu-4)
- internal n8n port 5680 → 5690: in the cloud pod's shared network
  namespace the task-runner-launcher sidecar binds its health-check
  server on 5680, so the activator's n8n child failed to bind after a
  container restart lost the startup race
- --manage-cgroups=ignore on all criu calls: restored trees stay in the
  activator's current cgroup instead of the dump-time paths, so they
  can never outlive the container

Verified locally: cached healthz while suspended, wake ~350ms,
idle dump ~220ms, n8n listening on 5690. Deployed to AKS as criu-4.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 16:24:38 +02:00
Danny Martini
0dd43c3731 feat(experiment): log which request woke a suspended n8n
"restored on demand in 437ms (woken by GET /favicon.ico)" — makes it
obvious when a wake was caused by browser companion requests rather
than the route the user actually opened.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 15:38:10 +02:00
Danny Martini
29374fef57 feat(experiment): serve health and metrics from cache while suspended
/healthz, /healthz/readiness and /metrics no longer wake a dumped n8n —
monitoring probes were the one traffic class that would have defeated
scale-to-zero. Behavior:

- n8n running: forwarded live and re-cached; counted as in-flight (no
  dump mid-request) but deliberately NOT as activity, so probe traffic
  doesn't reset the idle timer
- n8n dumped: answered from cache, marked X-Activator-State: suspended
  plus X-Activator-Cache-Age
- cache refreshed at startup (gated on /healthz/readiness so the
  "starting up" placeholder is never captured), right before every idle
  dump (snapshot of last live state), and after every restore

n8n now runs with N8N_METRICS=true so /metrics exists to cache.

Verified: 1Hz healthz probing through a full cycle — 0 wakes, idle dump
still fired on schedule, cached /metrics serves real Prometheus output
including before the first wake.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 15:28:08 +02:00
Danny Martini
f424cdd2dd feat(experiment): scale-to-zero proxy for CRIU-paused n8n (milestone 2)
The activator now owns :5678 and proxies to n8n on an internal
port (5680, loopback-only). n8n is dumped once healthy at startup and
stays checkpointed until a request arrives; the first request pays the
restore (~100-300ms observed), later requests are warm (~1ms), and
after IDLE_TIMEOUT (default 10s) with no in-flight requests the idle
watcher dumps it again.

Measured through the proxy: cold 108ms / warm 1.2ms / idle dump ~290ms.
On criu failure the last 4KB of dump.log/restore.log go to the
activator's output, so pod logs carry the real error.

Known open decision: external /healthz is proxied like any request and
therefore wakes n8n — monitoring probes would defeat scale-to-zero.
The activator should eventually answer health checks itself.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 15:20:37 +02:00
Danny Martini
209b04d725 feat(experiment): CRIU pause/resume for n8n
Host-side scripts:
- criu-test.sh / criu-test2.sh: sleep smoke tests (dump kills, restore
  resumes with remaining subjective time, PID proof via /proc)
- criu-n8n.sh: start/pause/resume/status for a local n8n via criu

criu-activator/ (milestone 1): container whose Go PID-1 supervisor loops
run 1s -> dump -> wait 5s -> restore. Verified 9 stable cycles,
~320ms dump / ~310ms restore-to-healthy on a ~900M image.

Notable constraints baked in:
- node >=22.22 creates io_uring rings criu can't dump and ignores
  UV_USE_IO_URING; --privileged disables the container seccomp profile,
  so the activator re-execs itself to install a BPF filter denying
  io_uring_setup (ENOSYS -> libuv epoll fallback) before exec'ing n8n
- n8n's hardened alpine image has no package manager and criu isn't in
  alpine main repos -> debian trixie-slim + npm i -g n8n
- trixie's criu 4.1.1 fails kernel 7.x socket-option probing
  (SO_PASSCRED/SO_PASSSEC EOPNOTSUPP on inet sockets) -> build 4.2.1
  from source
- dump needs: session-leader tree root (Setsid), iptables binary for
  --tcp-established locking, plain-file stdio (no docker log pipes)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 15:19:56 +02:00
Michael Drury
e2e719c4ad
feat(ai-builder): Offer agent building in assistant greetings (#36073)
Some checks are pending
Build: Benchmark Image / build (push) Waiting to run
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.23.2) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.1) (push) Waiting to run
CI: Master (Build, Test, Lint) / Lint (push) Waiting to run
CI: Master (Build, Test, Lint) / Performance (push) Waiting to run
CI: Master (Build, Test, Lint) / Notify Slack on failure (push) Blocked by required conditions
2026-08-12 08:22:30 +00:00
Kai
12c44790c0
feat: Require a reviewer when creating a workflow review request (no-changelog) (#35932) 2026-08-12 07:42:31 +00:00
Svetoslav Dekov
e4f0c33584
fix(core): Detect node settings changes when comparing workflow versions (#36066)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 07:22:02 +00:00
Riqwan Thamir
dfa841a040
feat(core): Skip update approval for workflows created in the same Instance AI session (#36054)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-12 06:59:16 +00:00
MHMD
a78ff67f59
fix(editor): Redirect to sign-in when the user's session expires (#35507) 2026-08-12 06:58:58 +00:00
n8n-assistant[bot]
4883173b65
chore: Update e2e impact map (#36094)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-12 03:56:34 +00:00
Alex Grozav
3b6e7d1ddb
build(editor): Add the @n8n/frontend-vite-config package (no-changelog) (#36043)
Co-authored-by: multica-agent <github@multica.ai>
2026-08-12 03:25:05 +00:00
n8n-cat-bot[bot]
666fde3ce3
chore: Bump fast-xml-builder 1.1.7 → 1.2.1 (minor) to clear 1 Aikido finding (#36090)
Some checks are pending
Build: Benchmark Image / build (push) Waiting to run
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.23.2) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.1) (push) Waiting to run
CI: Master (Build, Test, Lint) / Lint (push) Waiting to run
CI: Master (Build, Test, Lint) / Performance (push) Waiting to run
CI: Master (Build, Test, Lint) / Notify Slack on failure (push) Blocked by required conditions
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 22:20:30 +00:00
Emilia
5ac6606e81
test(core): Add durable scheduler poll cursors e2e tests (no-changelog) (#35343)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Lorent Lempereur <lorent.lempereur@n8n.io>
2026-08-11 20:36:24 +00:00
Riqwan Thamir
560455faf1
fix(core): Accept Always allow scope on data-tables resume (#36070)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 18:11:46 +00:00
n8n-cat-bot[bot]
467221d9c6
chore: Bump undici 6.27.0 → 6.28.0 (minor) to clear 3 Aikido findings (#36078)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 18:10:30 +00:00
Emilia
a9787fcd6f
feat(core): Commit a poll trigger's cursor and its execution in one transaction (no-changelog) (#35295)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Lorent Lempereur <lorent.lempereur@n8n.io>
2026-08-11 17:59:29 +00:00
Declan Carroll
593a8b83d8
feat: Add HTTP agent broker to Codespaces agent sessions (no-changelog) (#36068)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 17:28:26 +00:00
Emilia
93ff542e92
feat(core): Add poller_state table for durable poll trigger cursors (no-changelog) (#35128)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Lorent Lempereur <lorent.lempereur@n8n.io>
2026-08-11 16:31:00 +00:00
Guillaume Jacquart
a447ac422e
fix(core): Keep resolving end-user credentials after a trigger stops listening (#35973)
Some checks failed
Build: Benchmark Image / build (push) Waiting to run
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.23.2) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.18.1) (push) Waiting to run
CI: Master (Build, Test, Lint) / Lint (push) Waiting to run
CI: Master (Build, Test, Lint) / Performance (push) Waiting to run
CI: Master (Build, Test, Lint) / Notify Slack on failure (push) Blocked by required conditions
Util: Publish API Schema / Cloudflare Pages (push) Has been cancelled
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 15:53:54 +00:00
Michael Drury
a723e791f1
fix(core): Improve agent builder skill and channel handling (#35980) 2026-08-11 15:35:53 +00:00
n8n-cat-bot[bot]
3ae801ec1f
chore(ci): Fix silently broken container image pre-pull in DB tests and nightly coverage workflows (#36024)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 15:27:59 +00:00
Guillaume Jacquart
ee03e023d2
fix(editor): Show the connected provider account, not the n8n account email (#35553)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 15:25:52 +00:00
Bernhard Wittmann
7352eb7def
chore: Bump Browser Use Chrome extension to 0.0.5 (#36060) 2026-08-11 15:06:26 +00:00
Jan Kalkan
e65580bf10
feat(core): Add the workflow review activity feed (no-changelog) (#35791)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Sandra Zollner <sandra.zollner@n8n.io>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 14:20:01 +00:00
Alex Grozav
56a2d20095
fix(editor): Never autosave a read-only preview canvas (#36023) 2026-08-11 14:19:40 +00:00
Mutasem Aldmour
e4a414dc18
fix(editor): Name the AI Assistant browser tab after the conversation (#35958)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 14:13:21 +00:00
jabbson
6bd31e5e1e
feat(Discord Node): Add member moderation actions (#33486)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jon <jonathan.bennetts@gmail.com>
2026-08-11 13:57:22 +00:00
Michael Drury
42130c5362
feat(editor): Add docked agent preview chat (#35773) 2026-08-11 13:41:50 +00:00
Raúl Gómez Morales
0f9bff0b14
fix(editor): Open OAuth sign-in popup before network calls and report blocked pop-ups clearly (#35948) 2026-08-11 13:29:09 +00:00
Jaakko Husso
cc5f1cb37f
feat(core): Add activation-capped AI Assistant trial variant (no-changelog) (#35994)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 12:46:16 +00:00
Jan Kalkan
41d54e77f1
feat(core): Add workflow review activity log tables and migration (no-changelog) (#35517)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Sandra Zollner <sandra.zollner@n8n.io>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 12:25:46 +00:00
Alejandro Sanz
d7dcba5c80
feat(lmChatOpenRouter Node): Add provider routing options (#24822)
Co-authored-by: Dawid Myslak <dawid.myslak@gmail.com>
2026-08-11 12:05:55 +00:00
oleg
a91e012de6
fix: Remove default model from one-script docker compose setup (#36034) 2026-08-11 12:04:27 +00:00
Declan Carroll
4f91ee02f5
fix: Make Codespaces secrets reach non-login shells and improve agent sessions (no-changelog) (#36042)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 11:49:44 +00:00
n8n-cat-bot[bot]
99d19cafec
chore: Remove unused Claude Task Runner workflow (#36036)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 11:24:46 +00:00
Iván Ovejero
42b1f2922f
test(core): Add engine M1 acceptance test suite (#35838) 2026-08-11 11:21:18 +00:00
Robin Braumann
6a30736841
feat(core): Add n8n Sandbox support to Agent Knowledge (#35811)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 11:18:19 +00:00
Matsu
5cb6d2c565
ci: Remove Util: Claude task runner (#36035) 2026-08-11 11:02:01 +00:00
n8n-cat-bot[bot]
08052c19eb
fix: Handle exponential-notation numbers in smartDecimal (#35967)
Co-authored-by: n8n-cat-bot[bot] <n8n-cat-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 11:01:16 +00:00
mfsiega
4b807b7c49
feat(core): Accept fan-in across input slots in @n8n/engine (no-changelog) (#35819)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
2026-08-11 10:55:31 +00:00
Emilia
729c9b46e3
test(cli): Remove clock race from flaky scheduled-task re-claim test (#36031)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:48:57 +00:00
Charlie Kolb
6f2033f0e1
fix: Avoid false port-in-use error in get-n8n script on Windows/WSL (#36026)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 10:38:21 +00:00
Rob Hough
cce5401ed2
fix(editor): Remove misleading reset zoom control (#35843) 2026-08-11 10:22:36 +00:00
Tomi Turtiainen
fd67bf8b78
fix(core): Crash enqueued executions with unreadable data (#36010) 2026-08-11 10:14:57 +00:00
Ragnar
e7fa25217e
feat: Hide n8n-connect usage when aiGatewayCloudUbb is enabled (#35978) 2026-08-11 10:13:43 +00:00
Csaba Tuncsik
88efdb975e
fix(core): Resolve Custom API Call support through inherited credential types (#35820) 2026-08-11 10:04:41 +00:00