CMPSBL® · The Collective Master Library

Integration Report — n8n

A mature-host BUY case: new value is concentrated in execution evidence and bounded failure domains, not replacement security infrastructure.

Repositoryn8n-io/n8n @ 1c1367b4ba5b23a5eb9d3376cdaa591b2483a9eb
Prepared2026-08-21
Prepared byGPT-5.6 Sol
Library versionv3.1.0
LicenceLicenseRef-CMPSBL-Perpetual-1.0
Price evaluatedUS$499 once, perpetual, per company

In 60 seconds

What this adds to n8n

Technical verdict: BUY, with the ordinary purchase/grant gate before licensed source is committed. The report rejects n8n's already-mature breaker, SSRF, encryption, API-key, evaluation, supply-chain and AI-credit capabilities.

Execution Evidence Capsule

Tamper-evident per-execution evidence, incident replay and portable attestation over the existing event bus.

Composite #1 → packages/cli/src/eventbus/**

Provider Failure Cell

Bulkhead + retry budget + jittered retry for n8n-owned dependencies; does not rewrite arbitrary user workflow calls.

Composite #2 → ai-service-retry.ts; external-secrets retry manager

Causal Run Ledger

Adds deterministic cause edges across workflow/node/queue/runner evidence and protects the recorded chain.

Composite #3 → event-message-classes/**

Boundary Regression Replay Pack

Security-shaped request fixtures become deterministic replay regressions around body parsing, SSRF and endpoint limiting.

Composite #4 → request-boundary tests

8recommended
4composites
+US$2.5k–22kcounterfactual net
3.33 hlicence break-even

Host-first freeze SHA-256: 095b03874c95acd1e7dafead37e1f502a03070da4cf0ca9493aafdc375834cfe. Licence gate: EVALUATE ONLY until a purchase/grant record exists.

Step 0

Licence conflict check

Run before any integration. n8n’s source-visible product shape is compatible with the authoritative embedded-product grant; the current blocker is only the absent purchase/grant record.

FieldResult
Host licence (SPDX)LicenseRef-n8n-sustainable-use for ordinary source; separate n8n Enterprise License for .ee. source.
Where it was foundLICENSE.md; LICENSE_EE.md; package.json license fields.
Purchase or grant recordNone found; EVALUATE ONLY.
LicenceCMPSBL Perpetual Edition 1.0; US$499 once, perpetual, per company; no source-disclosure obligation.
VerdictEVALUATE ONLY now because no purchase/grant record exists. Technical BUY after purchase; n8n is a substantial independent product and therefore fits the embedded-product grant.
Clause that drove itAGENTS.md Step 0 “No purchase or grant record” rule. CMPSBL LICENSE §§1.1(c)–1.3 permit embedding in a substantial product; §§2.1–2.2 block redistribution of the Library itself.
Scope limits imposedCatalog-only evaluation. No CMPSBL source copied/wired; only final two report files may be added.

Sub-package scan: 69 n8n-sustainable-use workspaces, 15 MIT, 2 ISC, 1 Apache-2.0. Recommended attachment points avoid the permissively published workspaces.

Verdict

BUY

Capability acquisition clears the price.

n8n is mature enough that most obvious catalog matches are rejected. The credible retained value is tamper-evident execution evidence, forensic/causal incident reconstruction, and bounded failure domains around n8n-owned external dependencies.

Hard-budget net
−US$9,499 to −US$4,999
Counterfactual capability net
+US$2,501 to +US$22,001
Highest leverage
Execution Evidence Capsule
Strongest argument against
Host maturity + uncertain roadmap demand

Important unresolved gap: the catalog's rate-limiters do not expose a shared-state/store port, so this report does not claim they solve n8n multi-main limiter state.

Step 5A — the section that sells

Composite components built for n8n

Four host-specific capabilities that exist only when catalog parts are combined with n8n.

