Skip to content

[pull] main from czlonkowski:main - #121

Merged
pull[bot] merged 1 commit into
5474312:mainfrom
czlonkowski:main
Aug 31, 2026
Merged

[pull] main from czlonkowski:main#121
pull[bot] merged 1 commit into
5474312:mainfrom
czlonkowski:main

Conversation

@pull

@pull pull Bot commented Aug 31, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

…6.0 (v2.76.1) (#1044)

* fix: strip settings.engineType so workflow updates survive n8n >= 2.36.0 (v2.76.1)

n8n 2.36.0 added engineType to the workflow entity's persisted settings
without adding it to the Public API write schema, which is
additionalProperties: false. Our updates read-modify-write, so GET handed
us the property and the echoed PUT failed with "settings must NOT have
additional properties" (#1043). engineType is now marked derived and
stripped from every create and update, like binaryMode before it;
n8n keeps stored settings for omitted keys, so the value is preserved.

check-settings-drift gains the axis that was blind to this class: it
diffs IWorkflowSettings from the installed n8n-workflow package against
the OpenAPI schema, fails on an unhandled entity-only property, and
fails again when n8n later publishes a stripped property to the schema.
The entity parser fails loudly on extends/declaration merging, and the
classification gate is a pure function with direct tests plus an offline
CI assertion that every entity property is known to the table.

Verified end-to-end against n8n 2.36.7: a workflow with
settings.engineType = "v2" injected updates successfully through the
fixed server, and the setting survives the write unchanged.

Fixes #1043

Conceived by Romuald Członkowski - www.aiadvisors.pl/en

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JXDW1LGvRXaQydK21X89sj

* fix: harden the entity axis of check-settings-drift (review round 2)

Codex and Copilot findings on the new drift axis, all adopted:

- Verify the fetched schema's n8n release actually ships the installed
  n8n-workflow (exact pin in its package.json) and warn on a mismatch -
  the nodes-base pin names a sibling release, not the meta-package.
- An entity-only property is handled only when marked BOTH derived and
  entityOnly, and the remediation message says so - derived alone would
  leave the published-upstream detector disarmed.
- The entity parser strips block comments (a declaration-shaped line or
  stray brace inside one no longer derails it) and throws when content
  shares the opening-brace line instead of skipping it silently.
- Without an entity set, a derived property from a later n8n than the
  target is classified ahead-of-the-pin, not "entity-only, expected".
- An unhandled entity-only property is no longer double-reported as
  expected by the info line.

Conceived by Romuald Członkowski - www.aiadvisors.pl/en

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JXDW1LGvRXaQydK21X89sj

* fix: resolve the true n8n release and parse entity types with the TS AST (review round 3)

- The schema is now fetched from the n8n release whose published pins
  match the installed packages, found by scanning the newest releases'
  package.json pins (nodes-base@2.36.4 ships in n8n@2.36.7, while
  n8n@2.36.4 pins nodes-base@2.36.3 - the same-number mapping read a
  neighbouring release's schema). Falls back to the old mapping with a
  pin warning when the registry is unreachable or nothing matches.
- The entity parser is the real TypeScript parser instead of a
  hand-rolled lexer: line comments, string literal types, inline braces
  and split declarations no longer silently truncate the property set,
  and any member it cannot enumerate (index signature, method, computed
  name) fails closed.
- Restore the 2.76.0 changelog header that the 2.76.1 entry accidentally
  swallowed, and bump package.runtime.json to 2.76.1 (both Copilot).

Conceived by Romuald Członkowski - www.aiadvisors.pl/en

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JXDW1LGvRXaQydK21X89sj

* fix: fail closed on partial parses and widen the skew warning (review round 4)

- Reject any syntactic diagnostic before walking the AST: createSourceFile
  recovers from errors, so a truncated declarations file would otherwise
  yield a partial property set that reads as "no entity-only properties".
  The internal parseDiagnostics field disappearing also throws.
- Collect only top-level IWorkflowSettings declarations - a same-named
  interface inside a namespace does not merge with the export.
- The residual-skew warning now covers both pins (the fallback release
  can match n8n-workflow while shipping a different n8n-nodes-base) and
  the pins-unfetchable case.

Conceived by Romuald Członkowski - www.aiadvisors.pl/en

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JXDW1LGvRXaQydK21X89sj

* fix: compare release pins against installed versions, not declared ones (review round 5)

The skew warning and release resolution read the installed
n8n-nodes-base version from node_modules instead of the package.json
pin, so a stale install cannot pair this run's entity types with a
schema neither belongs to; an unreadable install is itself reported.

Conceived by Romuald Członkowski - www.aiadvisors.pl/en

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JXDW1LGvRXaQydK21X89sj

* fix: read the installed n8n-workflow version via the package.json subpath (Copilot round 3)

Consistent with installedNodesBaseVersion; the resolved-entry path walk
stays as a fallback for a future exports map that blocks the subpath.

Conceived by Romuald Członkowski - www.aiadvisors.pl/en

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JXDW1LGvRXaQydK21X89sj

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators Aug 31, 2026
@pull pull Bot added the ⤵️ pull label Aug 31, 2026
@pull
pull Bot merged commit 2c1ec73 into 5474312:main Aug 31, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant