@caoscompanybr/merlin 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (762) hide show
  1. package/.claude/CLAUDE.md +216 -0
  2. package/.claude/hooks/README-license-gate.md +45 -0
  3. package/.claude/hooks/auto-summarize.js +47 -0
  4. package/.claude/hooks/context-monitor.js +60 -0
  5. package/.claude/hooks/doc-sync.js +111 -0
  6. package/.claude/hooks/license-gate.cjs +59 -0
  7. package/.claude/hooks/session-reset.js +27 -0
  8. package/.claude/hooks/thoughts-indexer.js +80 -0
  9. package/.claude/rules/merlin-constitution.md +27 -0
  10. package/.merlin-core/commands/README.md +19 -0
  11. package/.merlin-core/commands/founder-mode.md +51 -0
  12. package/.merlin-core/commands/git/commit.md +35 -0
  13. package/.merlin-core/commands/git/describe-pr.md +43 -0
  14. package/.merlin-core/commands/git/safe-commit.md +182 -0
  15. package/.merlin-core/commands/implementation/implement-plan.md +129 -0
  16. package/.merlin-core/commands/implementation/oneshot.md +63 -0
  17. package/.merlin-core/commands/implementation/tdd.md +152 -0
  18. package/.merlin-core/commands/planning/create-plan.md +184 -0
  19. package/.merlin-core/commands/planning/iterate-plan.md +45 -0
  20. package/.merlin-core/commands/planning/validate-plan.md +48 -0
  21. package/.merlin-core/commands/research/analyze-issue.md +155 -0
  22. package/.merlin-core/commands/research/research-codebase.md +157 -0
  23. package/.merlin-core/commands/review/adversarial-review.md +112 -0
  24. package/.merlin-core/commands/review/check.md +91 -0
  25. package/.merlin-core/commands/review/debug.md +135 -0
  26. package/.merlin-core/commands/review/doubts.md +178 -0
  27. package/.merlin-core/commands/review/engineering-audit.md +87 -0
  28. package/.merlin-core/commands/review/local-review.md +48 -0
  29. package/.merlin-core/commands/review/verify-goals.md +83 -0
  30. package/.merlin-core/commands/session/capture-feedback.md +74 -0
  31. package/.merlin-core/commands/session/capture-learning.md +155 -0
  32. package/.merlin-core/commands/session/check-objectives.md +85 -0
  33. package/.merlin-core/commands/session/conclude.md +125 -0
  34. package/.merlin-core/commands/session/create-handoff.md +88 -0
  35. package/.merlin-core/commands/session/create-objective.md +111 -0
  36. package/.merlin-core/commands/session/create-process.md +105 -0
  37. package/.merlin-core/commands/session/create-reminder.md +86 -0
  38. package/.merlin-core/commands/session/fast-start.md +261 -0
  39. package/.merlin-core/commands/session/recall-learnings.md +79 -0
  40. package/.merlin-core/commands/session/recall-processes.md +74 -0
  41. package/.merlin-core/commands/session/resume-handoff.md +51 -0
  42. package/.merlin-core/commands/session/run-process.md +53 -0
  43. package/.merlin-core/commands/special/beauty.md +89 -0
  44. package/.merlin-core/commands/special/common-ground.md +114 -0
  45. package/.merlin-core/commands/special/elicit.md +98 -0
  46. package/.merlin-core/commands/special/party.md +66 -0
  47. package/.merlin-core/commands/special/scrape.md +78 -0
  48. package/.merlin-core/commands/special/skill-audit.md +128 -0
  49. package/.merlin-core/commands/special/start-here.md +132 -0
  50. package/.merlin-core/constitution.md +442 -0
  51. package/.merlin-core/core/README.md +19 -0
  52. package/.merlin-core/core/alkimia/README.md +20 -0
  53. package/.merlin-core/core/alkimia/context/context-tracker.js +209 -0
  54. package/.merlin-core/core/alkimia/domain/domain-loader.js +215 -0
  55. package/.merlin-core/core/alkimia/engine.js +284 -0
  56. package/.merlin-core/core/alkimia/layers/l0-constitution.js +47 -0
  57. package/.merlin-core/core/alkimia/layers/l1-global.js +58 -0
  58. package/.merlin-core/core/alkimia/layers/l2-agent.js +58 -0
  59. package/.merlin-core/core/alkimia/layers/l3-workflow.js +54 -0
  60. package/.merlin-core/core/alkimia/layers/l4-task.js +45 -0
  61. package/.merlin-core/core/alkimia/layers/l5-squad.js +161 -0
  62. package/.merlin-core/core/alkimia/layers/l6-skill.js +520 -0
  63. package/.merlin-core/core/alkimia/layers/l7-star-command.js +87 -0
  64. package/.merlin-core/core/alkimia/layers/layer-processor.js +78 -0
  65. package/.merlin-core/core/alkimia/mandate.js +46 -0
  66. package/.merlin-core/core/alkimia/memory/doc-sync.js +201 -0
  67. package/.merlin-core/core/alkimia/memory/document-sharder.js +272 -0
  68. package/.merlin-core/core/alkimia/memory/git-history-retriever.js +225 -0
  69. package/.merlin-core/core/alkimia/memory/memory-bridge.js +97 -0
  70. package/.merlin-core/core/alkimia/memory/session-analyzer.js +400 -0
  71. package/.merlin-core/core/alkimia/memory/thoughts-indexer.js +477 -0
  72. package/.merlin-core/core/alkimia/memory/thoughts-provider.js +603 -0
  73. package/.merlin-core/core/alkimia/output/formatter.js +464 -0
  74. package/.merlin-core/core/alkimia/security/content-sanitizer.js +140 -0
  75. package/.merlin-core/core/alkimia/skill-importer.js +440 -0
  76. package/.merlin-core/core/alkimia/squads/default/.synapse/manifest +17 -0
  77. package/.merlin-core/core/alkimia/utils/frontmatter.js +321 -0
  78. package/.merlin-core/core/alkimia/utils/tokens.js +24 -0
  79. package/.merlin-core/core/approval/README.md +16 -0
  80. package/.merlin-core/core/approval/approval-engine.js +380 -0
  81. package/.merlin-core/core/approval/channels/cli-channel.js +50 -0
  82. package/.merlin-core/core/config/README.md +17 -0
  83. package/.merlin-core/core/config/config-cache.js +182 -0
  84. package/.merlin-core/core/config/config-loader.js +279 -0
  85. package/.merlin-core/core/config/config-resolver.js +411 -0
  86. package/.merlin-core/core/config/env-interpolator.js +123 -0
  87. package/.merlin-core/core/config/merge-utils.js +102 -0
  88. package/.merlin-core/core/config/schemas/core-config.schema.json +41 -0
  89. package/.merlin-core/core/config/schemas/framework-config.schema.json +24 -0
  90. package/.merlin-core/core/config/schemas/local-config.schema.json +23 -0
  91. package/.merlin-core/core/config/schemas/project-config.schema.json +189 -0
  92. package/.merlin-core/core/docs-consistency.js +140 -0
  93. package/.merlin-core/core/events/event-bus.js +344 -0
  94. package/.merlin-core/core/events/hook-handler.js +419 -0
  95. package/.merlin-core/core/execution/README.md +17 -0
  96. package/.merlin-core/core/execution/attempt-journal.js +380 -0
  97. package/.merlin-core/core/execution/autonomous-build-loop.js +637 -0
  98. package/.merlin-core/core/execution/build-orchestrator.js +296 -0
  99. package/.merlin-core/core/execution/build-state-manager.js +196 -0
  100. package/.merlin-core/core/execution/context-injector.js +204 -0
  101. package/.merlin-core/core/execution/cron-engine.js +247 -0
  102. package/.merlin-core/core/execution/cron-expression.js +148 -0
  103. package/.merlin-core/core/execution/env-preflight.js +423 -0
  104. package/.merlin-core/core/execution/guardrail-engine.js +745 -0
  105. package/.merlin-core/core/execution/heartbeat-engine.js +198 -0
  106. package/.merlin-core/core/execution/model-router.js +282 -0
  107. package/.merlin-core/core/execution/parallel-executor.js +378 -0
  108. package/.merlin-core/core/execution/parallel-monitor.js +201 -0
  109. package/.merlin-core/core/execution/party-session.js +311 -0
  110. package/.merlin-core/core/execution/rate-limit-manager.js +152 -0
  111. package/.merlin-core/core/execution/result-aggregator.js +215 -0
  112. package/.merlin-core/core/execution/semantic-merge-engine.js +320 -0
  113. package/.merlin-core/core/execution/subagent-dispatcher.js +721 -0
  114. package/.merlin-core/core/execution/success-verifier.js +227 -0
  115. package/.merlin-core/core/execution/task-metadata.js +105 -0
  116. package/.merlin-core/core/execution/team-executor.js +195 -0
  117. package/.merlin-core/core/execution/two-tier-editor.js +290 -0
  118. package/.merlin-core/core/execution/version-snapshot.js +294 -0
  119. package/.merlin-core/core/execution/wave-executor.js +224 -0
  120. package/.merlin-core/core/health-check/health-engine.js +415 -0
  121. package/.merlin-core/core/licensing/activation.js +281 -0
  122. package/.merlin-core/core/licensing/crc.js +103 -0
  123. package/.merlin-core/core/licensing/entitlement.js +99 -0
  124. package/.merlin-core/core/licensing/fingerprint.js +104 -0
  125. package/.merlin-core/core/licensing/gate.js +133 -0
  126. package/.merlin-core/core/licensing/hmac.js +42 -0
  127. package/.merlin-core/core/licensing/key.js +144 -0
  128. package/.merlin-core/core/licensing/license.js +212 -0
  129. package/.merlin-core/core/mcp/README.md +16 -0
  130. package/.merlin-core/core/mcp/browser-capability.js +191 -0
  131. package/.merlin-core/core/mcp/capability-mapper.js +92 -0
  132. package/.merlin-core/core/mcp/mcp-connector.js +278 -0
  133. package/.merlin-core/core/mcp/mcp-registry.js +101 -0
  134. package/.merlin-core/core/orchestration/README.md +17 -0
  135. package/.merlin-core/core/orchestration/agent-invoker.js +456 -0
  136. package/.merlin-core/core/orchestration/condition-evaluator.js +250 -0
  137. package/.merlin-core/core/orchestration/decision-tree.js +192 -0
  138. package/.merlin-core/core/orchestration/executor-assignment.js +372 -0
  139. package/.merlin-core/core/orchestration/gate-evaluator.js +653 -0
  140. package/.merlin-core/core/orchestration/intent-classifier.js +579 -0
  141. package/.merlin-core/core/orchestration/lock-manager.js +308 -0
  142. package/.merlin-core/core/orchestration/master-orchestrator.js +363 -0
  143. package/.merlin-core/core/orchestration/phase-tool-masks.js +194 -0
  144. package/.merlin-core/core/orchestration/recovery-handler.js +402 -0
  145. package/.merlin-core/core/orchestration/reflect-checkpoint.js +431 -0
  146. package/.merlin-core/core/orchestration/session-state.js +430 -0
  147. package/.merlin-core/core/orchestration/skill-dispatcher.js +255 -0
  148. package/.merlin-core/core/orchestration/step-loader.js +226 -0
  149. package/.merlin-core/core/orchestration/workflow-executor.js +864 -0
  150. package/.merlin-core/core/process/executor.js +231 -0
  151. package/.merlin-core/core/process/process-file.js +50 -0
  152. package/.merlin-core/core/process/secret-scan.js +86 -0
  153. package/.merlin-core/core/process/signature.js +77 -0
  154. package/.merlin-core/core/quality-gates/README.md +17 -0
  155. package/.merlin-core/core/quality-gates/layer1-precommit.js +110 -0
  156. package/.merlin-core/core/quality-gates/layer2-pr-automation.js +116 -0
  157. package/.merlin-core/core/quality-gates/layer3-human-review.js +133 -0
  158. package/.merlin-core/core/registry/service-registry.js +140 -0
  159. package/.merlin-core/core-config.yaml +159 -0
  160. package/.merlin-core/development/README.md +17 -0
  161. package/.merlin-core/development/agents/README.md +16 -0
  162. package/.merlin-core/development/agents/analyst.md +214 -0
  163. package/.merlin-core/development/agents/architect.md +166 -0
  164. package/.merlin-core/development/agents/data-engineer.md +154 -0
  165. package/.merlin-core/development/agents/dev.md +203 -0
  166. package/.merlin-core/development/agents/devops.md +236 -0
  167. package/.merlin-core/development/agents/grimorio.md +125 -0
  168. package/.merlin-core/development/agents/merlin-master.md +173 -0
  169. package/.merlin-core/development/agents/meta.md +190 -0
  170. package/.merlin-core/development/agents/pm.md +145 -0
  171. package/.merlin-core/development/agents/po.md +172 -0
  172. package/.merlin-core/development/agents/qa.md +275 -0
  173. package/.merlin-core/development/agents/researcher.md +218 -0
  174. package/.merlin-core/development/agents/scout.md +179 -0
  175. package/.merlin-core/development/agents/sm.md +148 -0
  176. package/.merlin-core/development/agents/ux.md +169 -0
  177. package/.merlin-core/development/agents/web-researcher.md +203 -0
  178. package/.merlin-core/development/checklists/adversarial-review-checklist.md +70 -0
  179. package/.merlin-core/development/checklists/operations-ci-checklist.md +40 -0
  180. package/.merlin-core/development/checklists/operations-deploy-checklist.md +54 -0
  181. package/.merlin-core/development/checklists/operations-publish-checklist.md +47 -0
  182. package/.merlin-core/development/checklists/source-verification-checklist.md +38 -0
  183. package/.merlin-core/development/templates/HEARTBEAT-template.md +46 -0
  184. package/.merlin-core/development/templates/ears-requirements-template.md +93 -0
  185. package/.merlin-core/development/templates/handoff-template.md +50 -0
  186. package/.merlin-core/development/templates/prd-template.md +62 -0
  187. package/.merlin-core/development/templates/research-template.md +53 -0
  188. package/.merlin-core/development/templates/spec-template.md +84 -0
  189. package/.merlin-core/development/workflows/brownfield-discovery.yaml +166 -0
  190. package/.merlin-core/development/workflows/brownfield-service.yaml +52 -0
  191. package/.merlin-core/development/workflows/development-cycle.yaml +57 -0
  192. package/.merlin-core/development/workflows/epic-orchestration.yaml +47 -0
  193. package/.merlin-core/development/workflows/folloni-funnel.yaml +177 -0
  194. package/.merlin-core/development/workflows/greenfield-fullstack.yaml +167 -0
  195. package/.merlin-core/development/workflows/greenfield-service.yaml +56 -0
  196. package/.merlin-core/development/workflows/qa-loop.yaml +115 -0
  197. package/.merlin-core/development/workflows/spec-pipeline.yaml +185 -0
  198. package/.merlin-core/development/workflows/steps/folloni-01-research.yaml +35 -0
  199. package/.merlin-core/development/workflows/steps/folloni-02-architecture.yaml +41 -0
  200. package/.merlin-core/development/workflows/steps/folloni-03-implementation.yaml +52 -0
  201. package/.merlin-core/development/workflows/story-development-cycle.yaml +67 -0
  202. package/.merlin-core/docs/GUIDE.md +413 -0
  203. package/.merlin-core/docs/merlin-commands-guide-pt.md +183 -0
  204. package/.merlin-core/framework-config.yaml +148 -0
  205. package/.merlin-core/hooks/README.md +16 -0
  206. package/.merlin-core/hooks/precompact-memory-flush.js +69 -0
  207. package/.merlin-core/hooks/pretooluse-remote-approve.js +113 -0
  208. package/.merlin-core/hooks/spikes/spike-b-hook.js +70 -0
  209. package/.merlin-core/hooks/spikes/spike-b-stub.js +70 -0
  210. package/.merlin-core/index.js +91 -0
  211. package/.merlin-core/local-config.yaml.template +31 -0
  212. package/.merlin-core/mcp-servers/lsp-bridge/index.js +397 -0
  213. package/.merlin-core/modules/scraping/module.json +23 -0
  214. package/.merlin-core/project-config.yaml +89 -0
  215. package/.merlin-core/schemas/README.md +18 -0
  216. package/.merlin-core/schemas/agent-hook-schema.json +152 -0
  217. package/.merlin-core/schemas/agent-schema.json +31 -0
  218. package/.merlin-core/schemas/command-schema.json +18 -0
  219. package/.merlin-core/schemas/feedback-schema.json +36 -0
  220. package/.merlin-core/schemas/handoff-schema.json +19 -0
  221. package/.merlin-core/schemas/learning-schema.json +51 -0
  222. package/.merlin-core/schemas/module.schema.json +124 -0
  223. package/.merlin-core/schemas/must-haves-schema.json +95 -0
  224. package/.merlin-core/schemas/objective-schema.json +23 -0
  225. package/.merlin-core/schemas/plan-schema.json +20 -0
  226. package/.merlin-core/schemas/process-schema.json +82 -0
  227. package/.merlin-core/schemas/reminder-schema.json +20 -0
  228. package/.merlin-core/schemas/skill-eval-schema.json +92 -0
  229. package/.merlin-core/schemas/skill-schema.json +77 -0
  230. package/.merlin-core/schemas/workflow-schema.json +38 -0
  231. package/.merlin-core/skills/README.md +16 -0
  232. package/.merlin-core/skills/domain/azure-cloud/SKILL.md +211 -0
  233. package/.merlin-core/skills/domain/azure-cloud/references/appinsights-instrumentation.md +63 -0
  234. package/.merlin-core/skills/domain/azure-cloud/references/azure-compliance.md +99 -0
  235. package/.merlin-core/skills/domain/azure-cloud/references/azure-cost-optimization.md +419 -0
  236. package/.merlin-core/skills/domain/azure-cloud/references/azure-deploy.md +82 -0
  237. package/.merlin-core/skills/domain/azure-cloud/references/azure-diagnostics.md +130 -0
  238. package/.merlin-core/skills/domain/azure-cloud/references/azure-prepare.md +134 -0
  239. package/.merlin-core/skills/domain/azure-cloud/references/azure-quotas.md +290 -0
  240. package/.merlin-core/skills/domain/azure-cloud/references/azure-rbac.md +11 -0
  241. package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-lookup.md +97 -0
  242. package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-visualizer.md +178 -0
  243. package/.merlin-core/skills/domain/azure-cloud/references/azure-storage.md +91 -0
  244. package/.merlin-core/skills/domain/azure-cloud/references/azure-validate.md +58 -0
  245. package/.merlin-core/skills/domain/azure-cloud/references/entra-app-registration.md +192 -0
  246. package/.merlin-core/skills/domain/browser-automation/SKILL.md +311 -0
  247. package/.merlin-core/skills/domain/browser-automation/references/agent-browser-skill.md +632 -0
  248. package/.merlin-core/skills/domain/browser-automation/references/authentication.md +308 -0
  249. package/.merlin-core/skills/domain/browser-automation/references/commands.md +266 -0
  250. package/.merlin-core/skills/domain/browser-automation/references/profiling.md +120 -0
  251. package/.merlin-core/skills/domain/browser-automation/references/proxy-support.md +194 -0
  252. package/.merlin-core/skills/domain/browser-automation/references/session-management.md +194 -0
  253. package/.merlin-core/skills/domain/browser-automation/references/snapshot-refs.md +196 -0
  254. package/.merlin-core/skills/domain/browser-automation/references/video-recording.md +173 -0
  255. package/.merlin-core/skills/domain/browser-automation/templates/authenticated-session.sh +105 -0
  256. package/.merlin-core/skills/domain/browser-automation/templates/capture-workflow.sh +69 -0
  257. package/.merlin-core/skills/domain/browser-automation/templates/form-automation.sh +62 -0
  258. package/.merlin-core/skills/domain/digital-marketing/SKILL.md +292 -0
  259. package/.merlin-core/skills/domain/digital-marketing/references/content-strategy.md +320 -0
  260. package/.merlin-core/skills/domain/digital-marketing/references/copy-formats.md +298 -0
  261. package/.merlin-core/skills/domain/digital-marketing/references/copy-methodology.md +180 -0
  262. package/.merlin-core/skills/domain/digital-marketing/references/email-sequences.md +135 -0
  263. package/.merlin-core/skills/domain/digital-marketing/references/launch-strategy.md +213 -0
  264. package/.merlin-core/skills/domain/digital-marketing/references/pricing-strategy.md +160 -0
  265. package/.merlin-core/skills/domain/digital-marketing/references/programmatic-seo.md +237 -0
  266. package/.merlin-core/skills/domain/digital-marketing/references/revops-lifecycle.md +170 -0
  267. package/.merlin-core/skills/domain/digital-marketing/references/revops-operations.md +167 -0
  268. package/.merlin-core/skills/domain/digital-marketing/references/schema-markup.md +190 -0
  269. package/.merlin-core/skills/domain/digital-marketing/references/strategy-frameworks.md +324 -0
  270. package/.merlin-core/skills/domain/digital-marketing/references/traffic-management.md +350 -0
  271. package/.merlin-core/skills/domain/expo-native-ui/SKILL.md +348 -0
  272. package/.merlin-core/skills/domain/expo-native-ui/references/animations.md +220 -0
  273. package/.merlin-core/skills/domain/expo-native-ui/references/api-routes.md +361 -0
  274. package/.merlin-core/skills/domain/expo-native-ui/references/cicd-workflows.md +84 -0
  275. package/.merlin-core/skills/domain/expo-native-ui/references/controls.md +266 -0
  276. package/.merlin-core/skills/domain/expo-native-ui/references/data-fetching.md +553 -0
  277. package/.merlin-core/skills/domain/expo-native-ui/references/deployment-stores.md +1353 -0
  278. package/.merlin-core/skills/domain/expo-native-ui/references/deployment.md +183 -0
  279. package/.merlin-core/skills/domain/expo-native-ui/references/dev-client.md +166 -0
  280. package/.merlin-core/skills/domain/expo-native-ui/references/dom-components.md +410 -0
  281. package/.merlin-core/skills/domain/expo-native-ui/references/form-sheet.md +253 -0
  282. package/.merlin-core/skills/domain/expo-native-ui/references/gradients.md +117 -0
  283. package/.merlin-core/skills/domain/expo-native-ui/references/icons.md +218 -0
  284. package/.merlin-core/skills/domain/expo-native-ui/references/media.md +245 -0
  285. package/.merlin-core/skills/domain/expo-native-ui/references/platform-native.md +75 -0
  286. package/.merlin-core/skills/domain/expo-native-ui/references/route-structure.md +229 -0
  287. package/.merlin-core/skills/domain/expo-native-ui/references/search.md +249 -0
  288. package/.merlin-core/skills/domain/expo-native-ui/references/storage.md +121 -0
  289. package/.merlin-core/skills/domain/expo-native-ui/references/tabs.md +433 -0
  290. package/.merlin-core/skills/domain/expo-native-ui/references/tailwind-native.md +473 -0
  291. package/.merlin-core/skills/domain/expo-native-ui/references/toolbar-and-headers.md +284 -0
  292. package/.merlin-core/skills/domain/expo-native-ui/references/upgrading-guides.md +674 -0
  293. package/.merlin-core/skills/domain/expo-native-ui/references/upgrading.md +127 -0
  294. package/.merlin-core/skills/domain/expo-native-ui/references/visual-effects.md +199 -0
  295. package/.merlin-core/skills/domain/expo-native-ui/references/webgpu-three.md +605 -0
  296. package/.merlin-core/skills/domain/expo-native-ui/references/zoom-transitions.md +161 -0
  297. package/.merlin-core/skills/domain/marketing-ops/SKILL.md +117 -0
  298. package/.merlin-core/skills/domain/marketing-ops/references/_index.md +78 -0
  299. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/generative-tools.md +19 -0
  300. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/platform-specs.md +19 -0
  301. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative.md +251 -0
  302. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/ad-copy-templates.md +19 -0
  303. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/audience-targeting.md +19 -0
  304. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/conversion-tracking.md +19 -0
  305. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/platform-setup-checklists.md +19 -0
  306. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads.md +322 -0
  307. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-patterns.md +19 -0
  308. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-types.md +19 -0
  309. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/platform-ranking-factors.md +19 -0
  310. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo.md +388 -0
  311. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/apple-specs.md +19 -0
  312. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/benchmarks.md +19 -0
  313. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/google-play-specs.md +19 -0
  314. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/report-template.md +19 -0
  315. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/scoring-criteria.md +19 -0
  316. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso.md +316 -0
  317. package/.merlin-core/skills/domain/marketing-ops/references/acquire/co-marketing.md +305 -0
  318. package/.merlin-core/skills/domain/marketing-ops/references/acquire/community-marketing.md +169 -0
  319. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/templates.md +19 -0
  320. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/tool-reference.md +19 -0
  321. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling.md +442 -0
  322. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/content-architecture.md +19 -0
  323. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/templates.md +19 -0
  324. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors.md +281 -0
  325. package/.merlin-core/skills/domain/marketing-ops/references/acquire/content-strategy.md +16 -0
  326. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/directory-list.md +19 -0
  327. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/positioning-variations.md +19 -0
  328. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/submission-tracker-template.md +19 -0
  329. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions.md +396 -0
  330. package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools/references/tool-types.md +19 -0
  331. package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools.md +196 -0
  332. package/.merlin-core/skills/domain/marketing-ops/references/acquire/image/references/ai-image-prompting.md +19 -0
  333. package/.merlin-core/skills/domain/marketing-ops/references/acquire/image.md +352 -0
  334. package/.merlin-core/skills/domain/marketing-ops/references/acquire/launch.md +18 -0
  335. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/benchmarks.md +19 -0
  336. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/format-guide.md +19 -0
  337. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets.md +333 -0
  338. package/.merlin-core/skills/domain/marketing-ops/references/acquire/programmatic-seo.md +16 -0
  339. package/.merlin-core/skills/domain/marketing-ops/references/acquire/schema.md +16 -0
  340. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/ai-writing-detection.md +19 -0
  341. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/international-seo.md +19 -0
  342. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit.md +546 -0
  343. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/mermaid-templates.md +19 -0
  344. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/navigation-patterns.md +19 -0
  345. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/site-type-templates.md +19 -0
  346. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture.md +371 -0
  347. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platform-limits.md +19 -0
  348. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platforms.md +19 -0
  349. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/post-templates.md +19 -0
  350. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/reverse-engineering.md +19 -0
  351. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/short-form-video.md +19 -0
  352. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social.md +431 -0
  353. package/.merlin-core/skills/domain/marketing-ops/references/acquire/video/references/ai-video-prompting.md +19 -0
  354. package/.merlin-core/skills/domain/marketing-ops/references/acquire/video.md +353 -0
  355. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/sample-size-guide.md +19 -0
  356. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/test-templates.md +19 -0
  357. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing.md +379 -0
  358. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/event-library.md +19 -0
  359. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/ga4-implementation.md +19 -0
  360. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/gtm-implementation.md +19 -0
  361. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics.md +323 -0
  362. package/.merlin-core/skills/domain/marketing-ops/references/activate/copy-editing.md +18 -0
  363. package/.merlin-core/skills/domain/marketing-ops/references/activate/copywriting.md +18 -0
  364. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/experiments.md +19 -0
  365. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/form.md +19 -0
  366. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro.md +211 -0
  367. package/.merlin-core/skills/domain/marketing-ops/references/activate/emails.md +18 -0
  368. package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls/references/experiments.md +19 -0
  369. package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls.md +255 -0
  370. package/.merlin-core/skills/domain/marketing-ops/references/activate/popups.md +518 -0
  371. package/.merlin-core/skills/domain/marketing-ops/references/activate/pricing.md +18 -0
  372. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/deck-frameworks.md +19 -0
  373. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/demo-scripts.md +19 -0
  374. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/objection-library.md +19 -0
  375. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/one-pager-templates.md +19 -0
  376. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement.md +371 -0
  377. package/.merlin-core/skills/domain/marketing-ops/references/activate/signup.md +406 -0
  378. package/.merlin-core/skills/domain/marketing-ops/references/expand/co-marketing.md +18 -0
  379. package/.merlin-core/skills/domain/marketing-ops/references/expand/community-marketing.md +18 -0
  380. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/affiliate-programs.md +19 -0
  381. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/program-examples.md +19 -0
  382. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals.md +278 -0
  383. package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research/references/source-guides.md +425 -0
  384. package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research.md +284 -0
  385. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas/references/ideas-by-category.md +216 -0
  386. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas.md +188 -0
  387. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-psychology.md +532 -0
  388. package/.merlin-core/skills/domain/marketing-ops/references/foundation/product-marketing.md +276 -0
  389. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/cancel-flow-patterns.md +19 -0
  390. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/dunning-playbook.md +19 -0
  391. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention.md +442 -0
  392. package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding/references/experiments.md +19 -0
  393. package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding.md +243 -0
  394. package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-lifecycle.md +18 -0
  395. package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-operations.md +18 -0
  396. package/.merlin-core/skills/domain/n8n-automation/SKILL.md +149 -0
  397. package/.merlin-core/skills/domain/n8n-automation/references/code-javascript.md +3744 -0
  398. package/.merlin-core/skills/domain/n8n-automation/references/code-python.md +3293 -0
  399. package/.merlin-core/skills/domain/n8n-automation/references/expression-syntax.md +1662 -0
  400. package/.merlin-core/skills/domain/n8n-automation/references/mcp-tools-expert.md +2111 -0
  401. package/.merlin-core/skills/domain/n8n-automation/references/node-configuration.md +2523 -0
  402. package/.merlin-core/skills/domain/n8n-automation/references/validation-expert.md +2491 -0
  403. package/.merlin-core/skills/domain/n8n-automation/references/workflow-patterns.md +4624 -0
  404. package/.merlin-core/skills/domain/ops-manual/SKILL.md +225 -0
  405. package/.merlin-core/skills/domain/ops-manual/references/elicitation-questions.md +141 -0
  406. package/.merlin-core/skills/domain/ops-manual/references/external-skills-registry.md +63 -0
  407. package/.merlin-core/skills/domain/ops-manual/references/operations-template.yaml +132 -0
  408. package/.merlin-core/skills/domain/remotion-best-practices/SKILL.md +99 -0
  409. package/.merlin-core/skills/domain/remotion-best-practices/rules/3d.md +86 -0
  410. package/.merlin-core/skills/domain/remotion-best-practices/rules/animations.md +27 -0
  411. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  412. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  413. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  414. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets.md +78 -0
  415. package/.merlin-core/skills/domain/remotion-best-practices/rules/audio.md +172 -0
  416. package/.merlin-core/skills/domain/remotion-best-practices/rules/calculate-metadata.md +131 -0
  417. package/.merlin-core/skills/domain/remotion-best-practices/rules/can-decode.md +75 -0
  418. package/.merlin-core/skills/domain/remotion-best-practices/rules/charts.md +68 -0
  419. package/.merlin-core/skills/domain/remotion-best-practices/rules/compositions.md +154 -0
  420. package/.merlin-core/skills/domain/remotion-best-practices/rules/display-captions.md +126 -0
  421. package/.merlin-core/skills/domain/remotion-best-practices/rules/extract-frames.md +229 -0
  422. package/.merlin-core/skills/domain/remotion-best-practices/rules/fonts.md +152 -0
  423. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-audio-duration.md +58 -0
  424. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  425. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-duration.md +58 -0
  426. package/.merlin-core/skills/domain/remotion-best-practices/rules/gifs.md +144 -0
  427. package/.merlin-core/skills/domain/remotion-best-practices/rules/images.md +134 -0
  428. package/.merlin-core/skills/domain/remotion-best-practices/rules/import-srt-captions.md +67 -0
  429. package/.merlin-core/skills/domain/remotion-best-practices/rules/lottie.md +70 -0
  430. package/.merlin-core/skills/domain/remotion-best-practices/rules/maps.md +414 -0
  431. package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  432. package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-text.md +143 -0
  433. package/.merlin-core/skills/domain/remotion-best-practices/rules/parameters.md +109 -0
  434. package/.merlin-core/skills/domain/remotion-best-practices/rules/sequencing.md +118 -0
  435. package/.merlin-core/skills/domain/remotion-best-practices/rules/tailwind.md +11 -0
  436. package/.merlin-core/skills/domain/remotion-best-practices/rules/text-animations.md +20 -0
  437. package/.merlin-core/skills/domain/remotion-best-practices/rules/timing.md +179 -0
  438. package/.merlin-core/skills/domain/remotion-best-practices/rules/transcribe-captions.md +19 -0
  439. package/.merlin-core/skills/domain/remotion-best-practices/rules/transitions.md +137 -0
  440. package/.merlin-core/skills/domain/remotion-best-practices/rules/transparent-videos.md +106 -0
  441. package/.merlin-core/skills/domain/remotion-best-practices/rules/trimming.md +51 -0
  442. package/.merlin-core/skills/domain/remotion-best-practices/rules/videos.md +171 -0
  443. package/.merlin-core/skills/domain/resend-email/SKILL.md +377 -0
  444. package/.merlin-core/skills/general/adversarial-review/SKILL.md +144 -0
  445. package/.merlin-core/skills/general/api-design/SKILL.md +513 -0
  446. package/.merlin-core/skills/general/apify-scrape/SKILL.md +137 -0
  447. package/.merlin-core/skills/general/apify-scrape/scripts/apify-scrape.sh +68 -0
  448. package/.merlin-core/skills/general/backup/SKILL.md +87 -0
  449. package/.merlin-core/skills/general/blkskrn/SKILL.md +392 -0
  450. package/.merlin-core/skills/general/blkskrn/references/animation-patterns.md +521 -0
  451. package/.merlin-core/skills/general/blkskrn/references/design-system.md +637 -0
  452. package/.merlin-core/skills/general/blkskrn/references/html-templates.md +440 -0
  453. package/.merlin-core/skills/general/blkskrn/references/presenter-template.md +45 -0
  454. package/.merlin-core/skills/general/blkskrn/references/slide-types.md +424 -0
  455. package/.merlin-core/skills/general/blkskrn/scripts/canvas-manager.js +502 -0
  456. package/.merlin-core/skills/general/blkskrn/scripts/presenter.js +90 -0
  457. package/.merlin-core/skills/general/blkskrn/templates/presenter.html +273 -0
  458. package/.merlin-core/skills/general/blkskrn/templates/slide-base.html +277 -0
  459. package/.merlin-core/skills/general/blkskrn/templates/viewer.html +165 -0
  460. package/.merlin-core/skills/general/browser-takeover/SKILL.md +53 -0
  461. package/.merlin-core/skills/general/claude-api/SKILL.md +90 -0
  462. package/.merlin-core/skills/general/code-javascript/SKILL.md +268 -0
  463. package/.merlin-core/skills/general/code-python/SKILL.md +424 -0
  464. package/.merlin-core/skills/general/code-style/SKILL.md +97 -0
  465. package/.merlin-core/skills/general/code-typescript/SKILL.md +361 -0
  466. package/.merlin-core/skills/general/cold-email/SKILL.md +164 -0
  467. package/.merlin-core/skills/general/cold-email/references/benchmarks.md +18 -0
  468. package/.merlin-core/skills/general/cold-email/references/follow-up-sequences.md +18 -0
  469. package/.merlin-core/skills/general/cold-email/references/frameworks.md +18 -0
  470. package/.merlin-core/skills/general/cold-email/references/personalization.md +18 -0
  471. package/.merlin-core/skills/general/cold-email/references/subject-lines.md +18 -0
  472. package/.merlin-core/skills/general/container-security/SKILL.md +462 -0
  473. package/.merlin-core/skills/general/context-management/SKILL.md +79 -0
  474. package/.merlin-core/skills/general/copy-editing/SKILL.md +501 -0
  475. package/.merlin-core/skills/general/copy-editing/references/checklist.md +18 -0
  476. package/.merlin-core/skills/general/copy-editing/references/content-refresh.md +18 -0
  477. package/.merlin-core/skills/general/copy-editing/references/plain-english-alternatives.md +18 -0
  478. package/.merlin-core/skills/general/copywriting/SKILL.md +294 -0
  479. package/.merlin-core/skills/general/copywriting/references/copy-frameworks.md +392 -0
  480. package/.merlin-core/skills/general/copywriting/references/natural-transitions.md +276 -0
  481. package/.merlin-core/skills/general/database/SKILL.md +561 -0
  482. package/.merlin-core/skills/general/database/references/postgres-concurrency.md +182 -0
  483. package/.merlin-core/skills/general/database/references/postgres-connections.md +97 -0
  484. package/.merlin-core/skills/general/database/references/postgres-data-patterns.md +159 -0
  485. package/.merlin-core/skills/general/database/references/postgres-monitoring.md +136 -0
  486. package/.merlin-core/skills/general/database/references/postgres-rls.md +140 -0
  487. package/.merlin-core/skills/general/database-provision/SKILL.md +56 -0
  488. package/.merlin-core/skills/general/deploy/SKILL.md +65 -0
  489. package/.merlin-core/skills/general/design-inspiration/SKILL.md +146 -0
  490. package/.merlin-core/skills/general/design-palette/SKILL.md +99 -0
  491. package/.merlin-core/skills/general/design-palette/references/full-palettes.md +144 -0
  492. package/.merlin-core/skills/general/design-system/SKILL.md +94 -0
  493. package/.merlin-core/skills/general/design-typography/SKILL.md +115 -0
  494. package/.merlin-core/skills/general/design-typography/references/full-pairings.md +144 -0
  495. package/.merlin-core/skills/general/design-ux-patterns/SKILL.md +155 -0
  496. package/.merlin-core/skills/general/design-ux-patterns/references/charts-data-guidelines.md +197 -0
  497. package/.merlin-core/skills/general/design-ux-patterns/references/landing-patterns.md +199 -0
  498. package/.merlin-core/skills/general/design-ux-patterns/references/professional-ui-checklist.md +56 -0
  499. package/.merlin-core/skills/general/design-ux-patterns/references/style-catalog.md +89 -0
  500. package/.merlin-core/skills/general/design-ux-patterns/references/ux-guidelines.md +837 -0
  501. package/.merlin-core/skills/general/discover-cloud/SKILL.md +108 -0
  502. package/.merlin-core/skills/general/doc-sync/SKILL.md +52 -0
  503. package/.merlin-core/skills/general/document-sharding/SKILL.md +53 -0
  504. package/.merlin-core/skills/general/docx/SKILL.md +418 -0
  505. package/.merlin-core/skills/general/docx/references/windows-setup.md +27 -0
  506. package/.merlin-core/skills/general/docx/scripts/__init__.py +1 -0
  507. package/.merlin-core/skills/general/docx/scripts/accept_changes.py +135 -0
  508. package/.merlin-core/skills/general/docx/scripts/comment.py +318 -0
  509. package/.merlin-core/skills/general/docx/scripts/office/__init__.py +0 -0
  510. package/.merlin-core/skills/general/docx/scripts/office/helpers/__init__.py +0 -0
  511. package/.merlin-core/skills/general/docx/scripts/office/helpers/merge_runs.py +199 -0
  512. package/.merlin-core/skills/general/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  513. package/.merlin-core/skills/general/docx/scripts/office/pack.py +159 -0
  514. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  515. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  516. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  517. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  518. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  519. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  520. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  521. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  522. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  523. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  524. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  525. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  526. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  527. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  528. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  529. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  530. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  531. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  532. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  533. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  534. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  535. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  536. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  537. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  538. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  539. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  540. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  541. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  542. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  543. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  544. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  545. package/.merlin-core/skills/general/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  546. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  547. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  548. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  549. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  550. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  551. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  552. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  553. package/.merlin-core/skills/general/docx/scripts/office/soffice.py +183 -0
  554. package/.merlin-core/skills/general/docx/scripts/office/unpack.py +132 -0
  555. package/.merlin-core/skills/general/docx/scripts/office/validate.py +111 -0
  556. package/.merlin-core/skills/general/docx/scripts/office/validators/__init__.py +15 -0
  557. package/.merlin-core/skills/general/docx/scripts/office/validators/base.py +847 -0
  558. package/.merlin-core/skills/general/docx/scripts/office/validators/docx.py +446 -0
  559. package/.merlin-core/skills/general/docx/scripts/office/validators/pptx.py +275 -0
  560. package/.merlin-core/skills/general/docx/scripts/office/validators/redlining.py +247 -0
  561. package/.merlin-core/skills/general/docx/scripts/templates/comments.xml +3 -0
  562. package/.merlin-core/skills/general/docx/scripts/templates/commentsExtended.xml +3 -0
  563. package/.merlin-core/skills/general/docx/scripts/templates/commentsExtensible.xml +3 -0
  564. package/.merlin-core/skills/general/docx/scripts/templates/commentsIds.xml +3 -0
  565. package/.merlin-core/skills/general/docx/scripts/templates/people.xml +3 -0
  566. package/.merlin-core/skills/general/elicitation/SKILL.md +188 -0
  567. package/.merlin-core/skills/general/engineering-audit/SKILL.md +122 -0
  568. package/.merlin-core/skills/general/find-and-edit/SKILL.md +102 -0
  569. package/.merlin-core/skills/general/first-party-docs/SKILL.md +51 -0
  570. package/.merlin-core/skills/general/frontend-design/SKILL.md +204 -0
  571. package/.merlin-core/skills/general/guardrails/SKILL.md +144 -0
  572. package/.merlin-core/skills/general/image-gen/SKILL.md +49 -0
  573. package/.merlin-core/skills/general/learning-capture/SKILL.md +192 -0
  574. package/.merlin-core/skills/general/lgpd-compliance-audit/SKILL.md +448 -0
  575. package/.merlin-core/skills/general/load-testing/SKILL.md +114 -0
  576. package/.merlin-core/skills/general/load-testing/docker/Dockerfile.dashboard +21 -0
  577. package/.merlin-core/skills/general/load-testing/docker/docker-compose.locust.yml +39 -0
  578. package/.merlin-core/skills/general/load-testing/requirements.txt +1 -0
  579. package/.merlin-core/skills/general/load-testing/scripts/compare_baseline.py +172 -0
  580. package/.merlin-core/skills/general/load-testing/scripts/run_local.py +245 -0
  581. package/.merlin-core/skills/general/load-testing/templates/load_shape_stepped.py +35 -0
  582. package/.merlin-core/skills/general/load-testing/templates/locustfile_dashboard.py +47 -0
  583. package/.merlin-core/skills/general/load-testing/templates/threshold_hook.py +36 -0
  584. package/.merlin-core/skills/general/mage-beauty/SKILL.md +89 -0
  585. package/.merlin-core/skills/general/mage-beauty/references/anti-patterns.md +148 -0
  586. package/.merlin-core/skills/general/mage-beauty/references/color-and-contrast.md +87 -0
  587. package/.merlin-core/skills/general/mage-beauty/references/interaction-design.md +99 -0
  588. package/.merlin-core/skills/general/mage-beauty/references/motion-design.md +90 -0
  589. package/.merlin-core/skills/general/mage-beauty/references/remotion-bridge.md +187 -0
  590. package/.merlin-core/skills/general/mage-beauty/references/responsive-and-multi-format.md +98 -0
  591. package/.merlin-core/skills/general/mage-beauty/references/spatial-design.md +88 -0
  592. package/.merlin-core/skills/general/mage-beauty/references/typography.md +60 -0
  593. package/.merlin-core/skills/general/mage-beauty/references/verb-adapt.md +102 -0
  594. package/.merlin-core/skills/general/mage-beauty/references/verb-animate.md +97 -0
  595. package/.merlin-core/skills/general/mage-beauty/references/verb-audit.md +99 -0
  596. package/.merlin-core/skills/general/mage-beauty/references/verb-bolder.md +94 -0
  597. package/.merlin-core/skills/general/mage-beauty/references/verb-cinematic.md +128 -0
  598. package/.merlin-core/skills/general/mage-beauty/references/verb-clarify.md +107 -0
  599. package/.merlin-core/skills/general/mage-beauty/references/verb-colorize.md +106 -0
  600. package/.merlin-core/skills/general/mage-beauty/references/verb-critique.md +88 -0
  601. package/.merlin-core/skills/general/mage-beauty/references/verb-delight.md +98 -0
  602. package/.merlin-core/skills/general/mage-beauty/references/verb-distill.md +97 -0
  603. package/.merlin-core/skills/general/mage-beauty/references/verb-harden.md +79 -0
  604. package/.merlin-core/skills/general/mage-beauty/references/verb-layout.md +104 -0
  605. package/.merlin-core/skills/general/mage-beauty/references/verb-onboard.md +98 -0
  606. package/.merlin-core/skills/general/mage-beauty/references/verb-optimize.md +124 -0
  607. package/.merlin-core/skills/general/mage-beauty/references/verb-overdrive.md +105 -0
  608. package/.merlin-core/skills/general/mage-beauty/references/verb-polish.md +91 -0
  609. package/.merlin-core/skills/general/mage-beauty/references/verb-quieter.md +95 -0
  610. package/.merlin-core/skills/general/mage-beauty/references/verb-rebrand.md +127 -0
  611. package/.merlin-core/skills/general/mage-beauty/references/verb-shape.md +160 -0
  612. package/.merlin-core/skills/general/mage-beauty/references/verb-typeset.md +109 -0
  613. package/.merlin-core/skills/general/mage-beauty/references/voice-and-microcopy.md +137 -0
  614. package/.merlin-core/skills/general/mcp-builder/SKILL.md +92 -0
  615. package/.merlin-core/skills/general/network-debug/SKILL.md +51 -0
  616. package/.merlin-core/skills/general/next-best-practices/SKILL.md +177 -0
  617. package/.merlin-core/skills/general/next-best-practices/references/async-patterns.md +87 -0
  618. package/.merlin-core/skills/general/next-best-practices/references/bundling.md +182 -0
  619. package/.merlin-core/skills/general/next-best-practices/references/data-patterns.md +306 -0
  620. package/.merlin-core/skills/general/next-best-practices/references/debug-tricks.md +125 -0
  621. package/.merlin-core/skills/general/next-best-practices/references/directives.md +74 -0
  622. package/.merlin-core/skills/general/next-best-practices/references/error-handling.md +232 -0
  623. package/.merlin-core/skills/general/next-best-practices/references/file-conventions.md +141 -0
  624. package/.merlin-core/skills/general/next-best-practices/references/font.md +257 -0
  625. package/.merlin-core/skills/general/next-best-practices/references/functions.md +108 -0
  626. package/.merlin-core/skills/general/next-best-practices/references/hydration-error.md +88 -0
  627. package/.merlin-core/skills/general/next-best-practices/references/image.md +179 -0
  628. package/.merlin-core/skills/general/next-best-practices/references/metadata.md +296 -0
  629. package/.merlin-core/skills/general/next-best-practices/references/parallel-routes.md +298 -0
  630. package/.merlin-core/skills/general/next-best-practices/references/route-handlers.md +146 -0
  631. package/.merlin-core/skills/general/next-best-practices/references/rsc-boundaries.md +164 -0
  632. package/.merlin-core/skills/general/next-best-practices/references/runtime-selection.md +40 -0
  633. package/.merlin-core/skills/general/next-best-practices/references/scripts.md +141 -0
  634. package/.merlin-core/skills/general/next-best-practices/references/self-hosting.md +384 -0
  635. package/.merlin-core/skills/general/next-best-practices/references/suspense-boundaries.md +67 -0
  636. package/.merlin-core/skills/general/next-steps/SKILL.md +43 -0
  637. package/.merlin-core/skills/general/party-mode/SKILL.md +57 -0
  638. package/.merlin-core/skills/general/pdf/SKILL.md +298 -0
  639. package/.merlin-core/skills/general/pdf/references/forms.md +312 -0
  640. package/.merlin-core/skills/general/pdf/references/reference.md +640 -0
  641. package/.merlin-core/skills/general/pdf/references/windows-setup.md +40 -0
  642. package/.merlin-core/skills/general/pdf/scripts/check_bounding_boxes.py +65 -0
  643. package/.merlin-core/skills/general/pdf/scripts/check_fillable_fields.py +11 -0
  644. package/.merlin-core/skills/general/pdf/scripts/convert_pdf_to_images.py +33 -0
  645. package/.merlin-core/skills/general/pdf/scripts/create_validation_image.py +37 -0
  646. package/.merlin-core/skills/general/pdf/scripts/extract_form_field_info.py +122 -0
  647. package/.merlin-core/skills/general/pdf/scripts/extract_form_structure.py +115 -0
  648. package/.merlin-core/skills/general/pdf/scripts/fill_fillable_fields.py +98 -0
  649. package/.merlin-core/skills/general/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  650. package/.merlin-core/skills/general/pptx/SKILL.md +133 -0
  651. package/.merlin-core/skills/general/pptx/references/editing.md +213 -0
  652. package/.merlin-core/skills/general/pptx/references/pptxgenjs.md +581 -0
  653. package/.merlin-core/skills/general/pptx/references/windows-setup.md +27 -0
  654. package/.merlin-core/skills/general/pptx/scripts/__init__.py +0 -0
  655. package/.merlin-core/skills/general/pptx/scripts/add_slide.py +195 -0
  656. package/.merlin-core/skills/general/pptx/scripts/clean.py +286 -0
  657. package/.merlin-core/skills/general/pptx/scripts/thumbnail.py +289 -0
  658. package/.merlin-core/skills/general/property-testing/SKILL.md +214 -0
  659. package/.merlin-core/skills/general/purge-leaked-secret/SKILL.md +383 -0
  660. package/.merlin-core/skills/general/reflection/SKILL.md +100 -0
  661. package/.merlin-core/skills/general/secret-safe-commit/SKILL.md +246 -0
  662. package/.merlin-core/skills/general/secret-safe-commit/templates/.gitleaks.toml +91 -0
  663. package/.merlin-core/skills/general/secret-safe-commit/templates/.pre-commit-config.yaml +57 -0
  664. package/.merlin-core/skills/general/secret-safe-commit/templates/secret-scan.yml +48 -0
  665. package/.merlin-core/skills/general/semantic-search/SKILL.md +79 -0
  666. package/.merlin-core/skills/general/skill-creator/SKILL.md +342 -0
  667. package/.merlin-core/skills/general/skill-creator/agents/analyzer.md +283 -0
  668. package/.merlin-core/skills/general/skill-creator/agents/comparator.md +211 -0
  669. package/.merlin-core/skills/general/skill-creator/agents/grader.md +227 -0
  670. package/.merlin-core/skills/general/skill-creator/assets/eval_review.html +146 -0
  671. package/.merlin-core/skills/general/skill-creator/eval-viewer/generate_review.py +471 -0
  672. package/.merlin-core/skills/general/skill-creator/eval-viewer/viewer.html +1325 -0
  673. package/.merlin-core/skills/general/skill-creator/references/schemas.md +439 -0
  674. package/.merlin-core/skills/general/skill-creator/scripts/__init__.py +0 -0
  675. package/.merlin-core/skills/general/skill-creator/scripts/aggregate_benchmark.py +401 -0
  676. package/.merlin-core/skills/general/skill-creator/scripts/generate_report.py +326 -0
  677. package/.merlin-core/skills/general/skill-creator/scripts/improve_description.py +247 -0
  678. package/.merlin-core/skills/general/skill-creator/scripts/package_skill.py +136 -0
  679. package/.merlin-core/skills/general/skill-creator/scripts/quick_validate.py +103 -0
  680. package/.merlin-core/skills/general/skill-creator/scripts/run_eval.py +310 -0
  681. package/.merlin-core/skills/general/skill-creator/scripts/run_loop.py +328 -0
  682. package/.merlin-core/skills/general/skill-creator/scripts/utils.py +47 -0
  683. package/.merlin-core/skills/general/start-here/SKILL.md +63 -0
  684. package/.merlin-core/skills/general/start-here/recipes.json +758 -0
  685. package/.merlin-core/skills/general/start-here/recipes.schema.json +57 -0
  686. package/.merlin-core/skills/general/static-analysis/SKILL.md +151 -0
  687. package/.merlin-core/skills/general/tailwind-design-system/SKILL.md +201 -0
  688. package/.merlin-core/skills/general/tailwind-design-system/references/advanced-v4.md +152 -0
  689. package/.merlin-core/skills/general/tailwind-design-system/references/component-patterns.md +353 -0
  690. package/.merlin-core/skills/general/teach-method/SKILL.md +86 -0
  691. package/.merlin-core/skills/general/team-execution/SKILL.md +67 -0
  692. package/.merlin-core/skills/general/testing/SKILL.md +412 -0
  693. package/.merlin-core/skills/general/token-economy/SKILL.md +55 -0
  694. package/.merlin-core/skills/general/vps-security-hardening/SKILL.md +406 -0
  695. package/.merlin-core/skills/general/web-quality/SKILL.md +180 -0
  696. package/.merlin-core/skills/general/webapp-testing/SKILL.md +153 -0
  697. package/.merlin-core/skills/general/webapp-testing/scripts/screenshot_compare.py +72 -0
  698. package/.merlin-core/skills/general/webapp-testing/scripts/with_server.py +103 -0
  699. package/.merlin-core/skills/general/xlsx/SKILL.md +167 -0
  700. package/.merlin-core/skills/general/xlsx/references/nodejs-sheetjs-styled-reports.md +141 -0
  701. package/.merlin-core/skills/general/xlsx/references/windows-setup.md +17 -0
  702. package/.merlin-core/skills/general/xlsx/scripts/recalc.py +184 -0
  703. package/.merlin-core/skills/general/xlsx/scripts/styled-report.js +130 -0
  704. package/.merlin-core/skills/general/yolo-mode/SKILL.md +60 -0
  705. package/.merlin-core/skills/general/youtube-transcript/SKILL.md +177 -0
  706. package/.merlin-core/skills/general/youtube-transcript/scripts/fetch_transcript.py +188 -0
  707. package/.merlin-core/skills/general/youtube-transcript/scripts/gladia_transcribe.mjs +230 -0
  708. package/.merlin-core/tools/commands/activate.js +72 -0
  709. package/.merlin-core/tools/commands/archive-thoughts.js +181 -0
  710. package/.merlin-core/tools/commands/backup.js +156 -0
  711. package/.merlin-core/tools/commands/certify-process.js +196 -0
  712. package/.merlin-core/tools/commands/convert.js +87 -0
  713. package/.merlin-core/tools/commands/cron.js +147 -0
  714. package/.merlin-core/tools/commands/disable.js +73 -0
  715. package/.merlin-core/tools/commands/doc-sync.js +127 -0
  716. package/.merlin-core/tools/commands/eval-skill.js +193 -0
  717. package/.merlin-core/tools/commands/frontmatter.js +49 -0
  718. package/.merlin-core/tools/commands/heartbeat.js +43 -0
  719. package/.merlin-core/tools/commands/index-thoughts.js +35 -0
  720. package/.merlin-core/tools/commands/install-remote-approve.js +184 -0
  721. package/.merlin-core/tools/commands/install.js +81 -0
  722. package/.merlin-core/tools/commands/lib/__verify__/diff-reports.js +170 -0
  723. package/.merlin-core/tools/commands/lib/fs-safe.js +186 -0
  724. package/.merlin-core/tools/commands/lib/preflight.js +607 -0
  725. package/.merlin-core/tools/commands/lib/preserve.js +232 -0
  726. package/.merlin-core/tools/commands/lib/project-config.template.yaml +69 -0
  727. package/.merlin-core/tools/commands/lib/report.js +231 -0
  728. package/.merlin-core/tools/commands/lib/settings-merge.js +134 -0
  729. package/.merlin-core/tools/commands/license.js +52 -0
  730. package/.merlin-core/tools/commands/list.js +125 -0
  731. package/.merlin-core/tools/commands/migrate-alkimia.js +271 -0
  732. package/.merlin-core/tools/commands/modules.js +68 -0
  733. package/.merlin-core/tools/commands/provision.js +83 -0
  734. package/.merlin-core/tools/commands/prune-feedback.js +114 -0
  735. package/.merlin-core/tools/commands/run-process.js +28 -0
  736. package/.merlin-core/tools/commands/state.js +79 -0
  737. package/.merlin-core/tools/commands/sync-bridges.js +197 -0
  738. package/.merlin-core/tools/commands/upgrade.js +1135 -0
  739. package/.merlin-core/tools/commands/validate-recipes.js +218 -0
  740. package/.merlin-core/tools/commands/validate.js +159 -0
  741. package/.merlin-core/tools/commands/yolo.js +82 -0
  742. package/.merlin-core/tools/compose-rules.mjs +179 -0
  743. package/.merlin-core/tools/disable-module.mjs +150 -0
  744. package/.merlin-core/tools/lib/deployer.mjs +131 -0
  745. package/.merlin-core/tools/lib/modules-activation.mjs +225 -0
  746. package/.merlin-core/tools/merlin-tools.js +153 -0
  747. package/.merlin-core/tools/migrate-frontmatter-v3.js +192 -0
  748. package/.merlin-core/tools/modules-catalog.mjs +174 -0
  749. package/.merlin-core/tools/provision-module.mjs +191 -0
  750. package/.merlin-core/tools/verify-module.mjs +99 -0
  751. package/.merlin-core/tools/vps-security-audit.sh +234 -0
  752. package/INSTALL.md +312 -0
  753. package/LICENSE +118 -0
  754. package/PRIVACY-LICENSING.md +65 -0
  755. package/README.md +391 -0
  756. package/bin/README.md +15 -0
  757. package/bin/convert-to-merlin.sh +109 -0
  758. package/bin/fleet-patch-hooks.sh +144 -0
  759. package/bin/fleet-patch-v3-fixes.sh +127 -0
  760. package/bin/merlin-init.js +232 -0
  761. package/bin/merlin.js +321 -0
  762. package/package.json +127 -0