COMPOSITE #1 — Execution Evidence Capsule
  Composition:   CMPSBL BLD-ENG-009 "Tamper-Evident Chain" (createAuditChain) + CMPSBL BLD-ENG-105 "Forensic Replay" (AuditEvent, ReplaySession, ReplayResult, ForensicReplayEngine) + CMPSBL STIER-S-81 "Compliance Attestation Generator" (EvidenceItem, Attestation, generateAttestation, batchAttest) + host packages/cli/src/eventbus/**
  Problem:       packages/cli/src/eventbus/message-event-bus-writer/message-event-bus-log-writer-worker.ts:89 appends JSON lines directly; no cryptographic event-chain linkage was found in the observed event-bus implementation. Supply-chain attestations do not prove what an individual workflow execution did.
  Behaviour:     Selected execution/audit events are canonicalized into an append-only hash chain, sliced into a read-only incident replay, and emitted as an evidence attestation. Existing event delivery and execution storage remain authoritative.
  New because:   The chain alone only detects history alteration; replay alone only reconstructs; attestation alone only packages evidence. Together with n8n's existing event stream they create a per-execution evidence capsule that neither side has by itself.
  Attachment:    packages/cli/src/eventbus/message-event-bus-writer/** + event-message-classes/**; optional read-only execution/report endpoint later
  Untouched:     Workflow execution semantics, event-bus destinations, Sentry/error reporting, SBOM/VEX pipeline and existing database execution records.
  Effort:        ~3–6 engineer-days (basis: 67 + 103 + 57 entry LOC, canonicalization/hash/replay/attestation concerns, persistence and endpoint tests).
  Verified:      C:ok I:ok B:— T:— S:scan
  Data path:     execution/audit event -> canonical evidence -> hash chain -> incident slice -> attestation
                         |                    |                |
                         +---- existing event bus/database ----+
COMPOSITE #2 — Provider Failure Cell
  Composition:   CMPSBL SUBP-06 "BULKHEAD" + CMPSBL BLD-ENG-266 "Retry Budget" + CMPSBL BLD-ENG-303 "retry-with-backoff" + host retryability classifier / AI service retry / external-secrets retry paths
  Problem:       packages/cli/src/utils/ai-service-retry.ts:27-29 explicitly says the timed-out underlying SDK request cannot be aborted; packages/cli/src/modules/external-secrets.ee/retry-manager.service.ts:62-91 recursively schedules retries with increasing attempt count and no observed attempt ceiling. No generic per-dependency concurrency compartment was found in the observed outbound transport.
  Behaviour:     For n8n-owned external dependencies only, each provider gets a bounded concurrency compartment; retries use jitter and a refilling retry budget so failures cannot multiply work without bound. Domain-specific retryability classification remains host-owned.
  New because:   Backoff controls timing, the retry budget controls aggregate retry pressure, and the bulkhead controls concurrent occupancy. Only the composition turns one flaky dependency into a bounded failure domain.
  Attachment:    packages/cli/src/utils/ai-service-retry.ts; packages/cli/src/modules/external-secrets.ee/retry-manager.service.ts; selected internal outbound call sites
  Untouched:     User-selected workflow providers, generic HTTP Request node semantics, existing SSRF checks, existing circuit breaker, Redis queueing and workflow retryOnFail contract.
  Effort:        ~3–6 engineer-days (basis: 539 + 56 + 55 entry LOC, dependency partitioning, queue/reject policy, retry budget, jitter, metrics and parity tests).
  Verified:      C:ok I:ok B:— T:— S:scan
  Data path:     n8n-owned call -> dependency bulkhead -> retryability -> budgeted jittered retry -> existing transport
                                      |                  |
                                      +-- saturation ----+--> shed/surface
COMPOSITE #3 — Causal Run Ledger
  Composition:   CMPSBL BLD-ENG-034 "Causal Event Propagation" + CMPSBL BLD-ENG-009 "Tamper-Evident Chain" + host AbstractEventMessage / workflow / node / execution / queue / runner events
  Problem:       packages/cli/src/eventbus/event-message-classes/abstract-event-message.ts:84-92 defines id, timestamp, event name, message and payload but no explicit parent/causal field. Chronology alone can be ambiguous across queue, runner and node boundaries.
  Behaviour:     Deterministic relationships add parent/causal edges to selected events; the resulting chain is hash-linked so an incident view can answer not only what happened next, but what caused what.
  New because:   Causal propagation creates the graph, while the tamper chain protects the graph's recorded history. n8n supplies the real execution events that make the generic primitives useful.
  Attachment:    packages/cli/src/eventbus/event-message-classes/** and the event emission adapters where executionId/node/run relationships are already known
  Untouched:     Existing event ids, payload contracts for destinations, workflow scheduler/executor and database records.
  Effort:        ~2–4 engineer-days (basis: 106 + 67 entry LOC, relationship mapping, canonical hashing and destination-compatibility tests).
  Verified:      C:ok I:ok B:— T:— S:scan
  Data path:     workflow -> node -> queue -> runner events
                    |        |        |
                    +---- causal edges ----> hash-linked run ledger
COMPOSITE #4 — Boundary Regression Replay Pack
  Composition:   CMPSBL BLD-ENG-248 "Adversarial Input Generator" + CMPSBL BLD-ENG-105 "Forensic Replay" + host body-parser / SSRF / endpoint-rate-limit test harnesses
  Problem:       packages/cli/src/middlewares/__tests__/body-parser.test.ts:16-58 and packages/@n8n/backend-network/src/ssrf/__tests__/ssrf-protection.service.test.ts:53-110 show strong boundary-specific tests, while packages/cli/src/services/rate-limit.service.ts:31-74 defines another security boundary; no shared repository-wide adversarial corpus was found across them.
  Behaviour:     Generates deterministic security-boundary fixtures, captures the exact observed result, and promotes any interesting failure into a replayable regression case. Production request handling is not changed.
  New because:   A finite adversarial catalog becomes operationally valuable only when a failure can be captured and replayed through n8n's real parsers/guards.
  Attachment:    tests around packages/cli/src/middlewares/body-parser.ts, packages/@n8n/backend-network/src/ssrf/ssrf-protection.service.ts and packages/cli/src/services/rate-limit.service.ts
  Untouched:     Production parsers, SSRF allow/block rules, limiter thresholds and user workflow semantics.
  Effort:        ~2–4 engineer-days (basis: 33 + 103 entry LOC, adapter/corpus/result-normalization/replay concerns and CI fixture wiring).
  Verified:      C:ok I:ok B:— T:— S:scan
  Data path:     adversarial corpus -> existing boundary under test -> captured result -> forensic replay regression

Composite ledger

CompositeIngredientsNew behaviourEffort
Execution Evidence CapsuleBLD-ENG-009 + BLD-ENG-105 + STIER-S-81 + n8n event busTamper-evident per-execution evidence + read-only forensic slice + attestation~3–6 engineer-days
Provider Failure CellSUBP-06 + BLD-ENG-266 + BLD-ENG-303 + n8n retryability/retry pathsPer-dependency concurrency compartment + aggregate retry-pressure budget + jittered retry~3–6 engineer-days
Causal Run LedgerBLD-ENG-034 + BLD-ENG-009 + n8n event familiesDeterministic cause edges protected by a tamper-evident run history~2–4 engineer-days
Boundary Regression Replay PackBLD-ENG-248 + BLD-ENG-105 + n8n boundary testsShared adversarial corpus whose interesting failures become deterministic replay regressions~2–4 engineer-days

Build this composite first: Execution Evidence Capsule. It adds a new evidence property without changing workflow execution semantics.

Step 5B — new single-component designs

New components designed for this product

Five concrete product/engineering designs derived from the retained rows and host evidence.

DESIGN #1 — Enterprise Execution Receipt
  Built from:     CMPSBL BLD-ENG-009 "Tamper-Evident Chain" (createAuditChain) + CMPSBL STIER-S-81 "Compliance Attestation Generator" (EvidenceItem, Attestation, generateAttestation, batchAttest)
  Plus host:      packages/cli/src/eventbus/** execution/audit events and existing execution identifiers
  What it is:     A read-only receipt for a workflow execution containing selected event evidence, chain verification status and a portable attestation payload.
  New because:    n8n stores executions and emits events; the library adds tamper-evident packaging rather than another execution store.
  Unlocks:        Enterprise incident handoff, support evidence, audit export and a stronger trust story without claiming compliance certification.
  Evidence path:  executionId -> selected EventMessage records -> canonical evidence -> createAuditChain -> generateAttestation -> receipt/report
  Effort:         ~3–5 engineer-days (basis: 67 + 57 entry LOC + host event schema/endpoint/tests).
  Constraints:    BLD-ENG-009 Verified: C:ok I:ok B:exec T:— S:scan; mode: direct; ports: none stated. STIER-S-81 Verified: C:ok I:ok B:load T:— S:scan; mode: direct; ports: none stated. T:— = Not claimed. S:scan is the author's self-scan, not an independent audit. Purchase/grant + attribution required before integration.
  Confidence:     high — host evidence seam is explicit and TypeScript-direct, but source review is still required post-purchase.
DESIGN #2 — Provider Isolation Profile
  Built from:     CMPSBL SUBP-06 "BULKHEAD" (BulkheadOptions, BulkheadRunOptions, Bulkhead, createBulkhead, BulkheadSubject, bulkheadContract, BulkheadRejection, BulkheadPolicy, RejectionReason +1 more)
  Plus host:      packages/@n8n/backend-network/src/http/retryability.ts; packages/@n8n/backend-network/src/http/undici/transport.ts; n8n-owned dependency names
  What it is:     A small registry that assigns concurrency/queue/reject policy per internal dependency, deliberately excluding arbitrary user HTTP destinations at first.
  New because:    n8n has circuit breaking and retry classification but no generic per-dependency bulkhead was found in the observed transport.
  Unlocks:        One hung provider cannot occupy the whole process; saturation becomes explicit and measurable.
  Evidence path:  dependency key -> createBulkhead -> existing call -> state snapshot/telemetry
  Effort:         ~2–4 engineer-days integration (basis: 539 entry LOC + host keying/policy/telemetry tests; acquisition-equivalent size is in the kit's 1–3 engineer-week band).
  Constraints:    SUBP-06 Verified: C:ok I:ok B:load T:— S:scan; mode: direct; ports: none stated; constraints: none. T:— = Not claimed. Queue/reject behavior must be introduced behind flags and measured.
  Confidence:     high for n8n-owned dependencies; low for generic workflow traffic until semantics are proven.
DESIGN #3 — Retry Policy Registry
  Built from:     CMPSBL BLD-ENG-303 "retry-with-backoff" (RetryOptions, retry) + CMPSBL BLD-ENG-266 "Retry Budget" (tryRetry, remainingBudget, configureBudget, getBudgetStats, resetBudget)
  Plus host:      packages/@n8n/backend-network/src/http/retryability.ts and selected existing retry call sites
  What it is:     Shared retry policies keyed by dependency/job class: same jitter/backoff primitive, same budget accounting, host-owned retryability predicate.
  New because:    It does not invent retry semantics; it removes repeated mechanics while preserving domain decisions in n8n.
  Unlocks:        Consistent cancellation/jitter, retry-pressure metrics, easier policy review and fewer copy-pasted loops.
  Evidence path:  host failure -> retryability classifier -> tryRetry/remainingBudget -> retry(backoff/jitter) -> existing operation
  Effort:         ~2–4 engineer-days integration (basis: 55 + 56 entry LOC + migration/parity tests across selected helpers).
  Constraints:    BLD-ENG-303 Verified: C:ok I:ok B:— T:— S:scan; mode: direct; ports: none stated. BLD-ENG-266 Verified: C:ok I:ok B:— T:— S:scan; mode: direct; ports: none stated. B:— = Not claimed; T:— = Not claimed. Do not migrate workflow retryOnFail until user-visible parity is proven.
  Confidence:     medium — useful, but much of the concept already exists in host-specific form.
DESIGN #4 — Causal Incident Explorer
  Built from:     CMPSBL BLD-ENG-034 "Causal Event Propagation" (CausalEvent, PropagationRule, CausalChain, addRule, clearRules, propagate, getChain, getAllChains, getStats) + CMPSBL BLD-ENG-105 "Forensic Replay" (AuditEvent, ReplaySession, ReplayResult, ForensicReplayEngine)
  Plus host:      packages/cli/src/eventbus/event-message-classes/** plus executionId/workflowId/node/queue/runner context
  What it is:     A support/debug view that reconstructs a single execution as a cause-effect graph and lets an investigator replay the recorded event slice without re-running side effects.
  New because:    Existing execution history is chronological/data-centric; this design adds explicit cause edges plus a forensic session abstraction.
  Unlocks:        Faster root-cause analysis for distributed worker/queue/runner incidents.
  Evidence path:  event stream -> deterministic parent rules -> causal chain -> read-only ReplaySession -> incident graph
  Effort:         ~3–6 engineer-days (basis: 106 + 103 entry LOC + event relationship mapping/UI or export adapter/tests).
  Constraints:    BLD-ENG-034 Verified: C:ok I:ok B:— T:— S:scan; mode: direct; ports: none stated. BLD-ENG-105 Verified: C:ok I:ok B:— T:— S:scan; mode: direct; ports: none stated. B:— = Not claimed; T:— = Not claimed. Causal claims must be limited to relationships the host can prove.
  Confidence:     medium — valuable, but parent mapping needs careful domain review.
DESIGN #5 — Security Boundary Corpus Runner
  Built from:     CMPSBL BLD-ENG-248 "Adversarial Input Generator" (ADVERSARIAL_CATALOG, generateAdversarialInputs)
  Plus host:      packages/cli/src/middlewares/__tests__/body-parser.test.ts; packages/@n8n/backend-network/src/ssrf/__tests__/ssrf-protection.service.test.ts; rate-limit boundary tests
  What it is:     A deterministic reusable corpus runner that applies the same security-shaped strings/payloads to multiple request boundaries and records which class caused each rejection/acceptance.
  New because:    n8n already property-tests selected algorithms; this makes a shared security-specific corpus a first-class fixture rather than one-off cases.
  Unlocks:        Cheap regression protection for encoding, Unicode, injection and overflow edge cases.
  Evidence path:  generateAdversarialInputs -> host adapter -> existing boundary -> assertion/result label -> CI
  Effort:         ~1–2 engineer-days integration (basis: 33 entry LOC + host adapters/fixtures/reporting; acquisition-equivalent size is hours under the kit band).
  Constraints:    BLD-ENG-248 Verified: C:ok I:ok B:— T:— S:scan; mode: direct; ports: none stated; constraints: none. B:— = Not claimed; T:— = Not claimed. A finite catalog is not a completeness claim or penetration test.
  Confidence:     high as a test-only quick win.

Scoreboard

The numbers, each with its basis

MeasureValueBasis
Engineered catalog rows parsed1,162Basis: every Phase 2 row parsed; all IDs cross-checked against Phase 3 and merged catalog with 0 mismatches on ID/name/mode/entry/closure/Verified/constraints.
Host-matched candidates read in full44Basis: host-first seams plus explicit duplicate/mismatch controls; no catalog row was opened before the host freeze.
Items recommended8Basis: five-axis screen; all are direct TypeScript rows and all retain their catalog verification ceiling.
Rejected matched candidates36Basis: 44 matched − 8 carried; rejects remain visible in Step 2 and fixed-shape findings.
Subsystem rows screened16Basis: all Subsystem-class rows screened by full row metadata; Shadow Mesh was the only subsystem close enough to the host evaluation system to enter the 44-row matched set, and it was rejected as duplicate.
Quick wins3Basis: Event-chain sidecar, Retry Budget Adapter, Security Boundary Corpus Runner; each can start without changing workflow semantics.
New designs5Basis: Step 5B; each uses named catalog symbols + named n8n paths.
Composite components4Basis: Step 5A; each combines at least two catalog ingredients with n8n host code.
Discovery rows screened6,479Basis: full Discovery Vault “All discoveries” section: 1,510 `disc-*` + 4,969 `vdisc-*`; source unavailable pre-purchase, so shortlist is provisional and excluded from totals.
(A) Cost avoided0 weeks / US$0Basis: pinned repo contains no evidence these eight capabilities are funded/planned work; no hard-budget savings invented.
(B) Capability acquisition2–4.5 engineer-weeks / US$12,000–27,000Basis: 1,016 total entry LOC across 8 adopted rows + roughly 30 stated correctness concerns; kit entry-LOC approach with overlap discounted; never closure LOC.
(C) Portfolio reuse0 weeks / US$0 creditedBasis: no sibling n8n repositories were evaluated in this run.
Integration cost0.75–1.5 engineer-weeks / US$4,500–9,000Basis: TypeScript-direct integration, source/security review, adapters, tests, event canonicalization, feature flags, attribution and licence compliance review; no polyglot bridge cost.
Hard-budget net after licence−US$9,499 to −US$4,999Basis: A US$0 − integration US$4.5k–9k − US$499; B and C are not folded into hard-budget net.
Counterfactual capability net+US$2,501 to +US$22,001Basis: B US$12k–27k − integration US$4.5k–9k − US$499; only valid if the team wants these capabilities.
Licence-only break-even3.33 engineer-hoursBasis: US$499 / US$150 per senior engineer-hour; corrects stale kit text that says ~1.9 hours.

Step 1

What this repository already has

Host inventory was completed before catalog exposure. ZIP: 33,730 members = 27,048 regular files + 22 symlink entries + 6,660 directories. 19,556 TypeScript files; ~3,271,010 nonblank TS LOC.

Host unitPathExported surfaceLOCJob
Repo/build topologypackage.json; pnpm-workspace.yamln8n-monorepo v2.36.0; Node >=24; pnpm >=10.22; TypeScript 6.0.2; Turbo monorepo542Defines a large TypeScript/Vue monorepo and dependency catalog.
Licence splitLICENSE.md; LICENSE_EE.mdLicenseRef-n8n-sustainable-use for ordinary source; separate n8n Enterprise License for .ee. files/dirs82Source-available open-core licensing boundary; important for where licensed third-party source may be attached.
Supply-chain evidencesecurity/sca/README.mdSBOM, SPDX gate, CycloneDX, VEX, Trivy/Grype, cosign/GitHub attestations104Mature software-supply-chain pipeline; generic provenance components should not duplicate it.
Endpoint rate-limit factorypackages/cli/src/services/rate-limit.service.tsRateLimitService; IP-, body- and user-keyed express-rate-limit middleware87Creates two-layer endpoint rate limits; observed calls do not configure a shared store.
Multi-main configpackages/@n8n/config/src/configs/multi-main-setup.config.tsMultiMainSetupConfig13Licensed multi-main mode; default TTL 10 s and check interval 3 s when enabled.
Multi-main leader lifecyclepackages/cli/src/scaling/multi-main-setup.ee.tsMultiMainSetup193Leader election lifecycle; shutdown contains TODO to prove ownership before deleting Redis leader key.
Reusable Redis leasepackages/cli/src/scaling/redis-lock.service.tsRedisLockService161Owner-token SET NX PX lock, compare-before-delete Lua, renewal watchdog and jitter; makes the leader TODO mostly an internal reuse/refactor seam.
SSRF boundarypackages/@n8n/backend-network/src/ssrf/ssrf-protection.service.tsSsrfProtectionService309Allow/block/DNS/connect/redirect validation; mature egress defense.
HTTP transportpackages/@n8n/backend-network/src/http/undici/transport.tsUndici transport/interceptors296Outbound HTTP/proxy/SSRF/authorizer path; no generic per-origin bulkhead was found.
Circuit breakerpackages/cli/src/utils/circuit-breaker.tsCircuitBreaker265Mature CLOSED/OPEN/HALF_OPEN breaker; library breaker candidates are duplicates.
Workflow retry semanticspackages/core/src/execution-engine/workflow-execute.tsWorkflowExecute2,590User-visible retryOnFail: 2–5 tries, fixed delay capped at 5 s; semantics must not be silently changed.
HTTP retry classifierpackages/@n8n/backend-network/src/http/retryability.tsRetryability helpers188Classifies transport/DNS/status failures including 408/429/5xx and Retry-After semantics.
AI service retry helperpackages/cli/src/utils/ai-service-retry.tscallAiServiceWithRetry96Three attempts with exponential backoff and 30 s timeout; comments state timed-out underlying SDK request cannot be aborted.
External-secrets retrypackages/cli/src/modules/external-secrets.ee/retry-manager.service.tsExternalSecretsRetryManager119Exponential scheduled retries; observed source keeps rescheduling failures with capped delay and no attempt ceiling.
Persisted deduplicationpackages/core/src/data-deduplication-service.tsDataDeduplicationService109Persisted processed-item checking/record/remove/clear/count for selected workloads.
Webhook handlingpackages/cli/src/webhooks/waiting-webhooks.tsWaitingWebhooks377Inbound/waiting webhooks, including HMAC-style waiting webhook flow and execution continuation.
Body parsing limitspackages/cli/src/middlewares/body-parser.tsrawBodyReader; parseBody; bodyParser106Payload parsing/compression limits; default general payload limit observed at 16 MiB; multipart has separate larger limit.
Credential encryptionpackages/core/src/encryption/aes-256-gcm.ts; packages/core/src/encryption/cipher.tsCipherAes256GCM; Cipher177Versioned AES-256-GCM/HKDF plus legacy compatibility.
Encryption key managementpackages/cli/src/modules/encryption-key-manager/key-manager.service.tsKeyManagerService159Rotates active keys; retirement path contains TODO to check usage count before inactivation.
Public API keyspackages/cli/src/services/public-api-key.service.tsPublicApiKeyService347Create/list/update/delete, scopes, expiration, rotation, audience and usage tracking.
Task runner hardeningpackages/@n8n/task-runner/src/js-task-runner/js-task-runner.tsJsTaskRunner602Timeouts, module allowlists, secure mode and prototype/Buffer hardening for user code.
Event buspackages/cli/src/eventbus/**23 files; execution/audit/workflow/node/queue/runner/AI event families2,204 aggregateRich event stream and log persistence. Observed writer appends ordinary JSON lines; no hash/Merkle chain found.
Enterprise workflow evaluationspackages/cli/src/evaluation.ee/**49 files14,361 aggregateDataset/test-run/workflow-version evaluation system; shadow-run catalog candidates are mostly duplicate.
AI workflow evaluationspackages/@n8n/ai-workflow-builder.ee/evaluations/**159 files30,104 aggregateProgrammatic/LLM/pairwise evaluation harness; another reason not to claim generic shadow evaluation is missing.
Instance AI creditspackages/cli/src/modules/instance-ai/instance-ai-credit.service.tsInstanceAiCreditService372Authoritative service-side billing claims, dedupe, quota lock, display/telemetry; generic budget components duplicate this control plane.
AI tracingpackages/@n8n/ai-utilities/src/utils/n8n-llm-tracing.tsLLM tracing helpers272Records token usage and can record cost totals; generic cost attribution is not greenfield.
Property/E2E test estatepackages/testing/**; scheduler/workflow fast-check tests1,478 files under packages/testing287,724 aggregate under packages/testingLarge test platform plus property-based tests; adversarial input recommendation is deliberately narrow/test-only.

Step 2

Five-axis screen of the candidate set

44 host-matched or false-positive-control rows were read in full after the host freeze. Twins are visible but never credited twice.

CandidateDirect fitCombinatorialValueCost/riskNoveltyCarried?
`SUBP-06` BULKHEADStrongStrong with retry budget/backoffHighMediumMediumYES
`SUBP-05` TRIAGEWeak incrementalLowLowMediumLowNO
`SUBP-04` HARNESSWeak incrementalLowLowMediumLowNO
`BLD-ENG-303` retry-with-backoffMediumStrong standardizerMediumMediumLowYES
`BLD-ENG-266` Retry BudgetStrongStrong with bulkhead/backoffHighLow/mediumMediumYES
`BLD-ENG-009` Tamper-Evident ChainStrongStrong with replay/attestationHighLow/mediumMediumYES
`STIER-S-71` Tamper-Evident ChainDuplicateNone creditedNoneLowNoneNO
`BLD-ENG-105` Forensic ReplayMedium/strongStrong with chain/eventsHighMediumMediumYES
`STIER-S-81` Compliance Attestation GeneratorMediumStrong with chainHigh enterprise valueMediumMediumYES
`BLD-ENG-034` Causal Event PropagationMediumStrong with eventbus/replayMedium/highMediumMediumYES
`BLD-ENG-136` Audit-Grade Decision LedgerWeak incrementalLowLowMediumLowNO
`STIER-S-CJ94` Audit-Grade Decision LedgerDuplicateNone creditedNoneLowNoneNO
`BLD-ENG-075` Self-Audit LoopWeak incrementalLowLowMediumLowNO
`STIER-S-78` Self-Audit LoopDuplicateNone creditedNoneLowNoneNO
`BLD-ENG-229` Provenance Chain VerifierWeak incrementalLowLowMediumLowNO
`BLD-ENG-246` Audit Log RingWeak/conditionalLowLowMediumLow/mediumNO
`BLD-ENG-248` Adversarial Input GeneratorMediumStrong with existing testsMediumLowLow/mediumYES
`STIER-S-CJ132` Adversarial Simulation EngineWeak incrementalLowLowMediumLowNO
`BLD-ENG-050` Shadow Run EnvironmentWeak incrementalLowLowMediumLowNO
`STIER-S-124` Shadow Run EnvironmentDuplicateNone creditedNoneLowNoneNO
`SUBP-07` CEILINGWeak incrementalLowLowMediumLowNO
`BLD-ENG-121` Autonomy Budget ManagerWeak incrementalLowLowMediumLowNO
`STIER-S-CJ79` Autonomy Budget ManagerDuplicateNone creditedNoneLowNoneNO
`BLD-ENG-049` Realtime Cost AttributionWeak incrementalLowLowMediumLowNO
`BLD-ENG-006` Cost-Aware Routing EngineWeak/mismatchedLowLow/negativeHighLowNO
`BLD-ENG-047` Circuit Breaker FabricWeak incrementalLowLowMediumLowNO
`BLD-ENG-011` Circuit BreakerWeak incrementalLowLowMediumLowNO
`BLD-ENG-045` Provider Health MonitorWeak incrementalLowLowMediumLowNO
`BLD-ENG-078` Fallback Chain ArchitectWeak/mismatchedLowLow/negativeHighLowNO
`STIER-S-101` Connector Orchestration EngineWeak incrementalLowLowMediumLowNO
`BLD-ENG-109` External API Rate LimiterPartial onlyLowLow for observed gapHigh if misappliedLowNO
`STIER-S-133` External API Rate LimiterDuplicateNone creditedNoneLowNoneNO
`BLD-ENG-012` Rate LimiterPartial onlyLowLow for observed gapHigh if misappliedLowNO
`STIER-EXTRA-03` Rate LimiterDuplicateNone creditedNoneLowNoneNO
`STIER-S-119` Quota Intelligence EngineWeak/conditionalLowLowMediumLow/mediumNO
`BLD-ENG-089` Quota IntelligenceDuplicateNone creditedNoneLowNoneNO
`BLD-ENG-215` Contract Evolution MediatorWeak incrementalLowLowMediumLowNO
`BLD-ENG-202` Event-Driven Integration MeshWeak incrementalLowLowMediumLowNO
`BLD-ENG-096` Webhook ReliabilityWeak/mismatchedLowLow/negativeHighLowNO
`STIER-S-114` Webhook Reliability EngineDuplicateNone creditedNoneLowNoneNO
`BLD-ENG-264` Idempotency KeysWeak incrementalLowLowMediumLowNO
`STIER-S-ACC02` Adaptive Rate Limiting EnginePartial onlyLowLow for observed gapHigh if misappliedLowNO
`BLD-ENG-066` Adaptive Rate LimitingWeak/conditionalLowLowMediumLow/mediumNO
`SUBSYS-04` Shadow MeshWeak incrementalLowLowMediumLowNO

Step 3

Constraints this host imposes

Every retained row says constraints: none verbatim; host constraints still apply.

ComponentCatalog constraint (verbatim)Verified (verbatim)Host constraint
`BLD-ENG-009` Tamper-Evident ChainnoneC:ok I:ok B:exec T:— S:scanCanonical event serialization/persistence must be deterministic; existing event destinations remain authoritative.
`SUBP-06` BULKHEADnoneC:ok I:ok B:load T:— S:scanStart only on n8n-owned dependencies; user workflow traffic may rely on exact concurrency/latency behavior.
`BLD-ENG-266` Retry BudgetnoneC:ok I:ok B:— T:— S:scanBudget must refill/observe rather than permanently suppress recovery; external-secrets retry is intentionally long-lived.
`BLD-ENG-105` Forensic ReplaynoneC:ok I:ok B:— T:— S:scanReplay is read-only unless mapped to an explicit test harness; never re-execute side effects by default.
`STIER-S-81` Compliance Attestation GeneratornoneC:ok I:ok B:load T:— S:scanAttestation is evidence packaging, not an independent compliance/security certification.
`BLD-ENG-034` Causal Event PropagationnoneC:ok I:ok B:— T:— S:scanOnly assert causal edges that host identifiers/events can prove deterministically.
`BLD-ENG-303` retry-with-backoffnoneC:ok I:ok B:— T:— S:scanDo not replace user-facing workflow retryOnFail semantics until parity is proven.
`BLD-ENG-248` Adversarial Input GeneratornoneC:ok I:ok B:— T:— S:scanTest-only first; finite catalog is not fuzzing completeness or penetration testing.

Step 4

Ranked recommendations

RankRecommendationAttach toEffortWhy it mattersRisk
1`BLD-ENG-009` Tamper-Evident Chainpackages/cli/src/eventbus/message-event-bus-writer/message-event-bus-log-writer-worker.ts (130 nonblank LOC); packages/cli/src/eventbus/event-message-classes/abstract-event-message.ts (123)~1–2 dHigh: creates a new enterprise trust/evidence property on an existing event stream.Low/medium: canonical serialization and chain persistence must be deterministic.
2`SUBP-06` BULKHEADpackages/cli/src/utils/ai-service-retry.ts (96 nonblank LOC); packages/@n8n/backend-network/src/http/undici/transport.ts (296 nonblank LOC)~3–5 dHigh: bounds blast radius from hung or saturated n8n-owned providers.Medium: queueing/rejection policy can change latency; deploy per dependency and observe first.
3`BLD-ENG-266` Retry Budgetpackages/cli/src/utils/ai-service-retry.ts (96 nonblank LOC); packages/cli/src/modules/external-secrets.ee/retry-manager.service.ts (119 nonblank LOC)~1–2 dHigh: controls retry amplification without requiring retries to stop forever.Low/medium: budget policy must preserve long-lived recovery behavior.
4`BLD-ENG-105` Forensic Replaypackages/cli/src/eventbus/** (2,204 nonblank LOC aggregate); execution/audit event classes~1–3 dHigh: shortens support/security reconstruction and enables evidence-backed regressions.Medium: replay must be read-only unless explicitly mapped to a test harness.
5`STIER-S-81` Compliance Attestation Generatorpackages/cli/src/eventbus/**; workflow execution/audit records~1–2 dHigh for enterprise audit/support: converts internal evidence into a portable receipt.Medium: wording must not imply an independent security/compliance certification.
6`BLD-ENG-034` Causal Event Propagationpackages/cli/src/eventbus/event-message-classes/abstract-event-message.ts (123 nonblank LOC); workflow/node/execution/queue/runner event families~1–3 dMedium/high: makes distributed incident timelines explainable rather than merely chronological.Medium: incorrect parent assignment is worse than no causal claim; start with deterministic relationships only.
7`BLD-ENG-303` retry-with-backoffpackages/core/src/execution-engine/workflow-execute.ts (2,590 nonblank LOC); packages/cli/src/utils/ai-service-retry.ts (96); packages/cli/src/modules/external-secrets.ee/retry-manager.service.ts (119)~1–2 dMedium: reduces retry-policy drift and repeated implementation work.Medium: workflow retry behavior is user-facing; centralize internal helpers first.
8`BLD-ENG-248` Adversarial Input Generatorpackages/cli/src/middlewares/body-parser.ts (106 nonblank LOC); packages/@n8n/backend-network/src/ssrf/ssrf-protection.service.ts (309); packages/cli/src/services/rate-limit.service.ts (87) tests~0.5–1 dMedium: cheap regression coverage at high-risk parsing/egress boundaries.Low: test-only first; avoid mistaking a finite corpus for fuzzing completeness.

Findings, in fixed shape

[HARDEN] CMPSBL SUBP-06 "BULKHEAD" -> host: packages/cli/src/utils/ai-service-retry.ts (96 nonblank LOC); packages/@n8n/backend-network/src/http/undici/transport.ts (296 nonblank LOC)
  Why: Adds per-dependency concurrency and queue isolation where a timed-out or saturated external service can otherwise keep consuming process capacity. Start only on n8n-owned control-plane dependencies, not arbitrary user workflow traffic.
  Uses: BulkheadOptions, BulkheadRunOptions, Bulkhead, createBulkhead, BulkheadSubject, bulkheadContract, BulkheadRejection, BulkheadPolicy, RejectionReason +1 more
  Saves: ~1–3 engineer-weeks (basis: 539 entry LOC + compartment selection, queue/reject policy, concurrency accounting, snapshots and n8n-specific dependency-key tests; kit 400–1,200 LOC band).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL SUBP-05 "TRIAGE" -> host: packages/@n8n/backend-network/src/http/retryability.ts; packages/cli/src/utils/circuit-breaker.ts
  Why: n8n already has retryability classification, circuit breaking, queueing and domain-specific recovery; a 496-LOC general recovery ladder would overlap several mature systems.
  Uses: triageContract, createTriage, BUILT_IN_RULES, DEFAULT_CLASSIFICATION, classifyWith, normaliseKind, normaliseMessage, LadderRule, TriageOptions +8 more
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL SUBP-04 "HARNESS" -> host: packages/testing/**; packages/@n8n/scheduler/src/** tests
  Why: The repository already has very large unit/integration/property/E2E harnesses; a generic port-contract rig is useful only if CMPSBL ports are adopted later, not as host value by itself.
  Uses: httpContract, queueContract, secretsContract, stateContract, telemetryContract, defineContract, runContract, runSuite, PORT_CONTRACTS +9 more
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[HARDEN] CMPSBL BLD-ENG-303 "retry-with-backoff" -> host: packages/core/src/execution-engine/workflow-execute.ts (2,590 nonblank LOC); packages/cli/src/utils/ai-service-retry.ts (96); packages/cli/src/modules/external-secrets.ee/retry-manager.service.ts (119)
  Why: Provides one small jittered, cancellable retry primitive that can replace selected duplicated helper logic. It must not silently replace user-visible workflow retry semantics, which are a product contract.
  Uses: RetryOptions, retry
  Saves: ~3–8 engineer-hours (basis: 55 entry LOC + backoff/jitter/predicate/AbortSignal concerns; kit <100 LOC band).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[HARDEN] CMPSBL BLD-ENG-266 "Retry Budget" -> host: packages/cli/src/utils/ai-service-retry.ts (96 nonblank LOC); packages/cli/src/modules/external-secrets.ee/retry-manager.service.ts (119 nonblank LOC)
  Why: Adds a refilling retry budget so separate retry loops share a pressure ceiling instead of each independently deciding that another retry is affordable. Particularly relevant to the external-secrets manager, whose scheduled retry loop has no attempt ceiling in the observed source.
  Uses: tryRetry, remainingBudget, configureBudget, getBudgetStats, resetBudget
  Saves: ~3–8 engineer-hours (basis: 56 entry LOC + budget/refill/observability concerns; kit <100 LOC band).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[HARDEN] CMPSBL BLD-ENG-009 "Tamper-Evident Chain" -> host: packages/cli/src/eventbus/message-event-bus-writer/message-event-bus-log-writer-worker.ts (130 nonblank LOC); packages/cli/src/eventbus/event-message-classes/abstract-event-message.ts (123)
  Why: n8n already emits rich execution/audit events, but the observed log writer appends ordinary JSON lines and no hash/Merkle linkage was found. A sidecar chain can make selected evidence tamper-evident without replacing the event bus.
  Uses: createAuditChain
  Saves: ~4–8 engineer-hours (basis: 67 entry LOC + canonicalization/hash-link/persistence/verification concerns; kit <100 LOC band).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-71 "Tamper-Evident Chain" -> host: eventbus evidence seam
  Why: Twin of the smaller carried BLD-ENG-009; counting both would double-count the same capability.
  Uses: createAuditChain
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[HARDEN] CMPSBL BLD-ENG-105 "Forensic Replay" -> host: packages/cli/src/eventbus/** (2,204 nonblank LOC aggregate); execution/audit event classes
  Why: Turns captured audit/execution evidence into an incident reconstruction artifact. n8n has execution replay/test-run machinery, but no generic forensic event replay layer was found for the event-bus evidence stream.
  Uses: AuditEvent, ReplaySession, ReplayResult, ForensicReplayEngine
  Saves: ~1–3 engineer-days (basis: 103 entry LOC + event normalization/session slicing/replay/result concerns; kit 100–400 LOC band).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[HARDEN] CMPSBL STIER-S-81 "Compliance Attestation Generator" -> host: packages/cli/src/eventbus/**; workflow execution/audit records
  Why: Packages selected evidence into an attestation-style report with cryptographic evidence chaining. This complements n8n’s existing SBOM/attestation pipeline, which is supply-chain focused rather than per-workflow execution evidence.
  Uses: EvidenceItem, Attestation, generateAttestation, batchAttest
  Saves: ~3–8 engineer-hours (basis: 57 entry LOC + evidence selection/attestation batching/output contract concerns; kit <100 LOC band).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[HARDEN] CMPSBL BLD-ENG-034 "Causal Event Propagation" -> host: packages/cli/src/eventbus/event-message-classes/abstract-event-message.ts (123 nonblank LOC); workflow/node/execution/queue/runner event families
  Why: The base event shape has id, timestamp, event name, message and payload, but no explicit parent/causal field was found. Causal propagation can add parent-child lineage across execution, node, queue and runner events without changing execution semantics.
  Uses: CausalEvent, PropagationRule, CausalChain, addRule, clearRules, propagate, getChain, getAllChains, getStats
  Saves: ~1–3 engineer-days (basis: 106 entry LOC + parent/rule/chain/stats concerns; kit 100–400 LOC band).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-136 "Audit-Grade Decision Ledger" -> host: packages/cli/src/eventbus/**
  Why: A second decision ledger overlaps the carried tamper chain plus n8n’s existing event records; the report does not need both.
  Uses: LedgerEntry, AuditGradeDecisionLedger
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-CJ94 "Audit-Grade Decision Ledger" -> host: packages/cli/src/eventbus/**
  Why: Twin of BLD-ENG-136 and therefore excluded from sizing/value.
  Uses: LedgerEntry, AuditGradeDecisionLedger
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-075 "Self-Audit Loop" -> host: security/**; packages/cli/src/** audit services
  Why: n8n already has dedicated security/audit checks and operational telemetry; a generic self-audit registry was not tied to a missing host job strongly enough.
  Uses: AuditPolicy, AuditResult, AuditReport, registerPolicy, removePolicy, runAudit, getComplianceScore
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-78 "Self-Audit Loop" -> host: security/**
  Why: Twin of BLD-ENG-075; excluded with it.
  Uses: AuditPolicy, AuditResult, AuditReport, registerPolicy, removePolicy, runAudit, getComplianceScore
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-229 "Provenance Chain Verifier" -> host: security/sca/README.md
  Why: n8n already has a mature SBOM/VEX/attestation/signature pipeline for software supply-chain provenance. Event evidence is better served by the carried tamper chain.
  Uses: ProvenanceLink, ProvenanceVerdict, ProvenanceChainVerifier
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-246 "Audit Log Ring" -> host: packages/cli/src/eventbus/**
  Why: A capped FIFO audit ring is weaker than the existing persisted event-bus writer and database-backed event/execution systems.
  Uses: AuditEventType, AuditEntry, AuditLogRing
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[HARDEN] CMPSBL BLD-ENG-248 "Adversarial Input Generator" -> host: packages/cli/src/middlewares/body-parser.ts (106 nonblank LOC); packages/@n8n/backend-network/src/ssrf/ssrf-protection.service.ts (309); packages/cli/src/services/rate-limit.service.ts (87) tests
  Why: Adds a reusable injection/overflow/encoding/Unicode corpus to existing property and integration tests. n8n already uses fast-check in several packages, so this is a security-boundary fixture pack, not a replacement testing strategy.
  Uses: ADVERSARIAL_CATALOG, generateAdversarialInputs
  Saves: ~2–6 engineer-hours (basis: 33 entry LOC + corpus classification/adapter/assertion concerns; kit <100 LOC band).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-CJ132 "Adversarial Simulation Engine" -> host: packages/testing/**; packages/cli/src/evaluation.ee/**
  Why: The description is broad and behavior evidence is only B:load; n8n already has substantial security, integration and evaluation tests. The smaller adversarial input generator has a clearer attachment.
  Uses: AttackScenario, SimulationResult, AdversarialSimulation
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-050 "Shadow Run Environment" -> host: packages/cli/src/evaluation.ee/**
  Why: n8n already ships a substantial enterprise Evaluation/test-run system that snapshots workflow versions and executes test runs; a generic shadow-run environment would duplicate it.
  Uses: ShadowRun, ShadowAssertion, createShadowRun, startRun, addAssertion, addLog, completeRun, getRun, listRuns
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-124 "Shadow Run Environment" -> host: packages/cli/src/evaluation.ee/**
  Why: Twin of BLD-ENG-050 and rejected for the same duplication.
  Uses: ShadowRun, ShadowAssertion, createShadowRun, startRun, addAssertion, addLog, completeRun, getRun, listRuns
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL SUBP-07 "CEILING" -> host: packages/cli/src/modules/instance-ai/instance-ai-credit.service.ts
  Why: Instance AI already has authoritative credit accounting, quotas, quota locking, usage claims and UI/telemetry updates. A second generic ceiling is not a clean incremental feature there.
  Uses: CeilingOptions, Ceiling, createCeiling, CeilingSubject, ceilingContract, METERS, Meter, MeterMap, CeilingSpec +5 more
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-121 "Autonomy Budget Manager" -> host: packages/cli/src/modules/instance-ai/instance-ai-credit.service.ts
  Why: n8n already meters/claims Instance AI credits and enforces quota locks; adding a parallel autonomy budget manager risks conflicting sources of truth.
  Uses: AutonomyBudget, BudgetAlert, SpendRequest, SpendResult, AutonomyBudgetManager
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-CJ79 "Autonomy Budget Manager" -> host: Instance AI credit system
  Why: Twin of BLD-ENG-121 and rejected for the same reason.
  Uses: AutonomyBudget, BudgetAlert, SpendRequest, SpendResult, AutonomyBudgetManager
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-049 "Realtime Cost Attribution" -> host: packages/@n8n/ai-utilities/src/utils/n8n-llm-tracing.ts
  Why: n8n AI tracing already records token totals and can record cost totals; generic cost attribution is not sufficiently novel.
  Uses: CostEntry, ModuleCostSummary, recordCost, getModuleCosts, getTotalCost, getLedgerSize
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-006 "Cost-Aware Routing Engine" -> host: AI/model nodes and Instance AI model resolution
  Why: Automatic cost-aware rerouting would violate workflows that explicitly select a model/provider/credential. This is a product-semantic mismatch for generic workflow execution.
  Uses: createCostRouter
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-047 "Circuit Breaker Fabric" -> host: packages/cli/src/utils/circuit-breaker.ts
  Why: n8n already has a mature circuit breaker with closed/open/half-open states, sliding failure window and half-open concurrency. A breaker fabric is not justified by the observed gap.
  Uses: BreakerState, CircuitBreaker, createBreaker, recordSuccess, recordFailure, canExecute, getBreaker, getAllBreakers, resetBreaker
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-011 "Circuit Breaker" -> host: packages/cli/src/utils/circuit-breaker.ts
  Why: Direct duplicate of capability n8n already owns in a stronger host-specific implementation.
  Uses: CircuitState, CircuitBreakerConfig, CircuitStats, createCircuitBreaker, createBreakerPanel
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-045 "Provider Health Monitor" -> host: existing telemetry/circuit-breaker surfaces
  Why: Provider health is already represented through host telemetry/circuit state in the relevant control planes; no generic provider selector should override user-selected integrations.
  Uses: ProviderSample, ProviderHealth, recordSample, getProviderHealth, getAllProviderHealth, getBestProvider
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-078 "Fallback Chain Architect" -> host: workflow node/provider semantics
  Why: Automatic fallback chains are unsafe for arbitrary workflow integrations because providers are not semantically interchangeable and users explicitly choose credentials/providers.
  Uses: ProviderSpec, FallbackChain, buildFallbackChain
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-101 "Connector Orchestration Engine" -> host: packages/nodes-base/**; packages/core/**
  Why: n8n itself is already a connector orchestration product with node lifecycle, credentials, retries and 1,500+ integrations; importing a generic connector orchestrator would mostly duplicate the host.
  Uses: Connector, registerConnector, pingConnector, getConnector, listConnectors, removeConnector, executeWithRetry
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-109 "External API Rate Limiter" -> host: packages/cli/src/services/rate-limit.service.ts; multi-main deployment
  Why: The catalog API exposes no shared-state/store port, so pre-purchase metadata cannot establish process-global/provider-global quota enforcement. It does not solve the observed multi-main state seam.
  Uses: RateLimitConfig, RateLimitResult, ExternalAPIRateLimiter
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-133 "External API Rate Limiter" -> host: multi-main rate-limit seam
  Why: Twin of BLD-ENG-109 and has the same missing distributed-state evidence; excluded.
  Uses: RateLimitConfig, RateLimitResult, ExternalAPIRateLimiter
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-012 "Rate Limiter" -> host: packages/cli/src/services/rate-limit.service.ts
  Why: No shared-state/store port is exposed in the catalog API; it cannot honestly replace a multi-process limiter where global counters matter.
  Uses: Strategy, RateLimitConfig, RateLimitResult, createRateLimiter
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-EXTRA-03 "Rate Limiter" -> host: packages/cli/src/services/rate-limit.service.ts
  Why: Twin of BLD-ENG-012; multi-strategy choice does not solve the distributed-state problem.
  Uses: Strategy, RateLimitConfig, RateLimitResult, createRateLimiter
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-119 "Quota Intelligence Engine" -> host: third-party integration quota surfaces
  Why: Quota prediction requires authoritative quota limits and shared consumption state per provider. The catalog row does not expose the host adapters needed to establish that globally.
  Uses: QuotaConfig, QuotaWarning, registerQuota, consumeQuota, getWarning, listQuotas
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-089 "Quota Intelligence" -> host: third-party integration quota surfaces
  Why: Smaller twin/variant of quota intelligence; same authoritative-state problem.
  Uses: QuotaConfig, QuotaWarning, registerQuota, consumeQuota, getWarning, listQuotas
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-215 "Contract Evolution Mediator" -> host: nodes-base node versions; workflow migrations
  Why: n8n already has node typeVersion/versioned descriptions and migration machinery. A generic contract mediator was not shown to improve that host-specific versioning model.
  Uses: ContractVersion, Contract, ContractEvolutionMediator
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-202 "Event-Driven Integration Mesh" -> host: packages/cli/src/eventbus/**; scaling/queue system
  Why: n8n already has event-bus persistence plus Redis/Bull queueing/scaling. A second generic pub-sub mesh would create parallel delivery semantics.
  Uses: EventStream, DeadLetter, EventDrivenIntegrationMesh
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-096 "Webhook Reliability" -> host: packages/cli/src/webhooks/**; Webhook node
  Why: The row describes webhook delivery reliability, while n8n’s primary generic Webhook node is an inbound trigger. Applying outbound-delivery semantics there would be a category error.
  Uses: WebhookEvent, DeliveryAttempt, WebhookConfig, WebhookReliabilityEngine
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-114 "Webhook Reliability Engine" -> host: packages/cli/src/webhooks/**
  Why: Richer twin/variant of outbound webhook delivery; still the wrong trust/direction model for n8n’s inbound generic webhook surface.
  Uses: WebhookEvent, DeliveryAttempt, WebhookConfig, WebhookStore, DeliveryDisposition, WebhookReliabilityEngine
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:load T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:load = entry point imports cleanly and exposes exports; no zero-arity behavior was fabricated; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-264 "Idempotency Keys" -> host: packages/core/src/data-deduplication-service.ts
  Why: Its catalog behavior is an in-memory TTL/in-flight cache, while n8n already has persisted deduplication for selected workloads. It is insufficient as a cross-process generic webhook idempotency guarantee.
  Uses: withIdempotency, hasIdempotencyKey, clearIdempotencyKey, getIdempotencyStats
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL STIER-S-ACC02 "Adaptive Rate Limiting Engine" -> host: packages/cli/src/services/rate-limit.service.ts
  Why: Adaptive local limiting does not address the observed multi-main/shared-counter seam; no shared-state port appears in the catalog API.
  Uses: RateLimiter, createLimiter, tryConsume, adaptLimit, getLimiter, listLimiters
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:exec T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:exec = entry point loads; zero-arity exports were executed twice and compared structurally; T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL BLD-ENG-066 "Adaptive Rate Limiting" -> host: packages/cli/src/services/rate-limit.service.ts
  Why: Same issue as the adaptive S-tier limiter: useful local policy, but no evidence it can coordinate counters across main processes.
  Uses: RateLimiter, createLimiter, tryConsume, adaptLimit, getLimiter, listLimiters
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:ok I:ok B:— T:— S:scan — C:ok = Compiles (batch tsgo --strict --noEmit); I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata
[SKIP] CMPSBL SUBSYS-04 "Shadow Mesh" -> host: packages/cli/src/evaluation.ee/**
  Why: n8n already has workflow Evaluation/test-run machinery and partial/manual execution; a 14-LOC traffic-mirroring subsystem row is not enough pre-purchase evidence to displace that system.
  Uses: generateAdversarialInputs, runShadowProbe, runAllShadowProbes, runShadowBatch, startShadowScheduler, stopShadowScheduler, getShadowMeshAnalytics, runShadowBuild, runAllShadowBuilds +6 more
  Saves: 0 engineer-days credited (basis: rejected candidate; no adoption value counted).
  Verified: C:proj(14) I:ok B:— T:— S:scan — C:proj(14) = compiles under project settings but strict isolated pass records the stated error count; not C:ok; I:ok = installed with install.mjs into an empty host and type-checked there with tsgo --noEmit --skipLibCheck; B:— = Not claimed (behavior); T:— = Not claimed (test coverage); S:scan = author's 13-rule deterministic static unsafe-construct sweep reported clean; not an independent security audit
  Mode: direct
  Ports to implement: none stated in catalog metadata

Gap map

Gap / seamHost evidenceLibrary fitDecision
Tamper-evident workflow/execution evidenceRich event bus; no hash/Merkle chain found.BLD-ENG-009 + STIER-S-81 + BLD-ENG-105ADDRESS.
Causal lineageBase event shape has no explicit parent field.BLD-ENG-034ADDRESS, deterministic edges only.
Internal dependency concurrency isolationNo generic per-provider bulkhead found.SUBP-06ADDRESS for n8n-owned dependencies.
Retry pressureFragmented retry loops; external-secrets can reschedule indefinitely.BLD-ENG-266 + BLD-ENG-303ADDRESS selectively.
Distributed endpoint rate-limit stateNo visible shared store in RateLimitService; multi-main exists.No catalog store port.UNRESOLVED.
Leader clear ownershipExplicit TODO.Host RedisLockService already stronger.HOST-ONLY FIX.
Encryption-key retirementUsage-count TODO.No strong library fit.HOST-ONLY review.
AI budgetsExisting authoritative credits/quota lock.Budget/cost rows duplicate.SKIP.
Workflow shadow/evaluationLarge existing evaluation systems.Shadow rows duplicate.SKIP.
Generic webhook exactly-oncePersisted dedupe exists selectively; catalog idempotency is in-memory TTL.Insufficient for cross-process generic guarantee.UNRESOLVED.
CMPSBL delivery redistribution boundaryn8n source-visible product distribution is permitted; republishing the CMPSBL delivery itself is not.Not a component issue.ADDRESS with internal delivery handling + attribution.

Do not touch

Quick wins

Step 6

Build versus buy

Assumptions

BucketEngineering timeUSDBasis
(A) Cost avoided0 weeksUS$0No funded/planned evidence.
(B) Capability acquisition2–4.5 weeksUS$12,000–27,0001,016 entry LOC + ~30 correctness concerns, overlap discounted.
(C) Portfolio reuse0 weeksUS$0No sibling repos evaluated.
Integration0.75–1.5 weeksUS$4,500–9,000Source/security review, adapters, tests, flags, legal/distribution review.
Licence3.33 h equivalentUS$499499/150.
Hard-budget netnegative−US$9,499 to −US$4,999A − integration − licence.
Counterfactual capability netpositive+US$2,501 to +US$22,001B − integration − licence if capability desired.

What the team would never have arrived at alone

Not claimed. n8n already demonstrates sophisticated independent engineering. The defensible value is prebuilt implementation and synthesis, not conceptual exclusivity.

Is this a good trade at the stated price?

Yes, technically, if either major capability family is wanted. Even low capability value minus high integration and the US$499 fee remains positive by about US$2,501. If post-purchase source review weakens the retained claims or n8n does not want these capabilities, the recommendation becomes HOLD regardless of the low licence price.

Step 7

90-day roadmap, assuming it was bought

WindowWorkExit criteria
Days 0–10Purchase/grant + attribution plan; source audit of 8 rows; isolated n8n typecheck/tests.Purchase/grant recorded; source/API matches catalog; abort failing rows.
Days 11–30Read-only Execution Evidence Capsule sidecar; test-only security corpus.No production semantics change; deterministic chain verification.
Days 31–45Retry budget + bulkhead behind flags on one n8n-owned dependency.Acceptable latency/concurrency; no starvation; observable pressure.
Days 46–60Forensic slice + attestation export; deterministic causal edges.Read-only replay; no compliance overclaim; mapping tests pass.
Days 61–75Expand failure cell to second internal dependency; optionally centralize internal retry mechanics.No workflow retry contract drift; rollback tested.
Days 76–90Decide product surface; read provisional Discovery source.Go/no-go based on usage, overhead, legal fit, source quality.

Do not start: breaker/SSRF/API-key/encryption/evaluation/credit replacements; local catalog limiters as a multi-main fix; automatic provider fallback for user workflows.

Discovery Vault — provisional, kept out of every total

Machine-synthesised discoveries worth reading after purchase

All 6,479 Discovery Vault rows were screened by index metadata. No Discovery source/API/LOC/verification is credited pre-purchase.

disc-03eb9a39 — Causal Detector

Replays event histories while mapsing governance topology across the substrate.

self-contained: verified; TypeScript pack: Not claimed; runtime smoke: build-checked; static security sweep: clean; security audit: Not claimed · observability · ATLAS -> CALIBER -> ECHO -> LINEAGE -> METRIC

Potential complement to the causal incident design; read source only after purchase and compare it against BLD-ENG-034 before crediting anything.

PROVISIONAL — index row only, source not read (pre-purchase)

disc-69d24ebd — Speculative Execution Router

Pre-emptive request dispatch to multiple providers with first-response selection

self-contained: verified; TypeScript pack: Not claimed; runtime smoke: build-checked; static security sweep: clean; security audit: Not claimed · routing · ATLAS -> CORTEX -> NEXUS

Interesting only for n8n-owned idempotent provider reads; speculative fan-out can multiply cost and side effects, so it is unsafe for arbitrary workflows without strict gating.

PROVISIONAL — index row only, source not read (pre-purchase)

disc-026556df — Heuristic Connector

Inspects structural patterns while unifiesing external interfaces across the substrate.

self-contained: verified; TypeScript pack: Not claimed; runtime smoke: build-checked; static security sweep: clean; security audit: Not claimed · integration · INTEGRATION -> NEXUS -> ULT_MERIDIAN -> VISION

Potentially relevant to n8n’s huge connector estate, but the index description is too generic to establish any API or value pre-purchase.

PROVISIONAL — index row only, source not read (pre-purchase)

disc-0b461625 — Cognitive Flame Graph Generator

Generates flame graphs of cognitive execution paths

self-contained: verified; TypeScript pack: Not claimed; runtime smoke: build-checked; static security sweep: clean; security audit: Not claimed · observability · OBSERVABILITY -> CORTEX -> BRAIN -> ANALYTICS

Could visualize Instance AI/agent execution paths, but source and TypeScript-pack verification are Not claimed; treat as a reading lead, not a recommendation.

PROVISIONAL — index row only, source not read (pre-purchase)

Step 8 — appended, never merged into the body

Self-correction addendum

Claim aboveRe-check resultEstimate change
“27,048 files” host inventoryConfirmed as 27,048 regular archive files. The ZIP also contains 22 symbolic-link entries and 6,660 directories, for 33,730 members total.No recommendation/value change; archive-shape wording corrected so another evaluator can reproduce the count.
Original host remained read-onlySHA-256/size recheck of all 27,048 original regular files: 0 missing, 0 changed, 0 unexpected non-report files.Confirmed. Final allowed delta is exactly the two required report files.
TypeScript/Vue scaleConfirmed 19,556 .ts files and 1,253 .vue files in the original-file manifest.No estimate change.
Multi-main endpoint limiter seamRe-read RateLimitService at lines 31-74: observed express-rate-limit construction provides no shared store; multi-main remains a real consistency question, but runtime routing/stickiness was not proven from source.Kept UNRESOLVED; no catalog limiter credited because catalog metadata exposes no shared-state/store port.
Retry-pressure seamAI helper lines 27-29 explicitly says a timed-out underlying SDK request cannot be aborted; external-secrets retry manager lines 62-91 reschedules with increasing attempt count and no observed ceiling.Confirmed Provider Failure Cell motivation; user-visible workflow retry semantics remain excluded.
Event evidence seamEvent writer line 89 appends serialized JSON lines; base event lines 84-92 expose id/time/name/message/payload without an explicit parent field.Confirmed the evidence/causal opportunity; still an absence finding, not a claim that existing execution storage is unsafe.
CMPSBL public/source-visible distribution gateThe first report draft over-read “non-sublicensable” as requiring written permission for n8n. Authoritative LICENSE §§1.1(c)-1.3 expressly permit embedding in a substantial product distributed as packages/services; §§2.1-2.2 prohibit redistributing the Library itself.Gate reduced to the actual Step 0 blocker: no purchase/grant record yet, plus required attribution. No written-permission gate for ordinary n8n product embedding.
Per-component build-equivalent sizingInitial draft understated the 539-entry-LOC BULKHEAD row as days. Rechecked against the kit estimation bands: 400-1,200 entry LOC maps to 1-3 engineer-weeks; sub-100 rows map to hours.Fixed-shape Saves lines corrected. Aggregate Bucket B stays 2-4.5 weeks because overlapping capabilities are discounted rather than summed mechanically.
Kit licensing/pricing text is internally consistentNot confirmed. LICENSE, LICENSING.md and AGENTS.md say one US$499 one-time perpetual licence with no source disclosure. CATALOG-PHASE-1-DIRECTIVES.md, docs/LICENSE-COMPATIBILITY.md, EXAMPLE-INTEGRATION-REPORT.html and the template CTA retain retired annual/copyleft-door language.Authoritative current files win. Report uses US$499 once and 3.33 h at US$150/h; stale 1.9 h/annual/source-release text is rejected.
Layer attachment metadata can be read literallyNot safe. Phase 2 lists VerticalLayerPack rows as Mode: direct, while AGENTS.md rule 12 says AscensionLayer/Primitive-Layer/VerticalLayerPack artifacts are not attachable by import and only take effect via Ascension Layer 2 emission.No retained n8n recommendation uses a layer. Future evaluators must let the layer rule override a “direct” mode cell for attachment semantics.
Discovery Vault countConfirmed 6,479 index rows when both ID families are counted: 1,510 disc-* plus 4,969 vdisc-*.No savings/value credited; four rows remain provisional index-only reading leads.

The final inventory check confirms that the evaluation modified no original n8n source. The two material corrections were in the evaluator/kit layer rather than the host: the archive member count needed symlink/directory qualification, and the first draft incorrectly created a public-source written-permission gate that the authoritative CMPSBL licence does not impose on a substantial product such as n8n.

Kit edge-case result: the current licence files and AGENTS.md must override stale Phase-1/template/example licensing prose, and layer-class attachment rules must override catalog cells that say Mode: direct. These inconsistencies did not change the eight retained n8n components, but they can change a future evaluator's verdict if read literally.

Claim ceiling

What is and is not verified

Extracted from systems the author has run in production since August 2025. Operationally exercised, not independently security-audited.

In pre-purchase evaluation, verification axes quoted in this report come verbatim from the generated AGENT-HANDOFF-CATALOG.md, which is the pre-purchase source of truth; in a full delivery, artifacts/<ID>/artifact-manifest.json is authoritative and overrides it. Every retained component records T:—, meaning Not claimed test coverage, and no component is claimed here to have had an independent third-party security review. Static scan results are the author's own.

Governed runtime status: Not claimed. No CMPSBL implementation was installed or executed in n8n during this pre-purchase evaluation.

The Collective Master Library — Licensed Edition v3.1.0

The catalog evaluated here contains 1,162 engineered component rows. The authoritative current licence is US$499 USD paid once, perpetual, per company; it allows private modification and embedding in a product with substantial independent function, with no source-disclosure obligation. Rights cover the delivered release and releases published in the twelve months following purchase. Offline delivery; no CMPSBL source was present in this pre-purchase kit.

Buy at cmpsbl.com/canon