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,210 @@
1
+ /**
2
+ * Increment Number Management Utility
3
+ *
4
+ * Provides centralized utilities for managing increment numbers across
5
+ * all SpecWeave directories (main, _archive, _abandoned, _paused).
6
+ *
7
+ * Prevents increment number reuse when increments are moved to subdirectories.
8
+ *
9
+ * @module increment-utils
10
+ * @since 0.18.3
11
+ */
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ /**
15
+ * Centralized manager for increment number generation and validation.
16
+ *
17
+ * Scans ALL increment directories to ensure sequential numbering and
18
+ * prevent duplicate increment IDs.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * // Get next increment number
23
+ * const nextId = IncrementNumberManager.getNextIncrementNumber();
24
+ * console.log(nextId); // "0033"
25
+ *
26
+ * // Check if increment exists
27
+ * const exists = IncrementNumberManager.incrementNumberExists("0032");
28
+ * console.log(exists); // true
29
+ *
30
+ * // Clear cache (if needed)
31
+ * IncrementNumberManager.clearCache();
32
+ * ```
33
+ */
34
+ export class IncrementNumberManager {
35
+ /**
36
+ * Get the next available increment number across all directories.
37
+ *
38
+ * Scans main directory and all subdirectories (_archive, _abandoned, _paused)
39
+ * to find the highest increment number and returns the next sequential number.
40
+ *
41
+ * @param projectRoot - Project root directory (defaults to process.cwd())
42
+ * @param useCache - Whether to use cached value (defaults to true)
43
+ * @returns Next increment number as 4-digit string (e.g., "0033")
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const nextId = IncrementNumberManager.getNextIncrementNumber();
48
+ * // "0033"
49
+ *
50
+ * const nextIdNoCache = IncrementNumberManager.getNextIncrementNumber(undefined, false);
51
+ * // "0033" (fresh scan)
52
+ * ```
53
+ */
54
+ static getNextIncrementNumber(projectRoot = process.cwd(), useCache = true) {
55
+ const incrementsDir = path.join(projectRoot, '.specweave', 'increments');
56
+ const cacheKey = incrementsDir;
57
+ // Check cache if enabled
58
+ if (useCache) {
59
+ const cached = this.cache.get(cacheKey);
60
+ if (cached && Date.now() - cached.timestamp < this.CACHE_TTL) {
61
+ return String(cached.number).padStart(4, '0');
62
+ }
63
+ }
64
+ // Scan all directories
65
+ const highestNumber = this.scanAllIncrementDirectories(incrementsDir);
66
+ const nextNumber = highestNumber + 1;
67
+ // Update cache
68
+ this.cache.set(cacheKey, {
69
+ number: nextNumber,
70
+ timestamp: Date.now()
71
+ });
72
+ // Auto-expire cache after TTL
73
+ setTimeout(() => {
74
+ this.cache.delete(cacheKey);
75
+ }, this.CACHE_TTL);
76
+ return String(nextNumber).padStart(4, '0');
77
+ }
78
+ /**
79
+ * Check if an increment number already exists in any directory.
80
+ *
81
+ * Scans all directories to determine if the given increment number
82
+ * has already been used. Normalizes 3-digit IDs to 4-digit for comparison.
83
+ *
84
+ * @param incrementNumber - Increment number to check (string or number)
85
+ * @param projectRoot - Project root directory (defaults to process.cwd())
86
+ * @returns true if increment exists, false otherwise
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * IncrementNumberManager.incrementNumberExists("0032"); // true
91
+ * IncrementNumberManager.incrementNumberExists(32); // true
92
+ * IncrementNumberManager.incrementNumberExists("9999"); // false
93
+ * ```
94
+ */
95
+ static incrementNumberExists(incrementNumber, projectRoot = process.cwd()) {
96
+ const incrementsDir = path.join(projectRoot, '.specweave', 'increments');
97
+ // Normalize to 4-digit string
98
+ const normalizedNumber = String(incrementNumber).padStart(4, '0');
99
+ // Directories to check
100
+ const dirsToCheck = [
101
+ incrementsDir,
102
+ path.join(incrementsDir, '_archive'),
103
+ path.join(incrementsDir, '_abandoned'),
104
+ path.join(incrementsDir, '_paused')
105
+ ];
106
+ // Check each directory
107
+ for (const dir of dirsToCheck) {
108
+ if (!fs.existsSync(dir))
109
+ continue;
110
+ try {
111
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
112
+ for (const entry of entries) {
113
+ if (!entry.isDirectory())
114
+ continue;
115
+ // Match pattern: 0032-name or 032-name
116
+ const match = entry.name.match(/^(\d{3,4})-/);
117
+ if (match) {
118
+ const entryNumber = match[1].padStart(4, '0');
119
+ if (entryNumber === normalizedNumber) {
120
+ return true;
121
+ }
122
+ }
123
+ }
124
+ }
125
+ catch (error) {
126
+ // Permission denied or other error - continue
127
+ continue;
128
+ }
129
+ }
130
+ return false;
131
+ }
132
+ /**
133
+ * Clear the increment number cache.
134
+ *
135
+ * Forces next call to getNextIncrementNumber() to perform a fresh
136
+ * filesystem scan instead of using cached value.
137
+ *
138
+ * Useful for testing or when you know the filesystem has changed.
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * IncrementNumberManager.clearCache();
143
+ * const freshId = IncrementNumberManager.getNextIncrementNumber();
144
+ * ```
145
+ */
146
+ static clearCache() {
147
+ this.cache.clear();
148
+ }
149
+ /**
150
+ * Scan all increment directories and return highest number found.
151
+ *
152
+ * Scans these directories (in order):
153
+ * 1. .specweave/increments/ (main)
154
+ * 2. .specweave/increments/_archive/
155
+ * 3. .specweave/increments/_abandoned/
156
+ * 4. .specweave/increments/_paused/
157
+ *
158
+ * @param incrementsDir - Path to .specweave/increments directory
159
+ * @returns Highest increment number found (0 if none exist)
160
+ * @private
161
+ */
162
+ static scanAllIncrementDirectories(incrementsDir) {
163
+ let highestNumber = 0;
164
+ // Directories to scan
165
+ const dirsToScan = [
166
+ { path: incrementsDir, label: 'main' },
167
+ { path: path.join(incrementsDir, '_archive'), label: '_archive' },
168
+ { path: path.join(incrementsDir, '_abandoned'), label: '_abandoned' },
169
+ { path: path.join(incrementsDir, '_paused'), label: '_paused' }
170
+ ];
171
+ // Scan each directory
172
+ for (const { path: dirPath, label } of dirsToScan) {
173
+ if (!fs.existsSync(dirPath))
174
+ continue;
175
+ try {
176
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
177
+ for (const entry of entries) {
178
+ if (!entry.isDirectory())
179
+ continue;
180
+ // Match pattern: 0032-name or 032-name
181
+ const match = entry.name.match(/^(\d{3,4})-/);
182
+ if (match) {
183
+ const number = parseInt(match[1], 10);
184
+ if (number > highestNumber) {
185
+ highestNumber = number;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ catch (error) {
191
+ // Permission denied or other error - log warning and continue
192
+ console.warn(`Warning: Could not scan directory ${dirPath}:`, error.message);
193
+ continue;
194
+ }
195
+ }
196
+ return highestNumber;
197
+ }
198
+ }
199
+ /**
200
+ * In-memory cache for increment numbers (performance optimization)
201
+ * Key: incrementsDir path, Value: highest increment number
202
+ * @private
203
+ */
204
+ IncrementNumberManager.cache = new Map();
205
+ /**
206
+ * Cache time-to-live in milliseconds (5 seconds)
207
+ * @private
208
+ */
209
+ IncrementNumberManager.CACHE_TTL = 5000;
210
+ //# sourceMappingURL=increment-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"increment-utils.js","sourceRoot":"","sources":["../../../src/core/increment-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Acceptance Criteria Project-Specific Generator
3
+ *
4
+ * Intelligently rewrites acceptance criteria based on project context.
5
+ *
6
+ * Architecture:
7
+ * - Generic AC (config schema, validation) → Keep unchanged
8
+ * - Backend AC (API, database) → Rewrite with backend context
9
+ * - Frontend AC (UI, component) → Rewrite with frontend context
10
+ * - Mobile AC (screen, gesture) → Rewrite with mobile context
11
+ *
12
+ * Example:
13
+ * - Original: "UI displays status configuration form"
14
+ * - Backend: "Backend service: API returns status configuration data"
15
+ * - Frontend: "UI: Component displays status configuration form"
16
+ * - Mobile: "Mobile app: Screen displays status configuration form"
17
+ *
18
+ * Related:
19
+ * - .specweave/increments/0034-github-ac-checkboxes-fix/reports/ULTRATHINK-AC-PROJECT-SPECIFIC-DESIGN.md
20
+ * - src/core/living-docs/spec-distributor.ts (uses this)
21
+ */
22
+ export interface ProjectContext {
23
+ id: string;
24
+ name: string;
25
+ type: 'backend' | 'frontend' | 'mobile' | 'infrastructure' | 'generic';
26
+ techStack: string[];
27
+ keywords: string[];
28
+ }
29
+ export interface AcceptanceCriterion {
30
+ id: string;
31
+ description: string;
32
+ priority?: string;
33
+ testable: boolean;
34
+ completed: boolean;
35
+ projectSpecific?: boolean;
36
+ }
37
+ export declare class ACProjectSpecificGenerator {
38
+ /**
39
+ * Make acceptance criteria project-specific
40
+ *
41
+ * Strategy:
42
+ * 1. Detect if AC is generic (applies to all projects)
43
+ * 2. Detect if AC needs project-specific variant
44
+ * 3. Rewrite AC description based on project context
45
+ * 4. Add project suffix to AC ID
46
+ */
47
+ makeProjectSpecific(ac: AcceptanceCriterion[], userStoryId: string, projectContext: ProjectContext): AcceptanceCriterion[];
48
+ /**
49
+ * Detect if AC is generic (applies to all projects without changes)
50
+ */
51
+ private isGenericAC;
52
+ /**
53
+ * Detect if AC needs project-specific variant
54
+ */
55
+ private needsProjectVariant;
56
+ /**
57
+ * Rewrite AC description for specific project
58
+ */
59
+ private rewriteACForProject;
60
+ /**
61
+ * Get project suffix for AC ID
62
+ */
63
+ private getProjectSuffix;
64
+ }
65
+ //# sourceMappingURL=ac-project-specific-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ac-project-specific-generator.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/ac-project-specific-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACvE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,0BAA0B;IACrC;;;;;;;;OAQG;IACH,mBAAmB,CACjB,EAAE,EAAE,mBAAmB,EAAE,EACzB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAC7B,mBAAmB,EAAE;IA8BxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+E3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAWzB"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Acceptance Criteria Project-Specific Generator
3
+ *
4
+ * Intelligently rewrites acceptance criteria based on project context.
5
+ *
6
+ * Architecture:
7
+ * - Generic AC (config schema, validation) → Keep unchanged
8
+ * - Backend AC (API, database) → Rewrite with backend context
9
+ * - Frontend AC (UI, component) → Rewrite with frontend context
10
+ * - Mobile AC (screen, gesture) → Rewrite with mobile context
11
+ *
12
+ * Example:
13
+ * - Original: "UI displays status configuration form"
14
+ * - Backend: "Backend service: API returns status configuration data"
15
+ * - Frontend: "UI: Component displays status configuration form"
16
+ * - Mobile: "Mobile app: Screen displays status configuration form"
17
+ *
18
+ * Related:
19
+ * - .specweave/increments/0034-github-ac-checkboxes-fix/reports/ULTRATHINK-AC-PROJECT-SPECIFIC-DESIGN.md
20
+ * - src/core/living-docs/spec-distributor.ts (uses this)
21
+ */
22
+ export class ACProjectSpecificGenerator {
23
+ /**
24
+ * Make acceptance criteria project-specific
25
+ *
26
+ * Strategy:
27
+ * 1. Detect if AC is generic (applies to all projects)
28
+ * 2. Detect if AC needs project-specific variant
29
+ * 3. Rewrite AC description based on project context
30
+ * 4. Add project suffix to AC ID
31
+ */
32
+ makeProjectSpecific(ac, userStoryId, projectContext) {
33
+ return ac.map((criterion) => {
34
+ // Step 1: Detect if AC is generic
35
+ if (this.isGenericAC(criterion.description)) {
36
+ return criterion; // Keep as-is
37
+ }
38
+ // Step 2: Detect if AC needs project-specific variant
39
+ const needsProjectVariant = this.needsProjectVariant(criterion.description, projectContext);
40
+ if (!needsProjectVariant) {
41
+ return criterion; // Keep as-is
42
+ }
43
+ // Step 3: Rewrite AC for this project
44
+ const projectSpecificDesc = this.rewriteACForProject(criterion.description, projectContext);
45
+ // Step 4: Add project suffix to ID
46
+ const projectSuffix = this.getProjectSuffix(projectContext);
47
+ const projectSpecificId = `${criterion.id}-${projectSuffix}`;
48
+ return {
49
+ ...criterion,
50
+ id: projectSpecificId,
51
+ description: projectSpecificDesc,
52
+ projectSpecific: true,
53
+ };
54
+ });
55
+ }
56
+ /**
57
+ * Detect if AC is generic (applies to all projects without changes)
58
+ */
59
+ isGenericAC(description) {
60
+ const genericIndicators = [
61
+ /config\s+schema/i,
62
+ /default\s+(mappings|settings|configuration)/i,
63
+ /validation\s+prevents/i,
64
+ /error\s+handling/i,
65
+ /documentation\s+includes/i,
66
+ /logging/i,
67
+ /\btest\b.*\bcoverage\b/i, // "test coverage"
68
+ /\bunit\s+test/i,
69
+ /\bintegration\s+test/i,
70
+ ];
71
+ return genericIndicators.some((pattern) => pattern.test(description));
72
+ }
73
+ /**
74
+ * Detect if AC needs project-specific variant
75
+ */
76
+ needsProjectVariant(description, projectContext) {
77
+ // Backend-specific indicators
78
+ if (projectContext.type === 'backend') {
79
+ return /API|endpoint|database|service|server|request|response/i.test(description);
80
+ }
81
+ // Frontend-specific indicators
82
+ if (projectContext.type === 'frontend') {
83
+ return /UI|component|screen|form|display|render|button|click|input/i.test(description);
84
+ }
85
+ // Mobile-specific indicators
86
+ if (projectContext.type === 'mobile') {
87
+ return /screen|navigation|gesture|native|platform|tap|swipe/i.test(description);
88
+ }
89
+ // Infrastructure-specific indicators
90
+ if (projectContext.type === 'infrastructure') {
91
+ return /deployment|CI\/CD|pipeline|monitoring|scaling|cluster|container/i.test(description);
92
+ }
93
+ return false;
94
+ }
95
+ /**
96
+ * Rewrite AC description for specific project
97
+ */
98
+ rewriteACForProject(description, projectContext) {
99
+ let rewritten = description;
100
+ // Backend-specific rewrites
101
+ if (projectContext.type === 'backend') {
102
+ rewritten = rewritten
103
+ .replace(/UI\s+(displays|shows)/gi, 'API returns')
104
+ .replace(/form\s+validation/gi, 'request payload validation')
105
+ .replace(/\bscreen\b/gi, 'endpoint')
106
+ .replace(/button\s+click/gi, 'API call')
107
+ .replace(/user\s+sees/gi, 'API response includes')
108
+ .replace(/component/gi, 'service')
109
+ .replace(/\brender\b/gi, 'serialize');
110
+ // Add backend context prefix if not already present
111
+ if (!rewritten.includes('Backend') &&
112
+ !rewritten.includes('API') &&
113
+ !rewritten.includes('service')) {
114
+ rewritten = `Backend service: ${rewritten}`;
115
+ }
116
+ }
117
+ // Frontend-specific rewrites
118
+ if (projectContext.type === 'frontend') {
119
+ rewritten = rewritten
120
+ .replace(/API\s+endpoint/gi, 'UI component')
121
+ .replace(/database\s+schema/gi, 'state management')
122
+ .replace(/server\s+validates/gi, 'client-side validation')
123
+ .replace(/returns\s+response/gi, 'displays result')
124
+ .replace(/service/gi, 'component')
125
+ .replace(/\bserialize\b/gi, 'render');
126
+ // Add frontend context prefix if not already present
127
+ if (!rewritten.includes('UI') &&
128
+ !rewritten.includes('component') &&
129
+ !rewritten.includes('Frontend')) {
130
+ rewritten = `UI: ${rewritten}`;
131
+ }
132
+ }
133
+ // Mobile-specific rewrites
134
+ if (projectContext.type === 'mobile') {
135
+ rewritten = rewritten
136
+ .replace(/\bpage\b/gi, 'screen')
137
+ .replace(/\bclick\b/gi, 'tap')
138
+ .replace(/\bhover\b/gi, 'long press')
139
+ .replace(/component/gi, 'view')
140
+ .replace(/web/gi, 'mobile');
141
+ // Add mobile context prefix if not already present
142
+ if (!rewritten.includes('Mobile') && !rewritten.includes('screen')) {
143
+ rewritten = `Mobile app: ${rewritten}`;
144
+ }
145
+ }
146
+ // Infrastructure-specific rewrites
147
+ if (projectContext.type === 'infrastructure') {
148
+ rewritten = rewritten
149
+ .replace(/\bcode\b/gi, 'infrastructure code')
150
+ .replace(/application/gi, 'deployment')
151
+ .replace(/feature/gi, 'infrastructure change');
152
+ // Add infrastructure context if not present
153
+ if (!rewritten.includes('Infrastructure') &&
154
+ !rewritten.includes('deployment') &&
155
+ !rewritten.includes('pipeline')) {
156
+ rewritten = `Infrastructure: ${rewritten}`;
157
+ }
158
+ }
159
+ return rewritten;
160
+ }
161
+ /**
162
+ * Get project suffix for AC ID
163
+ */
164
+ getProjectSuffix(projectContext) {
165
+ const suffixMap = {
166
+ backend: 'BE',
167
+ frontend: 'FE',
168
+ mobile: 'MOB',
169
+ infrastructure: 'INFRA',
170
+ generic: 'GEN',
171
+ };
172
+ return suffixMap[projectContext.type] || projectContext.id.slice(0, 3).toUpperCase();
173
+ }
174
+ }
175
+ //# sourceMappingURL=ac-project-specific-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ac-project-specific-generator.js","sourceRoot":"","sources":["../../../../src/core/living-docs/ac-project-specific-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Feature & Epic Archiver - Smart archiving system for features and epics
3
+ *
4
+ * Works in tandem with IncrementArchiver to maintain consistency between
5
+ * increments, features, and epics. When an increment is archived, its
6
+ * associated feature is automatically archived if all increments for
7
+ * that feature are archived.
8
+ */
9
+ interface LinkUpdate {
10
+ file: string;
11
+ oldLink: string;
12
+ newLink: string;
13
+ lineNumber: number;
14
+ }
15
+ export interface FeatureArchiveOptions {
16
+ dryRun?: boolean;
17
+ updateLinks?: boolean;
18
+ preserveActiveFeatures?: boolean;
19
+ archiveOrphanedFeatures?: boolean;
20
+ archiveOrphanedEpics?: boolean;
21
+ }
22
+ export interface FeatureArchiveResult {
23
+ archivedFeatures: string[];
24
+ archivedEpics: string[];
25
+ updatedLinks: LinkUpdate[];
26
+ errors: string[];
27
+ }
28
+ export declare class FeatureArchiver {
29
+ private rootDir;
30
+ private specsDir;
31
+ private featuresDir;
32
+ private epicsDir;
33
+ private incrementArchiver;
34
+ private hierarchyMapper;
35
+ private featureIdManager;
36
+ constructor(rootDir: string);
37
+ /**
38
+ * Archive features and epics based on increment archive status
39
+ */
40
+ archiveFeatures(options?: FeatureArchiveOptions): Promise<FeatureArchiveResult>;
41
+ /**
42
+ * Identify features that should be archived
43
+ */
44
+ private identifyFeaturesToArchive;
45
+ /**
46
+ * Identify epics that should be archived
47
+ */
48
+ private identifyEpicsToArchive;
49
+ /**
50
+ * Execute an archive operation
51
+ */
52
+ private executeArchiveOperation;
53
+ /**
54
+ * Archive project-specific folders for a feature
55
+ */
56
+ private archiveProjectSpecificFolders;
57
+ /**
58
+ * Update all links to archived items
59
+ */
60
+ private updateAllLinks;
61
+ /**
62
+ * Update links in a single file
63
+ */
64
+ private updateLinksInFile;
65
+ /**
66
+ * Get all features
67
+ */
68
+ private getAllFeatures;
69
+ /**
70
+ * Get all epics
71
+ */
72
+ private getAllEpics;
73
+ /**
74
+ * Get increments linked to a feature
75
+ */
76
+ private getLinkedIncrements;
77
+ /**
78
+ * Get features linked to an epic
79
+ */
80
+ private getLinkedFeatures;
81
+ /**
82
+ * Check if all features are archived
83
+ */
84
+ private areAllFeaturesArchived;
85
+ /**
86
+ * Check if feature has active projects
87
+ */
88
+ private hasActiveProjects;
89
+ /**
90
+ * Ensure archive directories exist
91
+ */
92
+ private ensureArchiveDirectories;
93
+ /**
94
+ * Restore an epic from archive
95
+ */
96
+ restoreEpic(epicId: string): Promise<void>;
97
+ /**
98
+ * Update links for restored epic
99
+ */
100
+ private updateLinksForRestoredEpic;
101
+ /**
102
+ * Restore a feature from archive
103
+ */
104
+ restoreFeature(featureId: string): Promise<void>;
105
+ /**
106
+ * Update links for restored feature
107
+ */
108
+ private updateLinksForRestoredFeature;
109
+ /**
110
+ * Get archive statistics
111
+ */
112
+ getArchiveStats(): Promise<{
113
+ features: {
114
+ active: number;
115
+ archived: number;
116
+ };
117
+ epics: {
118
+ active: number;
119
+ archived: number;
120
+ };
121
+ projects: {
122
+ [key: string]: {
123
+ active: number;
124
+ archived: number;
125
+ };
126
+ };
127
+ }>;
128
+ }
129
+ export {};
130
+ //# sourceMappingURL=feature-archiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-archiver.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/feature-archiver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,OAAO,EAAE,MAAM;IAU3B;;OAEG;IACG,eAAe,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA0CzF;;OAEG;YACW,yBAAyB;IAkDvC;;OAEG;YACW,sBAAsB;IA4CpC;;OAEG;YACW,uBAAuB;IAsCrC;;OAEG;YACW,6BAA6B;IAkB3C;;OAEG;YACW,cAAc;IAwB5B;;OAEG;YACW,iBAAiB;IAwE/B;;OAEG;YACW,cAAc;IAmB5B;;OAEG;YACW,WAAW;IAmBzB;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;YACW,iBAAiB;IA+B/B;;OAEG;YACW,sBAAsB;IAkBpC;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;YACW,wBAAwB;IAiBtC;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhD;;OAEG;YACW,0BAA0B;IAyBxC;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCtD;;OAEG;YACW,6BAA6B;IA4B3C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC;QAC/B,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,KAAK,EAAE;YACL,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,QAAQ,EAAE;YACR,CAAC,GAAG,EAAE,MAAM,GAAG;gBACb,MAAM,EAAE,MAAM,CAAC;gBACf,QAAQ,EAAE,MAAM,CAAC;aAClB,CAAC;SACH,CAAC;KACH,CAAC;CA6CH"}