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,316 @@
1
+ ---
2
+ name: confluent-schema-registry
3
+ description: Schema Registry expert for Avro, Protobuf, and JSON Schema management. Covers schema evolution strategies, compatibility modes, validation, and best practices for managing schemas in Confluent Cloud and self-hosted Schema Registry. Activates for schema registry, avro, protobuf, json schema, schema evolution, compatibility modes, schema validation.
4
+ ---
5
+
6
+ # Confluent Schema Registry Skill
7
+
8
+ Expert knowledge of Confluent Schema Registry for managing Avro, Protobuf, and JSON Schema schemas in Kafka ecosystems.
9
+
10
+ ## What I Know
11
+
12
+ ### Schema Formats
13
+
14
+ **Avro** (Most Popular):
15
+ - Binary serialization format
16
+ - Schema evolution support
17
+ - Smaller message size vs JSON
18
+ - Self-describing with schema ID in header
19
+ - Best for: High-throughput applications, data warehousing
20
+
21
+ **Protobuf** (Google Protocol Buffers):
22
+ - Binary serialization
23
+ - Strong typing with .proto files
24
+ - Language-agnostic (Java, Python, Go, C++, etc.)
25
+ - Efficient encoding
26
+ - Best for: Polyglot environments, gRPC integration
27
+
28
+ **JSON Schema**:
29
+ - Human-readable text format
30
+ - Easy debugging
31
+ - Widely supported
32
+ - Larger message size
33
+ - Best for: Development, debugging, REST APIs
34
+
35
+ ### Compatibility Modes
36
+
37
+ | Mode | Producer Can | Consumer Can | Use Case |
38
+ |------|-------------|-------------|----------|
39
+ | **BACKWARD** | Remove fields, add optional fields | Read old data with new schema | Most common, safe for consumers |
40
+ | **FORWARD** | Add fields, remove optional fields | Read new data with old schema | Safe for producers |
41
+ | **FULL** | Add/remove optional fields only | Bi-directional compatibility | Both producers and consumers upgrade independently |
42
+ | **NONE** | Any change | Must coordinate upgrades | Development only, NOT production |
43
+ | **BACKWARD_TRANSITIVE** | BACKWARD across all versions | Read any old data | Strictest backward compatibility |
44
+ | **FORWARD_TRANSITIVE** | FORWARD across all versions | Read any new data | Strictest forward compatibility |
45
+ | **FULL_TRANSITIVE** | FULL across all versions | Complete bi-directional | Strictest overall |
46
+
47
+ **Default**: `BACKWARD` (recommended for production)
48
+
49
+ ### Schema Evolution Strategies
50
+
51
+ **Adding Fields**:
52
+ ```avro
53
+ // V1
54
+ {
55
+ "type": "record",
56
+ "name": "User",
57
+ "fields": [
58
+ {"name": "id", "type": "long"},
59
+ {"name": "name", "type": "string"}
60
+ ]
61
+ }
62
+
63
+ // V2 - BACKWARD compatible (added optional field with default)
64
+ {
65
+ "type": "record",
66
+ "name": "User",
67
+ "fields": [
68
+ {"name": "id", "type": "long"},
69
+ {"name": "name", "type": "string"},
70
+ {"name": "email", "type": ["null", "string"], "default": null}
71
+ ]
72
+ }
73
+ ```
74
+
75
+ **Removing Fields** (BACKWARD compatible):
76
+ ```avro
77
+ // V1
78
+ {"name": "address", "type": "string"}
79
+
80
+ // V2 - Remove field (old consumers will ignore it)
81
+ // Field removed from schema
82
+ ```
83
+
84
+ **Changing Field Types** (Breaking Change!):
85
+ ```avro
86
+ // ❌ BREAKING - Cannot change string to int
87
+ {"name": "age", "type": "string"} → {"name": "age", "type": "int"}
88
+
89
+ // ✅ SAFE - Use union types
90
+ {"name": "age", "type": ["string", "int"], "default": "unknown"}
91
+ ```
92
+
93
+ ## When to Use This Skill
94
+
95
+ Activate me when you need help with:
96
+ - Schema evolution strategies ("How do I evolve my Avro schema?")
97
+ - Compatibility mode selection ("Which compatibility mode for production?")
98
+ - Schema validation ("Validate my Avro schema")
99
+ - Best practices ("Schema Registry best practices")
100
+ - Schema registration ("Register Avro schema with Schema Registry")
101
+ - Debugging schema issues ("Schema compatibility error")
102
+ - Format comparison ("Avro vs Protobuf vs JSON Schema")
103
+
104
+ ## Best Practices
105
+
106
+ ### 1. Always Use Compatible Evolution
107
+
108
+ ✅ **DO**:
109
+ - Add optional fields with defaults
110
+ - Remove optional fields
111
+ - Use union types for flexibility
112
+ - Test schema changes in staging first
113
+
114
+ ❌ **DON'T**:
115
+ - Change field types
116
+ - Remove required fields
117
+ - Rename fields (add new + deprecate old)
118
+ - Use `NONE` compatibility in production
119
+
120
+ ### 2. Schema Naming Conventions
121
+
122
+ **Hierarchical Namespaces**:
123
+ ```
124
+ com.company.domain.EntityName
125
+ com.acme.ecommerce.Order
126
+ com.acme.ecommerce.OrderLineItem
127
+ ```
128
+
129
+ **Subject Naming** (Kafka topics):
130
+ - `<topic-name>-value` - For record values
131
+ - `<topic-name>-key` - For record keys
132
+ - Example: `orders-value`, `orders-key`
133
+
134
+ ### 3. Schema Registry Configuration
135
+
136
+ **Producer** (with Avro):
137
+ ```javascript
138
+ const { Kafka } = require('kafkajs');
139
+ const { SchemaRegistry } = require('@kafkajs/confluent-schema-registry');
140
+
141
+ const registry = new SchemaRegistry({
142
+ host: 'https://schema-registry:8081',
143
+ auth: {
144
+ username: 'SR_API_KEY',
145
+ password: 'SR_API_SECRET'
146
+ }
147
+ });
148
+
149
+ // Register schema
150
+ const schema = `
151
+ {
152
+ "type": "record",
153
+ "name": "User",
154
+ "fields": [
155
+ {"name": "id", "type": "long"},
156
+ {"name": "name", "type": "string"}
157
+ ]
158
+ }
159
+ `;
160
+
161
+ const { id } = await registry.register({
162
+ type: SchemaType.AVRO,
163
+ schema
164
+ });
165
+
166
+ // Encode message with schema
167
+ const payload = await registry.encode(id, {
168
+ id: 1,
169
+ name: 'John Doe'
170
+ });
171
+
172
+ await producer.send({
173
+ topic: 'users',
174
+ messages: [{ value: payload }]
175
+ });
176
+ ```
177
+
178
+ **Consumer** (with Avro):
179
+ ```javascript
180
+ const consumer = kafka.consumer({ groupId: 'user-processor' });
181
+
182
+ await consumer.subscribe({ topic: 'users' });
183
+
184
+ await consumer.run({
185
+ eachMessage: async ({ message }) => {
186
+ // Decode message (schema ID is in header)
187
+ const decodedMessage = await registry.decode(message.value);
188
+ console.log(decodedMessage); // { id: 1, name: 'John Doe' }
189
+ }
190
+ });
191
+ ```
192
+
193
+ ### 4. Schema Validation Workflow
194
+
195
+ **Before Registering**:
196
+ 1. Validate schema syntax (Avro JSON, .proto, JSON Schema)
197
+ 2. Check compatibility with existing versions
198
+ 3. Test with sample data
199
+ 4. Register in dev/staging first
200
+ 5. Deploy to production after validation
201
+
202
+ **CLI Validation**:
203
+ ```bash
204
+ # Check compatibility (before registering)
205
+ curl -X POST http://localhost:8081/compatibility/subjects/users-value/versions/latest \
206
+ -H "Content-Type: application/vnd.schemaregistry.v1+json" \
207
+ -d '{"schema": "{...}"}'
208
+
209
+ # Register schema
210
+ curl -X POST http://localhost:8081/subjects/users-value/versions \
211
+ -H "Content-Type: application/vnd.schemaregistry.v1+json" \
212
+ -d '{"schema": "{...}"}'
213
+ ```
214
+
215
+ ## Common Issues & Solutions
216
+
217
+ ### Issue 1: Schema Compatibility Error
218
+
219
+ **Error**:
220
+ ```
221
+ Schema being registered is incompatible with an earlier schema
222
+ ```
223
+
224
+ **Root Cause**: Violates compatibility mode (e.g., removed required field with BACKWARD mode)
225
+
226
+ **Solution**:
227
+ 1. Check current compatibility mode:
228
+ ```bash
229
+ curl http://localhost:8081/config/users-value
230
+ ```
231
+ 2. Fix schema to be compatible OR change mode (carefully!)
232
+ 3. Validate before registering:
233
+ ```bash
234
+ curl -X POST http://localhost:8081/compatibility/subjects/users-value/versions/latest \
235
+ -d '{"schema": "{...}"}'
236
+ ```
237
+
238
+ ### Issue 2: Schema Not Found
239
+
240
+ **Error**:
241
+ ```
242
+ Subject 'users-value' not found
243
+ ```
244
+
245
+ **Root Cause**: Schema not registered yet OR wrong subject name
246
+
247
+ **Solution**:
248
+ 1. List all subjects:
249
+ ```bash
250
+ curl http://localhost:8081/subjects
251
+ ```
252
+ 2. Register schema if missing
253
+ 3. Check subject naming convention (`<topic>-key` or `<topic>-value`)
254
+
255
+ ### Issue 3: Message Deserialization Failed
256
+
257
+ **Error**:
258
+ ```
259
+ Unknown magic byte!
260
+ ```
261
+
262
+ **Root Cause**: Message not encoded with Schema Registry (missing magic byte + schema ID)
263
+
264
+ **Solution**:
265
+ 1. Ensure producer uses Schema Registry encoder
266
+ 2. Check message format: [magic_byte(1) + schema_id(4) + payload]
267
+ 3. Use `@kafkajs/confluent-schema-registry` library
268
+
269
+ ## Schema Evolution Decision Tree
270
+
271
+ ```
272
+ Need to change schema?
273
+ ├─ Adding new field?
274
+ │ ├─ Required field? → Add with default value (BACKWARD)
275
+ │ └─ Optional field? → Add with default null (BACKWARD)
276
+
277
+ ├─ Removing field?
278
+ │ ├─ Required field? → ❌ BREAKING CHANGE (coordinate upgrade)
279
+ │ └─ Optional field? → ✅ BACKWARD compatible
280
+
281
+ ├─ Changing field type?
282
+ │ ├─ Compatible types (e.g., int → long)? → Use union types
283
+ │ └─ Incompatible types? → ❌ BREAKING CHANGE (add new field, deprecate old)
284
+
285
+ └─ Renaming field?
286
+ └─ ❌ BREAKING CHANGE → Add new field + mark old as deprecated
287
+ ```
288
+
289
+ ## Avro vs Protobuf vs JSON Schema Comparison
290
+
291
+ | Feature | Avro | Protobuf | JSON Schema |
292
+ |---------|------|----------|-------------|
293
+ | **Encoding** | Binary | Binary | Text (JSON) |
294
+ | **Message Size** | Small (90% smaller) | Small (80% smaller) | Large (baseline) |
295
+ | **Human Readable** | No | No | Yes |
296
+ | **Schema Evolution** | Excellent | Good | Fair |
297
+ | **Language Support** | Java, Python, C++ | 20+ languages | Universal |
298
+ | **Performance** | Very Fast | Very Fast | Slower |
299
+ | **Debugging** | Harder | Harder | Easy |
300
+ | **Best For** | Data warehousing, ETL | Polyglot, gRPC | REST APIs, dev |
301
+
302
+ **Recommendation**:
303
+ - **Production**: Avro (best balance)
304
+ - **Polyglot teams**: Protobuf
305
+ - **Development/Debugging**: JSON Schema
306
+
307
+ ## References
308
+
309
+ - Schema Registry REST API: https://docs.confluent.io/platform/current/schema-registry/develop/api.html
310
+ - Avro Specification: https://avro.apache.org/docs/current/spec.html
311
+ - Protobuf Guide: https://developers.google.com/protocol-buffers
312
+ - JSON Schema Spec: https://json-schema.org/
313
+
314
+ ---
315
+
316
+ **Invoke me when you need schema management, evolution strategies, or compatibility guidance!**
@@ -139,9 +139,9 @@ Total Tasks: 2
139
139
  For each repository, I create a tracking issue:
