Skip to content

feat(core): Introduce workflowPublishHistory table (no-changelog) - #22043

Merged
CharlieKolb merged 55 commits into
masterfrom
ADO-4295_3
Nov 28, 2025
Merged

CharlieKolb merged 55 commits into
masterfrom
ADO-4295_3

Conversation

@CharlieKolb

@CharlieKolb CharlieKolb commented Nov 19, 2025 •

Copy link
Copy Markdown
Collaborator

Summary

Introduce a new table which tracks historic workflow activations, relating acting userId where available.

Included some util functions on the repo, we may want to expose the one returning all published versions of a workflow via a new controller at some point.

Open question is if and how we need to clean this table up over time.

Related Linear tickets, Github issues, and Community forum posts

https://linear.app/n8n/issue/ADO-4295

Review / Merge checklist

  • PR title and summary are descriptive. (conventions)
  • Docs updated or follow-up ticket created.
  • Tests included.
  • PR Labeled with release/backport (if the PR is an urgent fix that needs to be backported)

@n8n-assistant n8n-assistant Bot added core Enhancement outside /nodes-base and /editor-ui n8n team Authored by the n8n team labels Nov 19, 2025
@blacksmith-sh

This comment has been minimized.

@CharlieKolb CharlieKolb changed the title Add workflowPublishHistory feat(core): Introduce workflowPublishHistory table (no-changelog) Nov 20, 2025
@codecov

codecov Bot commented Nov 20, 2025 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 70.51282% with 23 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...1764167920585-CreateWorkflowPublishHistoryTable.ts 12.50% 14 Missing ⚠️
...epositories/workflow-publish-history.repository.ts 0.00% 8 Missing ⚠️
packages/@n8n/db/src/repositories/index.ts 0.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@dariacodes
dariacodes force-pushed the ado-4348-add-new-internal-endpoints branch from cd6713a to 36491d1 Compare November 20, 2025 16:01
Base automatically changed from ado-4348-add-new-internal-endpoints to master November 21, 2025 13:27
@currents-bot

currents-bot Bot commented Nov 25, 2025 •

Copy link
Copy Markdown

✅

E2E Tests: n8n tests passed after 9m 2s

🟢 592 · 🔴 0 · ⚪️ 12 · 🟣 2

View Run Details

Run Details

  • Project: n8n

  • Groups: 2

  • Framework: Playwright

  • Run Status: Passed

  • Commit: f3e58f1

  • Spec files: 99

  • Overall tests: 604

  • Duration: 9m 2s

  • Parallelization: 9

Groups

GroupId Results Spec Files Progress
ui 🟢 541 · 🔴 0 · ⚪️ 12 · 🟣 2 92 / 92
ui:isolated 🟢 51 · 🔴 0 · ⚪️ 0 7 / 7


This message was posted automatically by currents.dev | Integration Settings

@blacksmith-sh

This comment has been minimized.

@blacksmith-sh

This comment has been minimized.

@CharlieKolb
CharlieKolb marked this pull request as ready for review November 25, 2025 12:09
@CharlieKolb
CharlieKolb requested a review from a team November 25, 2025 12:09

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 issues found across 19 files

