From 886f22ee6d0b41b9acd1ad044bceff613324fbc8 Mon Sep 17 00:00:00 2001 From: Declan Carroll Date: Thu, 23 Apr 2026 10:55:55 +0100 Subject: [PATCH] chore: Add code-health baseline and fix janitor catalog violation (no-changelog) (#28958) Co-authored-by: Claude Opus 4.6 --- .code-health-baseline.json | 681 +++++++++++++++++++++++++ packages/testing/code-health/README.md | 60 +++ packages/testing/janitor/package.json | 2 +- 3 files changed, 742 insertions(+), 1 deletion(-) create mode 100644 .code-health-baseline.json create mode 100644 packages/testing/code-health/README.md diff --git a/.code-health-baseline.json b/.code-health-baseline.json new file mode 100644 index 00000000000..53c15a72bc9 --- /dev/null +++ b/.code-health-baseline.json @@ -0,0 +1,681 @@ +{ + "version": 1, + "generated": "2026-04-23T08:42:21.615Z", + "totalViolations": 102, + "violations": { + "packages/@n8n/agents/package.json": [ + { + "rule": "catalog-violations", + "line": 40, + "message": "langsmith@>=0.3.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "193bb785d0b4" + }, + { + "rule": "catalog-violations", + "line": 27, + "message": "@ai-sdk/anthropic appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "b58f03d0d5c1" + }, + { + "rule": "catalog-violations", + "line": 41, + "message": "@opentelemetry/sdk-trace-node appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "a77ced903cdf" + } + ], + "packages/@n8n/ai-workflow-builder.ee/package.json": [ + { + "rule": "catalog-violations", + "line": 72, + "message": "langsmith@^0.4.6 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "6ee5e003d795" + }, + { + "rule": "catalog-violations", + "line": 61, + "message": "@mozilla/readability appears in 5 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "d2120f012c93" + }, + { + "rule": "catalog-violations", + "line": 70, + "message": "jsdom appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "9c770d66baf2" + }, + { + "rule": "catalog-violations", + "line": 76, + "message": "turndown appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "85c311d87491" + }, + { + "rule": "catalog-violations", + "line": 82, + "message": "@types/turndown appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "407c8d1b3428" + } + ], + "packages/@n8n/cli/package.json": [ + { + "rule": "catalog-violations", + "line": 79, + "message": "@types/node@24.10.1 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "a5a872807ede" + }, + { + "rule": "catalog-violations", + "line": 74, + "message": "@oclif/core appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "733c3960022e" + } + ], + "packages/@n8n/eslint-config/package.json": [ + { + "rule": "catalog-violations", + "line": 56, + "message": "eslint@>= 9 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "82841e89293f" + } + ], + "packages/@n8n/eslint-plugin-community-nodes/package.json": [ + { + "rule": "catalog-violations", + "line": 46, + "message": "eslint@>= 9 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "46d3130cf108" + }, + { + "rule": "catalog-violations", + "line": 47, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "589f90baeece" + } + ], + "packages/@n8n/json-schema-to-zod/package.json": [ + { + "rule": "catalog-violations", + "line": 63, + "message": "zod@^3.0.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "436de7cbc5ea" + } + ], + "packages/@n8n/node-cli/package.json": [ + { + "rule": "catalog-violations", + "line": 76, + "message": "eslint@>= 9 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "1b5deae544ea" + }, + { + "rule": "catalog-violations", + "line": 52, + "message": "change-case appears in 5 packages with 3 different versions — add to pnpm-workspace.yaml catalog", + "hash": "da74ed210d07" + }, + { + "rule": "catalog-violations", + "line": 51, + "message": "@oclif/core appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "9711a9b00bf9" + }, + { + "rule": "catalog-violations", + "line": 55, + "message": "eslint-plugin-n8n-nodes-base appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "6a9e12780943" + }, + { + "rule": "catalog-violations", + "line": 59, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "d536f5a9c3f8" + } + ], + "packages/@n8n/nodes-langchain/package.json": [ + { + "rule": "catalog-violations", + "line": 289, + "message": "openai@^6.9.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "b9b214e61fdc" + }, + { + "rule": "catalog-violations", + "line": 299, + "message": "zod-to-json-schema@3.23.3 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "081b5d0b5ca5" + }, + { + "rule": "catalog-violations", + "line": 296, + "message": "tmp-promise appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "88d67e2ef747" + }, + { + "rule": "catalog-violations", + "line": 254, + "message": "@mozilla/readability appears in 5 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "69d6fa7e46f9" + }, + { + "rule": "catalog-violations", + "line": 270, + "message": "cheerio appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "8cd029bb871e" + }, + { + "rule": "catalog-violations", + "line": 280, + "message": "jsdom appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "26f20ebea4b1" + }, + { + "rule": "catalog-violations", + "line": 286, + "message": "mongodb appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "46cb48884e22" + }, + { + "rule": "catalog-violations", + "line": 290, + "message": "pdf-parse appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "0c7d44a9c2e4" + } + ], + "packages/testing/janitor/package.json": [ + { + "rule": "catalog-violations", + "line": 39, + "message": "ts-morph@>=20.0.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "4a2907301983" + } + ], + "packages/frontend/@n8n/chat/package.json": [ + { + "rule": "catalog-violations", + "line": 56, + "message": "unplugin-icons@^0.19.0 should use \"catalog:frontend\" (exists in pnpm-workspace.yaml [frontend])", + "hash": "a0d24d761026" + }, + { + "rule": "catalog-violations", + "line": 59, + "message": "vite-plugin-dts@^4.5.3 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "37ac4b34bc06" + } + ], + "packages/frontend/@n8n/design-system/package.json": [ + { + "rule": "catalog-violations", + "line": 73, + "message": "@vueuse/core@* should use \"catalog:frontend\" (exists in pnpm-workspace.yaml [frontend])", + "hash": "237e9d17c4ba" + } + ], + "packages/frontend/@n8n/storybook/package.json": [ + { + "rule": "catalog-violations", + "line": 31, + "message": "@types/node@^24.10.1 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "50fb70481f8f" + } + ], + "packages/@n8n/node-cli/src/template/templates/declarative/custom/template/package.json": [ + { + "rule": "catalog-violations", + "line": 40, + "message": "eslint@9.32.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "c55e0c75d586" + }, + { + "rule": "catalog-violations", + "line": 43, + "message": "typescript@5.9.2 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "999c932ac3ae" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "2f772d0b5a09" + }, + { + "rule": "catalog-violations", + "line": 41, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "6ded3ee6fafe" + } + ], + "packages/@n8n/node-cli/src/template/templates/declarative/github-issues/template/package.json": [ + { + "rule": "catalog-violations", + "line": 43, + "message": "eslint@9.32.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "c3815ab2677d" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "typescript@5.9.2 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "11608ee90ba9" + }, + { + "rule": "catalog-violations", + "line": 49, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "4514689aef5c" + }, + { + "rule": "catalog-violations", + "line": 44, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "ce8e04a67c4c" + } + ], + "packages/@n8n/node-cli/src/template/templates/programmatic/example/template/package.json": [ + { + "rule": "catalog-violations", + "line": 40, + "message": "eslint@9.32.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "cd90d70b3ce4" + }, + { + "rule": "catalog-violations", + "line": 43, + "message": "typescript@5.9.2 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "d0998542352d" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "fd2577d9c87b" + }, + { + "rule": "catalog-violations", + "line": 41, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "a931f101c8a0" + } + ], + "packages/@n8n/node-cli/src/template/templates/programmatic/ai/memory-custom/template/package.json": [ + { + "rule": "catalog-violations", + "line": 41, + "message": "eslint@9.32.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "298daa052478" + }, + { + "rule": "catalog-violations", + "line": 44, + "message": "typescript@5.9.2 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "9d70bb26b233" + }, + { + "rule": "catalog-violations", + "line": 47, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "42aefb6c9989" + }, + { + "rule": "catalog-violations", + "line": 42, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "cf4f2ca88b59" + } + ], + "packages/@n8n/node-cli/src/template/templates/programmatic/ai/model-ai-custom/template/package.json": [ + { + "rule": "catalog-violations", + "line": 43, + "message": "eslint@9.32.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "3c8b4977fd8a" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "typescript@5.9.2 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "9d31f8f7537c" + }, + { + "rule": "catalog-violations", + "line": 49, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "e1734c74601d" + }, + { + "rule": "catalog-violations", + "line": 44, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "2a2dea670608" + } + ], + "packages/@n8n/node-cli/src/template/templates/programmatic/ai/model-ai-custom-example/template/package.json": [ + { + "rule": "catalog-violations", + "line": 43, + "message": "eslint@9.32.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "91ea1dbe7d4e" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "typescript@5.9.2 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "72d08eab5625" + }, + { + "rule": "catalog-violations", + "line": 49, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "91b58c718e73" + }, + { + "rule": "catalog-violations", + "line": 44, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "83b610ec607a" + } + ], + "packages/@n8n/node-cli/src/template/templates/programmatic/ai/model-openai-compatible/template/package.json": [ + { + "rule": "catalog-violations", + "line": 43, + "message": "eslint@9.32.0 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "082bc9c01097" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "typescript@5.9.2 should use \"catalog:\" (exists in pnpm-workspace.yaml)", + "hash": "1b9d2910ce91" + }, + { + "rule": "catalog-violations", + "line": 49, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "6b5e714159dc" + }, + { + "rule": "catalog-violations", + "line": 44, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "ba672d26d64d" + } + ], + "packages/cli/package.json": [ + { + "rule": "catalog-violations", + "line": 97, + "message": "@ai-sdk/anthropic appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "1e3686e1923b" + }, + { + "rule": "catalog-violations", + "line": 132, + "message": "@opentelemetry/sdk-trace-node appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "a3dad0b8dc21" + }, + { + "rule": "catalog-violations", + "line": 142, + "message": "change-case appears in 5 packages with 3 different versions — add to pnpm-workspace.yaml catalog", + "hash": "949e802528f7" + }, + { + "rule": "catalog-violations", + "line": 193, + "message": "semver appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "5b7e9b03fb10" + }, + { + "rule": "catalog-violations", + "line": 200, + "message": "undici appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "91c29775e961" + }, + { + "rule": "catalog-violations", + "line": 203, + "message": "ws appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "cd07242e8163" + } + ], + "packages/@n8n/instance-ai/package.json": [ + { + "rule": "catalog-violations", + "line": 56, + "message": "@ai-sdk/anthropic appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "5b2153508e47" + }, + { + "rule": "catalog-violations", + "line": 37, + "message": "@mozilla/readability appears in 5 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "8fa6b9a8fc91" + }, + { + "rule": "catalog-violations", + "line": 47, + "message": "turndown appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "9a9d97065952" + }, + { + "rule": "catalog-violations", + "line": 59, + "message": "@types/turndown appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "12e346c47b39" + }, + { + "rule": "catalog-violations", + "line": 31, + "message": "@joplin/turndown-plugin-gfm appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "a3cf1504b5c2" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "pdf-parse appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "283fa9114c03" + } + ], + "packages/node-dev/package.json": [ + { + "rule": "catalog-violations", + "line": 47, + "message": "change-case appears in 5 packages with 3 different versions — add to pnpm-workspace.yaml catalog", + "hash": "6988b9f58c92" + }, + { + "rule": "catalog-violations", + "line": 46, + "message": "@oclif/core appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "da9b64834300" + }, + { + "rule": "catalog-violations", + "line": 53, + "message": "tmp-promise appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "632a744e397e" + } + ], + "packages/nodes-base/package.json": [ + { + "rule": "catalog-violations", + "line": 908, + "message": "change-case appears in 5 packages with 3 different versions — add to pnpm-workspace.yaml catalog", + "hash": "2d1fab7a5b05" + }, + { + "rule": "catalog-violations", + "line": 958, + "message": "semver appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "2daf37aa14e4" + }, + { + "rule": "catalog-violations", + "line": 963, + "message": "tmp-promise appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "3f93c404ae9c" + }, + { + "rule": "catalog-violations", + "line": 897, + "message": "@mozilla/readability appears in 5 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "ca4ac788adc6" + }, + { + "rule": "catalog-violations", + "line": 909, + "message": "cheerio appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "1a1b5bbc50c9" + }, + { + "rule": "catalog-violations", + "line": 914, + "message": "eventsource appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "9795e6c6d9e9" + }, + { + "rule": "catalog-violations", + "line": 927, + "message": "jsdom appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "02341f2b5e3e" + }, + { + "rule": "catalog-violations", + "line": 938, + "message": "mongodb appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "f688907d087a" + }, + { + "rule": "catalog-violations", + "line": 889, + "message": "eslint-plugin-n8n-nodes-base appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "ac254baa61f9" + } + ], + "packages/frontend/editor-ui/package.json": [ + { + "rule": "catalog-violations", + "line": 69, + "message": "change-case appears in 5 packages with 3 different versions — add to pnpm-workspace.yaml catalog", + "hash": "bd9a2eeb072b" + }, + { + "rule": "catalog-violations", + "line": 92, + "message": "semver appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "d8c606e42c92" + }, + { + "rule": "catalog-violations", + "line": 90, + "message": "prettier appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "8a66e00b94fa" + } + ], + "packages/@n8n/scan-community-package/package.json": [ + { + "rule": "catalog-violations", + "line": 15, + "message": "semver appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "ac0e4301d694" + } + ], + "packages/@n8n/ai-utilities/package.json": [ + { + "rule": "catalog-violations", + "line": 57, + "message": "undici appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "c14cd05614e8" + }, + { + "rule": "catalog-violations", + "line": 53, + "message": "tmp-promise appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "884a45bdbcf2" + }, + { + "rule": "catalog-violations", + "line": 60, + "message": "n8n-workflow appears in 9 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "717de3a58c50" + } + ], + "packages/@n8n/mcp-browser/package.json": [ + { + "rule": "catalog-violations", + "line": 37, + "message": "ws appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "9650c1b55f3c" + }, + { + "rule": "catalog-violations", + "line": 31, + "message": "@mozilla/readability appears in 5 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "0c97891a24f4" + }, + { + "rule": "catalog-violations", + "line": 32, + "message": "jsdom appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "8466b03b1044" + }, + { + "rule": "catalog-violations", + "line": 36, + "message": "turndown appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "f23a9d3d7aa2" + }, + { + "rule": "catalog-violations", + "line": 44, + "message": "@types/turndown appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "3f9e46e56803" + }, + { + "rule": "catalog-violations", + "line": 29, + "message": "@joplin/turndown-plugin-gfm appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "743e3a7dbb32" + } + ], + "packages/@n8n/task-runner/package.json": [ + { + "rule": "catalog-violations", + "line": 50, + "message": "ws appears in 3 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "51cb5069f382" + } + ], + "packages/@n8n/benchmark/package.json": [ + { + "rule": "catalog-violations", + "line": 36, + "message": "@oclif/core appears in 4 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "67f9d81d9528" + } + ], + "packages/@n8n/computer-use/package.json": [ + { + "rule": "catalog-violations", + "line": 44, + "message": "eventsource appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "f50c1eee2ed6" + } + ], + "packages/@n8n/stylelint-config/package.json": [ + { + "rule": "catalog-violations", + "line": 29, + "message": "stylelint appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "955f3fe044c7" + }, + { + "rule": "catalog-violations", + "line": 45, + "message": "stylelint appears in 2 packages with 2 different versions — add to pnpm-workspace.yaml catalog", + "hash": "955f3fe044c7" + } + ] + } +} diff --git a/packages/testing/code-health/README.md b/packages/testing/code-health/README.md new file mode 100644 index 00000000000..222de07adaa --- /dev/null +++ b/packages/testing/code-health/README.md @@ -0,0 +1,60 @@ +# @n8n/code-health + +Static analysis for monorepo dependency hygiene. Built on `@n8n/rules-engine`. + +## What it does + +Scans all `package.json` files across the monorepo and flags: + +- **Hardcoded catalog deps** — dependencies using a pinned version when `pnpm-workspace.yaml` already defines a catalog entry +- **Cross-package version drift** — the same dependency appearing in multiple packages with different versions + +## Usage + +```bash +# Build first +pnpm --filter=@n8n/code-health build + +# Run analysis (uses baseline if present) +node packages/testing/code-health/dist/cli.js + +# Show all violations (ignore baseline) +node packages/testing/code-health/dist/cli.js --ignore-baseline + +# Run a specific rule +node packages/testing/code-health/dist/cli.js --rule=catalog-violations + +# List available rules +node packages/testing/code-health/dist/cli.js rules +``` + +## Baseline + +The baseline (`.code-health-baseline.json` at repo root) snapshots current violations so only **new** violations fail the check. + +```bash +# Generate/update baseline +node packages/testing/code-health/dist/cli.js baseline + +# Commit it +git add .code-health-baseline.json +git commit -m "chore: update code-health baseline" +``` + +## Output + +All output is JSON. Exit code 1 if new violations are found, 0 if clean. + +```json +{ + "summary": { + "totalViolations": 3, + "byRule": { "catalog-violations": 3 }, + "bySeverity": { "error": 3, "warning": 0, "info": 0 } + } +} +``` + +## Adding rules + +Rules extend `BaseRule` from `@n8n/rules-engine`. See `src/rules/catalog-violations.rule.ts` for the pattern. Register new rules in `src/index.ts`. diff --git a/packages/testing/janitor/package.json b/packages/testing/janitor/package.json index c8167b48078..3f22618351a 100644 --- a/packages/testing/janitor/package.json +++ b/packages/testing/janitor/package.json @@ -39,7 +39,7 @@ "ts-morph": ">=20.0.0" }, "devDependencies": { - "@types/node": "^20.0.0", + "@types/node": "catalog:", "@vitest/coverage-v8": "catalog:", "ts-morph": "catalog:", "tsx": "catalog:",