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,412 @@
1
+ /**
2
+ * GitHub Feature Sync - Universal Hierarchy Implementation
3
+ *
4
+ * Architecture (CORRECT):
5
+ * - Feature (FS-033) → GitHub Milestone (Container)
6
+ * - User Story (US-001, US-002, etc.) → GitHub Issue (Trackable item)
7
+ * - Tasks (T-001, T-002, etc.) → Checkboxes in User Story issue body
8
+ *
9
+ * This implements the TRUE Universal Hierarchy architecture for GitHub.
10
+ *
11
+ * Key Differences from old github-epic-sync.ts:
12
+ * - āŒ OLD: Feature/Increment → GitHub Issue (WRONG!)
13
+ * - āœ… NEW: User Story → GitHub Issue (CORRECT!)
14
+ * - āœ… Creates ONE issue PER user story file (not one per increment)
15
+ * - āœ… Reads us-*.md files from specs/{project}/FS-XXX/
16
+ */
17
+ import { readdir, readFile, writeFile } from 'fs/promises';
18
+ import { existsSync } from 'fs';
19
+ import * as path from 'path';
20
+ import * as yaml from 'yaml';
21
+ import { UserStoryIssueBuilder } from './user-story-issue-builder.js';
22
+ import { CompletionCalculator } from './completion-calculator.js';
23
+ import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
24
+ export class GitHubFeatureSync {
25
+ constructor(client, specsDir, projectRoot) {
26
+ this.client = client;
27
+ this.specsDir = specsDir;
28
+ this.projectRoot = projectRoot;
29
+ this.calculator = new CompletionCalculator(projectRoot);
30
+ }
31
+ /**
32
+ * Sync Feature folder to GitHub (Milestone + User Story Issues)
33
+ *
34
+ * Process:
35
+ * 1. Create/update GitHub Milestone for Feature
36
+ * 2. Find all us-*.md files across all projects
37
+ * 3. Create/update GitHub Issue for EACH user story
38
+ * 4. Update frontmatter with GitHub issue links
39
+ */
40
+ async syncFeatureToGitHub(featureId) {
41
+ console.log(`\nšŸ”„ Syncing Feature ${featureId} to GitHub...`);
42
+ // 1. Load Feature FEATURE.md
43
+ const featureFolder = await this.findFeatureFolder(featureId);
44
+ if (!featureFolder) {
45
+ throw new Error(`Feature ${featureId} not found in ${this.specsDir}`);
46
+ }
47
+ const featurePath = path.join(featureFolder, 'FEATURE.md');
48
+ const featureData = await this.parseFeatureMd(featurePath);
49
+ console.log(` šŸ“¦ Feature: ${featureData.title}`);
50
+ console.log(` šŸ“Š Status: ${featureData.status}`);
51
+ // 2. Create or update GitHub Milestone
52
+ let milestoneNumber = featureData.external_tools?.github?.id;
53
+ let milestoneUrl = featureData.external_tools?.github?.url;
54
+ if (!milestoneNumber) {
55
+ console.log(` šŸš€ Creating GitHub Milestone...`);
56
+ const milestone = await this.createMilestone(featureData);
57
+ milestoneNumber = milestone.number;
58
+ milestoneUrl = milestone.url;
59
+ console.log(` āœ… Created Milestone #${milestoneNumber}`);
60
+ // Update FEATURE.md with Milestone ID
61
+ await this.updateFeatureMd(featurePath, {
62
+ type: 'milestone',
63
+ id: milestoneNumber,
64
+ url: milestoneUrl,
65
+ });
66
+ }
67
+ else {
68
+ console.log(` ā™»ļø Using existing Milestone #${milestoneNumber}`);
69
+ milestoneUrl = featureData.external_tools?.github?.url || milestoneUrl;
70
+ }
71
+ // 3. Find all User Story files across all projects
72
+ const userStories = await this.findUserStories(featureId);
73
+ console.log(`\n šŸ“ Found ${userStories.length} User Stories to sync...`);
74
+ // 4. Sync each User Story as GitHub Issue
75
+ let issuesCreated = 0;
76
+ let issuesUpdated = 0;
77
+ for (const userStory of userStories) {
78
+ console.log(`\n šŸ”¹ Processing ${userStory.id}: ${userStory.title}`);
79
+ // Build issue content using UserStoryIssueBuilder
80
+ const repoInfo = {
81
+ owner: this.client.getOwner(),
82
+ repo: this.client.getRepo(),
83
+ branch: 'develop' // TODO: detect from git
84
+ };
85
+ const builder = new UserStoryIssueBuilder(userStory.filePath, this.projectRoot, featureId, repoInfo);
86
+ const issueContent = await builder.buildIssueBody();
87
+ // āœ… FIX: Add status to issue content for sync
88
+ issueContent.status = userStory.status;
89
+ // āœ… TRIPLE IDEMPOTENCY CHECK
90
+ // This ensures 100% safety when running sync multiple times
91
+ // Check 1: User Story frontmatter has issue number
92
+ if (userStory.existingIssue) {
93
+ console.log(` ā™»ļø Issue #${userStory.existingIssue} exists in frontmatter`);
94
+ try {
95
+ // Verify issue still exists on GitHub
96
+ await this.client.getIssue(userStory.existingIssue);
97
+ // Issue exists, update it with verification
98
+ await this.updateUserStoryIssue(userStory.existingIssue, issueContent, userStory.filePath);
99
+ issuesUpdated++;
100
+ console.log(` āœ… Updated Issue #${userStory.existingIssue}`);
101
+ continue;
102
+ }
103
+ catch (err) {
104
+ // Issue deleted on GitHub, fall through to create new
105
+ console.log(` āš ļø Issue #${userStory.existingIssue} deleted on GitHub, creating new`);
106
+ }
107
+ }
108
+ // Check 2: Search GitHub for issue by title
109
+ const existingByTitle = await this.client.searchIssueByTitle(issueContent.title);
110
+ if (existingByTitle) {
111
+ console.log(` ā™»ļø Found existing issue by title: #${existingByTitle.number}`);
112
+ // Link it in frontmatter
113
+ await this.updateUserStoryFrontmatter(userStory.filePath, existingByTitle.number);
114
+ // Update content with verification
115
+ await this.updateUserStoryIssue(existingByTitle.number, issueContent, userStory.filePath);
116
+ issuesUpdated++;
117
+ console.log(` āœ… Linked and updated Issue #${existingByTitle.number}`);
118
+ continue;
119
+ }
120
+ // Check 3: No existing issue found, create new
121
+ console.log(` šŸš€ Creating new issue: ${issueContent.title}`);
122
+ const milestoneTitle = `${featureData.id}: ${featureData.title}`;
123
+ const issueNumber = await this.createUserStoryIssue(issueContent, milestoneTitle, userStory.filePath);
124
+ issuesCreated++;
125
+ console.log(` āœ… Created Issue #${issueNumber}`);
126
+ // Update User Story frontmatter
127
+ await this.updateUserStoryFrontmatter(userStory.filePath, issueNumber);
128
+ }
129
+ console.log(`\nāœ… Feature sync complete!`);
130
+ console.log(` Milestone: ${milestoneUrl}`);
131
+ console.log(` User Stories: ${userStories.length}`);
132
+ console.log(` Issues created: ${issuesCreated}`);
133
+ console.log(` Issues updated: ${issuesUpdated}`);
134
+ return {
135
+ milestoneNumber: milestoneNumber,
136
+ milestoneUrl: milestoneUrl,
137
+ issuesCreated,
138
+ issuesUpdated,
139
+ userStoriesProcessed: userStories.length,
140
+ };
141
+ }
142
+ /**
143
+ * Find Feature folder in specs directory
144
+ */
145
+ async findFeatureFolder(featureId) {
146
+ // Check _features folder first
147
+ const featuresFolder = path.join(this.specsDir, '_features', featureId);
148
+ if (existsSync(featuresFolder)) {
149
+ return featuresFolder;
150
+ }
151
+ return null;
152
+ }
153
+ /**
154
+ * Parse FEATURE.md frontmatter
155
+ */
156
+ async parseFeatureMd(featurePath) {
157
+ const content = await readFile(featurePath, 'utf-8');
158
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
159
+ if (!match) {
160
+ throw new Error(`${featurePath}: Missing YAML frontmatter`);
161
+ }
162
+ return yaml.parse(match[1]);
163
+ }
164
+ /**
165
+ * Find all User Story files for this feature across all projects
166
+ */
167
+ async findUserStories(featureId) {
168
+ const userStories = [];
169
+ // Find all project folders
170
+ const projectFolders = await this.findProjectFolders();
171
+ for (const projectFolder of projectFolders) {
172
+ const featureSpecsFolder = path.join(projectFolder, featureId);
173
+ if (!existsSync(featureSpecsFolder)) {
174
+ continue; // Feature not present in this project
175
+ }
176
+ // Read all us-*.md files
177
+ const files = await readdir(featureSpecsFolder);
178
+ const usFiles = files.filter((f) => f.startsWith('us-') && f.endsWith('.md'));
179
+ for (const file of usFiles.sort()) {
180
+ const filePath = path.join(featureSpecsFolder, file);
181
+ const content = await readFile(filePath, 'utf-8');
182
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
183
+ if (!match) {
184
+ console.warn(` āš ļø ${file}: Missing frontmatter, skipping`);
185
+ continue;
186
+ }
187
+ const frontmatter = yaml.parse(match[1]);
188
+ const projectName = path.basename(projectFolder);
189
+ userStories.push({
190
+ id: frontmatter.id || file.match(/us-(\d+)/)?.[0]?.toUpperCase() || 'UNKNOWN',
191
+ title: frontmatter.title || 'Untitled User Story',
192
+ filePath,
193
+ project: projectName,
194
+ status: frontmatter.status || 'not-started',
195
+ existingIssue: frontmatter.external?.github?.issue || null,
196
+ });
197
+ }
198
+ }
199
+ return userStories;
200
+ }
201
+ /**
202
+ * Find all project folders (default, backend, frontend, etc.)
203
+ */
204
+ async findProjectFolders() {
205
+ const folders = [];
206
+ const specsRoot = this.specsDir;
207
+ // Read all directories in specs root
208
+ const entries = await readdir(specsRoot, { withFileTypes: true });
209
+ for (const entry of entries) {
210
+ if (entry.isDirectory() && !entry.name.startsWith('_')) {
211
+ folders.push(path.join(specsRoot, entry.name));
212
+ }
213
+ }
214
+ return folders;
215
+ }
216
+ /**
217
+ * Create GitHub Milestone for Feature
218
+ */
219
+ async createMilestone(featureData) {
220
+ const title = `${featureData.id}: ${featureData.title}`;
221
+ const description = `Feature ${featureData.id}\n\nStatus: ${featureData.status}\nCreated: ${featureData.created}`;
222
+ const result = await execFileNoThrow('gh', [
223
+ 'api',
224
+ 'repos/:owner/:repo/milestones',
225
+ '-X',
226
+ 'POST',
227
+ '-f',
228
+ `title=${title}`,
229
+ '-f',
230
+ `description=${description}`,
231
+ '-f',
232
+ 'state=open',
233
+ ]);
234
+ if (result.exitCode !== 0) {
235
+ throw new Error(`Failed to create Milestone: ${result.stderr || result.stdout}`);
236
+ }
237
+ const milestone = JSON.parse(result.stdout);
238
+ return {
239
+ number: milestone.number,
240
+ url: milestone.html_url,
241
+ };
242
+ }
243
+ /**
244
+ * Create GitHub Issue for User Story with AC/Task Verification
245
+ *
246
+ * āœ… VERIFICATION GATE FIX:
247
+ * - Verifies actual completion before closing
248
+ * - Prevents premature closure on creation
249
+ */
250
+ async createUserStoryIssue(issueContent, milestoneTitle, userStoryPath) {
251
+ // Step 1: Create issue (always open initially - gh CLI limitation)
252
+ const result = await execFileNoThrow('gh', [
253
+ 'issue',
254
+ 'create',
255
+ '--title',
256
+ issueContent.title,
257
+ '--body',
258
+ issueContent.body,
259
+ '--milestone',
260
+ milestoneTitle,
261
+ ...issueContent.labels.flatMap((label) => ['--label', label]),
262
+ ]);
263
+ if (result.exitCode !== 0) {
264
+ throw new Error(`Failed to create GitHub Issue: ${result.stderr || result.stdout}`);
265
+ }
266
+ // Parse issue number from output
267
+ // Format: "https://github.com/owner/repo/issues/123"
268
+ const match = result.stdout.match(/issues\/(\d+)/);
269
+ if (!match) {
270
+ throw new Error(`Failed to parse issue number from: ${result.stdout}`);
271
+ }
272
+ const issueNumber = parseInt(match[1], 10);
273
+ // Step 2: VERIFICATION GATE - Close only if ACs/tasks verified
274
+ const completion = await this.calculator.calculateCompletion(userStoryPath);
275
+ if (completion.overallComplete) {
276
+ // āœ… SAFE TO CLOSE - All ACs and tasks verified [x]
277
+ await execFileNoThrow('gh', [
278
+ 'issue',
279
+ 'close',
280
+ issueNumber.toString(),
281
+ '--comment',
282
+ this.calculator.buildCompletionComment(completion),
283
+ ]);
284
+ console.log(` āœ… Created and verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`);
285
+ }
286
+ else {
287
+ // āš ļø INCOMPLETE - Leave open with progress comment
288
+ await execFileNoThrow('gh', [
289
+ 'issue',
290
+ 'comment',
291
+ issueNumber.toString(),
292
+ '--body',
293
+ this.calculator.buildProgressComment(completion),
294
+ ]);
295
+ console.log(` šŸ“Š Created: ${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks`);
296
+ }
297
+ return issueNumber;
298
+ }
299
+ /**
300
+ * Update existing GitHub Issue for User Story with AC/Task Verification
301
+ *
302
+ * āœ… VERIFICATION GATE FIX:
303
+ * - OLD: Closed based on frontmatter `status: complete`
304
+ * - NEW: Closes ONLY if all ACs and tasks are [x]
305
+ *
306
+ * This prevents Issue #574 type bugs (premature closure)
307
+ */
308
+ async updateUserStoryIssue(issueNumber, issueContent, userStoryPath) {
309
+ // Update issue body
310
+ await execFileNoThrow('gh', [
311
+ 'issue',
312
+ 'edit',
313
+ issueNumber.toString(),
314
+ '--title',
315
+ issueContent.title,
316
+ '--body',
317
+ issueContent.body,
318
+ ]);
319
+ // āœ… VERIFICATION GATE: Calculate ACTUAL completion from checkboxes
320
+ const completion = await this.calculator.calculateCompletion(userStoryPath);
321
+ // Get current issue state
322
+ const issueData = await this.client.getIssue(issueNumber);
323
+ const currentlyClosed = issueData.state === 'closed';
324
+ // DECISION LOGIC: Close/Reopen/Update based on VERIFIED completion
325
+ if (completion.overallComplete) {
326
+ // āœ… SAFE TO CLOSE - All ACs and tasks verified [x]
327
+ if (!currentlyClosed) {
328
+ await execFileNoThrow('gh', [
329
+ 'issue',
330
+ 'close',
331
+ issueNumber.toString(),
332
+ '--comment',
333
+ this.calculator.buildCompletionComment(completion),
334
+ ]);
335
+ console.log(` āœ… Verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`);
336
+ }
337
+ }
338
+ else {
339
+ // āš ļø INCOMPLETE - Keep open or reopen if needed
340
+ if (currentlyClosed) {
341
+ // Issue was closed prematurely - REOPEN
342
+ await execFileNoThrow('gh', [
343
+ 'issue',
344
+ 'reopen',
345
+ issueNumber.toString(),
346
+ '--comment',
347
+ this.calculator.buildReopenComment(completion, 'Work verification failed'),
348
+ ]);
349
+ console.log(` āš ļø Reopened: ${completion.blockingAcs.length + completion.blockingTasks.length} items incomplete`);
350
+ }
351
+ else {
352
+ // Update progress comment
353
+ await execFileNoThrow('gh', [
354
+ 'issue',
355
+ 'comment',
356
+ issueNumber.toString(),
357
+ '--body',
358
+ this.calculator.buildProgressComment(completion),
359
+ ]);
360
+ console.log(` šŸ“Š Progress: ${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks`);
361
+ }
362
+ }
363
+ // Note: Labels are not updated to avoid overwriting manually added labels
364
+ }
365
+ /**
366
+ * Update FEATURE.md with GitHub Milestone link
367
+ */
368
+ async updateFeatureMd(featurePath, milestone) {
369
+ const content = await readFile(featurePath, 'utf-8');
370
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
371
+ if (!match) {
372
+ throw new Error(`${featurePath}: Missing YAML frontmatter`);
373
+ }
374
+ const frontmatter = yaml.parse(match[1]);
375
+ // Update external_tools.github
376
+ if (!frontmatter.external_tools) {
377
+ frontmatter.external_tools = {};
378
+ }
379
+ frontmatter.external_tools.github = milestone;
380
+ // Rebuild content
381
+ const newFrontmatter = yaml.stringify(frontmatter);
382
+ const bodyContent = content.slice(match[0].length);
383
+ const newContent = `---\n${newFrontmatter}---${bodyContent}`;
384
+ await writeFile(featurePath, newContent, 'utf-8');
385
+ }
386
+ /**
387
+ * Update User Story frontmatter with GitHub issue link
388
+ */
389
+ async updateUserStoryFrontmatter(userStoryPath, issueNumber) {
390
+ const content = await readFile(userStoryPath, 'utf-8');
391
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
392
+ if (!match) {
393
+ throw new Error(`${userStoryPath}: Missing YAML frontmatter`);
394
+ }
395
+ const frontmatter = yaml.parse(match[1]);
396
+ // Update external.github
397
+ if (!frontmatter.external) {
398
+ frontmatter.external = {};
399
+ }
400
+ if (!frontmatter.external.github) {
401
+ frontmatter.external.github = {};
402
+ }
403
+ frontmatter.external.github.issue = issueNumber;
404
+ frontmatter.external.github.url = `https://github.com/anton-abyzov/specweave/issues/${issueNumber}`;
405
+ // Rebuild content
406
+ const newFrontmatter = yaml.stringify(frontmatter);
407
+ const bodyContent = content.slice(match[0].length);
408
+ const newContent = `---\n${newFrontmatter}---${bodyContent}`;
409
+ await writeFile(userStoryPath, newContent, 'utf-8');
410
+ }
411
+ }
412
+ //# sourceMappingURL=github-feature-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-feature-sync.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-feature-sync.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"github-spec-content-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAQL,iBAAiB,EAClB,MAAM,wCAAwC,CAAC;AAIhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4CD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AA6KD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF"}
1
+ {"version":3,"file":"github-spec-content-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAQL,iBAAiB,EAClB,MAAM,wCAAwC,CAAC;AAKhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4CD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AAgPD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF"}
@@ -10,6 +10,7 @@
10
10
  */