Prompt for AI agents (all 4 issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="packages/cli/src/active-workflow-manager.ts">

<violation number="1" location="packages/cli/src/active-workflow-manager.ts:662">
Rule violated: **Tests**

New workflow publish history logging lacks any automated tests even though the Community PR Guidelines require tests for new functionality.</violation>

<violation number="2" location="packages/cli/src/active-workflow-manager.ts:662">
Deactivations in multi-main setups never get recorded because `remove()` returns before calling `workflowPublishHistoryRepository.addRecord`, and the leader’s `remove-triggers-and-pollers` handler doesn’t log either. Multi-main deployments therefore lose all deactivation history.</violation>
</file>

<file name="packages/@n8n/db/src/migrations/common/1763387043735-CreateWorkflowPublishHistoryTable.ts">

<violation number="1" location="packages/@n8n/db/src/migrations/common/1763387043735-CreateWorkflowPublishHistoryTable.ts:35">
`activeVersionId` is read from the query result in camelCase, but PostgreSQL returns the column name in lowercase (`activeversionid`), so `activeVersionId` is always `undefined` and the migration fails with a foreign key error while seeding initial rows.</violation>
</file>

<file name="packages/@n8n/db/src/repositories/workflow-publish-history.repository.ts">

<violation number="1" location="packages/@n8n/db/src/repositories/workflow-publish-history.repository.ts:49">
`includeUser` never returns the `user` relation because the `find` call does not load any relations; add `relations: [&#39;user&#39;]` when the flag is set so the user data is actually fetched.</violation>
</file>

Reply to cubic to teach it or ask questions. Re-run a review with @cubic-dev-ai review this PR


const triggerCount = this.countTriggers(workflow, additionalData);
await this.workflowRepository.updateWorkflowTriggerCount(workflow.id, triggerCount);
await this.workflowPublishHistoryRepository.addRecord({

@cubic-dev-ai cubic-dev-ai Bot Nov 25, 2025 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rule violated: Tests

New workflow publish history logging lacks any automated tests even though the Community PR Guidelines require tests for new functionality.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/cli/src/active-workflow-manager.ts, line 662:

<comment>New workflow publish history logging lacks any automated tests even though the Community PR Guidelines require tests for new functionality.</comment>

<file context>
@@ -655,6 +659,13 @@ export class ActiveWorkflowManager {
 
 			const triggerCount = this.countTriggers(workflow, additionalData);
 			await this.workflowRepository.updateWorkflowTriggerCount(workflow.id, triggerCount);
+			await this.workflowPublishHistoryRepository.addRecord({
+				workflowId,
+				versionId: dbWorkflow.versionId,
</file context>

✅ Addressed in fdede8f

});

const workflowEntityTableName = escape.tableName('workflow_entity');
const activeWorkflows = await runQuery<Array<{ id: string; activeVersionId: string }>>(

@cubic-dev-ai cubic-dev-ai Bot Nov 25, 2025 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

activeVersionId is read from the query result in camelCase, but PostgreSQL returns the column name in lowercase (activeversionid), so activeVersionId is always undefined and the migration fails with a foreign key error while seeding initial rows.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/@n8n/db/src/migrations/common/1763387043735-CreateWorkflowPublishHistoryTable.ts, line 35:

<comment>`activeVersionId` is read from the query result in camelCase, but PostgreSQL returns the column name in lowercase (`activeversionid`), so `activeVersionId` is always `undefined` and the migration fails with a foreign key error while seeding initial rows.</comment>

<file context>
@@ -0,0 +1,52 @@
+			});
+
+		const workflowEntityTableName = escape.tableName(&#39;workflow_entity&#39;);
+		const activeWorkflows = await runQuery&lt;Array&lt;{ id: string; activeVersionId: string }&gt;&gt;(
+			`SELECT we.id, we.activeVersionId FROM ${workflowEntityTableName} we WHERE we.activeVersionId IS NOT NULL;`,
+		);
</file context>

✅ Addressed in 51752a8


const triggerCount = this.countTriggers(workflow, additionalData);
await this.workflowRepository.updateWorkflowTriggerCount(workflow.id, triggerCount);
await this.workflowPublishHistoryRepository.addRecord({

@cubic-dev-ai cubic-dev-ai Bot Nov 25, 2025 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deactivations in multi-main setups never get recorded because remove() returns before calling workflowPublishHistoryRepository.addRecord, and the leader’s remove-triggers-and-pollers handler doesn’t log either. Multi-main deployments therefore lose all deactivation history.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/cli/src/active-workflow-manager.ts, line 662:

<comment>Deactivations in multi-main setups never get recorded because `remove()` returns before calling `workflowPublishHistoryRepository.addRecord`, and the leader’s `remove-triggers-and-pollers` handler doesn’t log either. Multi-main deployments therefore lose all deactivation history.</comment>

<file context>
@@ -655,6 +659,13 @@ export class ActiveWorkflowManager {
 
 			const triggerCount = this.countTriggers(workflow, additionalData);
 			await this.workflowRepository.updateWorkflowTriggerCount(workflow.id, triggerCount);
+			await this.workflowPublishHistoryRepository.addRecord({
+				workflowId,
+				versionId: dbWorkflow.versionId,
</file context>

✅ Addressed in c2ed0c3

Comment thread packages/@n8n/db/src/repositories/workflow-publish-history.repository.ts Outdated
@blacksmith-sh

This comment has been minimized.

Comment thread packages/cli/src/workflows/workflow.service.ts Outdated
Comment thread packages/cli/src/workflows/workflow.service.ts Outdated
dariacodes
dariacodes previously approved these changes Nov 28, 2025

@dariacodes dariacodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good 🚀

@CharlieKolb
CharlieKolb requested a review from tomi November 28, 2025 11:05
dariacodes
dariacodes previously approved these changes Nov 28, 2025

@tomi tomi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DB changes look good. Couple questions and comments

mode: WorkflowPublishHistoryMode | null;

@Column({ type: 'varchar', nullable: true })
userId: string | null;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think this would be nice to align with WorkflowHistory. It only stores the name of the user in a single string. I think "Firstname Lastname". That way the info stays there even if the user is deleted. Also it doesn't need to be nullable. Then again I don't know how you use this in the UI. Do you need full details of the user?


await runQuery(
`INSERT INTO ${escapedWphTableName} (${workflowId}, ${versionId}, ${status}, ${createdAt})
SELECT we.${id}, we.${activeVersionId}, 'activated', we.${updatedAt}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: workflow_entity.updatedAt doesn't necessarily reflect the actual activation timestamp. Neither does CURRENT_TIMESTAMP, but that would perhaps be closer to truth here?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is best effort indeed - I do think there's some value in indicating whether an active workflow was last modified (and thus "published" in our new world), even if this is potentially off a bit.
Knowing a workflow was changed six months ago vs a week ago will be more valuable than showing the timestamp of the migration, especially since that datetime will be completely unrelated to the given workflow.

Comment thread packages/cli/src/workflows/workflow.service.ee.ts Outdated
Comment thread packages/cli/src/workflows/workflow.service.ts Outdated
Comment thread packages/cli/src/workflows/workflow.service.ts Outdated
Comment thread packages/cli/src/workflows/workflow.service.ts Outdated
@CharlieKolb
CharlieKolb requested a review from tomi November 28, 2025 13:35

@tomi tomi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for addressing the feedback 🫶

@CharlieKolb
CharlieKolb merged commit 9f2efb7 into master Nov 28, 2025
37 checks passed
@CharlieKolb
CharlieKolb deleted the ADO-4295_3 branch November 28, 2025 13:57
@n8n-assistant

n8n-assistant Bot commented Dec 1, 2025

Copy link
Copy Markdown
Contributor

Got released with n8n@1.123.0

importcoderro added a commit to build-one-labs/n8n that referenced this pull request Dec 22, 2025
* feat(MCP Client Node): New node (n8n-io#21942)

* fix(Agent Node): Thinking model issue - undefined `.map` error (n8n-io#22046)

* feat(core): Add DeepSeek support to chat hub (no-changelog) (n8n-io#22037)

* test: Specify timezone in test data (no-changelog) (n8n-io#22134)

* feat(core): Add OpenRouter provider support for chat hub (no-changelog) (n8n-io#22094)

* feat(core): Add Groq provider support for chat hub (no-changelog) (n8n-io#22071)

* feat(core): Add Chat settings admin view (no-changelog) (n8n-io#22009)

* feat: Block UI updates for instance / project roles if provisioning enabed (n8n-io#22095)

* feat(core): Add xAI Grok provider support for chat hub (no-changelog) (n8n-io#22084)

* feat(core): Add Vercel AI Gateway provider support for chat hub (no-changelog) (n8n-io#22090)

* fix(core): Safely handle paths at Data Table CSV imports (no-changelog) (n8n-io#22139)

* feat(editor): CSV download support for data tables (n8n-io#22048)

* docs(editor): Create Tree component API spec (n8n-io#21580)

* refactor(core): Always use RunExecutionData factory (no-changelog) (n8n-io#22096)

Co-authored-by: Danny Martini <danny@n8n.io>

* refactor(core): Set up binary data table (n8n-io#22137)

* refactor(core): Update binary data config (n8n-io#22141)

* feat(core): Add new internal endpoints for draft/publish (no-changelog) (n8n-io#22105)

* chore: Hide Github document loader (deprecated) (n8n-io#22138)

* feat(core): Add more details to MCP errors and telemetry (no-changelog) (n8n-io#22118)

* feat(ai-builder): Add python script for workflow comparison (n8n-io#21927)

* feat(core): Add separate Azure API key and Entra ID providers (no-changelog) (n8n-io#22101)

* feat(editor): Add dismissable callout for scaling mode enabled customers (n8n-io#21897)

* fix(editor): Minor design fixes for the migration report (n8n-io#22110)

* feat(core): Shorten copy text on confirm provisioning dialog (n8n-io#22086)

* refactor(core): Decouple chathub binary data from core (n8n-io#22147)

* ci: Fix flaky tests and some docker run shenanigans (n8n-io#22148)

* fix(editor): Add responsiveness to the templates panel (n8n-io#22132)

* fix(n8n Form Node): Allow undefined formatDate (n8n-io#21811)

* fix(Google Cloud Firestore Node): Make the description for the Update Key for Upsert operation more clear (no-changelog) (n8n-io#21814)

* test: Address flakes in tags tests, add test for tag count persistence when reopening dropdown after save (n8n-io#22160)

* fix(OpenAI Node): Use new model for text classification (n8n-io#22130)

* test: Remove some isolated tests (n8n-io#22161)

* test: Fix broken test expectation (no-changelog) (n8n-io#22193)

* test: Fix flaky js task runner test (n8n-io#22146)

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

* fix: Chat UI feedback 2 (no-changelog) (n8n-io#22109)

* feat(editor): Introduce chromatic modes (no-changelog) (n8n-io#22170)

* fix(ChatTrigger Node): Keep session ID when load previous session is on (n8n-io#22150)

* fix(editor): Ready to run v2 p2 rework (no-changelog) (n8n-io#22199)

* feat(editor): Minor UX improvements for MCP (no-changelog) (n8n-io#22131)

* test: Disable log colors in benchmark task runners (n8n-io#22211)

* fix(core): Restore `moment` to regular runners image (n8n-io#22212)

* fix: Improve logging for settings store (n8n-io#22216)

* ci: Fix author/commiter for automated PR (n8n-io#22221)

* chore: Add telemetry for user role provisioning (no changelog) (n8n-io#22158)

* chore(core): Execution context establishment hook registry (n8n-io#22098)

* fix(OpenAi Node): Fix grammar in audio operation descriptions (n8n-io#22041)

* fix: File attachment bugfixes (no-changelog) (n8n-io#22142)

Co-authored-by: Jaakko Husso <jaakko@n8n.io>

* feat: Add best practices for all builder categories (n8n-io#21943)

Co-authored-by: Michael Drury <michael.drury@n8n.io>

* fix: Improve json repair logic (n8n-io#22088)

* feat(core): Make user role provisioning available on enterprise (n8n-io#22166)

* fix(Salesforce Trigger Node): Fix Opportunity updated description (n8n-io#22169)

* feat(editor): Custom project roles Beta release (n8n-io#22228)

* test(ai-builder): Integrate structural workflow comparison (n8n-io#22209)

* 🚀 Release 1.122.0 (n8n-io#22237)

Co-authored-by: tomi <10324676+tomi@users.noreply.github.com>

* feat(editor): Rename draft/publish feature env variable (no-changelog) (n8n-io#22235)

* feat(core): Switch to structured destination node (no-changelog) (n8n-io#22143)

Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Claude <noreply@anthropic.com>

* ci: Fix script to detect release (n8n-io#22242)

* fix: Renovate will now bump versions (n8n-io#22245)

* ci: Fix excessively deep type instantiation in `ChatHubMessageRepository` (n8n-io#22240)

* ci: Don't fail patch release if no changelog could be generated (n8n-io#22248)

* fix(editor): Missing duplicate workflow action on workflow list (n8n-io#22230)

* feat(core): Draft/Publish workflow endpoints follow up (no-changelog) (n8n-io#22246)

* feat(editor): Add medium font weight variable to CLAUDE.md (no-changelog) (n8n-io#22263)

* chore: Readd `minimumReleaseAge` (n8n-io#22265)

* feat(core): Create chat workflows in archived state (no-changelog) (n8n-io#22267)

* fix(editor): Preserve paired item data in pinned data (n8n-io#21417)

Co-authored-by: Claude <noreply@anthropic.com>

* fix(editor): Fix issue for blinking/jumping UI when switching projects (n8n-io#22256)

* feat: Reduce unauthentication information in settings endpoint further (n8n-io#22106)

* fix(core): Send prod workflow succeeded for wfs in projects (n8n-io#22223)

* fix(ai-builder): Keep existing pin data when modifying the workflow (n8n-io#22266)

* fix(editor): Fix sub-nodes connection labels counters  (n8n-io#21549)

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* feat(core): Send the right activation mode for activate endpoint (no-changelog) (n8n-io#22276)

* fix: Update base image dependencies to latest security patches (n8n-io#22275)

* fix: Show correct date range in insight overview

* chore: Move to AGENTS.md file with agent instructions (n8n-io#22227)

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

* feat: Add the time saved node (n8n-io#22269)

* fix(editor): Focus 'key' input when variable modal is open (no-changelog) (n8n-io#21762)

Co-authored-by: Nikhil Kuriakose <nikhilkuria@gmail.com>

* feat(core): Use personal projects for chat hub executions (no-changelog) (n8n-io#22231)

* feat(core): Use 'chat' and 'webhook' execution modes on chat hub (no-changelog) (n8n-io#22282)

* feat(core): Inject hooks into applicable trigger node properties for the node UI (n8n-io#22290)

* test: Fix workflow actions and canvas flakes (n8n-io#22297)

* fix(core): Add missing workflowId when creating base subworkflowworkflow additional data (n8n-io#22312)

* feat(Guardrails Node): Require Chat model only for LLM checks (n8n-io#22241)

* fix(editor, core): Fix display for binary data metadata origin (n8n-io#22270)

* fix: Fix bad written snapshot test (no-changelog)

* feat(core): Introduce `database` mode for binary data storage (n8n-io#22162)

* ci: Make e2e secrets not required (n8n-io#22330)

* feat(Azure AI Search Node): Add clear index option to Azure AI Search vector store (n8n-io#22183)

Co-authored-by: farzad528 <farzad528@users.noreply.github.com>
Co-authored-by: RomanDavydchuk <roman.davydchuk@n8n.io>

* fix(core): Update posthog proxy (no-changelog) (n8n-io#22328)

* chore(core): Context establishment hook setup (n8n-io#22293)

* fix(Git Node): Throw an error if the repository path is blocked (n8n-io#22253)

* feat(editor): Add new template setup experiment (no-changelog) (n8n-io#22332)

* fix: When chat session is reset, update session id (n8n-io#22288)

Co-authored-by: Michael Drury <michael.drury@n8n.io>

* fix(AI Agent Node): Unify memory management for streaming/non-streaming (n8n-io#22243)

* feat: Add time saved mode workflow setting (n8n-io#22343)

* fix: Enable streaming version of Respond To Webhook node (n8n-io#22350)

* fix(ai-builder): Fix import of multiple nodes with maxNode, add validation (n8n-io#22348)

* fix(Slack Node): Sort messages manually (n8n-io#21822)

* feat(Gemini Node): Add support for Nano Banana Pro model (n8n-io#22254)

* fix(HTTP Node): Handle Azure Storage Shared Key (n8n-io#22136)

* chore(editor): Implement translations for chat (n8n-io#22335)

* fix(editor): Chat UI feedback 3 (no-changelog) (n8n-io#22274)

* fix(core): Add response validation for requests during DCR (n8n-io#22076)

* docs: Fix broken link in Google Docs node (n8n-io#22197)

Co-authored-by: Jon <jonathan.bennetts@gmail.com>

* refactor(core): Remove admin API token scopes when user is demoted from admin to member via SSO (n8n-io#22359)

* feat(core): Clean up available tools on Chat hub (no-changelog) (n8n-io#22373)

* chore(editor): DropdownMenu component specs (no-changelog) (n8n-io#22229)

* docs: Add component specification for N8nInputNumber (n8n-io#22394)

* chore(editor): Add reka checkbox component (n8n-io#21813)

Co-authored-by: Csaba Tuncsik <csaba@n8n.io>

* ci: Add 1.x branch support to CI workflows (n8n-io#22361)

* ci: Add RC release type for v2 release candidates (n8n-io#22362)

* ci: Prevent RC versions from being promoted to stable/beta channels (n8n-io#22388)

* refactor(core, editor): Split logic based on payload type / manual execution type (n8n-io#22219)

Co-authored-by: Michael Siega <michael.siega@n8n.io>
Co-authored-by: mfsiega <93014743+mfsiega@users.noreply.github.com>

* docs: Add component specification and API documentation for N8nPagination (n8n-io#22085)

* fix(editor): Eval trigger node with data table works when underlying data changes (n8n-io#22389)

* feat(core): Use new workflow history in mcp tools (n8n-io#22384)

* fix(editor): Wording for migration rule detail table headers (n8n-io#22398)

* chore(editor): Update vue-flow packages (no-changelog) (n8n-io#22399)

* ci: Skip release notes trigger for RC versions (n8n-io#22403)

* feat(core): Update `activate` and `deactivate` public endpoints (no-changelog) (n8n-io#22298)

* ci: Auto-detect RC releases for orange logo and [RC] tab indicator (n8n-io#22411)

* chore: Fix typo in telemetry event (n8n-io#22392)

* fix: Bump node-forge and body-parser (n8n-io#22418)

* docs: Add component specification and API documentation for N8nInput (n8n-io#22082)

Co-authored-by: Claude <noreply@anthropic.com>

* fix(editor): Remove unwanted outlines when waiting for webhook event in light mode in new NDV (n8n-io#22425)

Co-authored-by: Michael Kret <michael.k@radency.com>

* fix(MCP Client Node): Fix selecting PKCE auth flow for some servers and request scopes from `scopes_requested` during DCR (n8n-io#22405)

* fix(core): Mark `''` and `[]` as empty when filtering numbers (n8n-io#22347)

* fix(editor): Avoid clearing EULA license key when closing dialog (n8n-io#22424)

Co-authored-by: Csaba Tuncsik <csaba@n8n.io>

* docs: Add component specification for N8nLoading with API definition and usage examples (n8n-io#22055)

* fix(editor): Stop proxying posthog events temporarily (no-changelog) (n8n-io#22442)

* fix(Gmail Node): Use Reply-To header when replying to a message (n8n-io#22145)

* feat(Form Node): Allow users to set a default value for form fields (n8n-io#22200)

* fix(core, editor): Support inclusive and exclusive destination node mode in the frontend and API (n8n-io#22244)

Co-authored-by: Danny Martini <danny@n8n.io>

* fix(core): Defer requirements check for Python runner in internal mode (n8n-io#22448)

* fix(Respond to Chat Node): Replace broken link with a correct one (no-changelog) (n8n-io#22406)

* fix(Sort Node): Periodic error when using Code sort type (n8n-io#22409)

* perf: Improve chat UI time-to-interactive (no-changelog) (n8n-io#22408)

* fix(editor): Fix connector line appearing above node output circle (no-changelog) (n8n-io#22443)

* fix(core): Introduce batch workflow rule to fix subworkflow with wait node detection (n8n-io#22447)

* feat(core): Introduce workflowPublishHistory table (no-changelog) (n8n-io#22043)

Co-authored-by: Ricardo Espinoza <ricardo@n8n.io>

* feat(core): Only fetch credentials available in user's personal project on Chat (no-changelog) (n8n-io#22465)

* test(ai-builder): Add pairwise evaluations (no-changelog) (n8n-io#22438)

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* feat(editor): Show loading state in model selector (no-changelog) (n8n-io#22462)

* build: Address TS error regarding Vue slots (n8n-io#22446)

* chore(editor): Add Reka UI based Pagination component (n8n-io#22167)

* fix(core): SSO user role provisioning csv export dialog is not always shown when it should (no-changelog) (n8n-io#22416)

* fix(core): OIDC form breaks when enabling OIDC while SAML is active (n8n-io#22463)

* chore(editor): Add Reka UI based Input component (n8n-io#22339)

* feat(core): Add workflowPublishHistory relation to history endpoints (no-changelog) (n8n-io#22466)

* fix(PostgreSQL Node): Input items with array being modified (n8n-io#22426)

* chore(Qdrant Vector Store Node): Update Qdrant logo (no-changelog) (n8n-io#22504)

* feat(core): Add get version public endpoint (n8n-io#22407)

* fix: Do not add publish history relation for get version endpoint (no-changelog) (n8n-io#22507)

* feat(ai-builder): Implement Core Subgraph Infrastructure (no-changelog) (n8n-io#22325)

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* chore: Change killBehavior to `forceful` in launch.json  (no-changelog) (n8n-io#22445)

* feat: Add entries to context menu to copy webhook's urls (n8n-io#21769)

* fix(HTTP Request Node): Detect and handle non-UTF-8 response encodings (n8n-io#20889)

* chore: Update story titles for Checkbox and Select components (n8n-io#22512)

* docs: Add component specification and usage examples for N8nPopover (n8n-io#22433)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* chore(editor): Add Reka UI based Tooltip component (n8n-io#22326)

* fix: Detect workflow calling itself expression in migration report (n8n-io#22516)

* fix(editor): Fix editor pan / zoom when inserting nodes (n8n-io#22401)

* fix: Pin n8n packages to workspace version (n8n-io#22460)

* test(Google Calendar Node): Fix unit test depending on current timestamp (n8n-io#22522)

* feat: Allow configuring workflow for time saved capture by node (n8n-io#22386)

* fix(core): Make chat title generation work on instances that don't save executions (no-changelog) (n8n-io#22518)

* fix: Support resolving $fromAI in vector store tools (n8n-io#22457)

* chore(editor): Tweak font size in chat UI (n8n-io#22534)

* fix: Fix error handling in sending chat message (no-changelog) (n8n-io#22515)

Co-authored-by: Jaakko Husso <jaakko@n8n.io>

* refactor(core): Deprecate `workflow.active` field (n8n-io#22533)

* feat: Update migration guide with changes in cli and external hooks (no-changelog) (n8n-io#22525)

* fix(core): Prevent credentials saving if missing required properties (n8n-io#22213)

* fix: Improve insights tests execution failure visibility (n8n-io#22538)

* chore(editor): Add Reka UI based Loading component (n8n-io#22349)

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

* feat(ai-builder): Using templates to improve generation (n8n-io#22521)

* feat(core): Deactivate crashed workflows (n8n-io#21888)

Co-authored-by: Artem Sorokin <artem@n8n.io>

* ci: Move backend-test-utils to dev dependency, remove docker base cache (n8n-io#22540)

* chore(editor): Add Reka UI based number input component (n8n-io#22485)

* chore: Update langchain (n8n-io#22500)

* fix(editor): Standardize CSS class naming conventions across new design system components (n8n-io#22551)

* chore: Initial V2 changes (n8n-io#22553)

Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
Co-authored-by: yehorkardash <yehor.kardash@n8n.io>
Co-authored-by: Daria <daria.staferova@n8n.io>
Co-authored-by: Svetoslav Dekov <svetoslav.dekov@n8n.io>
Co-authored-by: Nikhil Kuriakose <nikhilkuria@gmail.com>
Co-authored-by: Charlie Kolb <charlie@n8n.io>

* ci: Fix rc versioning to properly bump major version (n8n-io#22603)

* 🚀 Release 2.0.0-rc.0 (n8n-io#22613)

Co-authored-by: tomi <10324676+tomi@users.noreply.github.com>

* fix(editor): Fix displaying of workflow publish info (no-changelog) (n8n-io#22605)

* feat(editor): Sidebar redesign (n8n-io#22395)

Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
Co-authored-by: Daria <daria.staferova@n8n.io>

* feat: Stop bumping `versionId` on every workflow change (no-changelog) (n8n-io#22602)

* feat(core): Block access to env in code and expressions by default (n8n-io#22643)

* feat(core): Introduce native Python code tool for AI agent (n8n-io#22658)

* test: Disable banners for e2e tests (n8n-io#22691)

Co-authored-by: Declan Carroll <declan@n8n.io>

* feat(editor): Update command bar with publish wf flow (no-changelog) (n8n-io#22688)

* fix(core)!: Make runners the only Code node option (n8n-io#22689)

* feat(editor): Update frontend external hooks with publish/unpublish (no-changelog) (n8n-io#22693)

* fix(core): Make sub-workflows with waits return correct data to parents (n8n-io#22611)

Co-authored-by: Claude <noreply@anthropic.com>

* feat: Forbid creating active workflows (no-changelog) (n8n-io#22718)

* docs: Remove incorrect changelog

* 🚀 Release 2.0.0-rc.1 (n8n-io#22729)

Co-authored-by: tomi <10324676+tomi@users.noreply.github.com>

* fix(core): Prevent execution data from being overwritten on manual workflow resume (n8n-io#22665)

Co-authored-by: Claude <noreply@anthropic.com>

* 🚀 Release 2.0.0-rc.2 (n8n-io#22735)

Co-authored-by: tomi <10324676+tomi@users.noreply.github.com>

* fix(core): Address review feedback for sub-workflow wait fix (n8n-io#22745)

* refactor(core): Mark native Python as stable (n8n-io#22739)

* fix(editor): Address publish wf UI feedback (no-changelog) (n8n-io#22671)

* feat(editor): Improve node component visual states (n8n-io#20242)

Co-authored-by: Giulio Andreini <g.andreini@gmail.com>
Co-authored-by: Rob <robtf9@icloud.com>
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
Co-authored-by: Tomi Turtiainen <10324676+tomi@users.noreply.github.com>
Co-authored-by: yehorkardash <yehor.kardash@n8n.io>
Co-authored-by: Daria <daria.staferova@n8n.io>

* 🚀 Release 2.0.0-rc.3 (n8n-io#22757)

Co-authored-by: tomi <10324676+tomi@users.noreply.github.com>

* fix(editor): Improve loading states for publish workflow (no-changelog) (n8n-io#22755)

* feat(n8n Node): Update operations (no-changelog) (n8n-io#22740)

* fix(editor): Bind color-scheme to app theme setting (n8n-io#22774)

* fix(editor): Fix display of publish info for migrated records (no-changelog) (n8n-io#22791)

* fix(editor): Design tweaks for publish modals (n8n-io#22694)

Co-authored-by: Svetoslav Dekov <svetoslav.dekov@n8n.io>

* chore(core): Update mcp lingo around active workflows (no-changelog) (n8n-io#22810)

* fix(editor): Replace activate with publish in trigger nodes (no-changelog) (n8n-io#22811)

* fix: Security patches (n8n-io#22748)

* fix(core): Do not prevent credential save if property has default value (n8n-io#22720)

* fix(editor): Fix animation border radii in non-rectangular nodes (no-changelog) (n8n-io#22828)

* feat(editor): Add message active workflow usage (no-changelog) (n8n-io#22824)

* feat: Include active version id in `workflowActivated` broadcast event (no-changelog) (n8n-io#22805)

Co-authored-by: Svetoslav Dekov <svetoslav.dekov@n8n.io>

* fix: Allow the activation of workflows with the `errorTrigger` and the `executionWorkflowTrigger` trigger (no-changelog) (n8n-io#22019)

Co-authored-by: Daria Staferova <daria.staferova@n8n.io>

* fix(editor): Use active workflow nodes to determine wf inputs when executing by parent (no-changelog) (n8n-io#22907)

* fix(core): Update migration that activate workflows with executeWorkflowTrigger (n8n-io#22860)

* fix: Add `HOME` env var to distroless runners image (n8n-io#22796)

* refactor(core): Make Sentry init non-fatal for JS runner (n8n-io#22800)

* fix(core): Allowlist `HOME` env var in JS runner config (n8n-io#22839)

* fix: Security patches for jws (n8n-io#22918)

* chore: Update @modelcontextprotocol/sdk (n8n-io#22823)

* chore: Clean up deprecation warnings (n8n-io#22914)

* fix: Update checksum after restoring workflow (n8n-io#22920)

* fix(core): Exclude Sub-workflow and Error triggers from triggerCount again (no-changelog) (n8n-io#22906)

* feat: Validate nodes before activating (n8n-io#22916)

* fix(editor): Fix workflow list endpoint triggerNodeType filter query (no-changelog) (n8n-io#22912)

* fix: Fetch workflow before updating checksum (n8n-io#22927)

* chore: Remove feature flag for NDV overhaul (n8n-io#22924)

Co-authored-by: Shireen Missi <shireen@n8n.io>

* 🚀 Release 2.0.0 (n8n-io#22939)

Co-authored-by: tomi <10324676+tomi@users.noreply.github.com>

* fix(core): Add missing env vars to internal mode (n8n-io#22965)

* fix: Add version history records when importing workflows (n8n-io#22974)

* chore: Upgrade launcher to 1.4.2 (n8n-io#22995)

* fix(core): Don't resume parent workflow when the child workflow goes into waiting (n8n-io#22964)

* fix: Fix checksum hashing when WebCrypto is unavailable (n8n-io#23024)

* ci: Remove release exclusion from PR's (n8n-io#23033)

* Remove unused import

* 🚀 Release 2.0.1 (n8n-io#23041)

Co-authored-by: ivov <44588767+ivov@users.noreply.github.com>

* fix: Backfill missing workflow history records (n8n-io#23070)

* fix: Make sure duplicating workflows creates them as unpublished (no-changelog) (n8n-io#23113)

* 🚀 Release 2.0.2 (n8n-io#23131)

Co-authored-by: tomi <10324676+tomi@users.noreply.github.com>

* fix: Only support specified git config keys in Git node (n8n-io#23264)

* fix(core): Error running evaluations in queue mode (n8n-io#23248)

* 🚀 Release 2.0.3 (n8n-io#23351)

Co-authored-by: CharlieKolb <13814565+CharlieKolb@users.noreply.github.com>

* B1-349 Fix duplicate

---------

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
Co-authored-by: RomanDavydchuk <roman.davydchuk@n8n.io>
Co-authored-by: Michael Drury <me@michaeldrury.co.uk>
Co-authored-by: Jaakko Husso <jaakko@n8n.io>
Co-authored-by: mfsiega <93014743+mfsiega@users.noreply.github.com>
Co-authored-by: Stephen Wright <sjw948@gmail.com>
Co-authored-by: Nikhil Kuriakose <nikhilkuria@gmail.com>
Co-authored-by: Robert Squires <robtf9@icloud.com>
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
Co-authored-by: Daria <daria.staferova@n8n.io>
Co-authored-by: Milorad FIlipović <milorad@n8n.io>
Co-authored-by: Benjamin Schroth <68321970+schrothbn@users.noreply.github.com>
Co-authored-by: Guillaume Jacquart <jacquart.guillaume@gmail.com>
Co-authored-by: Konstantin Tieber <46342664+konstantintieber@users.noreply.github.com>
Co-authored-by: Declan Carroll <declan@n8n.io>
Co-authored-by: yehorkardash <yehor.kardash@n8n.io>
Co-authored-by: Artem Sorokin <38620398+seemewalkin@users.noreply.github.com>
Co-authored-by: Tomi Turtiainen <10324676+tomi@users.noreply.github.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Suguru Inoue <suguru@n8n.io>
Co-authored-by: Romeo Balta <7095569+romeobalta@users.noreply.github.com>
Co-authored-by: Andreas Fitzek <andreas.fitzek@n8n.io>
Co-authored-by: krisn0x <10799186+krisn0x@users.noreply.github.com>
Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com>
Co-authored-by: Michael Drury <michael.drury@n8n.io>
Co-authored-by: Raúl Gómez Morales <raul00gm@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Svetoslav Dekov <svetoslav.dekov@n8n.io>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Csaba Tuncsik <csaba@n8n.io>
Co-authored-by: Dawid Myslak <dawid.myslak@gmail.com>
Co-authored-by: Irénée <irenee.ajeneza@n8n.io>
Co-authored-by: oleg <me@olegivaniv.com>
Co-authored-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com>
Co-authored-by: farzad528 <farzad528@users.noreply.github.com>
Co-authored-by: karthi7 <139566887+Karthim8@users.noreply.github.com>
Co-authored-by: Jon <jonathan.bennetts@gmail.com>
Co-authored-by: Michael Siega <michael.siega@n8n.io>
Co-authored-by: Alex Grozav <alex@grozav.com>
Co-authored-by: Michael Kret <michael.k@radency.com>
Co-authored-by: Marc Littlemore <MarcL@users.noreply.github.com>
Co-authored-by: Charlie Kolb <charlie@n8n.io>
Co-authored-by: Ricardo Espinoza <ricardo@n8n.io>
Co-authored-by: Anush <anushshetty90@gmail.com>
Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Frank Prößdorf <frank@n8n.io>
Co-authored-by: Artem Sorokin <artem@n8n.io>
Co-authored-by: Tuukka Kantola <Tuukkaa@users.noreply.github.com>
Co-authored-by: Giulio Andreini <g.andreini@gmail.com>
Co-authored-by: Elias Meire <elias@meire.dev>
Co-authored-by: Shireen Missi <shireen@n8n.io>
Co-authored-by: ivov <44588767+ivov@users.noreply.github.com>
Co-authored-by: Dimitri Lavrenük <20122620+dlavrenuek@users.noreply.github.com>
Co-authored-by: Eugene <eugene@n8n.io>
Co-authored-by: CharlieKolb <13814565+CharlieKolb@users.noreply.github.com>
ThorStarlord pushed a commit to ThorStarlord/n8n that referenced this pull request Apr 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core Enhancement outside /nodes-base and /editor-ui n8n team Authored by the n8n team Released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants