specweave 0.18.0 → 0.20.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 (428) hide show
  1. package/CLAUDE.md +229 -1817
  2. package/README.md +68 -0
  3. package/bin/specweave.js +62 -6
  4. package/dist/locales/de/.gitkeep +0 -0
  5. package/dist/locales/de/cli.json +108 -0
  6. package/dist/locales/en/cli.json +287 -0
  7. package/dist/locales/en/errors.json +7 -0
  8. package/dist/locales/en/templates.json +6 -0
  9. package/dist/locales/es/.gitkeep +0 -0
  10. package/dist/locales/es/cli.json +41 -0
  11. package/dist/locales/fr/.gitkeep +0 -0
  12. package/dist/locales/fr/cli.json +108 -0
  13. package/dist/locales/ja/.gitkeep +0 -0
  14. package/dist/locales/ja/cli.json +108 -0
  15. package/dist/locales/ko/.gitkeep +0 -0
  16. package/dist/locales/ko/cli.json +108 -0
  17. package/dist/locales/pt/.gitkeep +0 -0
  18. package/dist/locales/pt/cli.json +108 -0
  19. package/dist/locales/ru/.gitkeep +0 -0
  20. package/dist/locales/ru/cli.json +269 -0
  21. package/dist/locales/zh/.gitkeep +0 -0
  22. package/dist/locales/zh/cli.json +108 -0
  23. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  24. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +3 -0
  25. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  26. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +21 -0
  27. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +1 -0
  28. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +162 -0
  29. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +1 -0
  30. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
  31. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +65 -6
  32. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
  33. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +25 -0
  34. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +1 -0
  35. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +191 -0
  36. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +1 -0
  37. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +112 -0
  38. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -0
  39. package/dist/plugins/specweave-github/lib/completion-calculator.js +301 -0
  40. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -0
  41. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +3 -3
  42. package/dist/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  43. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +70 -0
  44. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -0
  45. package/dist/plugins/specweave-github/lib/epic-content-builder.js +258 -0
  46. package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -0
  47. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +14 -0
  48. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  49. package/dist/plugins/specweave-github/lib/github-client-v2.js +51 -0
  50. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  51. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +2 -2
  52. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +1 -1
  53. package/dist/plugins/specweave-github/lib/github-epic-sync.js +20 -5
  54. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
  55. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +87 -0
  56. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -0
  57. package/dist/plugins/specweave-github/lib/github-feature-sync.js +412 -0
  58. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -0
  59. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  60. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +64 -13
  61. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  62. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts +78 -0
  63. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +1 -0
  64. package/dist/plugins/specweave-github/lib/progress-comment-builder.js +237 -0
  65. package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -0
  66. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts +97 -0
  67. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -0
  68. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +301 -0
  69. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -0
  70. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +83 -0
  71. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -0
  72. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +386 -0
  73. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -0
  74. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +28 -0
  75. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -0
  76. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +156 -0
  77. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -0
  78. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts +57 -0
  79. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts.map +1 -0
  80. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +248 -0
  81. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js.map +1 -0
  82. package/dist/plugins/specweave-kafka/lib/cli/types.d.ts +82 -0
  83. package/dist/plugins/specweave-kafka/lib/cli/types.d.ts.map +1 -0
  84. package/dist/plugins/specweave-kafka/lib/cli/types.js +13 -0
  85. package/dist/plugins/specweave-kafka/lib/cli/types.js.map +1 -0
  86. package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts +49 -0
  87. package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts.map +1 -0
  88. package/dist/plugins/specweave-kafka/lib/mcp/detector.js +316 -0
  89. package/dist/plugins/specweave-kafka/lib/mcp/detector.js.map +1 -0
  90. package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts +70 -0
  91. package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts.map +1 -0
  92. package/dist/plugins/specweave-kafka/lib/mcp/types.js +23 -0
  93. package/dist/plugins/specweave-kafka/lib/mcp/types.js.map +1 -0
  94. package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts +85 -0
  95. package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts.map +1 -0
  96. package/dist/plugins/specweave-kafka/lib/utils/partitioning.js +281 -0
  97. package/dist/plugins/specweave-kafka/lib/utils/partitioning.js.map +1 -0
  98. package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts +75 -0
  99. package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts.map +1 -0
  100. package/dist/plugins/specweave-kafka/lib/utils/sizing.js +238 -0
  101. package/dist/plugins/specweave-kafka/lib/utils/sizing.js.map +1 -0
  102. package/dist/spec-parser.js +629 -0
  103. package/dist/src/cli/commands/import-docs.js +4 -4
  104. package/dist/src/cli/commands/import-docs.js.map +1 -1
  105. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
  106. package/dist/src/cli/commands/init-multiproject.js +17 -18
  107. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  108. package/dist/src/cli/commands/init.d.ts.map +1 -1
  109. package/dist/src/cli/commands/init.js +107 -3
  110. package/dist/src/cli/commands/init.js.map +1 -1
  111. package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -1
  112. package/dist/src/cli/commands/migrate-to-multiproject.js +8 -4
  113. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  114. package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
  115. package/dist/src/cli/commands/switch-project.js +9 -26
  116. package/dist/src/cli/commands/switch-project.js.map +1 -1
  117. package/dist/src/cli/commands/sync-spec-content.js +3 -0
  118. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  119. package/dist/src/core/deduplication/command-deduplicator.d.ts +166 -0
  120. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -0
  121. package/dist/src/core/deduplication/command-deduplicator.js +254 -0
  122. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -0
  123. package/dist/src/core/increment/active-increment-manager.d.ts +42 -15
  124. package/dist/src/core/increment/active-increment-manager.d.ts.map +1 -1
  125. package/dist/src/core/increment/active-increment-manager.js +113 -46
  126. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  127. package/dist/src/core/increment/conflict-resolver.d.ts +40 -0
  128. package/dist/src/core/increment/conflict-resolver.d.ts.map +1 -0
  129. package/dist/src/core/increment/conflict-resolver.js +219 -0
  130. package/dist/src/core/increment/conflict-resolver.js.map +1 -0
  131. package/dist/src/core/increment/discipline-checker.d.ts.map +1 -1
  132. package/dist/src/core/increment/discipline-checker.js +7 -1
  133. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  134. package/dist/src/core/increment/duplicate-detector.d.ts +52 -0
  135. package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -0
  136. package/dist/src/core/increment/duplicate-detector.js +276 -0
  137. package/dist/src/core/increment/duplicate-detector.js.map +1 -0
  138. package/dist/src/core/increment/increment-archiver.d.ts +90 -0
  139. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -0
  140. package/dist/src/core/increment/increment-archiver.js +368 -0
  141. package/dist/src/core/increment/increment-archiver.js.map +1 -0
  142. package/dist/src/core/increment/increment-reopener.d.ts +165 -0
  143. package/dist/src/core/increment/increment-reopener.d.ts.map +1 -0
  144. package/dist/src/core/increment/increment-reopener.js +390 -0
  145. package/dist/src/core/increment/increment-reopener.js.map +1 -0
  146. package/dist/src/core/increment/metadata-manager.d.ts +26 -1
  147. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  148. package/dist/src/core/increment/metadata-manager.js +143 -5
  149. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  150. package/dist/src/core/increment/recent-work-scanner.d.ts +121 -0
  151. package/dist/src/core/increment/recent-work-scanner.d.ts.map +1 -0
  152. package/dist/src/core/increment/recent-work-scanner.js +303 -0
  153. package/dist/src/core/increment/recent-work-scanner.js.map +1 -0
  154. package/dist/src/core/increment/types.d.ts +1 -0
  155. package/dist/src/core/increment/types.d.ts.map +1 -1
  156. package/dist/src/core/increment-utils.d.ts +112 -0
  157. package/dist/src/core/increment-utils.d.ts.map +1 -0
  158. package/dist/src/core/increment-utils.js +210 -0
  159. package/dist/src/core/increment-utils.js.map +1 -0
  160. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts +65 -0
  161. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts.map +1 -0
  162. package/dist/src/core/living-docs/ac-project-specific-generator.js +175 -0
  163. package/dist/src/core/living-docs/ac-project-specific-generator.js.map +1 -0
  164. package/dist/src/core/living-docs/feature-archiver.d.ts +130 -0
  165. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -0
  166. package/dist/src/core/living-docs/feature-archiver.js +549 -0
  167. package/dist/src/core/living-docs/feature-archiver.js.map +1 -0
  168. package/dist/src/core/living-docs/feature-id-manager.d.ts +81 -0
  169. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -0
  170. package/dist/src/core/living-docs/feature-id-manager.js +339 -0
  171. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -0
  172. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +144 -83
  173. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  174. package/dist/src/core/living-docs/hierarchy-mapper.js +488 -270
  175. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  176. package/dist/src/core/living-docs/index.d.ts +6 -0
  177. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  178. package/dist/src/core/living-docs/index.js +6 -0
  179. package/dist/src/core/living-docs/index.js.map +1 -1
  180. package/dist/src/core/living-docs/project-detector.d.ts +6 -0
  181. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  182. package/dist/src/core/living-docs/project-detector.js +35 -1
  183. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  184. package/dist/src/core/living-docs/spec-distributor.d.ts +100 -26
  185. package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -1
  186. package/dist/src/core/living-docs/spec-distributor.js +1275 -258
  187. package/dist/src/core/living-docs/spec-distributor.js.map +1 -1
  188. package/dist/src/core/living-docs/task-project-specific-generator.d.ts +109 -0
  189. package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -0
  190. package/dist/src/core/living-docs/task-project-specific-generator.js +221 -0
  191. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -0
  192. package/dist/src/core/living-docs/types.d.ts +143 -0
  193. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  194. package/dist/src/core/project-manager.d.ts +2 -17
  195. package/dist/src/core/project-manager.d.ts.map +1 -1
  196. package/dist/src/core/project-manager.js +68 -48
  197. package/dist/src/core/project-manager.js.map +1 -1
  198. package/dist/src/core/spec-content-sync.d.ts +1 -1
  199. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  200. package/dist/src/core/sync/enhanced-content-builder.d.ts +32 -54
  201. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  202. package/dist/src/core/sync/enhanced-content-builder.js +142 -138
  203. package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
  204. package/dist/src/core/sync/performance-optimizer.d.ts +153 -0
  205. package/dist/src/core/sync/performance-optimizer.d.ts.map +1 -0
  206. package/dist/src/core/sync/performance-optimizer.js +220 -0
  207. package/dist/src/core/sync/performance-optimizer.js.map +1 -0
  208. package/dist/src/core/sync/retry-handler.d.ts +98 -0
  209. package/dist/src/core/sync/retry-handler.d.ts.map +1 -0
  210. package/dist/src/core/sync/retry-handler.js +196 -0
  211. package/dist/src/core/sync/retry-handler.js.map +1 -0
  212. package/dist/src/core/sync/spec-content-sync.d.ts +88 -0
  213. package/dist/src/core/sync/spec-content-sync.d.ts.map +1 -0
  214. package/dist/src/core/sync/spec-content-sync.js +5 -0
  215. package/dist/src/core/sync/spec-content-sync.js.map +1 -0
  216. package/dist/src/core/sync/types.d.ts +52 -0
  217. package/dist/src/core/sync/types.d.ts.map +1 -0
  218. package/dist/src/core/sync/types.js +5 -0
  219. package/dist/src/core/sync/types.js.map +1 -0
  220. package/dist/src/core/types/config.d.ts +125 -0
  221. package/dist/src/core/types/config.d.ts.map +1 -1
  222. package/dist/src/core/types/config.js +25 -0
  223. package/dist/src/core/types/config.js.map +1 -1
  224. package/dist/src/core/types/increment-metadata.d.ts +10 -0
  225. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  226. package/dist/src/core/types/increment-metadata.js +10 -1
  227. package/dist/src/core/types/increment-metadata.js.map +1 -1
  228. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  229. package/dist/src/integrations/jira/jira-incremental-mapper.js +4 -8
  230. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  231. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  232. package/dist/src/integrations/jira/jira-mapper.js +4 -8
  233. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  234. package/dist/tsconfig.tsbuildinfo +1 -0
  235. package/package.json +1 -1
  236. package/plugins/specweave/COMMANDS.md +13 -4
  237. package/plugins/specweave/agents/pm/AGENT.md +159 -12
  238. package/plugins/specweave/commands/specweave-abandon.md +22 -20
  239. package/plugins/specweave/commands/specweave-archive-features.md +121 -0
  240. package/plugins/specweave/commands/specweave-archive-increments.md +82 -0
  241. package/plugins/specweave/commands/specweave-archive.md +363 -0
  242. package/plugins/specweave/commands/specweave-backlog.md +211 -0
  243. package/plugins/specweave/commands/specweave-fix-duplicates.md +517 -0
  244. package/plugins/specweave/commands/specweave-increment.md +4 -3
  245. package/plugins/specweave/commands/specweave-progress.md +176 -27
  246. package/plugins/specweave/commands/specweave-reopen.md +391 -0
  247. package/plugins/specweave/commands/specweave-restore-feature.md +90 -0
  248. package/plugins/specweave/commands/specweave-restore.md +309 -0
  249. package/plugins/specweave/commands/specweave-resume.md +51 -23
  250. package/plugins/specweave/commands/specweave-status.md +41 -7
  251. package/plugins/specweave/commands/specweave-sync-specs.md +425 -0
  252. package/plugins/specweave/commands/specweave.md +70 -405
  253. package/plugins/specweave/hooks/hooks.json +4 -0
  254. package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
  255. package/plugins/specweave/hooks/post-increment-planning.sh +26 -2
  256. package/plugins/specweave/hooks/post-task-completion.sh +39 -0
  257. package/plugins/specweave/hooks/pre-command-deduplication.sh +83 -0
  258. package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
  259. package/plugins/specweave/lib/hooks/sync-living-docs.js +2 -0
  260. package/plugins/specweave/lib/hooks/sync-living-docs.ts +4 -0
  261. package/plugins/specweave/lib/hooks/update-ac-status.js +102 -0
  262. package/plugins/specweave/lib/hooks/update-ac-status.ts +192 -0
  263. package/plugins/specweave/skills/archive-increments/SKILL.md +198 -0
  264. package/plugins/specweave/skills/increment-planner/scripts/feature-utils.js +14 -0
  265. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +244 -0
  266. package/plugins/specweave-ado/lib/ado-spec-content-sync.js +49 -5
  267. package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +72 -6
  268. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  269. package/plugins/specweave-confluent/.claude-plugin/plugin.json +23 -0
  270. package/plugins/specweave-confluent/README.md +375 -0
  271. package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +306 -0
  272. package/plugins/specweave-confluent/skills/confluent-kafka-connect/SKILL.md +453 -0
  273. package/plugins/specweave-confluent/skills/confluent-ksqldb/SKILL.md +470 -0
  274. package/plugins/specweave-confluent/skills/confluent-schema-registry/SKILL.md +316 -0
  275. package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +2 -2
  276. package/plugins/specweave-github/agents/user-story-updater/AGENT.md +148 -0
  277. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +1 -1
  278. package/plugins/specweave-github/commands/specweave-github-update-user-story.md +156 -0
  279. package/plugins/specweave-github/hooks/post-task-completion.sh +42 -9
  280. package/plugins/specweave-github/lib/completion-calculator.js +262 -0
  281. package/plugins/specweave-github/lib/completion-calculator.ts +434 -0
  282. package/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  283. package/plugins/specweave-github/lib/duplicate-detector.ts +4 -4
  284. package/plugins/specweave-github/lib/epic-content-builder.js +265 -0
  285. package/plugins/specweave-github/lib/epic-content-builder.ts +376 -0
  286. package/plugins/specweave-github/lib/github-client-v2.js +49 -0
  287. package/plugins/specweave-github/lib/github-client-v2.ts +59 -0
  288. package/plugins/specweave-github/lib/github-epic-sync.js +23 -24
  289. package/plugins/specweave-github/lib/github-epic-sync.ts +30 -5
  290. package/plugins/specweave-github/lib/github-feature-sync.js +381 -0
  291. package/plugins/specweave-github/lib/github-feature-sync.ts +568 -0
  292. package/plugins/specweave-github/lib/github-spec-content-sync.js +40 -10
  293. package/plugins/specweave-github/lib/github-spec-content-sync.ts +82 -14
  294. package/plugins/specweave-github/lib/progress-comment-builder.js +229 -0
  295. package/plugins/specweave-github/lib/progress-comment-builder.ts +324 -0
  296. package/plugins/specweave-github/lib/user-story-content-builder.js +299 -0
  297. package/plugins/specweave-github/lib/user-story-content-builder.ts +413 -0
  298. package/plugins/specweave-github/lib/user-story-issue-builder.js +344 -0
  299. package/plugins/specweave-github/lib/user-story-issue-builder.ts +543 -0
  300. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +189 -0
  301. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
  302. package/plugins/specweave-jira/lib/{enhanced-jira-sync.ts.disabled → enhanced-jira-sync.ts} +26 -52
  303. package/plugins/specweave-kafka/.claude-plugin/plugin.json +26 -0
  304. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +483 -0
  305. package/plugins/specweave-kafka/README.md +242 -0
  306. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +235 -0
  307. package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +209 -0
  308. package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +266 -0
  309. package/plugins/specweave-kafka/commands/deploy.md +99 -0
  310. package/plugins/specweave-kafka/commands/dev-env.md +176 -0
  311. package/plugins/specweave-kafka/commands/mcp-configure.md +101 -0
  312. package/plugins/specweave-kafka/commands/monitor-setup.md +96 -0
  313. package/plugins/specweave-kafka/docker/kafka-local/docker-compose.yml +187 -0
  314. package/plugins/specweave-kafka/docker/redpanda/docker-compose.yml +199 -0
  315. package/plugins/specweave-kafka/docker/templates/consumer-nodejs.js +225 -0
  316. package/plugins/specweave-kafka/docker/templates/consumer-python.py +220 -0
  317. package/plugins/specweave-kafka/docker/templates/producer-nodejs.js +168 -0
  318. package/plugins/specweave-kafka/docker/templates/producer-python.py +167 -0
  319. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.js +438 -0
  320. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.ts +541 -0
  321. package/plugins/specweave-kafka/lib/adapters/platform-adapter.js +47 -0
  322. package/plugins/specweave-kafka/lib/adapters/platform-adapter.ts +343 -0
  323. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +258 -0
  324. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.ts +298 -0
  325. package/plugins/specweave-kafka/lib/cli/types.js +10 -0
  326. package/plugins/specweave-kafka/lib/cli/types.ts +92 -0
  327. package/plugins/specweave-kafka/lib/connectors/connector-catalog.js +305 -0
  328. package/plugins/specweave-kafka/lib/connectors/connector-catalog.ts +528 -0
  329. package/plugins/specweave-kafka/lib/documentation/diagram-generator.js +114 -0
  330. package/plugins/specweave-kafka/lib/documentation/diagram-generator.ts +195 -0
  331. package/plugins/specweave-kafka/lib/documentation/exporter.js +210 -0
  332. package/plugins/specweave-kafka/lib/documentation/exporter.ts +338 -0
  333. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.js +60 -0
  334. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.ts +130 -0
  335. package/plugins/specweave-kafka/lib/documentation/topology-generator.js +143 -0
  336. package/plugins/specweave-kafka/lib/documentation/topology-generator.ts +290 -0
  337. package/plugins/specweave-kafka/lib/mcp/detector.js +298 -0
  338. package/plugins/specweave-kafka/lib/mcp/detector.ts +352 -0
  339. package/plugins/specweave-kafka/lib/mcp/types.js +21 -0
  340. package/plugins/specweave-kafka/lib/mcp/types.ts +77 -0
  341. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.js +193 -0
  342. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.ts +362 -0
  343. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.js +188 -0
  344. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.ts +359 -0
  345. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.js +195 -0
  346. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.ts +380 -0
  347. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.js +209 -0
  348. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.ts +358 -0
  349. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.js +354 -0
  350. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.ts +563 -0
  351. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.js +259 -0
  352. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.ts +516 -0
  353. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.js +233 -0
  354. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.ts +423 -0
  355. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.js +266 -0
  356. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.ts +445 -0
  357. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.js +312 -0
  358. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.ts +561 -0
  359. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.js +289 -0
  360. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.ts +607 -0
  361. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.js +264 -0
  362. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.ts +498 -0
  363. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.js +263 -0
  364. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.ts +549 -0
  365. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.js +205 -0
  366. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.ts +399 -0
  367. package/plugins/specweave-kafka/lib/performance/performance-optimizer.js +249 -0
  368. package/plugins/specweave-kafka/lib/performance/performance-optimizer.ts +427 -0
  369. package/plugins/specweave-kafka/lib/security/kafka-security.js +252 -0
  370. package/plugins/specweave-kafka/lib/security/kafka-security.ts +494 -0
  371. package/plugins/specweave-kafka/lib/utils/capacity-planner.js +203 -0
  372. package/plugins/specweave-kafka/lib/utils/capacity-planner.ts +469 -0
  373. package/plugins/specweave-kafka/lib/utils/config-validator.js +419 -0
  374. package/plugins/specweave-kafka/lib/utils/config-validator.ts +564 -0
  375. package/plugins/specweave-kafka/lib/utils/partitioning.js +329 -0
  376. package/plugins/specweave-kafka/lib/utils/partitioning.ts +473 -0
  377. package/plugins/specweave-kafka/lib/utils/sizing.js +221 -0
  378. package/plugins/specweave-kafka/lib/utils/sizing.ts +374 -0
  379. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-broker-metrics.json +628 -0
  380. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-cluster-overview.json +564 -0
  381. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-consumer-lag.json +509 -0
  382. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-jvm-metrics.json +674 -0
  383. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-topic-metrics.json +578 -0
  384. package/plugins/specweave-kafka/monitoring/grafana/provisioning/dashboards/kafka.yml +17 -0
  385. package/plugins/specweave-kafka/monitoring/grafana/provisioning/datasources/prometheus.yml +17 -0
  386. package/plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml +415 -0
  387. package/plugins/specweave-kafka/monitoring/prometheus/kafka-jmx-exporter.yml +256 -0
  388. package/plugins/specweave-kafka/package.json +41 -0
  389. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +647 -0
  390. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +433 -0
  391. package/plugins/specweave-kafka/skills/kafka-iac-deployment/SKILL.md +449 -0
  392. package/plugins/specweave-kafka/skills/kafka-kubernetes/SKILL.md +667 -0
  393. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +273 -0
  394. package/plugins/specweave-kafka/skills/kafka-observability/SKILL.md +576 -0
  395. package/plugins/specweave-kafka/templates/config/broker-production.properties +254 -0
  396. package/plugins/specweave-kafka/templates/config/consumer-low-latency.properties +112 -0
  397. package/plugins/specweave-kafka/templates/config/producer-high-throughput.properties +120 -0
  398. package/plugins/specweave-kafka/templates/migration/mirrormaker2-config.properties +234 -0
  399. package/plugins/specweave-kafka/templates/monitoring/grafana/multi-cluster-dashboard.json +686 -0
  400. package/plugins/specweave-kafka/terraform/apache-kafka/main.tf +347 -0
  401. package/plugins/specweave-kafka/terraform/apache-kafka/outputs.tf +107 -0
  402. package/plugins/specweave-kafka/terraform/apache-kafka/templates/kafka-broker-init.sh.tpl +216 -0
  403. package/plugins/specweave-kafka/terraform/apache-kafka/variables.tf +156 -0
  404. package/plugins/specweave-kafka/terraform/aws-msk/main.tf +362 -0
  405. package/plugins/specweave-kafka/terraform/aws-msk/outputs.tf +93 -0
  406. package/plugins/specweave-kafka/terraform/aws-msk/templates/server.properties.tpl +32 -0
  407. package/plugins/specweave-kafka/terraform/aws-msk/variables.tf +235 -0
  408. package/plugins/specweave-kafka/terraform/azure-event-hubs/main.tf +281 -0
  409. package/plugins/specweave-kafka/terraform/azure-event-hubs/outputs.tf +118 -0
  410. package/plugins/specweave-kafka/terraform/azure-event-hubs/variables.tf +148 -0
  411. package/plugins/specweave-kafka/tsconfig.json +21 -0
  412. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +23 -0
  413. package/plugins/specweave-kafka-streams/README.md +310 -0
  414. package/plugins/specweave-kafka-streams/skills/kafka-streams-topology/SKILL.md +539 -0
  415. package/plugins/specweave-n8n/.claude-plugin/plugin.json +22 -0
  416. package/plugins/specweave-n8n/README.md +354 -0
  417. package/plugins/specweave-n8n/skills/n8n-kafka-workflows/SKILL.md +504 -0
  418. package/plugins/specweave-release/commands/specweave-release-platform.md +1 -1
  419. package/plugins/specweave-release/hooks/post-task-completion.sh +2 -2
  420. package/src/templates/AGENTS.md.template +601 -7
  421. package/src/templates/CLAUDE.md.template +188 -88
  422. package/plugins/specweave-ado/commands/specweave-ado-sync-spec.md +0 -255
  423. package/plugins/specweave-github/commands/specweave-github-sync-epic.md +0 -248
  424. package/plugins/specweave-github/commands/specweave-github-sync-from.md +0 -147
  425. package/plugins/specweave-github/commands/specweave-github-sync-spec.md +0 -208
  426. package/plugins/specweave-github/commands/specweave-github-sync-tasks.md +0 -530
  427. package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +0 -267
  428. package/plugins/specweave-jira/commands/specweave-jira-sync-spec.md +0 -240
@@ -0,0 +1,504 @@
1
+ ---
2
+ name: n8n-kafka-workflows
3
+ description: n8n workflow automation with Kafka integration expert. Covers Kafka trigger node, producer node, event-driven workflows, error handling, retries, and no-code/low-code event processing patterns. Activates for n8n kafka, kafka trigger, kafka producer, n8n workflows, event-driven automation, no-code kafka, workflow patterns.
4
+ ---
5
+
6
+ # n8n Kafka Workflows Skill
7
+
8
+ Expert knowledge of integrating Apache Kafka with n8n workflow automation platform for no-code/low-code event-driven processing.
9
+
10
+ ## What I Know
11
+
12
+ ### n8n Kafka Nodes
13
+
14
+ **Kafka Trigger Node** (Event Consumer):
15
+ - Triggers workflow on new Kafka messages
16
+ - Supports consumer groups
17
+ - Auto-commit or manual offset management
18
+ - Multiple topic subscription
19
+ - Message batching
20
+
21
+ **Kafka Producer Node** (Event Publisher):
22
+ - Sends messages to Kafka topics
23
+ - Supports key-based partitioning
24
+ - Header support
25
+ - Compression (gzip, snappy, lz4)
26
+ - Batch sending
27
+
28
+ **Configuration**:
29
+ ```json
30
+ {
31
+ "credentials": {
32
+ "kafkaApi": {
33
+ "brokers": "localhost:9092",
34
+ "clientId": "n8n-workflow",
35
+ "ssl": false,
36
+ "sasl": {
37
+ "mechanism": "plain",
38
+ "username": "{{$env.KAFKA_USER}}",
39
+ "password": "{{$env.KAFKA_PASSWORD}}"
40
+ }
41
+ }
42
+ }
43
+ }
44
+ ```
45
+
46
+ ## When to Use This Skill
47
+
48
+ Activate me when you need help with:
49
+ - n8n Kafka setup ("Configure Kafka trigger in n8n")
50
+ - Workflow patterns ("Event-driven automation with n8n")
51
+ - Error handling ("Retry failed Kafka messages")
52
+ - Integration patterns ("Enrich Kafka events with HTTP API")
53
+ - Producer configuration ("Send messages to Kafka from n8n")
54
+ - Consumer groups ("Process Kafka events in parallel")
55
+
56
+ ## Common Workflow Patterns
57
+
58
+ ### Pattern 1: Event-Driven Processing
59
+
60
+ **Use Case**: Process Kafka events with HTTP API enrichment
61
+
62
+ ```
63
+ [Kafka Trigger] → [HTTP Request] → [Transform] → [Database]
64
+
65
+ orders topic
66
+
67
+ Get customer data
68
+
69
+ Merge order + customer
70
+
71
+ Save to PostgreSQL
72
+ ```
73
+
74
+ **n8n Workflow**:
75
+ 1. **Kafka Trigger**:
76
+ - Topic: `orders`
77
+ - Consumer Group: `order-processor`
78
+ - Offset: `latest`
79
+
80
+ 2. **HTTP Request** (Enrich):
81
+ - URL: `https://api.example.com/customers/{{$json.customerId}}`
82
+ - Method: GET
83
+ - Headers: `Authorization: Bearer {{$env.API_TOKEN}}`
84
+
85
+ 3. **Set Node** (Transform):
86
+ ```javascript
87
+ return {
88
+ orderId: $json.order.id,
89
+ customerId: $json.order.customerId,
90
+ customerName: $json.customer.name,
91
+ customerEmail: $json.customer.email,
92
+ total: $json.order.total,
93
+ timestamp: new Date().toISOString()
94
+ };
95
+ ```
96
+
97
+ 4. **PostgreSQL** (Save):
98
+ - Operation: INSERT
99
+ - Table: `enriched_orders`
100
+ - Columns: Mapped from Set node
101
+
102
+ ### Pattern 2: Fan-Out (Publish to Multiple Topics)
103
+
104
+ **Use Case**: Single event triggers multiple downstream workflows
105
+
106
+ ```
107
+ [Kafka Trigger] → [Switch] → [Kafka Producer] (topic: high-value-orders)
108
+ ↓ ↓
109
+ orders topic └─→ [Kafka Producer] (topic: all-orders)
110
+ └─→ [Kafka Producer] (topic: analytics)
111
+ ```
112
+
113
+ **n8n Workflow**:
114
+ 1. **Kafka Trigger**: Consume `orders`
115
+ 2. **Switch Node**: Route by `total` value
116
+ - Route 1: `total > 1000` → `high-value-orders` topic
117
+ - Route 2: Always → `all-orders` topic
118
+ - Route 3: Always → `analytics` topic
119
+ 3. **Kafka Producer** (x3): Send to respective topics
120
+
121
+ ### Pattern 3: Retry with Dead Letter Queue (DLQ)
122
+
123
+ **Use Case**: Retry failed messages, send to DLQ after 3 attempts
124
+
125
+ ```
126
+ [Kafka Trigger] → [Try/Catch] → [Success] → [Kafka Producer] (topic: processed)
127
+ ↓ ↓
128
+ input topic [Catch Error]
129
+
130
+ [Increment Retry Count]
131
+
132
+ [If Retry < 3]
133
+ ↓ Yes
134
+ [Kafka Producer] (topic: input-retry)
135
+ ↓ No
136
+ [Kafka Producer] (topic: dlq)
137
+ ```
138
+
139
+ **n8n Workflow**:
140
+ 1. **Kafka Trigger**: `input` topic
141
+ 2. **Try Node**: HTTP Request (may fail)
142
+ 3. **Catch Node** (Error Handler):
143
+ - Get retry count from message headers
144
+ - Increment retry count
145
+ - If retry < 3: Send to `input-retry` topic
146
+ - Else: Send to `dlq` topic
147
+
148
+ ### Pattern 4: Batch Processing with Aggregation
149
+
150
+ **Use Case**: Aggregate 100 events, send batch to API
151
+
152
+ ```
153
+ [Kafka Trigger] → [Aggregate] → [HTTP Request] → [Kafka Producer]
154
+ ↓ ↓
155
+ events topic Buffer 100 msgs
156
+
157
+ Send batch to API
158
+
159
+ Publish results
160
+ ```
161
+
162
+ **n8n Workflow**:
163
+ 1. **Kafka Trigger**: Enable batching (100 messages)
164
+ 2. **Aggregate Node**: Combine into array
165
+ 3. **HTTP Request**: POST batch
166
+ 4. **Kafka Producer**: Send results
167
+
168
+ ### Pattern 5: Change Data Capture (CDC) to Kafka
169
+
170
+ **Use Case**: Stream database changes to Kafka
171
+
172
+ ```
173
+ [Cron Trigger] → [PostgreSQL] → [Compare] → [Kafka Producer]
174
+ ↓ ↓ ↓
175
+ Every 1 min Get new rows Find diffs
176
+
177
+ Publish changes
178
+ ```
179
+
180
+ **n8n Workflow**:
181
+ 1. **Cron**: Every 1 minute
182
+ 2. **PostgreSQL**: SELECT new rows (WHERE updated_at > last_run)
183
+ 3. **Function Node**: Detect changes (INSERT/UPDATE/DELETE)
184
+ 4. **Kafka Producer**: Send CDC events
185
+
186
+ ## Best Practices
187
+
188
+ ### 1. Use Consumer Groups for Parallel Processing
189
+
190
+ ✅ **DO**:
191
+ ```
192
+ Workflow Instance 1:
193
+ Consumer Group: order-processor
194
+ Partition: 0, 1, 2
195
+
196
+ Workflow Instance 2:
197
+ Consumer Group: order-processor
198
+ Partition: 3, 4, 5
199
+ ```
200
+
201
+ ❌ **DON'T**:
202
+ ```
203
+ // WRONG: No consumer group (all instances get all messages!)
204
+ Consumer Group: (empty)
205
+ ```
206
+
207
+ ### 2. Handle Errors with Try/Catch
208
+
209
+ ✅ **DO**:
210
+ ```
211
+ [Kafka Trigger]
212
+
213
+ [Try] → [HTTP Request] → [Success Handler]
214
+
215
+ [Catch] → [Error Handler] → [Kafka DLQ]
216
+ ```
217
+
218
+ ❌ **DON'T**:
219
+ ```
220
+ // WRONG: No error handling (workflow crashes on failure!)
221
+ [Kafka Trigger] → [HTTP Request] → [Database]
222
+ ```
223
+
224
+ ### 3. Use Environment Variables for Credentials
225
+
226
+ ✅ **DO**:
227
+ ```
228
+ Kafka Brokers: {{$env.KAFKA_BROKERS}}
229
+ SASL Username: {{$env.KAFKA_USER}}
230
+ SASL Password: {{$env.KAFKA_PASSWORD}}
231
+ ```
232
+
233
+ ❌ **DON'T**:
234
+ ```
235
+ // WRONG: Hardcoded credentials in workflow!
236
+ Kafka Brokers: "localhost:9092"
237
+ SASL Username: "admin"
238
+ SASL Password: "admin-secret"
239
+ ```
240
+
241
+ ### 4. Set Explicit Partitioning Keys
242
+
243
+ ✅ **DO**:
244
+ ```
245
+ Kafka Producer:
246
+ Topic: orders
247
+ Key: {{$json.customerId}} // Partition by customer
248
+ Message: {{$json}}
249
+ ```
250
+
251
+ ❌ **DON'T**:
252
+ ```
253
+ // WRONG: No key (random partitioning!)
254
+ Kafka Producer:
255
+ Topic: orders
256
+ Message: {{$json}}
257
+ ```
258
+
259
+ ### 5. Monitor Consumer Lag
260
+
261
+ **Setup Prometheus metrics export**:
262
+ ```
263
+ [Cron Trigger] → [Kafka Admin] → [Get Consumer Lag] → [Prometheus]
264
+ ↓ ↓ ↓
265
+ Every 30s List consumer groups Calculate lag
266
+
267
+ Push to Pushgateway
268
+ ```
269
+
270
+ ## Error Handling Strategies
271
+
272
+ ### Strategy 1: Exponential Backoff Retry
273
+
274
+ ```javascript
275
+ // Function Node (Calculate Backoff)
276
+ const retryCount = $json.headers?.['retry-count'] || 0;
277
+ const backoffMs = Math.min(1000 * Math.pow(2, retryCount), 60000); // Max 60 seconds
278
+
279
+ return {
280
+ retryCount: retryCount + 1,
281
+ backoffMs,
282
+ nextRetryAt: new Date(Date.now() + backoffMs).toISOString()
283
+ };
284
+ ```
285
+
286
+ **Workflow**:
287
+ 1. Try processing
288
+ 2. On failure: Calculate backoff
289
+ 3. Wait (using Wait node)
290
+ 4. Retry (send to retry topic)
291
+ 5. If max retries reached: Send to DLQ
292
+
293
+ ### Strategy 2: Circuit Breaker
294
+
295
+ ```javascript
296
+ // Function Node (Check Failure Rate)
297
+ const failures = $json.metrics.failures || 0;
298
+ const total = $json.metrics.total || 1;
299
+ const failureRate = failures / total;
300
+
301
+ if (failureRate > 0.5) {
302
+ // Circuit open (too many failures)
303
+ return { circuitState: 'OPEN', skipProcessing: true };
304
+ }
305
+
306
+ return { circuitState: 'CLOSED', skipProcessing: false };
307
+ ```
308
+
309
+ **Workflow**:
310
+ 1. Track success/failure metrics
311
+ 2. Calculate failure rate
312
+ 3. If >50% failures: Open circuit (stop processing)
313
+ 4. Wait 30 seconds
314
+ 5. Try single request (half-open)
315
+ 6. If success: Close circuit (resume)
316
+
317
+ ### Strategy 3: Idempotent Processing
318
+
319
+ ```javascript
320
+ // Function Node (Deduplication)
321
+ const messageId = $json.headers?.['message-id'];
322
+ const cache = $('Redis').get(messageId);
323
+
324
+ if (cache) {
325
+ // Already processed, skip
326
+ return { skip: true, reason: 'duplicate' };
327
+ }
328
+
329
+ // Process and cache
330
+ await $('Redis').set(messageId, 'processed', { ttl: 3600 });
331
+ return { skip: false };
332
+ ```
333
+
334
+ **Workflow**:
335
+ 1. Extract message ID
336
+ 2. Check Redis cache
337
+ 3. If exists: Skip processing
338
+ 4. Process message
339
+ 5. Store message ID in cache (1 hour TTL)
340
+
341
+ ## Performance Optimization
342
+
343
+ ### 1. Batch Processing
344
+
345
+ **Enable batching in Kafka Trigger**:
346
+ ```
347
+ Kafka Trigger:
348
+ Batch Size: 100
349
+ Batch Timeout: 5000ms // Max wait 5 seconds
350
+ ```
351
+
352
+ **Process batch**:
353
+ ```javascript
354
+ // Function Node (Batch Transform)
355
+ const events = $input.all();
356
+ const transformed = events.map(event => ({
357
+ id: event.json.id,
358
+ timestamp: event.json.timestamp,
359
+ processed: true
360
+ }));
361
+
362
+ return transformed;
363
+ ```
364
+
365
+ ### 2. Parallel Processing with Split in Batches
366
+
367
+ ```
368
+ [Kafka Trigger] → [Split in Batches] → [HTTP Request] → [Aggregate]
369
+ ↓ ↓ ↓
370
+ 1000 events 100 at a time Parallel API calls
371
+
372
+ Combine results
373
+ ```
374
+
375
+ ### 3. Use Compression
376
+
377
+ **Kafka Producer**:
378
+ ```
379
+ Compression: lz4 // Or gzip, snappy
380
+ Batch Size: 1000 // Larger batches = better compression
381
+ ```
382
+
383
+ ## Integration Patterns
384
+
385
+ ### Pattern 1: Kafka + HTTP API Enrichment
386
+
387
+ ```
388
+ [Kafka Trigger] → [HTTP Request] → [Transform] → [Kafka Producer]
389
+ ↓ ↓ ↓
390
+ Raw events Enrich from API Combine data
391
+
392
+ Publish enriched
393
+ ```
394
+
395
+ ### Pattern 2: Kafka + Database Sync
396
+
397
+ ```
398
+ [Kafka Trigger] → [PostgreSQL Upsert] → [Kafka Producer]
399
+ ↓ ↓ ↓
400
+ CDC events Update database Publish success/failure
401
+ ```
402
+
403
+ ### Pattern 3: Kafka + Email Notifications
404
+
405
+ ```
406
+ [Kafka Trigger] → [If Critical] → [Send Email] → [Kafka Producer]
407
+ ↓ ↓ ↓
408
+ Alerts severity=critical Notify admin
409
+
410
+ Publish alert sent
411
+ ```
412
+
413
+ ### Pattern 4: Kafka + Slack Alerts
414
+
415
+ ```
416
+ [Kafka Trigger] → [Transform] → [Slack] → [Kafka Producer]
417
+ ↓ ↓ ↓
418
+ Errors Format message Send to #alerts
419
+
420
+ Publish notification
421
+ ```
422
+
423
+ ## Testing n8n Workflows
424
+
425
+ ### Manual Testing
426
+
427
+ 1. **Test with Sample Data**:
428
+ - Right-click node → "Add Sample Data"
429
+ - Execute workflow
430
+ - Check outputs
431
+
432
+ 2. **Test Kafka Producer**:
433
+ ```bash
434
+ # Consume test topic
435
+ kcat -C -b localhost:9092 -t test-output -o beginning
436
+ ```
437
+
438
+ 3. **Test Kafka Trigger**:
439
+ ```bash
440
+ # Produce test message
441
+ echo '{"test": "data"}' | kcat -P -b localhost:9092 -t test-input
442
+ ```
443
+
444
+ ### Automated Testing
445
+
446
+ **n8n CLI**:
447
+ ```bash
448
+ # Execute workflow with input
449
+ n8n execute workflow --file workflow.json --input data.json
450
+
451
+ # Export workflow
452
+ n8n export:workflow --id=123 --output=workflow.json
453
+ ```
454
+
455
+ ## Common Issues & Solutions
456
+
457
+ ### Issue 1: Consumer Lag Building Up
458
+
459
+ **Symptoms**: Processing slower than message arrival
460
+
461
+ **Solutions**:
462
+ 1. Increase consumer group size (parallel processing)
463
+ 2. Enable batching (process 100 messages at once)
464
+ 3. Optimize HTTP requests (use connection pooling)
465
+ 4. Use Split in Batches for parallel processing
466
+
467
+ ### Issue 2: Duplicate Messages
468
+
469
+ **Cause**: At-least-once delivery, no deduplication
470
+
471
+ **Solution**: Add idempotency check:
472
+ ```javascript
473
+ // Check if message already processed
474
+ const messageId = $json.headers?.['message-id'];
475
+ const exists = await $('Redis').exists(messageId);
476
+
477
+ if (exists) {
478
+ return { skip: true };
479
+ }
480
+ ```
481
+
482
+ ### Issue 3: Workflow Execution Timeout
483
+
484
+ **Cause**: Long-running HTTP requests
485
+
486
+ **Solution**: Use async patterns:
487
+ ```
488
+ [Kafka Trigger] → [Webhook] → [Wait for Webhook] → [Process Response]
489
+ ↓ ↓
490
+ Trigger job Async callback
491
+
492
+ Continue workflow
493
+ ```
494
+
495
+ ## References
496
+
497
+ - n8n Kafka Trigger: https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.kafkatrigger/
498
+ - n8n Kafka Producer: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.kafka/
499
+ - n8n Best Practices: https://docs.n8n.io/hosting/scaling/best-practices/
500
+ - Workflow Examples: https://n8n.io/workflows
501
+
502
+ ---
503
+
504
+ **Invoke me when you need n8n Kafka integration, workflow automation, or event-driven no-code patterns!**
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specweave-release-platform
2
+ name: specweave-release:platform
3
3
  description: "Coordinate multi-repo platform releases with synchronized versioning, RC workflow, and GitFlow integration. Usage: /specweave-release:platform create|promote|status"