11
11
  import { GitHubClientV2 } from './github-client-v2.js';
12
12
  import { parseSpecContent, detectContentChanges, buildExternalDescription, hasExternalLink, updateSpecWithExternalLink, } from '../../../src/core/spec-content-sync.js';
13
+ import { ProgressCommentBuilder } from './progress-comment-builder.js';
13
14
  import path from 'path';
14
15
  import fs from 'fs/promises';
15
16
  /**
@@ -161,6 +162,11 @@ async function createGitHubIssue(client, spec, options) {
161
162
  }
162
163
  /**
163
164
  * Update existing GitHub issue with spec content
165
+ *
166
+ * ARCHITECTURE: IMMUTABLE DESCRIPTIONS (Phase 4)
167
+ * - Issue description is NEVER edited after creation
168
+ * - All content updates communicated via progress comments
169
+ * - Metadata updates only (labels, milestone, assignees)
164
170
  */
165
171
  async function updateGitHubIssue(client, spec, issueNumber, options) {
166
172
  const { specPath, dryRun, verbose } = options;
@@ -195,30 +201,34 @@ async function updateGitHubIssue(client, spec, issueNumber, options) {
195
201
  console.log(` - ${change}`);
196
202
  }
197
203
  }
198
- // Build updated content using compact format
199
- const newTitle = `[${spec.identifier.compact}] ${spec.title}`;
200
- const newBody = buildExternalDescription(spec);
201
204
  if (dryRun) {
202
- console.log('\nšŸ” Dry run - would update issue:');
203
- console.log(` Title: ${newTitle}`);
204
- console.log(` Body:\n${newBody}`);
205
+ console.log('\nšŸ” Dry run - would post progress comment');
205
206
  return {
206
207
  success: true,
207
- action: 'updated',
208
+ action: 'updated-via-comment',
208
209
  externalId: issueNumber.toString(),
209
210
  externalUrl: issue.html_url,
210
211
  };
211
212
  }