@@ -0,0 +1,2491 @@
1
+ <!-- Adapted from czlonkowski/n8n-skills (MIT). Source files: SKILL.md, ERROR_CATALOG.md, FALSE_POSITIVES.md -->
2
+
3
+ # n8n Validation Expert
4
+
5
+ Expert guide for interpreting and fixing n8n validation errors.
6
+
7
+ ---
8
+
9
+ ## Validation Philosophy
10
+
11
+ **Validate early, validate often**
12
+
13
+ Validation is typically iterative:
14
+
15
+ - Expect validation feedback loops
16
+ - Usually 2-3 validate -> fix cycles
17
+ - Average: 23s thinking about errors, 58s fixing them
18
+
19
+ **Key insight**: Validation is an iterative process, not one-shot!
20
+
21
+ ---
22
+
23
+ ## Error Severity Levels
24
+
25
+ ### 1. Errors (Must Fix)
26
+
27
+ **Blocks workflow execution** - Must be resolved before activation
28
+
29
+ **Types**:
30
+
31
+ - `missing_required` - Required field not provided
32
+ - `invalid_value` - Value doesn't match allowed options
33
+ - `type_mismatch` - Wrong data type (string instead of number)
34
+ - `invalid_reference` - Referenced node doesn't exist
35
+ - `invalid_expression` - Expression syntax error
36
+
37
+ **Example**:
38
+
39
+ ```json
40
+ {
41
+ "type": "missing_required",
42
+ "property": "channel",
43
+ "message": "Channel name is required",
44
+ "fix": "Provide a channel name (lowercase, no spaces, 1-80 characters)"
45
+ }
46
+ ```
47
+
48
+ ### 2. Warnings (Should Fix)
49
+
50
+ **Doesn't block execution** - Workflow can be activated but may have issues
51
+
52
+ **Types**:
53
+
54
+ - `best_practice` - Recommended but not required
55
+ - `deprecated` - Using old API/feature
56
+ - `performance` - Potential performance issue
57
+
58
+ **Example**:
59
+
60
+ ```json
61
+ {
62
+ "type": "best_practice",
63
+ "property": "errorHandling",
64
+ "message": "Slack API can have rate limits",
65
+ "suggestion": "Add onError: 'continueRegularOutput' with retryOnFail"
66
+ }
67
+ ```
68
+
69
+ ### 3. Suggestions (Optional)
70
+
71
+ **Nice to have** - Improvements that could enhance workflow
72
+
73
+ **Types**:
74
+
75
+ - `optimization` - Could be more efficient
76
+ - `alternative` - Better way to achieve same result
77
+
78
+ ---
79
+
80
+ ## The Validation Loop
81
+
82
+ ### Pattern from Telemetry
83
+
84
+ **7,841 occurrences** of this pattern:
85
+
86
+ ```
87
+ 1. Configure node
88
+ |
89
+ 2. validate_node (23 seconds thinking about errors)
90
+ |
91
+ 3. Read error messages carefully
92
+ |
93
+ 4. Fix errors
94
+ |
95
+ 5. validate_node again (58 seconds fixing)
96
+ |
97
+ 6. Repeat until valid (usually 2-3 iterations)
98
+ ```
99
+
100
+ > **Cross-reference**: See [mcp-tools-expert.md](mcp-tools-expert.md) for `validate_node` and `validate_workflow` tool usage.
101
+
102
+ ### Example
103
+
104
+ ```javascript
105
+ // Iteration 1
106
+ let config = {
107
+ resource: "channel",
108
+ operation: "create",
109
+ };
110
+
111
+ const result1 = validate_node({
112
+ nodeType: "nodes-base.slack",
113
+ config,
114
+ profile: "runtime",
115
+ });
116
+ // -> Error: Missing "name"
117
+
118
+ // 23 seconds thinking...
119
+
120
+ // Iteration 2
121
+ config.name = "general";
122
+
123
+ const result2 = validate_node({
124
+ nodeType: "nodes-base.slack",
125
+ config,
126
+ profile: "runtime",
127
+ });
128
+ // -> Error: Missing "text"
129
+
130
+ // 58 seconds fixing...
131
+
132
+ // Iteration 3
133
+ config.text = "Hello!";
134
+
135
+ const result3 = validate_node({
136
+ nodeType: "nodes-base.slack",
137
+ config,
138
+ profile: "runtime",
139
+ });
140
+ // -> Valid!
141
+ ```
142
+
143
+ **This is normal!** Don't be discouraged by multiple iterations.
144
+
145
+ ---
146
+
147
+ ## Validation Profiles
148
+
149
+ Choose the right profile for your stage:
150
+
151
+ ### minimal
152
+
153
+ **Use when**: Quick checks during editing
154
+
155
+ **Validates**:
156
+
157
+ - Only required fields
158
+ - Basic structure
159
+
160
+ **Pros**: Fastest, most permissive
161
+ **Cons**: May miss issues
162
+
163
+ ### runtime (RECOMMENDED)
164
+
165
+ **Use when**: Pre-deployment validation
166
+
167
+ **Validates**:
168
+
169
+ - Required fields
170
+ - Value types
171
+ - Allowed values
172
+ - Basic dependencies
173
+
174
+ **Pros**: Balanced, catches real errors
175
+ **Cons**: Some edge cases missed
176
+
177
+ **This is the recommended profile for most use cases**
178
+
179
+ ### ai-friendly
180
+
181
+ **Use when**: AI-generated configurations
182
+
183
+ **Validates**:
184
+
185
+ - Same as runtime
186
+ - Reduces false positives
187
+ - More tolerant of minor issues
188
+
189
+ **Pros**: Less noisy for AI workflows
190
+ **Cons**: May allow some questionable configs
191
+
192
+ ### strict
193
+
194
+ **Use when**: Production deployment, critical workflows
195
+
196
+ **Validates**:
197
+
198
+ - Everything
199
+ - Best practices
200
+ - Performance concerns
201
+ - Security issues
202
+
203
+ **Pros**: Maximum safety
204
+ **Cons**: Many warnings, some false positives
205
+
206
+ ---
207
+
208
+ ## Common Error Types
209
+
210
+ ### 1. missing_required
211
+
212
+ **What it means**: A required field is not provided
213
+
214
+ **How to fix**:
215
+
216
+ 1. Use `get_node` to see required fields
217
+ 2. Add the missing field to your configuration
218
+ 3. Provide an appropriate value
219
+
220
+ > **Cross-reference**: See [node-configuration.md](node-configuration.md) for fixing configuration errors and understanding required fields.
221
+
222
+ **Example**:
223
+
224
+ ```javascript
225
+ // Error
226
+ {
227
+ "type": "missing_required",
228
+ "property": "channel",
229
+ "message": "Channel name is required"
230
+ }
231
+
232
+ // Fix
233
+ config.channel = "#general";
234
+ ```
235
+
236
+ ### 2. invalid_value
237
+
238
+ **What it means**: Value doesn't match allowed options
239
+
240
+ **How to fix**:
241
+
242
+ 1. Check error message for allowed values
243
+ 2. Use `get_node` to see options
244
+ 3. Update to a valid value
245
+
246
+ **Example**:
247
+
248
+ ```javascript
249
+ // Error
250
+ {
251
+ "type": "invalid_value",
252
+ "property": "operation",
253
+ "message": "Operation must be one of: post, update, delete",
254
+ "current": "send"
255
+ }
256
+
257
+ // Fix
258
+ config.operation = "post"; // Use valid operation
259
+ ```
260
+
261
+ ### 3. type_mismatch
262
+
263
+ **What it means**: Wrong data type for field
264
+
265
+ **How to fix**:
266
+
267
+ 1. Check expected type in error message
268
+ 2. Convert value to correct type
269
+
270
+ **Example**:
271
+
272
+ ```javascript
273
+ // Error
274
+ {
275
+ "type": "type_mismatch",
276
+ "property": "limit",
277
+ "message": "Expected number, got string",
278
+ "current": "100"
279
+ }
280
+
281
+ // Fix
282
+ config.limit = 100; // Number, not string
283
+ ```
284
+
285
+ ### 4. invalid_expression
286
+
287
+ **What it means**: Expression syntax error
288
+
289
+ **How to fix**:
290
+
291
+ 1. Use n8n Expression Syntax skill
292
+ 2. Check for missing `{{}}` or typos
293
+ 3. Verify node/field references
294
+
295
+ **Example**:
296
+
297
+ ```javascript
298
+ // Error
299
+ {
300
+ "type": "invalid_expression",
301
+ "property": "text",
302
+ "message": "Invalid expression: $json.name",
303
+ "current": "$json.name"
304
+ }
305
+
306
+ // Fix
307
+ config.text = "={{$json.name}}"; // Add {{}}
308
+ ```
309
+
310
+ ### 5. invalid_reference
311
+
312
+ **What it means**: Referenced node doesn't exist
313
+
314
+ **How to fix**:
315
+
316
+ 1. Check node name spelling
317
+ 2. Verify node exists in workflow
318
+ 3. Update reference to correct name
319
+
320
+ **Example**:
321
+
322
+ ```javascript
323
+ // Error
324
+ {
325
+ "type": "invalid_reference",
326
+ "property": "expression",
327
+ "message": "Node 'HTTP Requets' does not exist",
328
+ "current": "={{$node['HTTP Requets'].json.data}}"
329
+ }
330
+
331
+ // Fix - correct typo
332
+ config.expression = "={{$node['HTTP Request'].json.data}}";
333
+ ```
334
+
335
+ ---
336
+
337
+ ## Validation Result Structure
338
+
339
+ ### Complete Response
340
+
341
+ ```javascript
342
+ {
343
+ "valid": false,
344
+ "errors": [
345
+ {
346
+ "type": "missing_required",
347
+ "property": "channel",
348
+ "message": "Channel name is required",
349
+ "fix": "Provide a channel name (lowercase, no spaces)"
350
+ }
351
+ ],
352
+ "warnings": [
353
+ {
354
+ "type": "best_practice",
355
+ "property": "errorHandling",
356
+ "message": "Slack API can have rate limits",
357
+ "suggestion": "Add onError: 'continueRegularOutput'"
358
+ }
359
+ ],
360
+ "suggestions": [
361
+ {
362
+ "type": "optimization",
363
+ "message": "Consider using batch operations for multiple messages"
364
+ }
365
+ ],
366
+ "summary": {
367
+ "hasErrors": true,
368
+ "errorCount": 1,
369
+ "warningCount": 1,
370
+ "suggestionCount": 1
371
+ }
372
+ }
373
+ ```
374
+
375
+ ### How to Read It
376
+
377
+ #### 1. Check `valid` field
378
+
379
+ ```javascript
380
+ if (result.valid) {
381
+ // Configuration is valid
382
+ } else {
383
+ // Has errors - must fix before deployment
384
+ }
385
+ ```
386
+
387
+ #### 2. Fix errors first
388
+
389
+ ```javascript
390
+ result.errors.forEach((error) => {
391
+ console.log(`Error in ${error.property}: ${error.message}`);
392
+ console.log(`Fix: ${error.fix}`);
393
+ });
394
+ ```
395
+
396
+ #### 3. Review warnings
397
+
398
+ ```javascript
399
+ result.warnings.forEach((warning) => {
400
+ console.log(`Warning: ${warning.message}`);
401
+ console.log(`Suggestion: ${warning.suggestion}`);
402
+ // Decide if you need to address this
403
+ });
404
+ ```
405
+
406
+ #### 4. Consider suggestions
407
+
408
+ ```javascript
409
+ // Optional improvements
410
+ // Not required but may enhance workflow
411
+ ```
412
+
413
+ ---
414
+
415
+ ## Workflow Validation
416
+
417
+ ### validate_workflow (Structure)
418
+
419
+ **Validates entire workflow**, not just individual nodes
420
+
421
+ > **Cross-reference**: See [mcp-tools-expert.md](mcp-tools-expert.md) for `validate_workflow` tool parameters and usage patterns.
422
+
423
+ **Checks**:
424
+
425
+ 1. **Node configurations** - Each node valid
426
+ 2. **Connections** - No broken references
427
+ 3. **Expressions** - Syntax and references valid
428
+ 4. **Flow** - Logical workflow structure
429
+
430
+ **Example**:
431
+
432
+ ```javascript
433
+ validate_workflow({
434
+ workflow: {
435
+ nodes: [...],
436
+ connections: {...}
437
+ },
438
+ options: {
439
+ validateNodes: true,
440
+ validateConnections: true,
441
+ validateExpressions: true,
442
+ profile: "runtime"
443
+ }
444
+ })
445
+ ```
446
+
447
+ ### Common Workflow Errors
448
+
449
+ #### 1. Broken Connections
450
+
451
+ ```json
452
+ {
453
+ "error": "Connection from 'Transform' to 'NonExistent' - target node not found"
454
+ }
455
+ ```
456
+
457
+ **Fix**: Remove stale connection or create missing node
458
+
459
+ #### 2. Circular Dependencies
460
+
461
+ ```json
462
+ {
463
+ "error": "Circular dependency detected: Node A -> Node B -> Node A"
464
+ }
465
+ ```
466
+
467
+ **Fix**: Restructure workflow to remove loop
468
+
469
+ #### 3. Multiple Start Nodes
470
+
471
+ ```json
472
+ {
473
+ "warning": "Multiple trigger nodes found - only one will execute"
474
+ }
475
+ ```
476
+
477
+ **Fix**: Remove extra triggers or split into separate workflows
478
+
479
+ #### 4. Disconnected Nodes
480
+
481
+ ```json
482
+ {
483
+ "warning": "Node 'Transform' is not connected to workflow flow"
484
+ }
485
+ ```
486
+
487
+ **Fix**: Connect node or remove if unused
488
+
489
+ ---
490
+
491
+ ## Recovery Strategies
492
+
493
+ ### Strategy 1: Start Fresh
494
+
495
+ **When**: Configuration is severely broken
496
+
497
+ **Steps**:
498
+
499
+ 1. Note required fields from `get_node`
500
+ 2. Create minimal valid configuration
501
+ 3. Add features incrementally
502
+ 4. Validate after each addition
503
+
504
+ ### Strategy 2: Binary Search
505
+
506
+ **When**: Workflow validates but executes incorrectly
507
+
508
+ **Steps**:
509
+
510
+ 1. Remove half the nodes
511
+ 2. Validate and test
512
+ 3. If works: problem is in removed nodes
513
+ 4. If fails: problem is in remaining nodes
514
+ 5. Repeat until problem isolated
515
+
516
+ ### Strategy 3: Clean Stale Connections
517
+
518
+ **When**: "Node not found" errors
519
+
520
+ **Steps**:
521
+
522
+ ```javascript
523
+ n8n_update_partial_workflow({
524
+ id: "workflow-id",
525
+ operations: [
526
+ {
527
+ type: "cleanStaleConnections",
528
+ },
529
+ ],
530
+ });
531
+ ```
532
+
533
+ ### Strategy 4: Use Auto-fix
534
+
535
+ **When**: Operator structure errors
536
+
537
+ **Steps**:
538
+
539
+ ```javascript
540
+ n8n_autofix_workflow({
541
+ id: "workflow-id",
542
+ applyFixes: false, // Preview first
543
+ });
544
+
545
+ // Review fixes, then apply
546
+ n8n_autofix_workflow({
547
+ id: "workflow-id",
548
+ applyFixes: true,
549
+ });
550
+ ```
551
+
552
+ ---
553
+
554
+ ## Best Practices
555
+
556
+ ### Do
557
+
558
+ - Validate after every significant change
559
+ - Read error messages completely
560
+ - Fix errors iteratively (one at a time)
561
+ - Use `runtime` profile for pre-deployment
562
+ - Check `valid` field before assuming success
563
+ - Trust auto-sanitization for operator issues
564
+ - Use `get_node` when unclear about requirements
565
+ - Document false positives you accept
566
+
567
+ ### Don't
568
+
569
+ - Skip validation before activation
570
+ - Try to fix all errors at once
571
+ - Ignore error messages
572
+ - Use `strict` profile during development (too noisy)
573
+ - Assume validation passed (always check result)
574
+ - Manually fix auto-sanitization issues
575
+ - Deploy with unresolved errors
576
+ - Ignore all warnings (some are important!)
577
+
578
+ ---
579
+
580
+ ## Summary
581
+
582
+ **Key Points**:
583
+
584
+ 1. **Validation is iterative** (avg 2-3 cycles, 23s + 58s)
585
+ 2. **Errors must be fixed**, warnings are optional
586
+ 3. **Auto-sanitization** fixes operator structures automatically
587
+ 4. **Use runtime profile** for balanced validation
588
+ 5. **False positives exist** - learn to recognize them
589
+ 6. **Read error messages** - they contain fix guidance
590
+
591
+ **Validation Process**:
592
+
593
+ 1. Validate -> Read errors -> Fix -> Validate again
594
+ 2. Repeat until valid (usually 2-3 iterations)
595
+ 3. Review warnings and decide if acceptable
596
+ 4. Deploy with confidence
597
+
598
+ **Related Skills**:
599
+
600
+ - n8n MCP Tools Expert - Use validation tools correctly
601
+ - n8n Expression Syntax - Fix expression errors
602
+ - n8n Node Configuration - Understand required fields
603
+
604
+ ---
605
+
606
+ # Error Catalog
607
+
608
+ Comprehensive catalog of n8n validation errors with real examples and fixes.
609
+
610
+ ---
611
+
612
+ ## Error Types Overview
613
+
614
+ Common validation errors by priority:
615
+
616
+ | Error Type | Priority | Severity | Auto-Fix |
617
+ | ------------------ | -------- | -------- | -------- |
618
+ | missing_required | Highest | Error | No |
619
+ | invalid_value | High | Error | No |
620
+ | type_mismatch | Medium | Error | No |
621
+ | invalid_expression | Medium | Error | No |
622
+ | invalid_reference | Low | Error | No |
623
+ | operator_structure | Lowest | Warning | Yes |
624
+
625
+ ---
626
+
627
+ ## Errors (Must Fix)
628
+
629
+ ### 1. missing_required
630
+
631
+ **What it means**: Required field is not provided in node configuration
632
+
633
+ **When it occurs**:
634
+
635
+ - Creating new nodes without all required fields
636
+ - Copying configurations between different operations
637
+ - Switching operations that have different requirements
638
+
639
+ **Most common validation error**
640
+
641
+ > **Cross-reference**: See [node-configuration.md](node-configuration.md) for understanding required fields per node type.
642
+
643
+ #### Example 1: Slack Channel Missing
644
+
645
+ **Error**:
646
+
647
+ ```json
648
+ {
649
+ "type": "missing_required",
650
+ "property": "channel",
651
+ "message": "Channel name is required",
652
+ "node": "Slack",
653
+ "path": "parameters.channel"
654
+ }
655
+ ```
656
+
657
+ **Broken Configuration**:
658
+
659
+ ```javascript
660
+ {
661
+ "resource": "message",
662
+ "operation": "post"
663
+ // Missing: channel
664
+ }
665
+ ```
666
+
667
+ **Fix**:
668
+
669
+ ```javascript
670
+ {
671
+ "resource": "message",
672
+ "operation": "post",
673
+ "channel": "#general" // Added required field
674
+ }
675
+ ```
676
+
677
+ **How to identify required fields**:
678
+
679
+ ```javascript
680
+ // Use get_node to see what's required
681
+ const info = get_node({
682
+ nodeType: "nodes-base.slack",
683
+ });
684
+ // Check properties marked as "required": true
685
+ ```
686
+
687
+ #### Example 2: HTTP Request Missing URL
688
+
689
+ **Error**:
690
+
691
+ ```json
692
+ {
693
+ "type": "missing_required",
694
+ "property": "url",
695
+ "message": "URL is required for HTTP Request",
696
+ "node": "HTTP Request",
697
+ "path": "parameters.url"
698
+ }
699
+ ```
700
+
701
+ **Broken Configuration**:
702
+
703
+ ```javascript
704
+ {
705
+ "method": "GET",
706
+ "authentication": "none"
707
+ // Missing: url
708
+ }
709
+ ```
710
+
711
+ **Fix**:
712
+
713
+ ```javascript
714
+ {
715
+ "method": "GET",
716
+ "authentication": "none",
717
+ "url": "https://api.example.com/data" // Added
718
+ }
719
+ ```
720
+
721
+ #### Example 3: Database Query Missing Connection
722
+
723
+ **Error**:
724
+
725
+ ```json
726
+ {
727
+ "type": "missing_required",
728
+ "property": "query",
729
+ "message": "SQL query is required",
730
+ "node": "Postgres",
731
+ "path": "parameters.query"
732
+ }
733
+ ```
734
+
735
+ **Broken Configuration**:
736
+
737
+ ```javascript
738
+ {
739
+ "operation": "executeQuery"
740
+ // Missing: query
741
+ }
742
+ ```
743
+
744
+ **Fix**:
745
+
746
+ ```javascript
747
+ {
748
+ "operation": "executeQuery",
749
+ "query": "SELECT * FROM users WHERE active = true" // Added
750
+ }
751
+ ```
752
+
753
+ #### Example 4: Conditional Fields
754
+
755
+ **Error**:
756
+
757
+ ```json
758
+ {
759
+ "type": "missing_required",
760
+ "property": "body",
761
+ "message": "Request body is required when sendBody is true",
762
+ "node": "HTTP Request",
763
+ "path": "parameters.body"
764
+ }
765
+ ```
766
+
767
+ **Broken Configuration**:
768
+
769
+ ```javascript
770
+ {
771
+ "method": "POST",
772
+ "url": "https://api.example.com/create",
773
+ "sendBody": true
774
+ // Missing: body (required when sendBody=true)
775
+ }
776
+ ```
777
+
778
+ **Fix**:
779
+
780
+ ```javascript
781
+ {
782
+ "method": "POST",
783
+ "url": "https://api.example.com/create",
784
+ "sendBody": true,
785
+ "body": {
786
+ "contentType": "json",
787
+ "content": {
788
+ "name": "John",
789
+ "email": "john@example.com"
790
+ }
791
+ } // Added conditional required field
792
+ }
793
+ ```
794
+
795
+ ---
796
+
797
+ ### 2. invalid_value
798
+
799
+ **What it means**: Provided value doesn't match allowed options or format
800
+
801
+ **When it occurs**:
802
+
803
+ - Using wrong enum value
804
+ - Typos in operation names
805
+ - Invalid format for specialized fields (emails, URLs, channels)
806
+
807
+ **Second most common error**
808
+
809
+ #### Example 1: Invalid Operation
810
+
811
+ **Error**:
812
+
813
+ ```json
814
+ {
815
+ "type": "invalid_value",
816
+ "property": "operation",
817
+ "message": "Operation must be one of: post, update, delete, get",
818
+ "current": "send",
819
+ "allowed": ["post", "update", "delete", "get"]
820
+ }
821
+ ```
822
+
823
+ **Broken Configuration**:
824
+
825
+ ```javascript
826
+ {
827
+ "resource": "message",
828
+ "operation": "send" // Invalid - should be "post"
829
+ }
830
+ ```
831
+
832
+ **Fix**:
833
+
834
+ ```javascript
835
+ {
836
+ "resource": "message",
837
+ "operation": "post" // Use valid operation
838
+ }
839
+ ```
840
+
841
+ #### Example 2: Invalid HTTP Method
842
+
843
+ **Error**:
844
+
845
+ ```json
846
+ {
847
+ "type": "invalid_value",
848
+ "property": "method",
849
+ "message": "Method must be one of: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS",
850
+ "current": "FETCH",
851
+ "allowed": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]
852
+ }
853
+ ```
854
+
855
+ **Broken Configuration**:
856
+
857
+ ```javascript
858
+ {
859
+ "method": "FETCH", // Invalid
860
+ "url": "https://api.example.com"
861
+ }
862
+ ```
863
+
864
+ **Fix**:
865
+
866
+ ```javascript
867
+ {
868
+ "method": "GET", // Use valid HTTP method
869
+ "url": "https://api.example.com"
870
+ }
871
+ ```
872
+
873
+ #### Example 3: Invalid Channel Format
874
+
875
+ **Error**:
876
+
877
+ ```json
878
+ {
879
+ "type": "invalid_value",
880
+ "property": "channel",
881
+ "message": "Channel name must start with # and be lowercase (e.g., #general)",
882
+ "current": "General"
883
+ }
884
+ ```
885
+
886
+ **Broken Configuration**:
887
+
888
+ ```javascript
889
+ {
890
+ "resource": "message",
891
+ "operation": "post",
892
+ "channel": "General" // Wrong format
893
+ }
894
+ ```
895
+
896
+ **Fix**:
897
+
898
+ ```javascript
899
+ {
900
+ "resource": "message",
901
+ "operation": "post",
902
+ "channel": "#general" // Correct format
903
+ }
904
+ ```
905
+
906
+ #### Example 4: Invalid Enum with Case Sensitivity
907
+
908
+ **Error**:
909
+
910
+ ```json
911
+ {
912
+ "type": "invalid_value",
913
+ "property": "resource",
914
+ "message": "Resource must be one of: channel, message, user, file",
915
+ "current": "Message",
916
+ "allowed": ["channel", "message", "user", "file"]
917
+ }
918
+ ```
919
+
920
+ **Note**: Enums are case-sensitive!
921
+
922
+ **Broken Configuration**:
923
+
924
+ ```javascript
925
+ {
926
+ "resource": "Message", // Capital M
927
+ "operation": "post"
928
+ }
929
+ ```
930
+
931
+ **Fix**:
932
+
933
+ ```javascript
934
+ {
935
+ "resource": "message", // Lowercase
936
+ "operation": "post"
937
+ }
938
+ ```
939
+
940
+ ---
941
+
942
+ ### 3. type_mismatch
943
+
944
+ **What it means**: Value is wrong data type (string instead of number, etc.)
945
+
946
+ **When it occurs**:
947
+
948
+ - Hardcoding values that should be numbers
949
+ - Using expressions where literals are expected
950
+ - JSON serialization issues
951
+
952
+ **Common error**
953
+
954
+ #### Example 1: String Instead of Number
955
+
956
+ **Error**:
957
+
958
+ ```json
959
+ {
960
+ "type": "type_mismatch",
961
+ "property": "limit",
962
+ "message": "Expected number, got string",
963
+ "expected": "number",
964
+ "current": "100"
965
+ }
966
+ ```
967
+
968
+ **Broken Configuration**:
969
+
970
+ ```javascript
971
+ {
972
+ "operation": "executeQuery",
973
+ "query": "SELECT * FROM users",
974
+ "limit": "100" // String
975
+ }
976
+ ```
977
+
978
+ **Fix**:
979
+
980
+ ```javascript
981
+ {
982
+ "operation": "executeQuery",
983
+ "query": "SELECT * FROM users",
984
+ "limit": 100 // Number
985
+ }
986
+ ```
987
+
988
+ #### Example 2: Number Instead of String
989
+
990
+ **Error**:
991
+
992
+ ```json
993
+ {
994
+ "type": "type_mismatch",
995
+ "property": "channel",
996
+ "message": "Expected string, got number",
997
+ "expected": "string",
998
+ "current": 12345
999
+ }
1000
+ ```
1001
+
1002
+ **Broken Configuration**:
1003
+
1004
+ ```javascript
1005
+ {
1006
+ "resource": "message",
1007
+ "operation": "post",
1008
+ "channel": 12345 // Number (even if channel ID)
1009
+ }
1010
+ ```
1011
+
1012
+ **Fix**:
1013
+
1014
+ ```javascript
1015
+ {
1016
+ "resource": "message",
1017
+ "operation": "post",
1018
+ "channel": "#general" // String (channel name, not ID)
1019
+ }
1020
+ ```
1021
+
1022
+ #### Example 3: Boolean as String
1023
+
1024
+ **Error**:
1025
+
1026
+ ```json
1027
+ {
1028
+ "type": "type_mismatch",
1029
+ "property": "sendHeaders",
1030
+ "message": "Expected boolean, got string",
1031
+ "expected": "boolean",
1032
+ "current": "true"
1033
+ }
1034
+ ```
1035
+
1036
+ **Broken Configuration**:
1037
+
1038
+ ```javascript
1039
+ {
1040
+ "method": "GET",
1041
+ "url": "https://api.example.com",
1042
+ "sendHeaders": "true" // String "true"
1043
+ }
1044
+ ```
1045
+
1046
+ **Fix**:
1047
+
1048
+ ```javascript
1049
+ {
1050
+ "method": "GET",
1051
+ "url": "https://api.example.com",
1052
+ "sendHeaders": true // Boolean true
1053
+ }
1054
+ ```
1055
+
1056
+ #### Example 4: Object Instead of Array
1057
+
1058
+ **Error**:
1059
+
1060
+ ```json
1061
+ {
1062
+ "type": "type_mismatch",
1063
+ "property": "tags",
1064
+ "message": "Expected array, got object",
1065
+ "expected": "array",
1066
+ "current": { "tag": "important" }
1067
+ }
1068
+ ```
1069
+
1070
+ **Broken Configuration**:
1071
+
1072
+ ```javascript
1073
+ {
1074
+ "name": "New Channel",
1075
+ "tags": {"tag": "important"} // Object
1076
+ }
1077
+ ```
1078
+
1079
+ **Fix**:
1080
+
1081
+ ```javascript
1082
+ {
1083
+ "name": "New Channel",
1084
+ "tags": ["important", "alerts"] // Array
1085
+ }
1086
+ ```
1087
+
1088
+ ---
1089
+
1090
+ ### 4. invalid_expression
1091
+
1092
+ **What it means**: n8n expression has syntax errors or invalid references
1093
+
1094
+ **When it occurs**:
1095
+
1096
+ - Missing `{{}}` around expressions
1097
+ - Typos in variable names
1098
+ - Referencing non-existent nodes or fields
1099
+ - Invalid JavaScript syntax in expressions
1100
+
1101
+ **Moderately common**
1102
+
1103
+ **Related**: See **n8n Expression Syntax** skill for comprehensive expression guidance
1104
+
1105
+ #### Example 1: Missing Curly Braces
1106
+
1107
+ **Error**:
1108
+
1109
+ ```json
1110
+ {
1111
+ "type": "invalid_expression",
1112
+ "property": "text",
1113
+ "message": "Expressions must be wrapped in {{}}",
1114
+ "current": "$json.name"
1115
+ }
1116
+ ```
1117
+
1118
+ **Broken Configuration**:
1119
+
1120
+ ```javascript
1121
+ {
1122
+ "resource": "message",
1123
+ "operation": "post",
1124
+ "channel": "#general",
1125
+ "text": "$json.name" // Missing {{}}
1126
+ }
1127
+ ```
1128
+
1129
+ **Fix**:
1130
+
1131
+ ```javascript
1132
+ {
1133
+ "resource": "message",
1134
+ "operation": "post",
1135
+ "channel": "#general",
1136
+ "text": "={{$json.name}}" // Wrapped in {{}}
1137
+ }
1138
+ ```
1139
+
1140
+ #### Example 2: Invalid Node Reference
1141
+
1142
+ **Error**:
1143
+
1144
+ ```json
1145
+ {
1146
+ "type": "invalid_expression",
1147
+ "property": "value",
1148
+ "message": "Referenced node 'HTTP Requets' does not exist",
1149
+ "current": "={{$node['HTTP Requets'].json.data}}"
1150
+ }
1151
+ ```
1152
+
1153
+ **Broken Configuration**:
1154
+
1155
+ ```javascript
1156
+ {
1157
+ "field": "data",
1158
+ "value": "={{$node['HTTP Requets'].json.data}}" // Typo in node name
1159
+ }
1160
+ ```
1161
+
1162
+ **Fix**:
1163
+
1164
+ ```javascript
1165
+ {
1166
+ "field": "data",
1167
+ "value": "={{$node['HTTP Request'].json.data}}" // Correct node name
1168
+ }
1169
+ ```
1170
+
1171
+ #### Example 3: Invalid Property Access
1172
+
1173
+ **Error**:
1174
+
1175
+ ```json
1176
+ {
1177
+ "type": "invalid_expression",
1178
+ "property": "text",
1179
+ "message": "Cannot access property 'user' of undefined",
1180
+ "current": "={{$json.data.user.name}}"
1181
+ }
1182
+ ```
1183
+
1184
+ **Broken Configuration**:
1185
+
1186
+ ```javascript
1187
+ {
1188
+ "text": "={{$json.data.user.name}}" // Structure doesn't exist
1189
+ }
1190
+ ```
1191
+
1192
+ **Fix** (with safe navigation):
1193
+
1194
+ ```javascript
1195
+ {
1196
+ "text": "={{$json.data?.user?.name || 'Unknown'}}" // Safe navigation + fallback
1197
+ }
1198
+ ```
1199
+
1200
+ #### Example 4: Webhook Data Access Error
1201
+
1202
+ **Error**:
1203
+
1204
+ ```json
1205
+ {
1206
+ "type": "invalid_expression",
1207
+ "property": "value",
1208
+ "message": "Property 'email' not found in $json",
1209
+ "current": "={{$json.email}}"
1210
+ }
1211
+ ```
1212
+
1213
+ **Common Gotcha**: Webhook data is under `.body`!
1214
+
1215
+ **Broken Configuration**:
1216
+
1217
+ ```javascript
1218
+ {
1219
+ "field": "email",
1220
+ "value": "={{$json.email}}" // Missing .body
1221
+ }
1222
+ ```
1223
+
1224
+ **Fix**:
1225
+
1226
+ ```javascript
1227
+ {
1228
+ "field": "email",
1229
+ "value": "={{$json.body.email}}" // Webhook data under .body
1230
+ }
1231
+ ```
1232
+
1233
+ ---
1234
+
1235
+ ### 5. invalid_reference
1236
+
1237
+ **What it means**: Configuration references a node that doesn't exist in the workflow
1238
+
1239
+ **When it occurs**:
1240
+
1241
+ - Node was renamed or deleted
1242
+ - Typo in node name
1243
+ - Copy-pasting from another workflow
1244
+
1245
+ **Less common error**
1246
+
1247
+ #### Example 1: Deleted Node Reference
1248
+
1249
+ **Error**:
1250
+
1251
+ ```json
1252
+ {
1253
+ "type": "invalid_reference",
1254
+ "property": "expression",
1255
+ "message": "Node 'Transform Data' does not exist in workflow",
1256
+ "referenced_node": "Transform Data"
1257
+ }
1258
+ ```
1259
+
1260
+ **Broken Configuration**:
1261
+
1262
+ ```javascript
1263
+ {
1264
+ "value": "={{$node['Transform Data'].json.result}}" // Node deleted
1265
+ }
1266
+ ```
1267
+
1268
+ **Fix**:
1269
+
1270
+ ```javascript
1271
+ // Option 1: Update to existing node
1272
+ {
1273
+ "value": "={{$node['Set'].json.result}}"
1274
+ }
1275
+
1276
+ // Option 2: Remove expression if not needed
1277
+ {
1278
+ "value": "default_value"
1279
+ }
1280
+ ```
1281
+
1282
+ #### Example 2: Connection to Non-Existent Node
1283
+
1284
+ **Error**:
1285
+
1286
+ ```json
1287
+ {
1288
+ "type": "invalid_reference",
1289
+ "message": "Connection references node 'Slack1' which does not exist",
1290
+ "source": "HTTP Request",
1291
+ "target": "Slack1"
1292
+ }
1293
+ ```
1294
+
1295
+ **Fix**: Use `cleanStaleConnections` operation:
1296
+
1297
+ ```javascript
1298
+ n8n_update_partial_workflow({
1299
+ id: "workflow-id",
1300
+ operations: [
1301
+ {
1302
+ type: "cleanStaleConnections",
1303
+ },
1304
+ ],
1305
+ });
1306
+ ```
1307
+
1308
+ #### Example 3: Renamed Node Not Updated
1309
+
1310
+ **Error**:
1311
+
1312
+ ```json
1313
+ {
1314
+ "type": "invalid_reference",
1315
+ "property": "expression",
1316
+ "message": "Node 'Get Weather' does not exist (did you mean 'Weather API'?)",
1317
+ "referenced_node": "Get Weather",
1318
+ "suggestions": ["Weather API"]
1319
+ }
1320
+ ```
1321
+
1322
+ **Broken Configuration**:
1323
+
1324
+ ```javascript
1325
+ {
1326
+ "value": "={{$node['Get Weather'].json.temperature}}" // Old name
1327
+ }
1328
+ ```
1329
+
1330
+ **Fix**:
1331
+
1332
+ ```javascript
1333
+ {
1334
+ "value": "={{$node['Weather API'].json.temperature}}" // Current name
1335
+ }
1336
+ ```
1337
+
1338
+ ---
1339
+
1340
+ ## Warnings (Should Fix)
1341
+
1342
+ ### 6. best_practice
1343
+
1344
+ **What it means**: Configuration works but doesn't follow best practices
1345
+
1346
+ **Severity**: Warning (doesn't block execution)
1347
+
1348
+ **When acceptable**: Development, testing, simple workflows
1349
+
1350
+ **When to fix**: Production workflows, critical operations
1351
+
1352
+ #### Example 1: Missing Error Handling
1353
+
1354
+ **Warning**:
1355
+
1356
+ ```json
1357
+ {
1358
+ "type": "best_practice",
1359
+ "property": "onError",
1360
+ "message": "Slack API can have rate limits and connection issues",
1361
+ "suggestion": "Add error handling: onError: 'continueRegularOutput'"
1362
+ }
1363
+ ```
1364
+
1365
+ **Current Configuration**:
1366
+
1367
+ ```javascript
1368
+ {
1369
+ "resource": "message",
1370
+ "operation": "post",
1371
+ "channel": "#alerts"
1372
+ // No error handling
1373
+ }
1374
+ ```
1375
+
1376
+ **Recommended Fix**:
1377
+
1378
+ ```javascript
1379
+ {
1380
+ "resource": "message",
1381
+ "operation": "post",
1382
+ "channel": "#alerts",
1383
+ "continueOnFail": true,
1384
+ "retryOnFail": true,
1385
+ "maxTries": 3
1386
+ }
1387
+ ```
1388
+
1389
+ #### Example 2: No Retry Logic
1390
+
1391
+ **Warning**:
1392
+
1393
+ ```json
1394
+ {
1395
+ "type": "best_practice",
1396
+ "property": "retryOnFail",
1397
+ "message": "External API calls should retry on failure",
1398
+ "suggestion": "Add retryOnFail: true, maxTries: 3, waitBetweenTries: 1000"
1399
+ }
1400
+ ```
1401
+
1402
+ **When to ignore**: Idempotent operations, APIs with their own retry logic
1403
+
1404
+ **When to fix**: Flaky external services, production automation
1405
+
1406
+ ---
1407
+
1408
+ ### 7. deprecated
1409
+
1410
+ **What it means**: Using old API version or deprecated feature
1411
+
1412
+ **Severity**: Warning (still works but may stop working in future)
1413
+
1414
+ **When to fix**: Always (eventually)
1415
+
1416
+ #### Example 1: Old typeVersion
1417
+
1418
+ **Warning**:
1419
+
1420
+ ```json
1421
+ {
1422
+ "type": "deprecated",
1423
+ "property": "typeVersion",
1424
+ "message": "typeVersion 1 is deprecated for Slack node, use version 2",
1425
+ "current": 1,
1426
+ "recommended": 2
1427
+ }
1428
+ ```
1429
+
1430
+ **Fix**:
1431
+
1432
+ ```javascript
1433
+ {
1434
+ "type": "n8n-nodes-base.slack",
1435
+ "typeVersion": 2, // Updated
1436
+ // May need to update configuration for new version
1437
+ }
1438
+ ```
1439
+
1440
+ ---
1441
+
1442
+ ### 8. performance
1443
+
1444
+ **What it means**: Configuration may cause performance issues
1445
+
1446
+ **Severity**: Warning
1447
+
1448
+ **When to fix**: High-volume workflows, large datasets
1449
+
1450
+ #### Example 1: Unbounded Query
1451
+
1452
+ **Warning**:
1453
+
1454
+ ```json
1455
+ {
1456
+ "type": "performance",
1457
+ "property": "query",
1458
+ "message": "SELECT without LIMIT can return massive datasets",
1459
+ "suggestion": "Add LIMIT clause or use pagination"
1460
+ }
1461
+ ```
1462
+
1463
+ **Current**:
1464
+
1465
+ ```sql
1466
+ SELECT * FROM users WHERE active = true
1467
+ ```
1468
+
1469
+ **Fix**:
1470
+
1471
+ ```sql
1472
+ SELECT * FROM users WHERE active = true LIMIT 1000
1473
+ ```
1474
+
1475
+ ---
1476
+
1477
+ ## Auto-Sanitization Fixes
1478
+
1479
+ ### 9. operator_structure
1480
+
1481
+ **What it means**: IF/Switch operator structure issues
1482
+
1483
+ **Severity**: Warning
1484
+
1485
+ **Auto-Fix**: YES - Fixed automatically on workflow save
1486
+
1487
+ **Rare** (mostly auto-fixed)
1488
+
1489
+ #### Fixed Automatically: Binary Operators
1490
+
1491
+ **Before** (you create this):
1492
+
1493
+ ```javascript
1494
+ {
1495
+ "type": "boolean",
1496
+ "operation": "equals",
1497
+ "singleValue": true // Wrong for binary operator
1498
+ }
1499
+ ```
1500
+
1501
+ **After** (auto-sanitization fixes it):
1502
+
1503
+ ```javascript
1504
+ {
1505
+ "type": "boolean",
1506
+ "operation": "equals"
1507
+ // singleValue removed
1508
+ }
1509
+ ```
1510
+
1511
+ **You don't need to do anything** - this is fixed on save!
1512
+
1513
+ #### Fixed Automatically: Unary Operators
1514
+
1515
+ **Before**:
1516
+
1517
+ ```javascript
1518
+ {
1519
+ "type": "boolean",
1520
+ "operation": "isEmpty"
1521
+ // Missing singleValue
1522
+ }
1523
+ ```
1524
+
1525
+ **After**:
1526
+
1527
+ ```javascript
1528
+ {
1529
+ "type": "boolean",
1530
+ "operation": "isEmpty",
1531
+ "singleValue": true // Added automatically
1532
+ }
1533
+ ```
1534
+
1535
+ **What you should do**: Trust auto-sanitization, don't manually fix these!
1536
+
1537
+ ---
1538
+
1539
+ ## Recovery Patterns
1540
+
1541
+ ### Pattern 1: Progressive Validation
1542
+
1543
+ **Problem**: Too many errors at once
1544
+
1545
+ **Solution**:
1546
+
1547
+ ```javascript
1548
+ // Step 1: Minimal valid config
1549
+ let config = {
1550
+ resource: "message",
1551
+ operation: "post",
1552
+ channel: "#general",
1553
+ text: "Hello"
1554
+ };
1555
+
1556
+ validate_node({nodeType: "nodes-base.slack", config, profile: "runtime"});
1557
+ // Valid
1558
+
1559
+ // Step 2: Add features one by one
1560
+ config.attachments = [...];
1561
+ validate_node({nodeType: "nodes-base.slack", config, profile: "runtime"});
1562
+
1563
+ config.blocks = [...];
1564
+ validate_node({nodeType: "nodes-base.slack", config, profile: "runtime"});
1565
+ ```
1566
+
1567
+ ### Pattern 2: Error Triage
1568
+
1569
+ **Problem**: Multiple errors
1570
+
1571
+ **Solution**:
1572
+
1573
+ ```javascript
1574
+ const result = validate_node_operation({...});
1575
+
1576
+ // 1. Fix errors (must fix)
1577
+ result.errors.forEach(error => {
1578
+ console.log(`MUST FIX: ${error.property} - ${error.message}`);
1579
+ });
1580
+
1581
+ // 2. Review warnings (should fix)
1582
+ result.warnings.forEach(warning => {
1583
+ console.log(`SHOULD FIX: ${warning.property} - ${warning.message}`);
1584
+ });
1585
+
1586
+ // 3. Consider suggestions (optional)
1587
+ result.suggestions.forEach(sug => {
1588
+ console.log(`OPTIONAL: ${sug.message}`);
1589
+ });
1590
+ ```
1591
+
1592
+ ### Pattern 3: Use get_node
1593
+
1594
+ **Problem**: Don't know what's required
1595
+
1596
+ **Solution**:
1597
+
1598
+ ```javascript
1599
+ // Before configuring, check requirements
1600
+ const info = get_node({
1601
+ nodeType: "nodes-base.slack",
1602
+ });
1603
+
1604
+ // Look for required fields
1605
+ info.properties.forEach((prop) => {
1606
+ if (prop.required) {
1607
+ console.log(`Required: ${prop.name} (${prop.type})`);
1608
+ }
1609
+ });
1610
+ ```
1611
+
1612
+ ---
1613
+
1614
+ ## Error Frequency Summary
1615
+
1616
+ **Most Common Errors**:
1617
+
1618
+ 1. `missing_required` (45%) - Always check get_node
1619
+ 2. `invalid_value` (28%) - Check allowed values
1620
+ 3. `type_mismatch` (12%) - Use correct data types
1621
+ 4. `invalid_expression` (8%) - Use Expression Syntax skill
1622
+ 5. `invalid_reference` (5%) - Clean stale connections
1623
+
1624
+ **Auto-Fixed**:
1625
+
1626
+ - `operator_structure` - Trust auto-sanitization!
1627
+
1628
+ ---
1629
+
1630
+ # False Positives Guide
1631
+
1632
+ When validation warnings are acceptable and how to handle them.
1633
+
1634
+ ---
1635
+
1636
+ ## What Are False Positives?
1637
+
1638
+ **Definition**: Validation warnings that are technically "issues" but acceptable in your specific use case.
1639
+
1640
+ **Key insight**: Not all warnings need to be fixed!
1641
+
1642
+ Many warnings are context-dependent:
1643
+
1644
+ - ~40% of warnings are acceptable in specific use cases
1645
+ - Using `ai-friendly` profile reduces false positives by 60%
1646
+
1647
+ ---
1648
+
1649
+ ## Philosophy
1650
+
1651
+ ### Good Practice
1652
+
1653
+ ```
1654
+ 1. Run validation with 'runtime' profile
1655
+ 2. Fix all ERRORS
1656
+ 3. Review each WARNING
1657
+ 4. Decide if acceptable for your use case
1658
+ 5. Document why you accepted it
1659
+ 6. Deploy with confidence
1660
+ ```
1661
+
1662
+ ### Bad Practice
1663
+
1664
+ ```
1665
+ 1. Ignore all warnings blindly
1666
+ 2. Use 'minimal' profile to avoid warnings
1667
+ 3. Deploy without understanding risks
1668
+ ```
1669
+
1670
+ ---
1671
+
1672
+ ## Common False Positives
1673
+
1674
+ ### 1. Missing Error Handling
1675
+
1676
+ **Warning**:
1677
+
1678
+ ```json
1679
+ {
1680
+ "type": "best_practice",
1681
+ "message": "No error handling configured",
1682
+ "suggestion": "Add continueOnFail: true and retryOnFail: true"
1683
+ }
1684
+ ```
1685
+
1686
+ #### When Acceptable
1687
+
1688
+ **Development/Testing Workflows**
1689
+
1690
+ ```javascript
1691
+ // Testing workflow - failures are obvious
1692
+ {
1693
+ "name": "Test Slack Integration",
1694
+ "nodes": [{
1695
+ "type": "n8n-nodes-base.slack",
1696
+ "parameters": {
1697
+ "resource": "message",
1698
+ "operation": "post",
1699
+ "channel": "#test"
1700
+ // No error handling - OK for testing
1701
+ }
1702
+ }]
1703
+ }
1704
+ ```
1705
+
1706
+ **Reasoning**: You WANT to see failures during testing.
1707
+
1708
+ **Non-Critical Notifications**
1709
+
1710
+ ```javascript
1711
+ // Nice-to-have notification
1712
+ {
1713
+ "name": "Optional Slack Notification",
1714
+ "parameters": {
1715
+ "channel": "#general",
1716
+ "text": "FYI: Process completed"
1717
+ // If this fails, no big deal
1718
+ }
1719
+ }
1720
+ ```
1721
+
1722
+ **Reasoning**: Notification failure doesn't affect core functionality.
1723
+
1724
+ **Manual Trigger Workflows**
1725
+
1726
+ ```javascript
1727
+ // Manual workflow - user is watching
1728
+ {
1729
+ "nodes": [{
1730
+ "type": "n8n-nodes-base.webhook",
1731
+ "parameters": {
1732
+ "path": "manual-test"
1733
+ // No error handling - user will retry manually
1734
+ }
1735
+ }]
1736
+ }
1737
+ ```
1738
+
1739
+ **Reasoning**: User is present to see and handle errors.
1740
+
1741
+ #### When to Fix
1742
+
1743
+ **Production Automation**
1744
+
1745
+ ```javascript
1746
+ // BAD: Critical workflow without error handling
1747
+ {
1748
+ "name": "Process Customer Orders",
1749
+ "nodes": [{
1750
+ "type": "n8n-nodes-base.postgres",
1751
+ "parameters": {
1752
+ "query": "INSERT INTO orders..."
1753
+ // Should have error handling!
1754
+ }
1755
+ }]
1756
+ }
1757
+ ```
1758
+
1759
+ **Fix**:
1760
+
1761
+ ```javascript
1762
+ {
1763
+ "parameters": {
1764
+ "query": "INSERT INTO orders...",
1765
+ "continueOnFail": true,
1766
+ "retryOnFail": true,
1767
+ "maxTries": 3,
1768
+ "waitBetweenTries": 1000
1769
+ }
1770
+ }
1771
+ ```
1772
+
1773
+ **Critical Integrations**
1774
+
1775
+ ```javascript
1776
+ // BAD: Payment processing without error handling
1777
+ {
1778
+ "name": "Process Payment",
1779
+ "type": "n8n-nodes-base.stripe"
1780
+ // Payment failures MUST be handled!
1781
+ }
1782
+ ```
1783
+
1784
+ ---
1785
+
1786
+ ### 2. No Retry Logic
1787
+
1788
+ **Warning**:
1789
+
1790
+ ```json
1791
+ {
1792
+ "type": "best_practice",
1793
+ "message": "External API calls should retry on failure",
1794
+ "suggestion": "Add retryOnFail: true with exponential backoff"
1795
+ }
1796
+ ```
1797
+
1798
+ #### When Acceptable
1799
+
1800
+ **APIs with Built-in Retry**
1801
+
1802
+ ```javascript
1803
+ // Stripe has its own retry mechanism
1804
+ {
1805
+ "type": "n8n-nodes-base.stripe",
1806
+ "parameters": {
1807
+ "resource": "charge",
1808
+ "operation": "create"
1809
+ // Stripe SDK retries automatically
1810
+ }
1811
+ }
1812
+ ```
1813
+
1814
+ **Idempotent Operations**
1815
+
1816
+ ```javascript
1817
+ // GET request - safe to retry manually if needed
1818
+ {
1819
+ "method": "GET",
1820
+ "url": "https://api.example.com/status"
1821
+ // Read-only, no side effects
1822
+ }
1823
+ ```
1824
+
1825
+ **Local/Internal Services**
1826
+
1827
+ ```javascript
1828
+ // Internal API with high reliability
1829
+ {
1830
+ "url": "http://localhost:3000/process"
1831
+ // Local service, failures are rare and obvious
1832
+ }
1833
+ ```
1834
+
1835
+ #### When to Fix
1836
+
1837
+ **Flaky External APIs**
1838
+
1839
+ ```javascript
1840
+ // BAD: Known unreliable API without retries
1841
+ {
1842
+ "url": "https://unreliable-api.com/data"
1843
+ // Should retry!
1844
+ }
1845
+
1846
+ // GOOD:
1847
+ {
1848
+ "url": "https://unreliable-api.com/data",
1849
+ "retryOnFail": true,
1850
+ "maxTries": 3,
1851
+ "waitBetweenTries": 2000
1852
+ }
1853
+ ```
1854
+
1855
+ **Non-Idempotent Operations**
1856
+
1857
+ ```javascript
1858
+ // BAD: POST without retry - may lose data
1859
+ {
1860
+ "method": "POST",
1861
+ "url": "https://api.example.com/create"
1862
+ // Could timeout and lose data
1863
+ }
1864
+ ```
1865
+
1866
+ ---
1867
+
1868
+ ### 3. Missing Rate Limiting
1869
+
1870
+ **Warning**:
1871
+
1872
+ ```json
1873
+ {
1874
+ "type": "best_practice",
1875
+ "message": "API may have rate limits",
1876
+ "suggestion": "Add rate limiting or batch requests"
1877
+ }
1878
+ ```
1879
+
1880
+ #### When Acceptable
1881
+
1882
+ **Internal APIs**
1883
+
1884
+ ```javascript
1885
+ // Internal microservice - no rate limits
1886
+ {
1887
+ "url": "http://internal-api/process"
1888
+ // Company controls both ends
1889
+ }
1890
+ ```
1891
+
1892
+ **Low-Volume Workflows**
1893
+
1894
+ ```javascript
1895
+ // Runs once per day
1896
+ {
1897
+ "trigger": {
1898
+ "type": "n8n-nodes-base.cron",
1899
+ "parameters": {
1900
+ "mode": "everyDay",
1901
+ "hour": 9
1902
+ }
1903
+ },
1904
+ "nodes": [{
1905
+ "type": "n8n-nodes-base.httpRequest",
1906
+ "parameters": {
1907
+ "url": "https://api.example.com/daily-report"
1908
+ // Once per day = no rate limit concerns
1909
+ }
1910
+ }]
1911
+ }
1912
+ ```
1913
+
1914
+ **APIs with Server-Side Limits**
1915
+
1916
+ ```javascript
1917
+ // API returns 429 and n8n handles it
1918
+ {
1919
+ "url": "https://api.example.com/data",
1920
+ "options": {
1921
+ "response": {
1922
+ "response": {
1923
+ "neverError": false // Will error on 429
1924
+ }
1925
+ }
1926
+ },
1927
+ "retryOnFail": true // Retry on 429
1928
+ }
1929
+ ```
1930
+
1931
+ #### When to Fix
1932
+
1933
+ **High-Volume Public APIs**
1934
+
1935
+ ```javascript
1936
+ // BAD: Loop hitting rate-limited API
1937
+ {
1938
+ "nodes": [{
1939
+ "type": "n8n-nodes-base.splitInBatches",
1940
+ "parameters": {
1941
+ "batchSize": 100
1942
+ }
1943
+ }, {
1944
+ "type": "n8n-nodes-base.httpRequest",
1945
+ "parameters": {
1946
+ "url": "https://api.github.com/..."
1947
+ // GitHub has strict rate limits!
1948
+ }
1949
+ }]
1950
+ }
1951
+
1952
+ // GOOD: Add rate limiting
1953
+ {
1954
+ "type": "n8n-nodes-base.httpRequest",
1955
+ "parameters": {
1956
+ "url": "https://api.github.com/...",
1957
+ "options": {
1958
+ "batching": {
1959
+ "batch": {
1960
+ "batchSize": 10,
1961
+ "batchInterval": 1000 // 1 second between batches
1962
+ }
1963
+ }
1964
+ }
1965
+ }
1966
+ }
1967
+ ```
1968
+
1969
+ ---
1970
+
1971
+ ### 4. Unbounded Database Queries
1972
+
1973
+ **Warning**:
1974
+
1975
+ ```json
1976
+ {
1977
+ "type": "performance",
1978
+ "message": "SELECT without LIMIT can return massive datasets",
1979
+ "suggestion": "Add LIMIT clause or use pagination"
1980
+ }
1981
+ ```
1982
+
1983
+ #### When Acceptable
1984
+
1985
+ **Small Known Datasets**
1986
+
1987
+ ```javascript
1988
+ // Config table with ~10 rows
1989
+ {
1990
+ "query": "SELECT * FROM app_config"
1991
+ // Known to be small, no LIMIT needed
1992
+ }
1993
+ ```
1994
+
1995
+ **Aggregation Queries**
1996
+
1997
+ ```javascript
1998
+ // COUNT/SUM operations
1999
+ {
2000
+ "query": "SELECT COUNT(*) as total FROM users WHERE active = true"
2001
+ // Aggregation, not returning rows
2002
+ }
2003
+ ```
2004
+
2005
+ **Development/Testing**
2006
+
2007
+ ```javascript
2008
+ // Testing with small dataset
2009
+ {
2010
+ "query": "SELECT * FROM test_users"
2011
+ // Test database has 5 rows
2012
+ }
2013
+ ```
2014
+
2015
+ #### When to Fix
2016
+
2017
+ **Production Queries on Large Tables**
2018
+
2019
+ ```javascript
2020
+ // BAD: User table could have millions of rows
2021
+ {
2022
+ "query": "SELECT * FROM users"
2023
+ // Could return millions of rows!
2024
+ }
2025
+
2026
+ // GOOD: Add LIMIT
2027
+ {
2028
+ "query": "SELECT * FROM users LIMIT 1000"
2029
+ }
2030
+
2031
+ // BETTER: Use pagination
2032
+ {
2033
+ "query": "SELECT * FROM users WHERE id > {{$json.lastId}} LIMIT 1000"
2034
+ }
2035
+ ```
2036
+
2037
+ ---
2038
+
2039
+ ### 5. Missing Input Validation
2040
+
2041
+ **Warning**:
2042
+
2043
+ ```json
2044
+ {
2045
+ "type": "best_practice",
2046
+ "message": "Webhook doesn't validate input data",
2047
+ "suggestion": "Add IF node to validate required fields"
2048
+ }
2049
+ ```
2050
+
2051
+ #### When Acceptable
2052
+
2053
+ **Internal Webhooks**
2054
+
2055
+ ```javascript
2056
+ // Webhook from your own backend
2057
+ {
2058
+ "type": "n8n-nodes-base.webhook",
2059
+ "parameters": {
2060
+ "path": "internal-trigger"
2061
+ // Your backend already validates
2062
+ }
2063
+ }
2064
+ ```
2065
+
2066
+ **Trusted Sources**
2067
+
2068
+ ```javascript
2069
+ // Webhook from Stripe (cryptographically signed)
2070
+ {
2071
+ "type": "n8n-nodes-base.webhook",
2072
+ "parameters": {
2073
+ "path": "stripe-webhook",
2074
+ "authentication": "headerAuth"
2075
+ // Stripe signature validates authenticity
2076
+ }
2077
+ }
2078
+ ```
2079
+
2080
+ #### When to Fix
2081
+
2082
+ **Public Webhooks**
2083
+
2084
+ ```javascript
2085
+ // BAD: Public webhook without validation
2086
+ {
2087
+ "type": "n8n-nodes-base.webhook",
2088
+ "parameters": {
2089
+ "path": "public-form-submit"
2090
+ // Anyone can send anything!
2091
+ }
2092
+ }
2093
+
2094
+ // GOOD: Add validation
2095
+ {
2096
+ "nodes": [
2097
+ {
2098
+ "name": "Webhook",
2099
+ "type": "n8n-nodes-base.webhook"
2100
+ },
2101
+ {
2102
+ "name": "Validate Input",
2103
+ "type": "n8n-nodes-base.if",
2104
+ "parameters": {
2105
+ "conditions": {
2106
+ "boolean": [
2107
+ {
2108
+ "value1": "={{$json.body.email}}",
2109
+ "operation": "isNotEmpty"
2110
+ },
2111
+ {
2112
+ "value1": "={{$json.body.email}}",
2113
+ "operation": "regex",
2114
+ "value2": "^[^@]+@[^@]+\\.[^@]+$"
2115
+ }
2116
+ ]
2117
+ }
2118
+ }
2119
+ }
2120
+ ]
2121
+ }
2122
+ ```
2123
+
2124
+ ---
2125
+
2126
+ ### 6. Hardcoded Credentials
2127
+
2128
+ **Warning**:
2129
+
2130
+ ```json
2131
+ {
2132
+ "type": "security",
2133
+ "message": "Credentials should not be hardcoded",
2134
+ "suggestion": "Use n8n credential system"
2135
+ }
2136
+ ```
2137
+
2138
+ #### When Acceptable
2139
+
2140
+ **Public APIs (No Auth)**
2141
+
2142
+ ```javascript
2143
+ // Truly public API with no secrets
2144
+ {
2145
+ "url": "https://api.ipify.org"
2146
+ // No credentials needed
2147
+ }
2148
+ ```
2149
+
2150
+ **Demo/Example Workflows**
2151
+
2152
+ ```javascript
2153
+ // Example workflow in documentation
2154
+ {
2155
+ "url": "https://example.com/api",
2156
+ "headers": {
2157
+ "Authorization": "Bearer DEMO_TOKEN"
2158
+ }
2159
+ // Clearly marked as example
2160
+ }
2161
+ ```
2162
+
2163
+ #### When to Fix (Always!)
2164
+
2165
+ **Real Credentials**
2166
+
2167
+ ```javascript
2168
+ // BAD: Real API key in workflow
2169
+ {
2170
+ "headers": {
2171
+ "Authorization": "Bearer sk_live_abc123..."
2172
+ }
2173
+ // NEVER hardcode real credentials!
2174
+ }
2175
+
2176
+ // GOOD: Use credentials system
2177
+ {
2178
+ "authentication": "headerAuth",
2179
+ "credentials": {
2180
+ "headerAuth": {
2181
+ "id": "credential-id",
2182
+ "name": "My API Key"
2183
+ }
2184
+ }
2185
+ }
2186
+ ```
2187
+
2188
+ ---
2189
+
2190
+ ## Validation Profile Strategies
2191
+
2192
+ ### Strategy 1: Progressive Strictness
2193
+
2194
+ **Development**:
2195
+
2196
+ ```javascript
2197
+ validate_node({
2198
+ nodeType: "nodes-base.slack",
2199
+ config,
2200
+ profile: "ai-friendly", // Fewer warnings during development
2201
+ });
2202
+ ```
2203
+
2204
+ **Pre-Production**:
2205
+
2206
+ ```javascript
2207
+ validate_node({
2208
+ nodeType: "nodes-base.slack",
2209
+ config,
2210
+ profile: "runtime", // Balanced validation
2211
+ });
2212
+ ```
2213
+
2214
+ **Production Deployment**:
2215
+
2216
+ ```javascript
2217
+ validate_node({
2218
+ nodeType: "nodes-base.slack",
2219
+ config,
2220
+ profile: "strict", // All warnings, review each one
2221
+ });
2222
+ ```
2223
+
2224
+ ### Strategy 2: Profile by Workflow Type
2225
+
2226
+ **Quick Automations**:
2227
+
2228
+ - Profile: `ai-friendly`
2229
+ - Accept: Most warnings
2230
+ - Fix: Only errors + security warnings
2231
+
2232
+ **Business-Critical Workflows**:
2233
+
2234
+ - Profile: `strict`
2235
+ - Accept: Very few warnings
2236
+ - Fix: Everything possible
2237
+
2238
+ **Integration Testing**:
2239
+
2240
+ - Profile: `minimal`
2241
+ - Accept: All warnings (just testing connections)
2242
+ - Fix: Only errors that prevent execution
2243
+
2244
+ ---
2245
+
2246
+ ## Decision Framework
2247
+
2248
+ ### Should I Fix This Warning?
2249
+
2250
+ ```
2251
+ +----------------------------------+
2252
+ | Is it a SECURITY warning? |
2253
+ +----------------------------------+
2254
+ | YES -> Always fix |
2255
+ | NO -> Continue |
2256
+ +----------------------------------+
2257
+ |
2258
+ +----------------------------------+
2259
+ | Is this a production workflow? |
2260
+ +----------------------------------+
2261
+ | YES -> Continue |
2262
+ | NO -> Probably acceptable |
2263
+ +----------------------------------+
2264
+ |
2265
+ +----------------------------------+
2266
+ | Does it handle critical data? |
2267
+ +----------------------------------+
2268
+ | YES -> Fix the warning |
2269
+ | NO -> Continue |
2270
+ +----------------------------------+
2271
+ |
2272
+ +----------------------------------+
2273
+ | Is there a known workaround? |
2274
+ +----------------------------------+
2275
+ | YES -> Acceptable if documented |
2276
+ | NO -> Fix the warning |
2277
+ +----------------------------------+
2278
+ ```
2279
+
2280
+ ---
2281
+
2282
+ ## Documentation Template
2283
+
2284
+ When accepting a warning, document why:
2285
+
2286
+ ```javascript
2287
+ // workflows/customer-notifications.json
2288
+
2289
+ {
2290
+ "nodes": [{
2291
+ "name": "Send Slack Notification",
2292
+ "type": "n8n-nodes-base.slack",
2293
+ "parameters": {
2294
+ "channel": "#notifications"
2295
+ // ACCEPTED WARNING: No error handling
2296
+ // Reason: Non-critical notification, failures are acceptable
2297
+ // Reviewed: 2025-10-20
2298
+ // Reviewer: Engineering Team
2299
+ }
2300
+ }]
2301
+ }
2302
+ ```
2303
+
2304
+ ---
2305
+
2306
+ ## Known n8n Issues
2307
+
2308
+ ### Issue #304: IF Node Metadata Warning
2309
+
2310
+ **Warning**:
2311
+
2312
+ ```json
2313
+ {
2314
+ "type": "metadata_incomplete",
2315
+ "message": "IF node missing conditions.options metadata",
2316
+ "node": "IF"
2317
+ }
2318
+ ```
2319
+
2320
+ **Status**: False positive for IF v2.2+
2321
+
2322
+ **Why it occurs**: Auto-sanitization adds metadata, but validation runs before sanitization
2323
+
2324
+ **What to do**: Ignore - metadata is added on save
2325
+
2326
+ ### Issue #306: Switch Branch Count
2327
+
2328
+ **Warning**:
2329
+
2330
+ ```json
2331
+ {
2332
+ "type": "configuration_mismatch",
2333
+ "message": "Switch has 3 rules but 4 output connections",
2334
+ "node": "Switch"
2335
+ }
2336
+ ```
2337
+
2338
+ **Status**: False positive when using "fallback" mode
2339
+
2340
+ **Why it occurs**: Fallback creates extra output
2341
+
2342
+ **What to do**: Ignore if using fallback intentionally
2343
+
2344
+ ### Issue #338: Credential Validation in Test Mode
2345
+
2346
+ **Warning**:
2347
+
2348
+ ```json
2349
+ {
2350
+ "type": "credentials_invalid",
2351
+ "message": "Cannot validate credentials without execution context"
2352
+ }
2353
+ ```
2354
+
2355
+ **Status**: False positive during static validation
2356
+
2357
+ **Why it occurs**: Credentials validated at runtime, not build time
2358
+
2359
+ **What to do**: Ignore - credentials are validated when workflow runs
2360
+
2361
+ ---
2362
+
2363
+ ## False Positives Summary
2364
+
2365
+ ### Always Fix
2366
+
2367
+ - Security warnings
2368
+ - Hardcoded credentials
2369
+ - SQL injection risks
2370
+ - Production workflow errors
2371
+
2372
+ ### Usually Fix
2373
+
2374
+ - Error handling (production)
2375
+ - Retry logic (external APIs)
2376
+ - Input validation (public webhooks)
2377
+ - Rate limiting (high volume)
2378
+
2379
+ ### Often Acceptable
2380
+
2381
+ - Error handling (dev/test)
2382
+ - Retry logic (internal APIs)
2383
+ - Rate limiting (low volume)
2384
+ - Query limits (small datasets)
2385
+
2386
+ ### Always Acceptable
2387
+
2388
+ - Known n8n issues (#304, #306, #338)
2389
+ - Auto-sanitization warnings
2390
+ - Metadata completeness (auto-fixed)
2391
+
2392
+ **Golden Rule**: If you accept a warning, document WHY.
2393
+
2394
+ ---
2395
+
2396
+ # Auto-Sanitization Behavior
2397
+
2398
+ ## What It Does
2399
+
2400
+ **Automatically fixes common operator structure issues** on ANY workflow update
2401
+
2402
+ **Runs when**:
2403
+
2404
+ - `n8n_create_workflow`
2405
+ - `n8n_update_partial_workflow`
2406
+ - Any workflow save operation
2407
+
2408
+ ## What It Fixes
2409
+
2410
+ ### 1. Binary Operators (Two Values)
2411
+
2412
+ **Operators**: equals, notEquals, contains, notContains, greaterThan, lessThan, startsWith, endsWith
2413
+
2414
+ **Fix**: Removes `singleValue` property (binary operators compare two values)
2415
+
2416
+ **Before**:
2417
+
2418
+ ```javascript
2419
+ {
2420
+ "type": "boolean",
2421
+ "operation": "equals",
2422
+ "singleValue": true // Wrong!
2423
+ }
2424
+ ```
2425
+
2426
+ **After** (automatic):
2427
+
2428
+ ```javascript
2429
+ {
2430
+ "type": "boolean",
2431
+ "operation": "equals"
2432
+ // singleValue removed
2433
+ }
2434
+ ```
2435
+
2436
+ ### 2. Unary Operators (One Value)
2437
+
2438
+ **Operators**: isEmpty, isNotEmpty, true, false
2439
+
2440
+ **Fix**: Adds `singleValue: true` (unary operators check single value)
2441
+
2442
+ **Before**:
2443
+
2444
+ ```javascript
2445
+ {
2446
+ "type": "boolean",
2447
+ "operation": "isEmpty"
2448
+ // Missing singleValue
2449
+ }
2450
+ ```
2451
+
2452
+ **After** (automatic):
2453
+
2454
+ ```javascript
2455
+ {
2456
+ "type": "boolean",
2457
+ "operation": "isEmpty",
2458
+ "singleValue": true // Added
2459
+ }
2460
+ ```
2461
+
2462
+ ### 3. IF/Switch Metadata
2463
+
2464
+ **Fix**: Adds complete `conditions.options` metadata for IF v2.2+ and Switch v3.2+
2465
+
2466
+ ## What It CANNOT Fix
2467
+
2468
+ ### 1. Broken Connections
2469
+
2470
+ References to non-existent nodes
2471
+
2472
+ **Solution**: Use `cleanStaleConnections` operation in `n8n_update_partial_workflow`
2473
+
2474
+ ### 2. Branch Count Mismatches
2475
+
2476
+ 3 Switch rules but only 2 output connections
2477
+
2478
+ **Solution**: Add missing connections or remove extra rules
2479
+
2480
+ ### 3. Paradoxical Corrupt States
2481
+
2482
+ API returns corrupt data but rejects updates
2483
+
2484
+ **Solution**: May require manual database intervention
2485
+
2486
+ ---
2487
+
2488
+ ## Cross-References
2489
+
2490
+ - **[mcp-tools-expert.md](mcp-tools-expert.md)** - `validate_node` and `validate_workflow` tool parameters, usage patterns, and MCP integration
2491
+ - **[node-configuration.md](node-configuration.md)** - Required fields per node type, fixing configuration errors, and understanding node properties