140
140
 
141
141
  ```markdown
142
- # [INC-0015] Shopping Cart - Frontend Tasks
142
+ # [FS-25-11-14] Shopping Cart - Frontend Tasks
143
143
 
144
- Part of increment 0015-shopping-cart
144
+ Part of increment 0015-shopping-cart (Feature: FS-25-11-14)
145
145
 
146
146
  ## Tasks (5)
147
147
  - [ ] T-001: Create CartItem component
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: user-story-updater
3
+ description: Updates GitHub issues for user stories with proper ACs and tasks. Activates for update user story issue, fix GitHub issue format, add checkable ACs, refresh user story issue, sync user story to GitHub.
4
+ ---
5
+
6
+ # User Story Updater Agent
7
+
8
+ **Role**: Updates GitHub issues for individual user stories to include checkable acceptance criteria and task connections.
9
+
10
+ **Activates For**:
11
+ - "Update user story issue"
12
+ - "Fix GitHub issue format for US-004"
13
+ - "Add checkable ACs to GitHub issue"
14
+ - "Refresh user story issue #501"
15
+ - "Sync user story to GitHub"
16
+
17
+ **Capabilities**:
18
+
19
+ 1. **Parse User Story Files** (`us-*.md` from living docs)
20
+ - Extract frontmatter (id, epic, status, priority)
21
+ - Parse user story description (As a... I want... So that...)
22
+ - Extract acceptance criteria with completion status
23
+ - Find related tasks from increment tasks.md
24
+
25
+ 2. **Build Rich GitHub Issue Content**
26
+ - Convert ACs to GitHub task checkboxes (`- [x]` or `- [ ]`)
27
+ - Link tasks to increment tasks.md with anchors
28
+ - Calculate progress percentages
29
+ - Format with proper sections
30
+
31
+ 3. **Update Existing Issues**
32
+ - Search for existing issue by title pattern
33
+ - Replace issue body with new formatted content
34
+ - Preserve issue number and URL
35
+
36
+ **Tools You Have**:
37
+ - `Read` - Read user story files and tasks.md
38
+ - `Bash` - Execute `gh` CLI commands
39
+ - `Write` - Create TypeScript if needed
40
+
41
+ **Workflow**:
42
+
43
+ When user says "update user story issue for FS-031/US-004":
44
+
45
+ ```typescript
46
+ // 1. Find user story file
47
+ const projectRoot = process.cwd();
48
+ const userStoryPath = await findUserStoryFile(projectRoot, 'FS-031', 'US-004');
49
+ // Result: .specweave/docs/internal/specs/default/FS-031/us-004-bidirectional-status-sync.md
50
+
51
+ // 2. Parse and build content
52
+ import { UserStoryContentBuilder } from './lib/user-story-content-builder.js';
53
+ const builder = new UserStoryContentBuilder(userStoryPath, projectRoot);
54
+ const content = await builder.parse();
55
+ const issueBody = await builder.buildIssueBody();
56
+
57
+ // 3. Find existing GitHub issue
58
+ const searchResult = await bash(`gh issue list --search "[FS-031][US-004]" --json number,title`);
59
+ const issue = JSON.parse(searchResult)[0];
60
+
61
+ // 4. Update issue
62
+ await bash(`gh issue edit ${issue.number} --body "${issueBody}"`);
63
+
64
+ // 5. Report success
65
+ console.log(`✅ Updated issue #${issue.number}`);
66
+ console.log(`🔗 https://github.com/owner/repo/issues/${issue.number}`);
67
+ ```
68
+
69
+ **Example Execution**:
70
+
71
+ ```
72
+ User: "Fix the display of GitHub issue #501 for US-004"
73
+
74
+ Agent: "I'll update GitHub issue #501 for US-004 to include checkable ACs and task connections.
75
+
76
+ 🔍 Finding user story: FS-031/US-004
77
+ 📄 Found: .specweave/docs/internal/specs/default/FS-031/us-004-bidirectional-status-sync.md
78
+
79
+ 📖 Parsing content...
80
+ ✅ User story description: As a PM, I want status changes...
81
+ ✅ 6 acceptance criteria (4 completed, 2 pending)
82
+ ✅ 6 tasks linked from increment 0031
83
+
84
+ 📝 Building issue body...
85
+ ✅ ACs converted to checkboxes
86
+ ✅ Tasks linked to tasks.md
87
+ ✅ Progress calculated: 67% ACs, 50% tasks
88
+
89
+ 🚀 Updating GitHub issue #501...
90
+ [gh issue edit 501 --body "..."]
91
+ ✅ Updated successfully!
92
+
93
+ 🔗 View issue: https://github.com/anton-abyzov/specweave/issues/501
94
+ ```
95
+
96
+ **Key Implementation Details**:
97
+
98
+ 1. **Find User Story File**:
99
+ ```bash
100
+ # Search in all projects
101
+ find .specweave/docs/internal/specs -name "us-004-*.md" -path "*/FS-031/*"
102
+ ```
103
+
104
+ 2. **Parse User Story** (use UserStoryContentBuilder):
105
+ - Frontmatter: YAML parsing
106
+ - ACs: Pattern `- [x] **AC-US4-01**: Description (P1, testable)`
107
+ - Tasks: Extract from Implementation section
108
+ - Increment: Pattern `**Increment**: [0031-name](...)`
109
+
110
+ 3. **Build Issue Body**:
111
+ - See UserStoryContentBuilder.buildIssueBody()
112
+ - Sections: User Story, Acceptance Criteria, Implementation Tasks
113
+ - Checkboxes: `- [x]` for completed, `- [ ]` for pending
114
+ - Links: Relative to repository root
115
+
116
+ 4. **Update GitHub Issue**:
117
+ ```bash
118
+ # Find issue
119
+ gh issue list --search "[FS-031][US-004]" --json number,title --jq '.[0].number'
120
+
121
+ # Update body
122
+ gh issue edit 501 --body "$(cat body.md)"
123
+ ```
124
+
125
+ **Error Handling**:
126
+
127
+ - ✅ User story file not found → Search all projects, suggest alternatives
128
+ - ✅ GitHub issue not found → Offer to create new issue
129
+ - ✅ Missing frontmatter → Graceful fallback with warnings
130
+ - ✅ No tasks found → Show "No tasks defined yet"
131
+
132
+ **Related Files**:
133
+ - `plugins/specweave-github/lib/user-story-content-builder.ts` - Core builder class
134
+ - `plugins/specweave-github/commands/specweave-github-update-user-story.md` - Command spec
135
+ - `.specweave/docs/internal/specs/{project}/FS-*/us-*.md` - User story files
136
+
137
+ **Testing**:
138
+ 1. Read user story file: `us-004-bidirectional-status-sync.md`
139
+ 2. Use UserStoryContentBuilder to parse
140
+ 3. Build issue body
141
+ 4. Update issue #501
142
+ 5. Verify checkable ACs and task links work
143
+
144
+ **Success Criteria**:
145
+ - ✅ GitHub issue has checkable ACs (can check/uncheck in UI)
146
+ - ✅ Tasks link to correct increment tasks.md sections
147
+ - ✅ Progress percentages match reality
148
+ - ✅ User story description formatted correctly
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specweave-github-cleanup-duplicates
2
+ name: specweave-github:cleanup-duplicates
3
3
  description: Clean up duplicate GitHub issues for an Epic. Finds issues with duplicate titles and closes all except the first created issue.
4
4
  ---
5
5
 
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: specweave-github-update-user-story
3
+ description: Update GitHub issue for user story with proper ACs and tasks
4
+ ---
5
+
6
+ # Update User Story GitHub Issue
7
+
8
+ **Purpose**: Update an existing GitHub issue for a user story to include:
9
+ - ✅ Checkable acceptance criteria (GitHub task checkboxes)
10
+ - ✅ Task connections (links to increment tasks)
11
+ - ✅ Proper formatting and status
12
+
13
+ **Usage**:
14
+ ```bash
15
+ /specweave-github:update-user-story FS-031 US-004
16
+ ```
17
+
18
+ **What It Does**:
19
+
20
+ 1. **Finds user story file**: `.specweave/docs/internal/specs/{project}/FS-031/us-004-*.md`
21
+ 2. **Parses content**:
22
+ - User story description (As a... I want... So that...)
23
+ - Acceptance criteria with completion status
24
+ - Tasks from increment tasks.md
25
+ 3. **Finds existing GitHub issue**: Searches for `[FS-031][US-004]` or `[FS-031 US-004]`
26
+ 4. **Updates issue body**: Replaces with properly formatted content including:
27
+ - Checkable ACs
28
+ - Task connections
29
+ - Status and progress
30
+
31
+ **Arguments**:
32
+ - `featureId` - Feature ID (e.g., `FS-031`)
33
+ - `userStoryId` - User Story ID (e.g., `US-004`)
34
+
35
+ **Example**:
36
+ ```bash
37
+ # Update US-004 in FS-031
38
+ /specweave-github:update-user-story FS-031 US-004
39
+
40
+ # Output:
41
+ # 🔍 Finding user story: FS-031/US-004
42
+ # 📄 Found: .specweave/docs/internal/specs/default/FS-031/us-004-bidirectional-status-sync.md
43
+ # 🔍 Searching for existing GitHub issue...
44
+ # 🔗 Found issue #501: [FS-031][US-004] Bidirectional Status Sync
45
+ # 📝 Building updated issue body...
46
+ # ✅ 6 acceptance criteria (4 completed)
47
+ # ✅ 6 tasks (3 completed)
48
+ # 🚀 Updating GitHub issue #501...
49
+ # ✅ Updated successfully!
50
+ # 🔗 https://github.com/owner/repo/issues/501
51
+ ```
52
+
53
+ **What Gets Updated**:
54
+
55
+ ```markdown
56
+ **Feature**: [FS-031](../../_features/FS-031/FEATURE.md)
57
+ **Status**: complete
58
+ **Priority**: P1
59
+ **Project**: default
60
+
61
+ ---
62
+
63
+ ## User Story
64
+
65
+ **As a** PM
66
+ **I want** status changes in external tools to sync back to SpecWeave
67
+ **So that** both systems stay in sync without manual updates
68
+
69
+ 📄 View full story: [`us-004-bidirectional-status-sync.md`](...)
70
+
71
+ ---
72
+
73
+ ## Acceptance Criteria
74
+
75
+ Progress: 4/6 criteria met (67%)
76
+
77
+ - [x] **AC-US4-01**: SpecWeave status change triggers external update (P1, testable)
78
+ - [x] **AC-US4-02**: External issue close triggers SpecWeave prompt (P1, testable)
79
+ - [x] **AC-US4-03**: External issue reopen triggers SpecWeave prompt (P2, testable)
80
+ - [x] **AC-US4-04**: Sync logs include timestamp and reason (P2, testable)
81
+ - [ ] **AC-US4-05**: Failed syncs retry with exponential backoff (P2, testable)
82
+ - [ ] **AC-US4-06**: Sync works for GitHub, JIRA, and ADO (P1, testable)
83
+
84
+ ---
85
+
86
+ ## Implementation Tasks
87
+
88
+ Progress: 3/6 tasks complete (50%)
89
+
90
+ **Increment**: [0031-external-tool-status-sync](../../increments/0031-external-tool-status-sync/)
91
+
92
+ - [x] [T-008: Create Status Sync Engine (Core)](../../increments/0031/tasks.md#t-008-create-status-sync-engine-core)
93
+ - [x] [T-009: Implement GitHub Status Sync](../../increments/0031/tasks.md#t-009-implement-github-status-sync)
94
+ - [x] [T-010: Implement JIRA Status Sync](../../increments/0031/tasks.md#t-010-implement-jira-status-sync)
95
+ - [ ] [T-011: Implement ADO Status Sync](../../increments/0031/tasks.md#t-011-implement-ado-status-sync)
96
+ - [ ] [T-018: Add Sync Event Logging](../../increments/0031/tasks.md#t-018-add-sync-event-logging)
97
+ - [ ] [T-021: Error Handling & Retry Logic](../../increments/0031/tasks.md#t-021-error-handling-retry-logic)
98
+
99
+ ---
100
+
101
+ 🤖 Auto-synced by SpecWeave User Story Sync
102
+ ```
103
+
104
+ **When to Use**:
105
+
106
+ - ✅ After completing increment implementation (update task statuses)
107
+ - ✅ After modifying acceptance criteria
108
+ - ✅ When GitHub issue is missing proper formatting
109
+ - ✅ When you want to refresh issue content from living docs
110
+
111
+ **Related Commands**:
112
+ - `/specweave-github:sync-epic FS-031` - Sync entire epic (all user stories)
113
+ - `/specweave-github:create-issue 0031` - Create issue for increment
114
+ - `/specweave-github:sync 0031` - Bidirectional sync for increment
115
+
116
+ ---
117
+
118
+ ## Implementation
119
+
120
+ **File**: `plugins/specweave-github/lib/user-story-content-builder.ts`
121
+
122
+ **Workflow**:
123
+ 1. Parse user story file with `UserStoryContentBuilder`
124
+ 2. Search GitHub for existing issue (title pattern matching)
125
+ 3. Build rich issue body with checkable ACs and task links
126
+ 4. Update issue via `gh issue edit` with new body
127
+
128
+ **Error Handling**:
129
+ - ✅ Graceful fallback if user story file not found
130
+ - ✅ Clear error if GitHub issue doesn't exist
131
+ - ✅ Validation of required fields (epic, status, etc.)
132
+
133
+ ---
134
+
135
+ ## Execution
136
+
137
+ When user runs this command, the Claude Code assistant should:
138
+
139
+ 1. Extract `featureId` and `userStoryId` from command arguments
140
+ 2. Find user story file in living docs (search all projects)
141
+ 3. Use `UserStoryContentBuilder` to parse and build issue body
142
+ 4. Search for existing GitHub issue using `gh issue list --search`
143
+ 5. Update issue using `gh issue edit --body`
144
+ 6. Report success with issue URL
145
+
146
+ **Tech Stack**:
147
+ - TypeScript (UserStoryContentBuilder class)
148
+ - GitHub CLI (`gh issue list`, `gh issue edit`)
149
+ - YAML frontmatter parsing
150
+ - Markdown formatting
151
+
152
+ **Testing**:
153
+ - Test with FS-031/US-004 (bidirectional status sync)
154
+ - Verify ACs are checkable
155
+ - Verify tasks link to correct increment tasks.md
156
+ - Verify progress percentages are correct