212
- // Update issue (ONLY title and description, NOT status!)
213
- await client.updateIssueBody(issueNumber, newBody);
214
- // Note: We do NOT update status/state - that's managed in GitHub
215
- // We also do NOT close/reopen issues - that's done by humans/automation in GitHub
213
+ // IMMUTABLE DESCRIPTION PATTERN:
214
+ // āŒ OLD: Update issue body (overwrites description)
215
+ // āœ… NEW: Post progress comment (preserves description)
216
+ // Update metadata only (labels via GitHub CLI - no direct API method)
217
+ const labels = [
218
+ 'specweave',
219
+ 'spec',
220
+ spec.project,
221
+ spec.metadata.priority || 'P2'
222
+ ].filter(Boolean);
223
+ await client.addLabels(issueNumber, labels);
224
+ // Post progress comment (NOT edit body)
225
+ await postProgressComment(client, specPath, issueNumber, spec, verbose);
216
226
  if (verbose) {
217
- console.log(`āœ… Updated issue #${issueNumber}`);
227
+ console.log(`āœ… Posted progress comment to issue #${issueNumber}`);
218
228
  }
219
229
  return {
220
230
  success: true,
221
- action: 'updated',
231
+ action: 'updated-via-comment',
222
232
  externalId: issueNumber.toString(),
223
233
  externalUrl: issue.html_url,
224
234
  };
