specweave 0.18.1 → 0.20.1

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 (389) hide show
  1. package/CLAUDE.md +229 -1817
  2. package/README.md +68 -0
  3. package/bin/specweave.js +62 -6
  4. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  5. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +3 -0
  6. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  7. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +21 -0
  8. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +1 -0
  9. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +162 -0
  10. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +1 -0
  11. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
  12. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +65 -6
  13. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
  14. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +112 -0
  15. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -0
  16. package/dist/plugins/specweave-github/lib/completion-calculator.js +301 -0
  17. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -0
  18. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +3 -3
  19. package/dist/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  20. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +7 -0
  21. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -1
  22. package/dist/plugins/specweave-github/lib/epic-content-builder.js +42 -0
  23. package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -1
  24. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +14 -0
  25. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  26. package/dist/plugins/specweave-github/lib/github-client-v2.js +51 -0
  27. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  28. package/dist/plugins/specweave-github/lib/github-epic-sync.js +1 -1
  29. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
  30. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +87 -0
  31. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -0
  32. package/dist/plugins/specweave-github/lib/github-feature-sync.js +412 -0
  33. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -0
  34. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  35. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +64 -13
  36. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  37. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts +78 -0
  38. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +1 -0
  39. package/dist/plugins/specweave-github/lib/progress-comment-builder.js +237 -0
  40. package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -0
  41. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts +97 -0
  42. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -0
  43. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +301 -0
  44. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -0
  45. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +83 -0
  46. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -0
  47. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +386 -0
  48. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -0
  49. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +8 -6
  50. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -1
  51. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +78 -117
  52. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -1
  53. package/dist/src/cli/commands/import-docs.js +4 -4
  54. package/dist/src/cli/commands/import-docs.js.map +1 -1
  55. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
  56. package/dist/src/cli/commands/init-multiproject.js +17 -18
  57. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  58. package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -1
  59. package/dist/src/cli/commands/migrate-to-multiproject.js +8 -4
  60. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  61. package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
  62. package/dist/src/cli/commands/switch-project.js +9 -26
  63. package/dist/src/cli/commands/switch-project.js.map +1 -1
  64. package/dist/src/cli/commands/sync-spec-content.js +3 -0
  65. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  66. package/dist/src/core/deduplication/command-deduplicator.d.ts +166 -0
  67. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -0
  68. package/dist/src/core/deduplication/command-deduplicator.js +254 -0
  69. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -0
  70. package/dist/src/core/increment/active-increment-manager.d.ts +42 -15
  71. package/dist/src/core/increment/active-increment-manager.d.ts.map +1 -1
  72. package/dist/src/core/increment/active-increment-manager.js +113 -46
  73. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  74. package/dist/src/core/increment/conflict-resolver.d.ts +40 -0
  75. package/dist/src/core/increment/conflict-resolver.d.ts.map +1 -0
  76. package/dist/src/core/increment/conflict-resolver.js +219 -0
  77. package/dist/src/core/increment/conflict-resolver.js.map +1 -0
  78. package/dist/src/core/increment/discipline-checker.d.ts.map +1 -1
  79. package/dist/src/core/increment/discipline-checker.js +7 -1
  80. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  81. package/dist/src/core/increment/duplicate-detector.d.ts +52 -0
  82. package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -0
  83. package/dist/src/core/increment/duplicate-detector.js +276 -0
  84. package/dist/src/core/increment/duplicate-detector.js.map +1 -0
  85. package/dist/src/core/increment/increment-archiver.d.ts +90 -0
  86. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -0
  87. package/dist/src/core/increment/increment-archiver.js +368 -0
  88. package/dist/src/core/increment/increment-archiver.js.map +1 -0
  89. package/dist/src/core/increment/increment-reopener.d.ts +165 -0
  90. package/dist/src/core/increment/increment-reopener.d.ts.map +1 -0
  91. package/dist/src/core/increment/increment-reopener.js +390 -0
  92. package/dist/src/core/increment/increment-reopener.js.map +1 -0
  93. package/dist/src/core/increment/metadata-manager.d.ts +26 -1
  94. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  95. package/dist/src/core/increment/metadata-manager.js +143 -5
  96. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  97. package/dist/src/core/increment/recent-work-scanner.d.ts +121 -0
  98. package/dist/src/core/increment/recent-work-scanner.d.ts.map +1 -0
  99. package/dist/src/core/increment/recent-work-scanner.js +303 -0
  100. package/dist/src/core/increment/recent-work-scanner.js.map +1 -0
  101. package/dist/src/core/increment/types.d.ts +1 -0
  102. package/dist/src/core/increment/types.d.ts.map +1 -1
  103. package/dist/src/core/increment-utils.d.ts +112 -0
  104. package/dist/src/core/increment-utils.d.ts.map +1 -0
  105. package/dist/src/core/increment-utils.js +210 -0
  106. package/dist/src/core/increment-utils.js.map +1 -0
  107. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts +65 -0
  108. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts.map +1 -0
  109. package/dist/src/core/living-docs/ac-project-specific-generator.js +175 -0
  110. package/dist/src/core/living-docs/ac-project-specific-generator.js.map +1 -0
  111. package/dist/src/core/living-docs/feature-archiver.d.ts +130 -0
  112. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -0
  113. package/dist/src/core/living-docs/feature-archiver.js +549 -0
  114. package/dist/src/core/living-docs/feature-archiver.js.map +1 -0
  115. package/dist/src/core/living-docs/feature-id-manager.d.ts +81 -0
  116. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -0
  117. package/dist/src/core/living-docs/feature-id-manager.js +339 -0
  118. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -0
  119. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +144 -83
  120. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  121. package/dist/src/core/living-docs/hierarchy-mapper.js +488 -270
  122. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  123. package/dist/src/core/living-docs/index.d.ts +6 -0
  124. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  125. package/dist/src/core/living-docs/index.js +6 -0
  126. package/dist/src/core/living-docs/index.js.map +1 -1
  127. package/dist/src/core/living-docs/project-detector.d.ts +6 -0
  128. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  129. package/dist/src/core/living-docs/project-detector.js +35 -1
  130. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  131. package/dist/src/core/living-docs/spec-distributor.d.ts +100 -26
  132. package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -1
  133. package/dist/src/core/living-docs/spec-distributor.js +1275 -258
  134. package/dist/src/core/living-docs/spec-distributor.js.map +1 -1
  135. package/dist/src/core/living-docs/task-project-specific-generator.d.ts +109 -0
  136. package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -0
  137. package/dist/src/core/living-docs/task-project-specific-generator.js +221 -0
  138. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -0
  139. package/dist/src/core/living-docs/types.d.ts +143 -0
  140. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  141. package/dist/src/core/project-manager.d.ts +2 -17
  142. package/dist/src/core/project-manager.d.ts.map +1 -1
  143. package/dist/src/core/project-manager.js +68 -48
  144. package/dist/src/core/project-manager.js.map +1 -1
  145. package/dist/src/core/spec-content-sync.d.ts +1 -1
  146. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  147. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  148. package/dist/src/core/sync/enhanced-content-builder.js +2 -1
  149. package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
  150. package/dist/src/core/sync/performance-optimizer.d.ts +153 -0
  151. package/dist/src/core/sync/performance-optimizer.d.ts.map +1 -0
  152. package/dist/src/core/sync/performance-optimizer.js +220 -0
  153. package/dist/src/core/sync/performance-optimizer.js.map +1 -0
  154. package/dist/src/core/sync/retry-handler.d.ts +98 -0
  155. package/dist/src/core/sync/retry-handler.d.ts.map +1 -0
  156. package/dist/src/core/sync/retry-handler.js +196 -0
  157. package/dist/src/core/sync/retry-handler.js.map +1 -0
  158. package/dist/src/core/types/config.d.ts +94 -0
  159. package/dist/src/core/types/config.d.ts.map +1 -1
  160. package/dist/src/core/types/config.js +16 -0
  161. package/dist/src/core/types/config.js.map +1 -1
  162. package/dist/src/core/types/increment-metadata.d.ts +6 -0
  163. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  164. package/dist/src/core/types/increment-metadata.js +10 -1
  165. package/dist/src/core/types/increment-metadata.js.map +1 -1
  166. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  167. package/dist/src/integrations/jira/jira-incremental-mapper.js +4 -8
  168. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  169. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  170. package/dist/src/integrations/jira/jira-mapper.js +4 -8
  171. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  172. package/package.json +1 -1
  173. package/plugins/specweave/COMMANDS.md +13 -4
  174. package/plugins/specweave/commands/specweave-abandon.md +22 -20
  175. package/plugins/specweave/commands/specweave-archive-features.md +121 -0
  176. package/plugins/specweave/commands/specweave-archive-increments.md +82 -0
  177. package/plugins/specweave/commands/specweave-archive.md +363 -0
  178. package/plugins/specweave/commands/specweave-backlog.md +211 -0
  179. package/plugins/specweave/commands/specweave-fix-duplicates.md +517 -0
  180. package/plugins/specweave/commands/specweave-increment.md +4 -3
  181. package/plugins/specweave/commands/specweave-progress.md +176 -27
  182. package/plugins/specweave/commands/specweave-reopen.md +391 -0
  183. package/plugins/specweave/commands/specweave-restore-feature.md +90 -0
  184. package/plugins/specweave/commands/specweave-restore.md +309 -0
  185. package/plugins/specweave/commands/specweave-resume.md +51 -23
  186. package/plugins/specweave/commands/specweave-status.md +41 -7
  187. package/plugins/specweave/commands/specweave-sync-specs.md +425 -0
  188. package/plugins/specweave/hooks/hooks.json +4 -0
  189. package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
  190. package/plugins/specweave/hooks/post-task-completion.sh +39 -0
  191. package/plugins/specweave/hooks/pre-command-deduplication.sh +83 -0
  192. package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
  193. package/plugins/specweave/lib/hooks/sync-living-docs.js +2 -0
  194. package/plugins/specweave/lib/hooks/sync-living-docs.ts +4 -0
  195. package/plugins/specweave/lib/hooks/update-ac-status.js +102 -0
  196. package/plugins/specweave/lib/hooks/update-ac-status.ts +192 -0
  197. package/plugins/specweave/skills/archive-increments/SKILL.md +198 -0
  198. package/plugins/specweave/skills/increment-planner/scripts/feature-utils.js +14 -0
  199. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +244 -0
  200. package/plugins/specweave-ado/lib/ado-spec-content-sync.js +49 -5
  201. package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +72 -6
  202. package/plugins/specweave-confluent/.claude-plugin/plugin.json +23 -0
  203. package/plugins/specweave-confluent/README.md +375 -0
  204. package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +306 -0
  205. package/plugins/specweave-confluent/skills/confluent-kafka-connect/SKILL.md +453 -0
  206. package/plugins/specweave-confluent/skills/confluent-ksqldb/SKILL.md +470 -0
  207. package/plugins/specweave-confluent/skills/confluent-schema-registry/SKILL.md +316 -0
  208. package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +2 -2
  209. package/plugins/specweave-github/agents/user-story-updater/AGENT.md +148 -0
  210. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +1 -1
  211. package/plugins/specweave-github/commands/specweave-github-update-user-story.md +156 -0
  212. package/plugins/specweave-github/hooks/post-task-completion.sh +10 -9
  213. package/plugins/specweave-github/lib/completion-calculator.js +262 -0
  214. package/plugins/specweave-github/lib/completion-calculator.ts +434 -0
  215. package/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  216. package/plugins/specweave-github/lib/duplicate-detector.ts +4 -4
  217. package/plugins/specweave-github/lib/epic-content-builder.js +38 -0
  218. package/plugins/specweave-github/lib/epic-content-builder.ts +59 -0
  219. package/plugins/specweave-github/lib/github-client-v2.js +49 -0
  220. package/plugins/specweave-github/lib/github-client-v2.ts +59 -0
  221. package/plugins/specweave-github/lib/github-epic-sync.ts +1 -1
  222. package/plugins/specweave-github/lib/github-feature-sync.js +381 -0
  223. package/plugins/specweave-github/lib/github-feature-sync.ts +568 -0
  224. package/plugins/specweave-github/lib/github-spec-content-sync.js +40 -10
  225. package/plugins/specweave-github/lib/github-spec-content-sync.ts +82 -14
  226. package/plugins/specweave-github/lib/progress-comment-builder.js +229 -0
  227. package/plugins/specweave-github/lib/progress-comment-builder.ts +324 -0
  228. package/plugins/specweave-github/lib/user-story-content-builder.js +299 -0
  229. package/plugins/specweave-github/lib/user-story-content-builder.ts +413 -0
  230. package/plugins/specweave-github/lib/user-story-issue-builder.js +344 -0
  231. package/plugins/specweave-github/lib/user-story-issue-builder.ts +543 -0
  232. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +189 -0
  233. package/plugins/{specweave-ado/lib/enhanced-ado-sync.js → specweave-jira/lib/enhanced-jira-sync.js} +25 -61
  234. package/plugins/specweave-jira/lib/{enhanced-jira-sync.ts.disabled → enhanced-jira-sync.ts} +26 -52
  235. package/plugins/specweave-kafka/.claude-plugin/plugin.json +26 -0
  236. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +483 -0
  237. package/plugins/specweave-kafka/README.md +242 -0
  238. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +235 -0
  239. package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +209 -0
  240. package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +266 -0
  241. package/plugins/specweave-kafka/commands/deploy.md +99 -0
  242. package/plugins/specweave-kafka/commands/dev-env.md +176 -0
  243. package/plugins/specweave-kafka/commands/mcp-configure.md +101 -0
  244. package/plugins/specweave-kafka/commands/monitor-setup.md +96 -0
  245. package/plugins/specweave-kafka/docker/kafka-local/docker-compose.yml +187 -0
  246. package/plugins/specweave-kafka/docker/redpanda/docker-compose.yml +199 -0
  247. package/plugins/specweave-kafka/docker/templates/consumer-nodejs.js +225 -0
  248. package/plugins/specweave-kafka/docker/templates/consumer-python.py +220 -0
  249. package/plugins/specweave-kafka/docker/templates/producer-nodejs.js +168 -0
  250. package/plugins/specweave-kafka/docker/templates/producer-python.py +167 -0
  251. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.js +438 -0
  252. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.ts +541 -0
  253. package/plugins/specweave-kafka/lib/adapters/platform-adapter.js +47 -0
  254. package/plugins/specweave-kafka/lib/adapters/platform-adapter.ts +343 -0
  255. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +258 -0
  256. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.ts +298 -0
  257. package/plugins/specweave-kafka/lib/cli/types.js +10 -0
  258. package/plugins/specweave-kafka/lib/cli/types.ts +92 -0
  259. package/plugins/specweave-kafka/lib/connectors/connector-catalog.js +305 -0
  260. package/plugins/specweave-kafka/lib/connectors/connector-catalog.ts +528 -0
  261. package/plugins/specweave-kafka/lib/documentation/diagram-generator.js +114 -0
  262. package/plugins/specweave-kafka/lib/documentation/diagram-generator.ts +195 -0
  263. package/plugins/specweave-kafka/lib/documentation/exporter.js +210 -0
  264. package/plugins/specweave-kafka/lib/documentation/exporter.ts +338 -0
  265. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.js +60 -0
  266. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.ts +130 -0
  267. package/plugins/specweave-kafka/lib/documentation/topology-generator.js +143 -0
  268. package/plugins/specweave-kafka/lib/documentation/topology-generator.ts +290 -0
  269. package/plugins/specweave-kafka/lib/mcp/detector.js +298 -0
  270. package/plugins/specweave-kafka/lib/mcp/detector.ts +352 -0
  271. package/plugins/specweave-kafka/lib/mcp/types.js +21 -0
  272. package/plugins/specweave-kafka/lib/mcp/types.ts +77 -0
  273. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.js +193 -0
  274. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.ts +362 -0
  275. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.js +188 -0
  276. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.ts +359 -0
  277. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.js +195 -0
  278. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.ts +380 -0
  279. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.js +209 -0
  280. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.ts +358 -0
  281. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.js +354 -0
  282. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.ts +563 -0
  283. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.js +259 -0
  284. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.ts +516 -0
  285. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.js +233 -0
  286. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.ts +423 -0
  287. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.js +266 -0
  288. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.ts +445 -0
  289. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.js +312 -0
  290. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.ts +561 -0
  291. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.js +289 -0
  292. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.ts +607 -0
  293. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.js +264 -0
  294. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.ts +498 -0
  295. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.js +263 -0
  296. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.ts +549 -0
  297. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.js +205 -0
  298. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.ts +399 -0
  299. package/plugins/specweave-kafka/lib/performance/performance-optimizer.js +249 -0
  300. package/plugins/specweave-kafka/lib/performance/performance-optimizer.ts +427 -0
  301. package/plugins/specweave-kafka/lib/security/kafka-security.js +252 -0
  302. package/plugins/specweave-kafka/lib/security/kafka-security.ts +494 -0
  303. package/plugins/specweave-kafka/lib/utils/capacity-planner.js +203 -0
  304. package/plugins/specweave-kafka/lib/utils/capacity-planner.ts +469 -0
  305. package/plugins/specweave-kafka/lib/utils/config-validator.js +419 -0
  306. package/plugins/specweave-kafka/lib/utils/config-validator.ts +564 -0
  307. package/plugins/specweave-kafka/lib/utils/partitioning.js +329 -0
  308. package/plugins/specweave-kafka/lib/utils/partitioning.ts +473 -0
  309. package/plugins/specweave-kafka/lib/utils/sizing.js +221 -0
  310. package/plugins/specweave-kafka/lib/utils/sizing.ts +374 -0
  311. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-broker-metrics.json +628 -0
  312. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-cluster-overview.json +564 -0
  313. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-consumer-lag.json +509 -0
  314. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-jvm-metrics.json +674 -0
  315. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-topic-metrics.json +578 -0
  316. package/plugins/specweave-kafka/monitoring/grafana/provisioning/dashboards/kafka.yml +17 -0
  317. package/plugins/specweave-kafka/monitoring/grafana/provisioning/datasources/prometheus.yml +17 -0
  318. package/plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml +415 -0
  319. package/plugins/specweave-kafka/monitoring/prometheus/kafka-jmx-exporter.yml +256 -0
  320. package/plugins/specweave-kafka/package.json +41 -0
  321. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +647 -0
  322. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +433 -0
  323. package/plugins/specweave-kafka/skills/kafka-iac-deployment/SKILL.md +449 -0
  324. package/plugins/specweave-kafka/skills/kafka-kubernetes/SKILL.md +667 -0
  325. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +273 -0
  326. package/plugins/specweave-kafka/skills/kafka-observability/SKILL.md +576 -0
  327. package/plugins/specweave-kafka/templates/config/broker-production.properties +254 -0
  328. package/plugins/specweave-kafka/templates/config/consumer-low-latency.properties +112 -0
  329. package/plugins/specweave-kafka/templates/config/producer-high-throughput.properties +120 -0
  330. package/plugins/specweave-kafka/templates/migration/mirrormaker2-config.properties +234 -0
  331. package/plugins/specweave-kafka/templates/monitoring/grafana/multi-cluster-dashboard.json +686 -0
  332. package/plugins/specweave-kafka/terraform/apache-kafka/main.tf +347 -0
  333. package/plugins/specweave-kafka/terraform/apache-kafka/outputs.tf +107 -0
  334. package/plugins/specweave-kafka/terraform/apache-kafka/templates/kafka-broker-init.sh.tpl +216 -0
  335. package/plugins/specweave-kafka/terraform/apache-kafka/variables.tf +156 -0
  336. package/plugins/specweave-kafka/terraform/aws-msk/main.tf +362 -0
  337. package/plugins/specweave-kafka/terraform/aws-msk/outputs.tf +93 -0
  338. package/plugins/specweave-kafka/terraform/aws-msk/templates/server.properties.tpl +32 -0
  339. package/plugins/specweave-kafka/terraform/aws-msk/variables.tf +235 -0
  340. package/plugins/specweave-kafka/terraform/azure-event-hubs/main.tf +281 -0
  341. package/plugins/specweave-kafka/terraform/azure-event-hubs/outputs.tf +118 -0
  342. package/plugins/specweave-kafka/terraform/azure-event-hubs/variables.tf +148 -0
  343. package/plugins/specweave-kafka/tsconfig.json +21 -0
  344. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +23 -0
  345. package/plugins/specweave-kafka-streams/README.md +310 -0
  346. package/plugins/specweave-kafka-streams/skills/kafka-streams-topology/SKILL.md +539 -0
  347. package/plugins/specweave-n8n/.claude-plugin/plugin.json +22 -0
  348. package/plugins/specweave-n8n/README.md +354 -0
  349. package/plugins/specweave-n8n/skills/n8n-kafka-workflows/SKILL.md +504 -0
  350. package/plugins/specweave-release/commands/specweave-release-platform.md +1 -1
  351. package/plugins/specweave-release/hooks/post-task-completion.sh +2 -2
  352. package/src/templates/AGENTS.md.template +601 -7
  353. package/src/templates/CLAUDE.md.template +188 -88
  354. package/dist/locales/de/.gitkeep +0 -0
  355. package/dist/locales/de/cli.json +0 -108
  356. package/dist/locales/en/cli.json +0 -287
  357. package/dist/locales/en/errors.json +0 -7
  358. package/dist/locales/en/templates.json +0 -6
  359. package/dist/locales/es/.gitkeep +0 -0
  360. package/dist/locales/es/cli.json +0 -41
  361. package/dist/locales/fr/.gitkeep +0 -0
  362. package/dist/locales/fr/cli.json +0 -108
  363. package/dist/locales/ja/.gitkeep +0 -0
  364. package/dist/locales/ja/cli.json +0 -108
  365. package/dist/locales/ko/.gitkeep +0 -0
  366. package/dist/locales/ko/cli.json +0 -108
  367. package/dist/locales/pt/.gitkeep +0 -0
  368. package/dist/locales/pt/cli.json +0 -108
  369. package/dist/locales/ru/.gitkeep +0 -0
  370. package/dist/locales/ru/cli.json +0 -269
  371. package/dist/locales/zh/.gitkeep +0 -0
  372. package/dist/locales/zh/cli.json +0 -108
  373. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +0 -25
  374. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +0 -1
  375. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -191
  376. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +0 -1
  377. package/dist/spec-parser.js +0 -629
  378. package/dist/src/core/sync/spec-content-sync.d.ts +0 -88
  379. package/dist/src/core/sync/spec-content-sync.d.ts.map +0 -1
  380. package/dist/src/core/sync/spec-content-sync.js +0 -5
  381. package/dist/src/core/sync/spec-content-sync.js.map +0 -1
  382. package/dist/tsconfig.tsbuildinfo +0 -1
  383. package/plugins/specweave-ado/commands/specweave-ado-sync-spec.md +0 -255
  384. package/plugins/specweave-github/commands/specweave-github-sync-epic.md +0 -248
  385. package/plugins/specweave-github/commands/specweave-github-sync-from.md +0 -147
  386. package/plugins/specweave-github/commands/specweave-github-sync-spec.md +0 -208
  387. package/plugins/specweave-github/commands/specweave-github-sync-tasks.md +0 -530
  388. package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +0 -267
  389. package/plugins/specweave-jira/commands/specweave-jira-sync-spec.md +0 -240
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env node
2
+ import * as fs from "fs/promises";
3
+ import * as path from "path";
4
+ async function updateACStatus(incrementId) {
5
+ try {
6
+ const projectRoot = process.cwd();
7
+ const incrementPath = path.join(projectRoot, ".specweave/increments", incrementId);
8
+ try {
9
+ await fs.access(incrementPath);
10
+ } catch {
11
+ console.error(`\u274C Increment ${incrementId} not found at ${incrementPath}`);
12
+ return;
13
+ }
14
+ console.log(`\u{1F504} Updating AC status for increment ${incrementId}...`);
15
+ const completedACs = await extractCompletedACsFromTasks(incrementPath);
16
+ if (completedACs.size === 0) {
17
+ console.log(`\u2139\uFE0F No completed tasks with AC-IDs found in tasks.md`);
18
+ return;
19
+ }
20
+ console.log(`\u2713 Found ${completedACs.size} completed AC-IDs from tasks.md`);
21
+ const updatedCount = await updateSpecACCheckboxes(incrementPath, completedACs);
22
+ if (updatedCount > 0) {
23
+ console.log(`\u2705 Updated ${updatedCount} AC checkbox(es) in spec.md`);
24
+ } else {
25
+ console.log(`\u2139\uFE0F No AC checkboxes needed updating in spec.md`);
26
+ }
27
+ } catch (error) {
28
+ console.error("\u274C Error updating AC status:", error);
29
+ }
30
+ }
31
+ async function extractCompletedACsFromTasks(incrementPath) {
32
+ const tasksPath = path.join(incrementPath, "tasks.md");
33
+ const completedACs = /* @__PURE__ */ new Set();
34
+ try {
35
+ const tasksContent = await fs.readFile(tasksPath, "utf-8");
36
+ const taskSections = tasksContent.split(/^(###+)\s+T-\d+:/gm);
37
+ for (let i = 1; i < taskSections.length; i += 2) {
38
+ const taskContent = taskSections[i + 1];
39
+ const statusMatch = taskContent.match(/\*\*Status\*\*:\s*\[x\]/i);
40
+ if (!statusMatch) continue;
41
+ const acMatch = taskContent.match(/\*\*AC\*\*:\s*([^\n]+)/);
42
+ if (!acMatch) continue;
43
+ const acField = acMatch[1];
44
+ const acIds = acField.split(",").map((id) => id.trim()).filter((id) => /^AC-[A-Z0-9]+-\d+$/.test(id));
45
+ acIds.forEach((acId) => completedACs.add(acId));
46
+ }
47
+ return completedACs;
48
+ } catch (error) {
49
+ if (error.code === "ENOENT") {
50
+ console.log(`\u2139\uFE0F tasks.md not found, skipping AC update`);
51
+ } else {
52
+ console.error("Error reading tasks.md:", error);
53
+ }
54
+ return completedACs;
55
+ }
56
+ }
57
+ async function updateSpecACCheckboxes(incrementPath, completedACs) {
58
+ const specPath = path.join(incrementPath, "spec.md");
59
+ try {
60
+ let specContent = await fs.readFile(specPath, "utf-8");
61
+ let updatedCount = 0;
62
+ const acPattern = /^(\s*)-\s+\[([ x])\]\s+\*\*([A-Z]+-[A-Z0-9]+-\d+)\*\*:(.*)$/gm;
63
+ specContent = specContent.replace(acPattern, (match, indent, currentState, acId, description) => {
64
+ const shouldBeChecked = completedACs.has(acId);
65
+ const isCurrentlyChecked = currentState === "x";
66
+ if (shouldBeChecked && !isCurrentlyChecked) {
67
+ updatedCount++;
68
+ return `${indent}- [x] **${acId}**:${description}`;
69
+ } else if (!shouldBeChecked && isCurrentlyChecked) {
70
+ updatedCount++;
71
+ return `${indent}- [ ] **${acId}**:${description}`;
72
+ }
73
+ return match;
74
+ });
75
+ if (updatedCount > 0) {
76
+ await fs.writeFile(specPath, specContent, "utf-8");
77
+ }
78
+ return updatedCount;
79
+ } catch (error) {
80
+ if (error.code === "ENOENT") {
81
+ console.log(`\u2139\uFE0F spec.md not found, skipping AC update`);
82
+ } else {
83
+ console.error("Error updating spec.md:", error);
84
+ }
85
+ return 0;
86
+ }
87
+ }
88
+ const isMainModule = import.meta.url === `file://${process.argv[1]}`;
89
+ if (isMainModule) {
90
+ const incrementId = process.argv[2];
91
+ if (!incrementId) {
92
+ console.error("Usage: node update-ac-status.js <increment-id>");
93
+ console.error("Example: node update-ac-status.js 0031-external-tool-status-sync");
94
+ process.exit(1);
95
+ }
96
+ updateACStatus(incrementId).then(() => {
97
+ process.exit(0);
98
+ }).catch((error) => {
99
+ console.error("Fatal error:", error);
100
+ process.exit(1);
101
+ });
102
+ }
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * AC Status Update Hook
5
+ *
6
+ * Updates acceptance criteria checkboxes in spec.md based on completed tasks.
7
+ *
8
+ * Flow:
9
+ * 1. Read tasks.md → Extract completed tasks
10
+ * 2. Extract AC-IDs from **AC**: field (e.g., AC-US1-01, AC-US1-02)
11
+ * 3. Read spec.md → Find all AC checkboxes
12
+ * 4. Check off AC if task implementing it is complete
13
+ * 5. Write updated spec.md
14
+ *
15
+ * Called by: plugins/specweave/hooks/post-task-completion.sh
16
+ *
17
+ * Example:
18
+ * - Task T-001: [x] Completed, **AC**: AC-US1-01, AC-US1-02
19
+ * - spec.md: - [ ] **AC-US1-01**: ... → - [x] **AC-US1-01**: ... ✅
20
+ */
21
+
22
+ import * as fs from 'fs/promises';
23
+ import * as path from 'path';
24
+
25
+ interface ACStatus {
26
+ acId: string;
27
+ isComplete: boolean;
28
+ completedByTasks: string[];
29
+ }
30
+
31
+ /**
32
+ * Main entry point
33
+ */
34
+ async function updateACStatus(incrementId: string): Promise<void> {
35
+ try {
36
+ const projectRoot = process.cwd();
37
+ const incrementPath = path.join(projectRoot, '.specweave/increments', incrementId);
38
+
39
+ // Verify increment exists
40
+ try {
41
+ await fs.access(incrementPath);
42
+ } catch {
43
+ console.error(`❌ Increment ${incrementId} not found at ${incrementPath}`);
44
+ return;
45
+ }
46
+
47
+ console.log(`🔄 Updating AC status for increment ${incrementId}...`);
48
+
49
+ // Step 1: Extract completed ACs from tasks.md
50
+ const completedACs = await extractCompletedACsFromTasks(incrementPath);
51
+
52
+ if (completedACs.size === 0) {
53
+ console.log(`ℹ️ No completed tasks with AC-IDs found in tasks.md`);
54
+ return;
55
+ }
56
+
57
+ console.log(`✓ Found ${completedACs.size} completed AC-IDs from tasks.md`);
58
+
59
+ // Step 2: Update spec.md checkboxes
60
+ const updatedCount = await updateSpecACCheckboxes(incrementPath, completedACs);
61
+
62
+ if (updatedCount > 0) {
63
+ console.log(`✅ Updated ${updatedCount} AC checkbox(es) in spec.md`);
64
+ } else {
65
+ console.log(`ℹ️ No AC checkboxes needed updating in spec.md`);
66
+ }
67
+ } catch (error) {
68
+ console.error('❌ Error updating AC status:', error);
69
+ // Non-blocking: Don't throw, just log
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Extract AC-IDs from completed tasks in tasks.md
75
+ */
76
+ async function extractCompletedACsFromTasks(incrementPath: string): Promise<Set<string>> {
77
+ const tasksPath = path.join(incrementPath, 'tasks.md');
78
+ const completedACs = new Set<string>();
79
+
80
+ try {
81
+ const tasksContent = await fs.readFile(tasksPath, 'utf-8');
82
+
83
+ // Pattern: Match tasks with completed status and AC field
84
+ // Example:
85
+ // ### T-001: Task Title
86
+ // **Status**: [x] (100% - Completed)
87
+ // **AC**: AC-US1-01, AC-US1-02, AC-US1-03
88
+
89
+ // Split by task headings (## or ###)
90
+ const taskSections = tasksContent.split(/^(###+)\s+T-\d+:/gm);
91
+
92
+ for (let i = 1; i < taskSections.length; i += 2) {
93
+ const taskContent = taskSections[i + 1];
94
+
95
+ // Check if task is completed
96
+ const statusMatch = taskContent.match(/\*\*Status\*\*:\s*\[x\]/i);
97
+ if (!statusMatch) continue;
98
+
99
+ // Extract AC-IDs from **AC**: field
100
+ const acMatch = taskContent.match(/\*\*AC\*\*:\s*([^\n]+)/);
101
+ if (!acMatch) continue;
102
+
103
+ const acField = acMatch[1]; // "AC-US1-01, AC-US1-02, AC-US1-03"
104
+ const acIds = acField
105
+ .split(',')
106
+ .map(id => id.trim())
107
+ .filter(id => /^AC-[A-Z0-9]+-\d+$/.test(id)); // Validate format
108
+
109
+ acIds.forEach(acId => completedACs.add(acId));
110
+ }
111
+
112
+ return completedACs;
113
+ } catch (error) {
114
+ if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
115
+ console.log(`ℹ️ tasks.md not found, skipping AC update`);
116
+ } else {
117
+ console.error('Error reading tasks.md:', error);
118
+ }
119
+ return completedACs;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Update AC checkboxes in spec.md
125
+ */
126
+ async function updateSpecACCheckboxes(
127
+ incrementPath: string,
128
+ completedACs: Set<string>
129
+ ): Promise<number> {
130
+ const specPath = path.join(incrementPath, 'spec.md');
131
+
132
+ try {
133
+ let specContent = await fs.readFile(specPath, 'utf-8');
134
+ let updatedCount = 0;
135
+
136
+ // Pattern: - [ ] **AC-US1-01**: Description
137
+ // Captures: indent, checkbox state, AC-ID, rest of line
138
+ const acPattern = /^(\s*)-\s+\[([ x])\]\s+\*\*([A-Z]+-[A-Z0-9]+-\d+)\*\*:(.*)$/gm;
139
+
140
+ specContent = specContent.replace(acPattern, (match, indent, currentState, acId, description) => {
141
+ const shouldBeChecked = completedACs.has(acId);
142
+ const isCurrentlyChecked = currentState === 'x';
143
+
144
+ if (shouldBeChecked && !isCurrentlyChecked) {
145
+ // Check off this AC
146
+ updatedCount++;
147
+ return `${indent}- [x] **${acId}**:${description}`;
148
+ } else if (!shouldBeChecked && isCurrentlyChecked) {
149
+ // Uncheck this AC (task was un-completed?)
150
+ updatedCount++;
151
+ return `${indent}- [ ] **${acId}**:${description}`;
152
+ }
153
+
154
+ return match; // No change needed
155
+ });
156
+
157
+ if (updatedCount > 0) {
158
+ await fs.writeFile(specPath, specContent, 'utf-8');
159
+ }
160
+
161
+ return updatedCount;
162
+ } catch (error) {
163
+ if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
164
+ console.log(`ℹ️ spec.md not found, skipping AC update`);
165
+ } else {
166
+ console.error('Error updating spec.md:', error);
167
+ }
168
+ return 0;
169
+ }
170
+ }
171
+
172
+ // CLI Entry Point (ES Module)
173
+ const isMainModule = import.meta.url === `file://${process.argv[1]}`;
174
+
175
+ if (isMainModule) {
176
+ const incrementId = process.argv[2];
177
+
178
+ if (!incrementId) {
179
+ console.error('Usage: node update-ac-status.js <increment-id>');
180
+ console.error('Example: node update-ac-status.js 0031-external-tool-status-sync');
181
+ process.exit(1);
182
+ }
183
+
184
+ updateACStatus(incrementId)
185
+ .then(() => {
186
+ process.exit(0);
187
+ })
188
+ .catch((error) => {
189
+ console.error('Fatal error:', error);
190
+ process.exit(1);
191
+ });
192
+ }
@@ -0,0 +1,198 @@
1
+ ---
2
+ name: archive-increments
3
+ description: Intelligent increment archiving expert. Analyzes increment age, status, and activity to recommend archiving strategy. Keeps workspace clean while preserving history. Activates for archive increments, clean workspace, too many increments, archive old, archive completed, preserve history, _archive folder.
4
+ ---
5
+
6
+ # Increment Archive Manager
7
+
8
+ Expert at keeping the `.specweave/increments/` folder clean and organized through intelligent archiving.
9
+
10
+ ## Core Knowledge
11
+
12
+ ### Archiving Philosophy
13
+
14
+ **The 10-10-10 Rule**:
15
+ - **10 Active**: Keep last 10 increments readily accessible
16
+ - **10 Days**: Archive increments inactive for >10 days
17
+ - **10 Seconds**: Archive operation should take <10 seconds
18
+
19
+ ### Archive Structure
20
+
21
+ ```
22
+ .specweave/increments/
23
+ ├── 0023-0032 (Active) ← Last 10 increments
24
+ ├── _archive/ ← Completed/old increments
25
+ │ ├── 0001-0022 ← Historical increments
26
+ │ └── 0029 ← Abandoned experiments
27
+ └── _abandoned/ ← Failed/obsolete increments
28
+ ```
29
+
30
+ ### Smart Detection Rules
31
+
32
+ #### Never Archive
33
+ - **Active increments** (status: active)
34
+ - **Paused increments** (status: paused) - may resume
35
+ - **Recent increments** (last 10 by default)
36
+ - **Increments with open GitHub/JIRA/ADO issues**
37
+ - **Increments with uncommitted changes**
38
+
39
+ #### Always Archive
40
+ - **Completed >60 days ago**
41
+ - **No activity >30 days** (and status: completed)
42
+ - **Superseded increments** (replaced by newer version)
43
+ - **Failed experiments** (after confirmation)
44
+
45
+ #### Smart Grouping
46
+ - **Release groups**: Archive all v0.7.x after v0.8.0 ships
47
+ - **Feature groups**: Archive related increments together
48
+ - **Time-based**: Quarter/month-based archiving
49
+
50
+ ## Usage Patterns
51
+
52
+ ### Keep Workspace Clean
53
+ ```bash
54
+ # Interactive archiving - prompts for confirmation
55
+ /specweave:archive-increments
56
+
57
+ # Keep only last 5 increments
58
+ /specweave:archive-increments --keep-last 5
59
+
60
+ # Archive all completed increments
61
+ /specweave:archive-increments --archive-completed
62
+ ```
63
+
64
+ ### Prepare for Release
65
+ ```bash
66
+ # Archive all pre-release increments
67
+ /specweave:archive-increments --pattern "v0.7"
68
+
69
+ # Archive by date range
70
+ /specweave:archive-increments --older-than 30d
71
+ ```
72
+
73
+ ### Restore from Archive
74
+ ```bash
75
+ # List archived increments
76
+ /specweave:archive-increments --list-archived
77
+
78
+ # Restore specific increment
79
+ /specweave:archive-increments --restore 0015
80
+ ```
81
+
82
+ ## Configuration
83
+
84
+ ### Default Settings
85
+ ```json
86
+ {
87
+ "archiving": {
88
+ "keepLast": 10, // Keep last 10 increments
89
+ "autoArchive": false, // Manual by default
90
+ "archiveAfterDays": 60, // Archive after 60 days
91
+ "preserveActive": true, // Never archive active
92
+ "archiveCompleted": false // Manual control
93
+ }
94
+ }
95
+ ```
96
+
97
+ ### Aggressive Cleanup
98
+ ```json
99
+ {
100
+ "archiving": {
101
+ "keepLast": 5, // Minimal workspace
102
+ "autoArchive": true, // Auto-archive on completion
103
+ "archiveAfterDays": 14, // Archive after 2 weeks
104
+ "archiveCompleted": true // Auto-archive completed
105
+ }
106
+ }
107
+ ```
108
+
109
+ ## Archive Statistics
110
+
111
+ ### Current State Analysis
112
+ When asked about archiving, I analyze:
113
+ - Number of active increments
114
+ - Age of oldest active increment
115
+ - Total size of increments folder
116
+ - Number of completed increments
117
+ - External sync status
118
+
119
+ ### Recommendations
120
+ Based on analysis, I suggest:
121
+ - **Overcrowded** (>20 active): Archive all but last 10
122
+ - **Stale** (many >30 days old): Archive by age
123
+ - **Post-release**: Archive previous version increments
124
+ - **Large size** (>100MB): Archive largest completed increments
125
+
126
+ ## Safety Features
127
+
128
+ ### Pre-Archive Checks
129
+ 1. **Metadata validation**: Check increment status
130
+ 2. **External sync**: Verify no open issues
131
+ 3. **Git status**: Check for uncommitted changes
132
+ 4. **Dependencies**: Check if referenced by active increments
133
+ 5. **User confirmation**: Show what will be archived
134
+
135
+ ### Archive Operations
136
+ - **Atomic moves**: Use fs.move with overwrite protection
137
+ - **Preserve structure**: Maintain full increment structure
138
+ - **Update references**: Fix links in living docs
139
+ - **Reversible**: Easy restore from archive
140
+ - **Audit trail**: Log all archive operations
141
+
142
+ ## Smart Suggestions
143
+
144
+ ### When to Archive
145
+ - **After major release**: Archive all pre-release increments
146
+ - **Quarterly cleanup**: Archive increments >3 months old
147
+ - **Before new project phase**: Archive previous phase work
148
+ - **Low disk space**: Archive largest completed increments
149
+
150
+ ### Archive Patterns
151
+ - **By version**: `--pattern "v0.7"` (all v0.7.x increments)
152
+ - **By feature**: `--pattern "auth|login"` (auth-related)
153
+ - **By date**: `--older-than 30d` (time-based)
154
+ - **By status**: `--archive-completed` (all completed)
155
+
156
+ ## Integration Points
157
+
158
+ ### Status Line
159
+ - Shows "23-32 (10 active, 22 archived)" format
160
+ - Warns when >15 active increments
161
+ - Suggests archiving when appropriate
162
+
163
+ ### Increment Commands
164
+ - `/specweave:done` can trigger auto-archive
165
+ - `/specweave:status` shows archive statistics
166
+ - `/specweave:next` considers archived increments
167
+
168
+ ### Living Docs
169
+ - Archive preserves living docs references
170
+ - Restore updates living docs links
171
+ - Archive included in docs statistics
172
+
173
+ ## Best Practices
174
+
175
+ 1. **Regular Cleanup**: Archive monthly or after releases
176
+ 2. **Keep Recent**: Always keep last 5-10 increments
177
+ 3. **Preserve Active**: Never force-archive active work
178
+ 4. **Group Related**: Archive feature groups together
179
+ 5. **Document Reasons**: Add archive notes for context
180
+
181
+ ## Quick Reference
182
+
183
+ ```bash
184
+ # Archive old increments
185
+ /specweave:archive-increments --older-than 30d
186
+
187
+ # Keep workspace minimal
188
+ /specweave:archive-increments --keep-last 5
189
+
190
+ # Archive after release
191
+ /specweave:archive-increments --pattern "pre-release"
192
+
193
+ # Restore for reference
194
+ /specweave:archive-increments --restore 0015
195
+
196
+ # Check archive stats
197
+ /specweave:archive-increments --stats
198
+ ```
@@ -59,8 +59,15 @@ function generateShortName(description) {
59
59
  * Get the next available feature number
60
60
  * @param {string} featuresDir - Path to features directory (default: '.specweave/increments')
61
61
  * @returns {string} Next feature number (zero-padded to 4 digits: 0001-9999)
62
+ *
63
+ * NOTE: This function is DEPRECATED. Use IncrementNumberManager from src/core/increment-utils.ts instead.
64
+ * Kept for backward compatibility with existing scripts.
62
65
  */
63
66
  function getNextFeatureNumber(featuresDir = '.specweave/increments') {
67
+ // DEPRECATED: For backward compatibility only
68
+ // The NEW implementation scans ALL directories (_archive, _abandoned, _paused)
69
+ // To use the new implementation, import IncrementNumberManager from src/core/increment-utils.ts
70
+
64
71
  let highest = 0;
65
72
 
66
73
  if (fs.existsSync(featuresDir)) {
@@ -104,8 +111,15 @@ function featureExists(shortName, featuresDir = '.specweave/increments') {
104
111
  * @param {string} incrementNumber - Increment number to check (e.g., '0001')
105
112
  * @param {string} featuresDir - Path to features directory
106
113
  * @returns {boolean} True if number already exists
114
+ *
115
+ * NOTE: This function is DEPRECATED. Use IncrementNumberManager.incrementNumberExists() instead.
116
+ * Kept for backward compatibility with existing scripts.
107
117
  */
108
118
  function incrementNumberExists(incrementNumber, featuresDir = '.specweave/increments') {
119
+ // DEPRECATED: For backward compatibility only
120
+ // The NEW implementation scans ALL directories (_archive, _abandoned, _paused)
121
+ // To use the new implementation, import IncrementNumberManager from src/core/increment-utils.ts
122
+
109
123
  if (!fs.existsSync(featuresDir)) {
110
124
  return false;
111
125
  }