4
4
  ---
5
5
 
@@ -13,7 +13,7 @@ SPECWEAVE_ROOT="${SPECWEAVE_ROOT:-$(pwd)}"
13
13
  METRICS_DIR="${SPECWEAVE_ROOT}/.specweave/metrics"
14
14
  HISTORY_FILE="${METRICS_DIR}/dora-history.jsonl"
15
15
  DASHBOARD_FILE="${SPECWEAVE_ROOT}/.specweave/docs/internal/delivery/dora-dashboard.md"
16
- DORA_CALCULATOR="${SPECWEAVE_ROOT}/dist/metrics/dora-calculator.js"
16
+ DORA_CALCULATOR="${SPECWEAVE_ROOT}/dist/src/metrics/dora-calculator.js"
17
17
  LATEST_FILE="${METRICS_DIR}/dora-latest.json"
18
18
 
19
19
  # Logging
@@ -60,7 +60,7 @@ fi
60
60
 
61
61
  # Step 3: Update living docs dashboard
62
62
  log "📝 Updating DORA dashboard..."
63
- DASHBOARD_GENERATOR="${SPECWEAVE_ROOT}/dist/metrics/dashboard-generator.js"
63
+ DASHBOARD_GENERATOR="${SPECWEAVE_ROOT}/dist/plugins/specweave-release/lib/dashboard-generator.js"
64
64
 
65
65
  if [[ -f "$DASHBOARD_GENERATOR" ]]; then
66
66
  if node "$DASHBOARD_GENERATOR"; then