@@ -231,6 +241,47 @@ async function updateGitHubIssue(client, spec, issueNumber, options) {
231
241
  };
232
242
  }
233
243
  }
244
+ /**
245
+ * Post progress comment to GitHub issue (IMMUTABLE DESCRIPTION PATTERN)
246
+ *
247
+ * This replaces the old pattern of editing issue body.
248
+ * Benefits:
249
+ * - Preserves original issue description
250
+ * - Creates audit trail of changes
251
+ * - Stakeholders get notifications on updates
252
+ */
253
+ async function postProgressComment(client, specPath, issueNumber, spec, verbose = false) {
254
+ try {
255
+ // Extract increment ID from spec path or identifier
256
+ // Examples:
257
+ // - .specweave/increments/0031-external-tool-sync/spec.md → 0031
258
+ // - .specweave/docs/internal/specs/default/FS-031/us-001-*.md → FS-031
259
+ let incrementId = 'unknown';
260
+ // Try to extract from spec path
261
+ const incrementMatch = specPath.match(/increments\/([^/]+)/);
262
+ if (incrementMatch) {
263
+ incrementId = incrementMatch[1];
264
+ }
265
+ else {
266
+ // Fallback: use spec identifier
267
+ incrementId = spec.identifier.compact;
268
+ }
269
+ // Build progress comment using ProgressCommentBuilder
270
+ const builder = new ProgressCommentBuilder(specPath);
271
+ const comment = await builder.buildProgressComment(incrementId);
272
+ // Post comment (using addComment method)
273
+ await client.addComment(issueNumber, comment);
274
+ if (verbose) {
275
+ console.log(` šŸ“Š Progress comment posted (${comment.length} chars)`);
276
+ }
277
+ }
278
+ catch (error) {
279
+ // Non-blocking: Log error but don't fail the sync
280
+ if (verbose) {
281
+ console.error(` āš ļø Failed to post progress comment: ${error.message}`);
282
+ }
283
+ }
284
+ }
234
285
  /**
235
286
  * Count user stories in issue body
236
287
  */
@@ -1 +1 @@
1
- {"version":3,"file":"github-spec-content-sync.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-spec-content-sync.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"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"}