specweave 1.0.506 → 1.0.508

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 (1038) hide show
  1. package/.claude-plugin/README.md +25 -32
  2. package/.claude-plugin/marketplace.json +1 -78
  3. package/dist/plugins/specweave/lib/features/release/dashboard-generator.d.ts.map +1 -0
  4. package/dist/plugins/specweave/lib/features/release/dashboard-generator.js.map +1 -0
  5. package/dist/plugins/specweave/lib/features/release/dora-tracker.d.ts.map +1 -0
  6. package/dist/plugins/specweave/lib/features/release/dora-tracker.js.map +1 -0
  7. package/dist/plugins/specweave/lib/integrations/ado/ado-ac-checkbox-sync.d.ts +44 -0
  8. package/dist/plugins/specweave/lib/integrations/ado/ado-ac-checkbox-sync.d.ts.map +1 -0
  9. package/dist/plugins/specweave/lib/integrations/ado/ado-ac-checkbox-sync.js +236 -0
  10. package/dist/plugins/specweave/lib/integrations/ado/ado-ac-checkbox-sync.js.map +1 -0
  11. package/dist/plugins/specweave/lib/integrations/ado/ado-board-resolver.d.ts.map +1 -0
  12. package/dist/plugins/specweave/lib/integrations/ado/ado-board-resolver.js.map +1 -0
  13. package/dist/plugins/specweave/lib/integrations/ado/ado-client-v2.d.ts +139 -0
  14. package/dist/plugins/specweave/lib/integrations/ado/ado-client-v2.d.ts.map +1 -0
  15. package/dist/plugins/specweave/lib/integrations/ado/ado-client-v2.js.map +1 -0
  16. package/dist/plugins/specweave/lib/integrations/ado/ado-client.d.ts.map +1 -0
  17. package/dist/plugins/specweave/lib/integrations/ado/ado-client.js.map +1 -0
  18. package/dist/plugins/specweave/lib/integrations/ado/ado-duplicate-detector.d.ts +100 -0
  19. package/dist/plugins/specweave/lib/integrations/ado/ado-duplicate-detector.d.ts.map +1 -0
  20. package/dist/plugins/specweave/lib/integrations/ado/ado-duplicate-detector.js +292 -0
  21. package/dist/plugins/specweave/lib/integrations/ado/ado-duplicate-detector.js.map +1 -0
  22. package/dist/plugins/specweave/lib/integrations/ado/ado-permission-gate.d.ts.map +1 -0
  23. package/dist/plugins/specweave/lib/integrations/ado/ado-permission-gate.js.map +1 -0
  24. package/dist/plugins/specweave/lib/integrations/ado/ado-profile-resolver.d.ts.map +1 -0
  25. package/dist/plugins/specweave/lib/integrations/ado/ado-profile-resolver.js.map +1 -0
  26. package/dist/plugins/specweave/lib/integrations/ado/ado-pull-sync.d.ts.map +1 -0
  27. package/dist/plugins/specweave/lib/integrations/ado/ado-pull-sync.js.map +1 -0
  28. package/dist/plugins/specweave/lib/integrations/ado/ado-rate-limiter.d.ts.map +1 -0
  29. package/dist/plugins/specweave/lib/integrations/ado/ado-rate-limiter.js.map +1 -0
  30. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-commit-sync.d.ts +38 -0
  31. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-commit-sync.d.ts.map +1 -0
  32. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-commit-sync.js +210 -0
  33. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-commit-sync.js.map +1 -0
  34. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-content-sync.d.ts +28 -0
  35. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-content-sync.d.ts.map +1 -0
  36. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-content-sync.js +300 -0
  37. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-content-sync.js.map +1 -0
  38. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-sync.d.ts +147 -0
  39. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-sync.d.ts.map +1 -0
  40. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-sync.js +749 -0
  41. package/dist/plugins/specweave/lib/integrations/ado/ado-spec-sync.js.map +1 -0
  42. package/dist/plugins/specweave/lib/integrations/ado/ado-status-sync.d.ts +79 -0
  43. package/dist/plugins/specweave/lib/integrations/ado/ado-status-sync.d.ts.map +1 -0
  44. package/dist/plugins/specweave/lib/integrations/ado/ado-status-sync.js +162 -0
  45. package/dist/plugins/specweave/lib/integrations/ado/ado-status-sync.js.map +1 -0
  46. package/dist/plugins/specweave/lib/integrations/ado/conflict-resolver.d.ts.map +1 -0
  47. package/dist/plugins/specweave/lib/integrations/ado/conflict-resolver.js +439 -0
  48. package/dist/plugins/specweave/lib/integrations/ado/conflict-resolver.js.map +1 -0
  49. package/dist/plugins/specweave/lib/integrations/ado/per-us-sync.d.ts +131 -0
  50. package/dist/plugins/specweave/lib/integrations/ado/per-us-sync.d.ts.map +1 -0
  51. package/dist/plugins/specweave/lib/integrations/ado/per-us-sync.js +322 -0
  52. package/dist/plugins/specweave/lib/integrations/ado/per-us-sync.js.map +1 -0
  53. package/dist/plugins/specweave/lib/integrations/github/CodeValidator.d.ts.map +1 -0
  54. package/dist/plugins/specweave/lib/integrations/github/CodeValidator.js +219 -0
  55. package/dist/plugins/specweave/lib/integrations/github/CodeValidator.js.map +1 -0
  56. package/dist/plugins/specweave/lib/integrations/github/IssueStateManager.d.ts.map +1 -0
  57. package/dist/plugins/specweave/lib/integrations/github/IssueStateManager.js.map +1 -0
  58. package/dist/plugins/specweave/lib/integrations/github/completion-calculator.d.ts.map +1 -0
  59. package/dist/plugins/specweave/lib/integrations/github/completion-calculator.js.map +1 -0
  60. package/dist/plugins/specweave/lib/integrations/github/duplicate-detector.d.ts.map +1 -0
  61. package/dist/plugins/specweave/lib/integrations/github/duplicate-detector.js +423 -0
  62. package/dist/plugins/specweave/lib/integrations/github/duplicate-detector.js.map +1 -0
  63. package/dist/plugins/specweave/lib/integrations/github/github-ac-checkbox-sync.d.ts +54 -0
  64. package/dist/plugins/specweave/lib/integrations/github/github-ac-checkbox-sync.d.ts.map +1 -0
  65. package/dist/plugins/specweave/lib/integrations/github/github-ac-checkbox-sync.js +305 -0
  66. package/dist/plugins/specweave/lib/integrations/github/github-ac-checkbox-sync.js.map +1 -0
  67. package/dist/plugins/specweave/lib/integrations/github/github-ac-comment-poster.d.ts.map +1 -0
  68. package/dist/plugins/specweave/lib/integrations/github/github-ac-comment-poster.js +232 -0
  69. package/dist/plugins/specweave/lib/integrations/github/github-ac-comment-poster.js.map +1 -0
  70. package/dist/plugins/specweave/lib/integrations/github/github-batch-sync.d.ts.map +1 -0
  71. package/dist/plugins/specweave/lib/integrations/github/github-batch-sync.js.map +1 -0
  72. package/dist/plugins/specweave/lib/integrations/github/github-board-resolver-v2.d.ts.map +1 -0
  73. package/dist/plugins/specweave/lib/integrations/github/github-board-resolver-v2.js.map +1 -0
  74. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.d.ts +214 -0
  75. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.d.ts.map +1 -0
  76. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js +812 -0
  77. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js.map +1 -0
  78. package/dist/plugins/specweave/lib/integrations/github/github-client.d.ts.map +1 -0
  79. package/dist/plugins/specweave/lib/integrations/github/github-client.js.map +1 -0
  80. package/dist/plugins/specweave/lib/integrations/github/github-conflict-resolver.d.ts.map +1 -0
  81. package/dist/plugins/specweave/lib/integrations/github/github-conflict-resolver.js.map +1 -0
  82. package/dist/plugins/specweave/lib/integrations/github/github-cross-repo-sync.d.ts.map +1 -0
  83. package/dist/plugins/specweave/lib/integrations/github/github-cross-repo-sync.js +172 -0
  84. package/dist/plugins/specweave/lib/integrations/github/github-cross-repo-sync.js.map +1 -0
  85. package/dist/plugins/specweave/lib/integrations/github/github-feature-sync-cli.d.ts.map +1 -0
  86. package/dist/plugins/specweave/lib/integrations/github/github-feature-sync-cli.js.map +1 -0
  87. package/dist/plugins/specweave/lib/integrations/github/github-feature-sync.d.ts.map +1 -0
  88. package/dist/plugins/specweave/lib/integrations/github/github-feature-sync.js +1112 -0
  89. package/dist/plugins/specweave/lib/integrations/github/github-feature-sync.js.map +1 -0
  90. package/dist/plugins/specweave/lib/integrations/github/github-field-sync.d.ts.map +1 -0
  91. package/dist/plugins/specweave/lib/integrations/github/github-field-sync.js.map +1 -0
  92. package/dist/plugins/specweave/lib/integrations/github/github-graphql-client.d.ts.map +1 -0
  93. package/dist/plugins/specweave/lib/integrations/github/github-graphql-client.js.map +1 -0
  94. package/dist/plugins/specweave/lib/integrations/github/github-issue-body-generator.d.ts.map +1 -0
  95. package/dist/plugins/specweave/lib/integrations/github/github-issue-body-generator.js.map +1 -0
  96. package/dist/plugins/specweave/lib/integrations/github/github-issue-body-parser.d.ts.map +1 -0
  97. package/dist/plugins/specweave/lib/integrations/github/github-issue-body-parser.js.map +1 -0
  98. package/dist/plugins/specweave/lib/integrations/github/github-issue-updater.d.ts.map +1 -0
  99. package/dist/plugins/specweave/lib/integrations/github/github-issue-updater.js +339 -0
  100. package/dist/plugins/specweave/lib/integrations/github/github-issue-updater.js.map +1 -0
  101. package/dist/plugins/specweave/lib/integrations/github/github-pull-sync.d.ts +94 -0
  102. package/dist/plugins/specweave/lib/integrations/github/github-pull-sync.d.ts.map +1 -0
  103. package/dist/plugins/specweave/lib/integrations/github/github-pull-sync.js +232 -0
  104. package/dist/plugins/specweave/lib/integrations/github/github-pull-sync.js.map +1 -0
  105. package/dist/plugins/specweave/lib/integrations/github/github-push-sync.d.ts.map +1 -0
  106. package/dist/plugins/specweave/lib/integrations/github/github-push-sync.js +127 -0
  107. package/dist/plugins/specweave/lib/integrations/github/github-push-sync.js.map +1 -0
  108. package/dist/plugins/specweave/lib/integrations/github/github-rate-limiter.d.ts.map +1 -0
  109. package/dist/plugins/specweave/lib/integrations/github/github-rate-limiter.js +109 -0
  110. package/dist/plugins/specweave/lib/integrations/github/github-rate-limiter.js.map +1 -0
  111. package/dist/plugins/specweave/lib/integrations/github/github-spec-commit-sync.d.ts +37 -0
  112. package/dist/plugins/specweave/lib/integrations/github/github-spec-commit-sync.d.ts.map +1 -0
  113. package/dist/plugins/specweave/lib/integrations/github/github-spec-commit-sync.js +209 -0
  114. package/dist/plugins/specweave/lib/integrations/github/github-spec-commit-sync.js.map +1 -0
  115. package/dist/plugins/specweave/lib/integrations/github/github-spec-content-sync.d.ts +28 -0
  116. package/dist/plugins/specweave/lib/integrations/github/github-spec-content-sync.d.ts.map +1 -0
  117. package/dist/plugins/specweave/lib/integrations/github/github-spec-content-sync.js +365 -0
  118. package/dist/plugins/specweave/lib/integrations/github/github-spec-content-sync.js.map +1 -0
  119. package/dist/plugins/specweave/lib/integrations/github/github-spec-frontmatter-updater.d.ts +21 -0
  120. package/dist/plugins/specweave/lib/integrations/github/github-spec-frontmatter-updater.d.ts.map +1 -0
  121. package/dist/plugins/specweave/lib/integrations/github/github-spec-frontmatter-updater.js.map +1 -0
  122. package/dist/plugins/specweave/lib/integrations/github/github-spec-sync.d.ts +225 -0
  123. package/dist/plugins/specweave/lib/integrations/github/github-spec-sync.d.ts.map +1 -0
  124. package/dist/plugins/specweave/lib/integrations/github/github-spec-sync.js +974 -0
  125. package/dist/plugins/specweave/lib/integrations/github/github-spec-sync.js.map +1 -0
  126. package/dist/plugins/specweave/lib/integrations/github/github-sync-orchestrator.d.ts +47 -0
  127. package/dist/plugins/specweave/lib/integrations/github/github-sync-orchestrator.d.ts.map +1 -0
  128. package/dist/plugins/specweave/lib/integrations/github/github-sync-orchestrator.js.map +1 -0
  129. package/dist/plugins/specweave/lib/integrations/github/github-us-auto-closer.d.ts.map +1 -0
  130. package/dist/plugins/specweave/lib/integrations/github/github-us-auto-closer.js +219 -0
  131. package/dist/plugins/specweave/lib/integrations/github/github-us-auto-closer.js.map +1 -0
  132. package/dist/plugins/specweave/lib/integrations/github/index.d.ts.map +1 -0
  133. package/dist/plugins/specweave/lib/integrations/github/index.js.map +1 -0
  134. package/dist/plugins/specweave/lib/integrations/github/per-us-sync.d.ts +126 -0
  135. package/dist/plugins/specweave/lib/integrations/github/per-us-sync.d.ts.map +1 -0
  136. package/dist/plugins/specweave/lib/integrations/github/per-us-sync.js +394 -0
  137. package/dist/plugins/specweave/lib/integrations/github/per-us-sync.js.map +1 -0
  138. package/dist/plugins/specweave/lib/integrations/github/progress-comment-builder.d.ts.map +1 -0
  139. package/dist/plugins/specweave/lib/integrations/github/progress-comment-builder.js.map +1 -0
  140. package/dist/plugins/specweave/lib/integrations/github/types.d.ts.map +1 -0
  141. package/dist/plugins/specweave/lib/integrations/github/types.js.map +1 -0
  142. package/dist/plugins/specweave/lib/integrations/github/user-story-content-builder.d.ts.map +1 -0
  143. package/dist/plugins/specweave/lib/integrations/github/user-story-content-builder.js +310 -0
  144. package/dist/plugins/specweave/lib/integrations/github/user-story-content-builder.js.map +1 -0
  145. package/dist/plugins/specweave/lib/integrations/github/user-story-issue-builder.d.ts.map +1 -0
  146. package/dist/plugins/specweave/lib/integrations/github/user-story-issue-builder.js.map +1 -0
  147. package/dist/plugins/specweave/lib/integrations/jira/content-format-adapter.d.ts.map +1 -0
  148. package/dist/plugins/specweave/lib/integrations/jira/content-format-adapter.js.map +1 -0
  149. package/dist/plugins/specweave/lib/integrations/jira/jira-ac-checkbox-sync.d.ts +47 -0
  150. package/dist/plugins/specweave/lib/integrations/jira/jira-ac-checkbox-sync.d.ts.map +1 -0
  151. package/dist/plugins/specweave/lib/integrations/jira/jira-ac-checkbox-sync.js +307 -0
  152. package/dist/plugins/specweave/lib/integrations/jira/jira-ac-checkbox-sync.js.map +1 -0
  153. package/dist/plugins/specweave/lib/integrations/jira/jira-board-resolver.d.ts +50 -0
  154. package/dist/plugins/specweave/lib/integrations/jira/jira-board-resolver.d.ts.map +1 -0
  155. package/dist/plugins/specweave/lib/integrations/jira/jira-board-resolver.js.map +1 -0
  156. package/dist/plugins/specweave/lib/integrations/jira/jira-deployment-detector.d.ts.map +1 -0
  157. package/dist/plugins/specweave/lib/integrations/jira/jira-deployment-detector.js.map +1 -0
  158. package/dist/plugins/specweave/lib/integrations/jira/jira-duplicate-detector.d.ts +103 -0
  159. package/dist/plugins/specweave/lib/integrations/jira/jira-duplicate-detector.d.ts.map +1 -0
  160. package/dist/plugins/specweave/lib/integrations/jira/jira-duplicate-detector.js +295 -0
  161. package/dist/plugins/specweave/lib/integrations/jira/jira-duplicate-detector.js.map +1 -0
  162. package/dist/plugins/specweave/lib/integrations/jira/jira-epic-sync.d.ts +67 -0
  163. package/dist/plugins/specweave/lib/integrations/jira/jira-epic-sync.d.ts.map +1 -0
  164. package/dist/plugins/specweave/lib/integrations/jira/jira-epic-sync.js +286 -0
  165. package/dist/plugins/specweave/lib/integrations/jira/jira-epic-sync.js.map +1 -0
  166. package/dist/plugins/specweave/lib/integrations/jira/jira-field-discovery.d.ts.map +1 -0
  167. package/dist/plugins/specweave/lib/integrations/jira/jira-field-discovery.js.map +1 -0
  168. package/dist/plugins/specweave/lib/integrations/jira/jira-paginated-search.d.ts.map +1 -0
  169. package/dist/plugins/specweave/lib/integrations/jira/jira-paginated-search.js.map +1 -0
  170. package/dist/plugins/specweave/lib/integrations/jira/jira-permission-gate.d.ts.map +1 -0
  171. package/dist/plugins/specweave/lib/integrations/jira/jira-permission-gate.js.map +1 -0
  172. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-commit-sync.d.ts +43 -0
  173. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-commit-sync.d.ts.map +1 -0
  174. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-commit-sync.js +284 -0
  175. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-commit-sync.js.map +1 -0
  176. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-content-sync.d.ts +33 -0
  177. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-content-sync.d.ts.map +1 -0
  178. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-content-sync.js +294 -0
  179. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-content-sync.js.map +1 -0
  180. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-sync.d.ts +180 -0
  181. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-sync.d.ts.map +1 -0
  182. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-sync.js +757 -0
  183. package/dist/plugins/specweave/lib/integrations/jira/jira-spec-sync.js.map +1 -0
  184. package/dist/plugins/specweave/lib/integrations/jira/jira-status-sync.d.ts +116 -0
  185. package/dist/plugins/specweave/lib/integrations/jira/jira-status-sync.d.ts.map +1 -0
  186. package/dist/plugins/specweave/lib/integrations/jira/jira-status-sync.js +302 -0
  187. package/dist/plugins/specweave/lib/integrations/jira/jira-status-sync.js.map +1 -0
  188. package/dist/plugins/specweave/lib/integrations/jira/metadata-paths.d.ts.map +1 -0
  189. package/dist/plugins/specweave/lib/integrations/jira/metadata-paths.js.map +1 -0
  190. package/dist/plugins/specweave/lib/integrations/jira/per-us-sync.d.ts +117 -0
  191. package/dist/plugins/specweave/lib/integrations/jira/per-us-sync.d.ts.map +1 -0
  192. package/dist/plugins/specweave/lib/integrations/jira/per-us-sync.js +274 -0
  193. package/dist/plugins/specweave/lib/integrations/jira/per-us-sync.js.map +1 -0
  194. package/dist/plugins/specweave/lib/integrations/jira/reorganization-detector.d.ts +80 -0
  195. package/dist/plugins/specweave/lib/integrations/jira/reorganization-detector.d.ts.map +1 -0
  196. package/dist/plugins/specweave/lib/integrations/jira/reorganization-detector.js.map +1 -0
  197. package/dist/plugins/specweave/lib/integrations/jira/setup-wizard.d.ts +29 -0
  198. package/dist/plugins/specweave/lib/integrations/jira/setup-wizard.d.ts.map +1 -0
  199. package/dist/plugins/specweave/lib/integrations/jira/setup-wizard.js +198 -0
  200. package/dist/plugins/specweave/lib/integrations/jira/setup-wizard.js.map +1 -0
  201. package/dist/plugins/specweave/lib/vendor/sync/github-reconciler.d.ts +1 -1
  202. package/dist/plugins/specweave/lib/vendor/sync/github-reconciler.js +2 -2
  203. package/dist/plugins/specweave/lib/vendor/sync/github-reconciler.js.map +1 -1
  204. package/dist/src/cli/commands/refresh-plugins.d.ts.map +1 -1
  205. package/dist/src/cli/commands/refresh-plugins.js +9 -1
  206. package/dist/src/cli/commands/refresh-plugins.js.map +1 -1
  207. package/dist/src/cli/commands/sync-progress.js +1 -1
  208. package/dist/src/cli/commands/sync-progress.js.map +1 -1
  209. package/dist/src/cli/helpers/async-project-loader.js +1 -1
  210. package/dist/src/cli/helpers/async-project-loader.js.map +1 -1
  211. package/dist/src/cli/helpers/cancelation-handler.d.ts +1 -1
  212. package/dist/src/cli/helpers/cancelation-handler.js +1 -1
  213. package/dist/src/cli/helpers/init/ado-repo-cloning.js +1 -1
  214. package/dist/src/cli/helpers/init/ado-repo-cloning.js.map +1 -1
  215. package/dist/src/cli/helpers/init/github-repo-cloning.js +1 -1
  216. package/dist/src/cli/helpers/init/github-repo-cloning.js.map +1 -1
  217. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +2 -2
  218. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -1
  219. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +2 -2
  220. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -1
  221. package/dist/src/cli/helpers/init/plugin-installer.d.ts.map +1 -1
  222. package/dist/src/cli/helpers/init/plugin-installer.js +11 -3
  223. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
  224. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js +1 -1
  225. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js.map +1 -1
  226. package/dist/src/cli/helpers/issue-tracker/ado.js +3 -3
  227. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  228. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +1 -1
  229. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  230. package/dist/src/cli/helpers/issue-tracker/github.js +4 -4
  231. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  232. package/dist/src/cli/helpers/issue-tracker/index.js +1 -1
  233. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  234. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js +1 -1
  235. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js.map +1 -1
  236. package/dist/src/core/ac-progress-sync.js +5 -5
  237. package/dist/src/core/ac-progress-sync.js.map +1 -1
  238. package/dist/src/core/analytics/types.d.ts +1 -1
  239. package/dist/src/core/analytics/types.d.ts.map +1 -1
  240. package/dist/src/core/config/types.d.ts +1 -1
  241. package/dist/src/core/hooks/github-project-sync.js +4 -4
  242. package/dist/src/core/hooks/github-project-sync.js.map +1 -1
  243. package/dist/src/core/living-docs/living-docs-sync.js +5 -5
  244. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  245. package/dist/src/core/types/plugin.d.ts +1 -1
  246. package/dist/src/core/types/plugin.d.ts.map +1 -1
  247. package/dist/src/integrations/ado/ado-client-factory.d.ts +1 -1
  248. package/dist/src/integrations/ado/ado-client-factory.d.ts.map +1 -1
  249. package/dist/src/integrations/ado/ado-client-factory.js +1 -1
  250. package/dist/src/integrations/ado/ado-client-factory.js.map +1 -1
  251. package/dist/src/integrations/ado/ado-dependency-loader.js +1 -1
  252. package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -1
  253. package/dist/src/living-docs/smart-doc-organizer.js +1 -1
  254. package/dist/src/living-docs/smart-doc-organizer.js.map +1 -1
  255. package/dist/src/sync/ado-reconciler.d.ts +1 -1
  256. package/dist/src/sync/ado-reconciler.js +1 -1
  257. package/dist/src/sync/external-change-puller.js +1 -1
  258. package/dist/src/sync/external-change-puller.js.map +1 -1
  259. package/dist/src/sync/external-issue-auto-creator.js +1 -1
  260. package/dist/src/sync/external-issue-auto-creator.js.map +1 -1
  261. package/dist/src/sync/external-item-sync-service.js +2 -2
  262. package/dist/src/sync/external-item-sync-service.js.map +1 -1
  263. package/dist/src/sync/format-preservation-sync.d.ts +1 -1
  264. package/dist/src/sync/format-preservation-sync.d.ts.map +1 -1
  265. package/dist/src/sync/format-preservation-sync.js +1 -1
  266. package/dist/src/sync/format-preservation-sync.js.map +1 -1
  267. package/dist/src/sync/github-reconciler.d.ts +1 -1
  268. package/dist/src/sync/github-reconciler.js +2 -2
  269. package/dist/src/sync/github-reconciler.js.map +1 -1
  270. package/dist/src/sync/github-sync-wrapper.d.ts +2 -2
  271. package/dist/src/sync/github-sync-wrapper.d.ts.map +1 -1
  272. package/dist/src/sync/github-sync-wrapper.js +1 -1
  273. package/dist/src/sync/github-sync-wrapper.js.map +1 -1
  274. package/dist/src/sync/jira-reconciler.d.ts +1 -1
  275. package/dist/src/sync/jira-reconciler.js +1 -1
  276. package/dist/src/sync/living-docs-updater.d.ts +1 -1
  277. package/dist/src/sync/living-docs-updater.d.ts.map +1 -1
  278. package/dist/src/sync/living-docs-updater.js +1 -1
  279. package/dist/src/sync/living-docs-updater.js.map +1 -1
  280. package/dist/src/sync/pr-linker.js +1 -1
  281. package/dist/src/sync/pr-linker.js.map +1 -1
  282. package/dist/src/sync/providers/github.d.ts +1 -1
  283. package/dist/src/sync/providers/github.js +1 -1
  284. package/dist/src/sync/sync-coordinator.js +4 -4
  285. package/dist/src/sync/sync-coordinator.js.map +1 -1
  286. package/dist/src/utils/cleanup-stale-plugins.d.ts.map +1 -1
  287. package/dist/src/utils/cleanup-stale-plugins.js +7 -0
  288. package/dist/src/utils/cleanup-stale-plugins.js.map +1 -1
  289. package/dist/src/utils/docs-validator.js +1 -1
  290. package/dist/src/utils/docs-validator.js.map +1 -1
  291. package/dist/src/utils/plugin-copier.d.ts +16 -0
  292. package/dist/src/utils/plugin-copier.d.ts.map +1 -1
  293. package/dist/src/utils/plugin-copier.js +79 -0
  294. package/dist/src/utils/plugin-copier.js.map +1 -1
  295. package/package.json +1 -1
  296. package/plugins/PLUGINS-INDEX.md +23 -42
  297. package/plugins/specweave/.claude-plugin/plugin.json +9 -2
  298. package/plugins/specweave/lib/integrations/ado/ado-ac-checkbox-sync.js +241 -0
  299. package/plugins/specweave/lib/integrations/ado/ado-ac-checkbox-sync.ts +311 -0
  300. package/plugins/specweave/lib/integrations/ado/ado-client-v2.d.ts +134 -0
  301. package/plugins/specweave/lib/integrations/ado/ado-client-v2.ts +742 -0
  302. package/plugins/specweave/lib/integrations/ado/ado-duplicate-detector.js +279 -0
  303. package/plugins/specweave/lib/integrations/ado/ado-duplicate-detector.ts +408 -0
  304. package/plugins/specweave/lib/integrations/ado/ado-hierarchical-sync.d.ts +40 -0
  305. package/plugins/specweave/lib/integrations/ado/ado-hierarchical-sync.js +300 -0
  306. package/plugins/specweave/lib/integrations/ado/ado-hierarchical-sync.ts +554 -0
  307. package/plugins/specweave/lib/integrations/ado/ado-multi-project-sync.js +486 -0
  308. package/plugins/specweave/lib/integrations/ado/ado-multi-project-sync.ts +675 -0
  309. package/plugins/specweave/lib/integrations/ado/ado-project-detector.js +502 -0
  310. package/plugins/specweave/lib/integrations/ado/ado-project-detector.ts +560 -0
  311. package/plugins/specweave/lib/integrations/ado/ado-spec-commit-sync.d.ts +38 -0
  312. package/plugins/specweave/lib/integrations/ado/ado-spec-commit-sync.js +189 -0
  313. package/plugins/specweave/lib/integrations/ado/ado-spec-commit-sync.ts +288 -0
  314. package/plugins/specweave/lib/integrations/ado/ado-spec-content-sync.js +249 -0
  315. package/plugins/specweave/lib/integrations/ado/ado-spec-content-sync.ts +379 -0
  316. package/plugins/specweave/lib/integrations/ado/ado-spec-sync.d.ts +100 -0
  317. package/plugins/specweave/lib/integrations/ado/ado-spec-sync.js +681 -0
  318. package/plugins/specweave/lib/integrations/ado/ado-spec-sync.ts +893 -0
  319. package/plugins/specweave/lib/integrations/ado/ado-status-sync.js +150 -0
  320. package/plugins/specweave/lib/integrations/ado/ado-status-sync.ts +213 -0
  321. package/plugins/specweave/lib/integrations/ado/conflict-resolver.js +400 -0
  322. package/plugins/specweave/lib/integrations/ado/conflict-resolver.ts +583 -0
  323. package/plugins/specweave/lib/integrations/ado/per-us-sync.js +272 -0
  324. package/plugins/specweave/lib/integrations/ado/per-us-sync.ts +457 -0
  325. package/plugins/specweave/lib/integrations/ado/project-selector.d.ts +42 -0
  326. package/plugins/specweave/lib/integrations/ado/project-selector.ts +304 -0
  327. package/plugins/specweave/lib/integrations/github/CodeValidator.js +195 -0
  328. package/plugins/specweave/lib/integrations/github/CodeValidator.ts +284 -0
  329. package/plugins/specweave/lib/integrations/github/duplicate-detector.js +397 -0
  330. package/plugins/specweave/lib/integrations/github/duplicate-detector.ts +561 -0
  331. package/plugins/specweave/lib/integrations/github/github-ac-checkbox-sync.js +287 -0
  332. package/plugins/specweave/lib/integrations/github/github-ac-checkbox-sync.ts +391 -0
  333. package/plugins/specweave/lib/integrations/github/github-ac-comment-poster.js +191 -0
  334. package/plugins/specweave/lib/integrations/github/github-ac-comment-poster.ts +315 -0
  335. package/plugins/specweave/lib/integrations/github/github-board-resolver.js +81 -0
  336. package/plugins/specweave/lib/integrations/github/github-board-resolver.ts +175 -0
  337. package/plugins/specweave/lib/integrations/github/github-client-v2.js +814 -0
  338. package/plugins/specweave/lib/integrations/github/github-client-v2.ts +1035 -0
  339. package/plugins/specweave/lib/integrations/github/github-cross-repo-sync.js +182 -0
  340. package/plugins/specweave/lib/integrations/github/github-cross-repo-sync.ts +265 -0
  341. package/plugins/specweave/lib/integrations/github/github-feature-sync.js +1007 -0
  342. package/plugins/specweave/lib/integrations/github/github-feature-sync.ts +1403 -0
  343. package/plugins/specweave/lib/integrations/github/github-hierarchical-sync.d.ts +29 -0
  344. package/plugins/specweave/lib/integrations/github/github-hierarchical-sync.js +190 -0
  345. package/plugins/specweave/lib/integrations/github/github-hierarchical-sync.ts +355 -0
  346. package/plugins/specweave/lib/integrations/github/github-issue-updater.js +275 -0
  347. package/plugins/specweave/lib/integrations/github/github-issue-updater.ts +462 -0
  348. package/plugins/specweave/lib/integrations/github/github-multi-project-sync.js +409 -0
  349. package/plugins/specweave/lib/integrations/github/github-multi-project-sync.ts +555 -0
  350. package/plugins/specweave/lib/integrations/github/github-pull-sync.js +185 -0
  351. package/plugins/specweave/lib/integrations/github/github-pull-sync.ts +343 -0
  352. package/plugins/specweave/lib/integrations/github/github-push-sync.js +129 -0
  353. package/plugins/specweave/lib/integrations/github/github-push-sync.ts +188 -0
  354. package/plugins/specweave/lib/integrations/github/github-rate-limiter.js +96 -0
  355. package/plugins/specweave/lib/integrations/github/github-rate-limiter.ts +143 -0
  356. package/plugins/specweave/lib/integrations/github/github-spec-commit-sync.d.ts +37 -0
  357. package/plugins/specweave/lib/integrations/github/github-spec-commit-sync.js +186 -0
  358. package/plugins/specweave/lib/integrations/github/github-spec-commit-sync.ts +285 -0
  359. package/plugins/specweave/lib/integrations/github/github-spec-content-sync.js +298 -0
  360. package/plugins/specweave/lib/integrations/github/github-spec-content-sync.ts +465 -0
  361. package/plugins/specweave/lib/integrations/github/github-spec-frontmatter-updater.ts +306 -0
  362. package/plugins/specweave/lib/integrations/github/github-spec-sync.d.ts +108 -0
  363. package/plugins/specweave/lib/integrations/github/github-spec-sync.js +900 -0
  364. package/plugins/specweave/lib/integrations/github/github-spec-sync.ts +1281 -0
  365. package/plugins/specweave/lib/integrations/github/github-sync-orchestrator.ts +158 -0
  366. package/plugins/specweave/lib/integrations/github/github-us-auto-closer.js +190 -0
  367. package/plugins/specweave/lib/integrations/github/github-us-auto-closer.ts +313 -0
  368. package/plugins/specweave/lib/integrations/github/per-us-sync.js +330 -0
  369. package/plugins/specweave/lib/integrations/github/per-us-sync.ts +515 -0
  370. package/plugins/specweave/lib/integrations/github/user-story-content-builder.js +306 -0
  371. package/plugins/specweave/lib/integrations/github/user-story-content-builder.ts +424 -0
  372. package/plugins/specweave/lib/integrations/jira/jira-ac-checkbox-sync.js +300 -0
  373. package/plugins/specweave/lib/integrations/jira/jira-ac-checkbox-sync.ts +380 -0
  374. package/plugins/specweave/lib/integrations/jira/jira-board-resolver.d.ts +50 -0
  375. package/plugins/specweave/lib/integrations/jira/jira-board-resolver.ts +127 -0
  376. package/plugins/specweave/lib/integrations/jira/jira-duplicate-detector.js +279 -0
  377. package/plugins/specweave/lib/integrations/jira/jira-duplicate-detector.ts +420 -0
  378. package/plugins/specweave/lib/integrations/jira/jira-epic-sync.js +314 -0
  379. package/plugins/specweave/lib/integrations/jira/jira-epic-sync.ts +474 -0
  380. package/plugins/specweave/lib/integrations/jira/jira-hierarchical-sync.d.ts +33 -0
  381. package/plugins/specweave/lib/integrations/jira/jira-hierarchical-sync.js +144 -0
  382. package/plugins/specweave/lib/integrations/jira/jira-hierarchical-sync.ts +294 -0
  383. package/plugins/specweave/lib/integrations/jira/jira-multi-project-sync.js +279 -0
  384. package/plugins/specweave/lib/integrations/jira/jira-multi-project-sync.ts +398 -0
  385. package/plugins/specweave/lib/integrations/jira/jira-spec-commit-sync.d.ts +43 -0
  386. package/plugins/specweave/lib/integrations/jira/jira-spec-commit-sync.js +262 -0
  387. package/plugins/specweave/lib/integrations/jira/jira-spec-commit-sync.ts +370 -0
  388. package/plugins/specweave/lib/integrations/jira/jira-spec-content-sync.js +260 -0
  389. package/plugins/specweave/lib/integrations/jira/jira-spec-content-sync.ts +367 -0
  390. package/plugins/specweave/lib/integrations/jira/jira-spec-sync.d.ts +105 -0
  391. package/plugins/specweave/lib/integrations/jira/jira-spec-sync.js +689 -0
  392. package/plugins/specweave/lib/integrations/jira/jira-spec-sync.ts +947 -0
  393. package/plugins/specweave/lib/integrations/jira/jira-status-sync.js +215 -0
  394. package/plugins/specweave/lib/integrations/jira/jira-status-sync.ts +375 -0
  395. package/plugins/specweave/lib/integrations/jira/per-us-sync.js +235 -0
  396. package/plugins/specweave/lib/integrations/jira/per-us-sync.ts +384 -0
  397. package/plugins/specweave/lib/integrations/jira/project-selector.d.ts +42 -0
  398. package/plugins/specweave/lib/integrations/jira/project-selector.ts +310 -0
  399. package/plugins/specweave/lib/integrations/jira/reorganization-detector.d.ts +67 -0
  400. package/plugins/specweave/lib/integrations/jira/reorganization-detector.ts +449 -0
  401. package/plugins/specweave/lib/integrations/jira/setup-wizard.d.js +4 -0
  402. package/plugins/specweave/lib/integrations/jira/setup-wizard.d.ts +29 -0
  403. package/plugins/specweave/lib/integrations/jira/setup-wizard.js +156 -0
  404. package/plugins/specweave/lib/integrations/jira/setup-wizard.ts +238 -0
  405. package/plugins/specweave/lib/vendor/sync/github-reconciler.d.ts +1 -1
  406. package/plugins/specweave/lib/vendor/sync/github-reconciler.js +2 -2
  407. package/plugins/specweave/lib/vendor/sync/github-reconciler.js.map +1 -1
  408. package/plugins/specweave/skills/team-lead/SKILL.md +10 -5
  409. package/plugins/specweave/skills/team-lead/agents/brainstorm-advocate.md +12 -6
  410. package/plugins/specweave/skills/team-lead/agents/brainstorm-critic.md +12 -6
  411. package/plugins/specweave/skills/team-lead/agents/brainstorm-pragmatist.md +12 -6
  412. package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.d.ts +0 -44
  413. package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.d.ts.map +0 -1
  414. package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.js +0 -236
  415. package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.js.map +0 -1
  416. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts.map +0 -1
  417. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js.map +0 -1
  418. package/dist/plugins/specweave-ado/lib/ado-client-v2.d.ts +0 -139
  419. package/dist/plugins/specweave-ado/lib/ado-client-v2.d.ts.map +0 -1
  420. package/dist/plugins/specweave-ado/lib/ado-client-v2.js.map +0 -1
  421. package/dist/plugins/specweave-ado/lib/ado-client.d.ts.map +0 -1
  422. package/dist/plugins/specweave-ado/lib/ado-client.js.map +0 -1
  423. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts +0 -100
  424. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts.map +0 -1
  425. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js +0 -292
  426. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js.map +0 -1
  427. package/dist/plugins/specweave-ado/lib/ado-permission-gate.d.ts.map +0 -1
  428. package/dist/plugins/specweave-ado/lib/ado-permission-gate.js.map +0 -1
  429. package/dist/plugins/specweave-ado/lib/ado-profile-resolver.d.ts.map +0 -1
  430. package/dist/plugins/specweave-ado/lib/ado-profile-resolver.js.map +0 -1
  431. package/dist/plugins/specweave-ado/lib/ado-pull-sync.d.ts.map +0 -1
  432. package/dist/plugins/specweave-ado/lib/ado-pull-sync.js.map +0 -1
  433. package/dist/plugins/specweave-ado/lib/ado-rate-limiter.d.ts.map +0 -1
  434. package/dist/plugins/specweave-ado/lib/ado-rate-limiter.js.map +0 -1
  435. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.d.ts +0 -38
  436. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.d.ts.map +0 -1
  437. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.js +0 -210
  438. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.js.map +0 -1
  439. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts +0 -28
  440. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +0 -1
  441. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +0 -300
  442. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +0 -1
  443. package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts +0 -147
  444. package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts.map +0 -1
  445. package/dist/plugins/specweave-ado/lib/ado-spec-sync.js +0 -749
  446. package/dist/plugins/specweave-ado/lib/ado-spec-sync.js.map +0 -1
  447. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts +0 -79
  448. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts.map +0 -1
  449. package/dist/plugins/specweave-ado/lib/ado-status-sync.js +0 -162
  450. package/dist/plugins/specweave-ado/lib/ado-status-sync.js.map +0 -1
  451. package/dist/plugins/specweave-ado/lib/conflict-resolver.d.ts.map +0 -1
  452. package/dist/plugins/specweave-ado/lib/conflict-resolver.js +0 -439
  453. package/dist/plugins/specweave-ado/lib/conflict-resolver.js.map +0 -1
  454. package/dist/plugins/specweave-ado/lib/per-us-sync.d.ts +0 -131
  455. package/dist/plugins/specweave-ado/lib/per-us-sync.d.ts.map +0 -1
  456. package/dist/plugins/specweave-ado/lib/per-us-sync.js +0 -322
  457. package/dist/plugins/specweave-ado/lib/per-us-sync.js.map +0 -1
  458. package/dist/plugins/specweave-github/lib/CodeValidator.d.ts.map +0 -1
  459. package/dist/plugins/specweave-github/lib/CodeValidator.js +0 -219
  460. package/dist/plugins/specweave-github/lib/CodeValidator.js.map +0 -1
  461. package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts.map +0 -1
  462. package/dist/plugins/specweave-github/lib/IssueStateManager.js.map +0 -1
  463. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +0 -1
  464. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +0 -1
  465. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts.map +0 -1
  466. package/dist/plugins/specweave-github/lib/duplicate-detector.js +0 -423
  467. package/dist/plugins/specweave-github/lib/duplicate-detector.js.map +0 -1
  468. package/dist/plugins/specweave-github/lib/github-ac-checkbox-sync.d.ts +0 -54
  469. package/dist/plugins/specweave-github/lib/github-ac-checkbox-sync.d.ts.map +0 -1
  470. package/dist/plugins/specweave-github/lib/github-ac-checkbox-sync.js +0 -305
  471. package/dist/plugins/specweave-github/lib/github-ac-checkbox-sync.js.map +0 -1
  472. package/dist/plugins/specweave-github/lib/github-ac-comment-poster.d.ts.map +0 -1
  473. package/dist/plugins/specweave-github/lib/github-ac-comment-poster.js +0 -232
  474. package/dist/plugins/specweave-github/lib/github-ac-comment-poster.js.map +0 -1
  475. package/dist/plugins/specweave-github/lib/github-batch-sync.d.ts.map +0 -1
  476. package/dist/plugins/specweave-github/lib/github-batch-sync.js.map +0 -1
  477. package/dist/plugins/specweave-github/lib/github-board-resolver-v2.d.ts.map +0 -1
  478. package/dist/plugins/specweave-github/lib/github-board-resolver-v2.js.map +0 -1
  479. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +0 -214
  480. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +0 -1
  481. package/dist/plugins/specweave-github/lib/github-client-v2.js +0 -812
  482. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +0 -1
  483. package/dist/plugins/specweave-github/lib/github-client.d.ts.map +0 -1
  484. package/dist/plugins/specweave-github/lib/github-client.js.map +0 -1
  485. package/dist/plugins/specweave-github/lib/github-conflict-resolver.d.ts.map +0 -1
  486. package/dist/plugins/specweave-github/lib/github-conflict-resolver.js.map +0 -1
  487. package/dist/plugins/specweave-github/lib/github-cross-repo-sync.d.ts.map +0 -1
  488. package/dist/plugins/specweave-github/lib/github-cross-repo-sync.js +0 -172
  489. package/dist/plugins/specweave-github/lib/github-cross-repo-sync.js.map +0 -1
  490. package/dist/plugins/specweave-github/lib/github-feature-sync-cli.d.ts.map +0 -1
  491. package/dist/plugins/specweave-github/lib/github-feature-sync-cli.js.map +0 -1
  492. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +0 -1
  493. package/dist/plugins/specweave-github/lib/github-feature-sync.js +0 -1112
  494. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +0 -1
  495. package/dist/plugins/specweave-github/lib/github-field-sync.d.ts.map +0 -1
  496. package/dist/plugins/specweave-github/lib/github-field-sync.js.map +0 -1
  497. package/dist/plugins/specweave-github/lib/github-graphql-client.d.ts.map +0 -1
  498. package/dist/plugins/specweave-github/lib/github-graphql-client.js.map +0 -1
  499. package/dist/plugins/specweave-github/lib/github-issue-body-generator.d.ts.map +0 -1
  500. package/dist/plugins/specweave-github/lib/github-issue-body-generator.js.map +0 -1
  501. package/dist/plugins/specweave-github/lib/github-issue-body-parser.d.ts.map +0 -1
  502. package/dist/plugins/specweave-github/lib/github-issue-body-parser.js.map +0 -1
  503. package/dist/plugins/specweave-github/lib/github-issue-updater.d.ts.map +0 -1
  504. package/dist/plugins/specweave-github/lib/github-issue-updater.js +0 -339
  505. package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +0 -1
  506. package/dist/plugins/specweave-github/lib/github-pull-sync.d.ts +0 -94
  507. package/dist/plugins/specweave-github/lib/github-pull-sync.d.ts.map +0 -1
  508. package/dist/plugins/specweave-github/lib/github-pull-sync.js +0 -232
  509. package/dist/plugins/specweave-github/lib/github-pull-sync.js.map +0 -1
  510. package/dist/plugins/specweave-github/lib/github-push-sync.d.ts.map +0 -1
  511. package/dist/plugins/specweave-github/lib/github-push-sync.js +0 -127
  512. package/dist/plugins/specweave-github/lib/github-push-sync.js.map +0 -1
  513. package/dist/plugins/specweave-github/lib/github-rate-limiter.d.ts.map +0 -1
  514. package/dist/plugins/specweave-github/lib/github-rate-limiter.js +0 -109
  515. package/dist/plugins/specweave-github/lib/github-rate-limiter.js.map +0 -1
  516. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.d.ts +0 -37
  517. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.d.ts.map +0 -1
  518. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.js +0 -209
  519. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.js.map +0 -1
  520. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts +0 -28
  521. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +0 -1
  522. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +0 -365
  523. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +0 -1
  524. package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.d.ts +0 -21
  525. package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.d.ts.map +0 -1
  526. package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.js.map +0 -1
  527. package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts +0 -225
  528. package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts.map +0 -1
  529. package/dist/plugins/specweave-github/lib/github-spec-sync.js +0 -974
  530. package/dist/plugins/specweave-github/lib/github-spec-sync.js.map +0 -1
  531. package/dist/plugins/specweave-github/lib/github-sync-orchestrator.d.ts +0 -47
  532. package/dist/plugins/specweave-github/lib/github-sync-orchestrator.d.ts.map +0 -1
  533. package/dist/plugins/specweave-github/lib/github-sync-orchestrator.js.map +0 -1
  534. package/dist/plugins/specweave-github/lib/github-us-auto-closer.d.ts.map +0 -1
  535. package/dist/plugins/specweave-github/lib/github-us-auto-closer.js +0 -219
  536. package/dist/plugins/specweave-github/lib/github-us-auto-closer.js.map +0 -1
  537. package/dist/plugins/specweave-github/lib/index.d.ts.map +0 -1
  538. package/dist/plugins/specweave-github/lib/index.js.map +0 -1
  539. package/dist/plugins/specweave-github/lib/per-us-sync.d.ts +0 -126
  540. package/dist/plugins/specweave-github/lib/per-us-sync.d.ts.map +0 -1
  541. package/dist/plugins/specweave-github/lib/per-us-sync.js +0 -394
  542. package/dist/plugins/specweave-github/lib/per-us-sync.js.map +0 -1
  543. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +0 -1
  544. package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +0 -1
  545. package/dist/plugins/specweave-github/lib/types.d.ts.map +0 -1
  546. package/dist/plugins/specweave-github/lib/types.js.map +0 -1
  547. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +0 -1
  548. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +0 -310
  549. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +0 -1
  550. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +0 -1
  551. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +0 -1
  552. package/dist/plugins/specweave-jira/lib/content-format-adapter.d.ts.map +0 -1
  553. package/dist/plugins/specweave-jira/lib/content-format-adapter.js.map +0 -1
  554. package/dist/plugins/specweave-jira/lib/jira-ac-checkbox-sync.d.ts +0 -47
  555. package/dist/plugins/specweave-jira/lib/jira-ac-checkbox-sync.d.ts.map +0 -1
  556. package/dist/plugins/specweave-jira/lib/jira-ac-checkbox-sync.js +0 -307
  557. package/dist/plugins/specweave-jira/lib/jira-ac-checkbox-sync.js.map +0 -1
  558. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts +0 -50
  559. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts.map +0 -1
  560. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js.map +0 -1
  561. package/dist/plugins/specweave-jira/lib/jira-deployment-detector.d.ts.map +0 -1
  562. package/dist/plugins/specweave-jira/lib/jira-deployment-detector.js.map +0 -1
  563. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts +0 -103
  564. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts.map +0 -1
  565. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js +0 -295
  566. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js.map +0 -1
  567. package/dist/plugins/specweave-jira/lib/jira-epic-sync.d.ts +0 -67
  568. package/dist/plugins/specweave-jira/lib/jira-epic-sync.d.ts.map +0 -1
  569. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js +0 -286
  570. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js.map +0 -1
  571. package/dist/plugins/specweave-jira/lib/jira-field-discovery.d.ts.map +0 -1
  572. package/dist/plugins/specweave-jira/lib/jira-field-discovery.js.map +0 -1
  573. package/dist/plugins/specweave-jira/lib/jira-paginated-search.d.ts.map +0 -1
  574. package/dist/plugins/specweave-jira/lib/jira-paginated-search.js.map +0 -1
  575. package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts.map +0 -1
  576. package/dist/plugins/specweave-jira/lib/jira-permission-gate.js.map +0 -1
  577. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.d.ts +0 -43
  578. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.d.ts.map +0 -1
  579. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.js +0 -284
  580. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.js.map +0 -1
  581. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.d.ts +0 -33
  582. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.d.ts.map +0 -1
  583. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.js +0 -294
  584. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.js.map +0 -1
  585. package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts +0 -180
  586. package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts.map +0 -1
  587. package/dist/plugins/specweave-jira/lib/jira-spec-sync.js +0 -757
  588. package/dist/plugins/specweave-jira/lib/jira-spec-sync.js.map +0 -1
  589. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts +0 -116
  590. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts.map +0 -1
  591. package/dist/plugins/specweave-jira/lib/jira-status-sync.js +0 -302
  592. package/dist/plugins/specweave-jira/lib/jira-status-sync.js.map +0 -1
  593. package/dist/plugins/specweave-jira/lib/metadata-paths.d.ts.map +0 -1
  594. package/dist/plugins/specweave-jira/lib/metadata-paths.js.map +0 -1
  595. package/dist/plugins/specweave-jira/lib/per-us-sync.d.ts +0 -117
  596. package/dist/plugins/specweave-jira/lib/per-us-sync.d.ts.map +0 -1
  597. package/dist/plugins/specweave-jira/lib/per-us-sync.js +0 -274
  598. package/dist/plugins/specweave-jira/lib/per-us-sync.js.map +0 -1
  599. package/dist/plugins/specweave-jira/lib/reorganization-detector.d.ts +0 -80
  600. package/dist/plugins/specweave-jira/lib/reorganization-detector.d.ts.map +0 -1
  601. package/dist/plugins/specweave-jira/lib/reorganization-detector.js.map +0 -1
  602. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts +0 -29
  603. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts.map +0 -1
  604. package/dist/plugins/specweave-jira/lib/setup-wizard.js +0 -198
  605. package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +0 -1
  606. package/dist/plugins/specweave-release/lib/dashboard-generator.d.ts.map +0 -1
  607. package/dist/plugins/specweave-release/lib/dashboard-generator.js.map +0 -1
  608. package/dist/plugins/specweave-release/lib/dora-tracker.d.ts.map +0 -1
  609. package/dist/plugins/specweave-release/lib/dora-tracker.js.map +0 -1
  610. package/plugins/specweave-ado/.claude-plugin/plugin.json +0 -20
  611. package/plugins/specweave-ado/PLUGIN.md +0 -39
  612. package/plugins/specweave-ado/hooks/README.md +0 -201
  613. package/plugins/specweave-ado/lib/ado-ac-checkbox-sync.js +0 -241
  614. package/plugins/specweave-ado/lib/ado-ac-checkbox-sync.ts +0 -311
  615. package/plugins/specweave-ado/lib/ado-client-v2.d.ts +0 -134
  616. package/plugins/specweave-ado/lib/ado-client-v2.ts +0 -742
  617. package/plugins/specweave-ado/lib/ado-duplicate-detector.js +0 -279
  618. package/plugins/specweave-ado/lib/ado-duplicate-detector.ts +0 -408
  619. package/plugins/specweave-ado/lib/ado-hierarchical-sync.d.ts +0 -40
  620. package/plugins/specweave-ado/lib/ado-hierarchical-sync.js +0 -300
  621. package/plugins/specweave-ado/lib/ado-hierarchical-sync.ts +0 -554
  622. package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -486
  623. package/plugins/specweave-ado/lib/ado-multi-project-sync.ts +0 -675
  624. package/plugins/specweave-ado/lib/ado-project-detector.js +0 -502
  625. package/plugins/specweave-ado/lib/ado-project-detector.ts +0 -560
  626. package/plugins/specweave-ado/lib/ado-spec-commit-sync.d.ts +0 -38
  627. package/plugins/specweave-ado/lib/ado-spec-commit-sync.js +0 -189
  628. package/plugins/specweave-ado/lib/ado-spec-commit-sync.ts +0 -288
  629. package/plugins/specweave-ado/lib/ado-spec-content-sync.js +0 -249
  630. package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +0 -379
  631. package/plugins/specweave-ado/lib/ado-spec-sync.d.ts +0 -100
  632. package/plugins/specweave-ado/lib/ado-spec-sync.js +0 -681
  633. package/plugins/specweave-ado/lib/ado-spec-sync.ts +0 -893
  634. package/plugins/specweave-ado/lib/ado-status-sync.js +0 -150
  635. package/plugins/specweave-ado/lib/ado-status-sync.ts +0 -213
  636. package/plugins/specweave-ado/lib/conflict-resolver.js +0 -400
  637. package/plugins/specweave-ado/lib/conflict-resolver.ts +0 -583
  638. package/plugins/specweave-ado/lib/per-us-sync.js +0 -272
  639. package/plugins/specweave-ado/lib/per-us-sync.ts +0 -457
  640. package/plugins/specweave-ado/lib/project-selector.d.ts +0 -42
  641. package/plugins/specweave-ado/lib/project-selector.ts +0 -304
  642. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +0 -20
  643. package/plugins/specweave-diagrams/PLUGIN.md +0 -32
  644. package/plugins/specweave-docs/.claude-plugin/plugin.json +0 -10
  645. package/plugins/specweave-docs/PLUGIN.md +0 -27
  646. package/plugins/specweave-github/.claude-plugin/plugin.json +0 -19
  647. package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +0 -744
  648. package/plugins/specweave-github/PLUGIN.md +0 -29
  649. package/plugins/specweave-github/SYNC-ARCHITECTURE-FIX-SUMMARY.md +0 -302
  650. package/plugins/specweave-github/hooks/README.md +0 -289
  651. package/plugins/specweave-github/lib/CodeValidator.js +0 -195
  652. package/plugins/specweave-github/lib/CodeValidator.ts +0 -284
  653. package/plugins/specweave-github/lib/duplicate-detector.js +0 -397
  654. package/plugins/specweave-github/lib/duplicate-detector.ts +0 -561
  655. package/plugins/specweave-github/lib/github-ac-checkbox-sync.js +0 -287
  656. package/plugins/specweave-github/lib/github-ac-checkbox-sync.ts +0 -391
  657. package/plugins/specweave-github/lib/github-ac-comment-poster.js +0 -191
  658. package/plugins/specweave-github/lib/github-ac-comment-poster.ts +0 -315
  659. package/plugins/specweave-github/lib/github-board-resolver.js +0 -81
  660. package/plugins/specweave-github/lib/github-board-resolver.ts +0 -175
  661. package/plugins/specweave-github/lib/github-client-v2.js +0 -814
  662. package/plugins/specweave-github/lib/github-client-v2.ts +0 -1035
  663. package/plugins/specweave-github/lib/github-cross-repo-sync.js +0 -182
  664. package/plugins/specweave-github/lib/github-cross-repo-sync.ts +0 -265
  665. package/plugins/specweave-github/lib/github-feature-sync.js +0 -1007
  666. package/plugins/specweave-github/lib/github-feature-sync.ts +0 -1403
  667. package/plugins/specweave-github/lib/github-hierarchical-sync.d.ts +0 -29
  668. package/plugins/specweave-github/lib/github-hierarchical-sync.js +0 -190
  669. package/plugins/specweave-github/lib/github-hierarchical-sync.ts +0 -355
  670. package/plugins/specweave-github/lib/github-issue-updater.js +0 -275
  671. package/plugins/specweave-github/lib/github-issue-updater.ts +0 -462
  672. package/plugins/specweave-github/lib/github-multi-project-sync.js +0 -409
  673. package/plugins/specweave-github/lib/github-multi-project-sync.ts +0 -555
  674. package/plugins/specweave-github/lib/github-pull-sync.js +0 -185
  675. package/plugins/specweave-github/lib/github-pull-sync.ts +0 -343
  676. package/plugins/specweave-github/lib/github-push-sync.js +0 -129
  677. package/plugins/specweave-github/lib/github-push-sync.ts +0 -188
  678. package/plugins/specweave-github/lib/github-rate-limiter.js +0 -96
  679. package/plugins/specweave-github/lib/github-rate-limiter.ts +0 -143
  680. package/plugins/specweave-github/lib/github-spec-commit-sync.d.ts +0 -37
  681. package/plugins/specweave-github/lib/github-spec-commit-sync.js +0 -186
  682. package/plugins/specweave-github/lib/github-spec-commit-sync.ts +0 -285
  683. package/plugins/specweave-github/lib/github-spec-content-sync.js +0 -298
  684. package/plugins/specweave-github/lib/github-spec-content-sync.ts +0 -465
  685. package/plugins/specweave-github/lib/github-spec-frontmatter-updater.ts +0 -306
  686. package/plugins/specweave-github/lib/github-spec-sync.d.ts +0 -108
  687. package/plugins/specweave-github/lib/github-spec-sync.js +0 -900
  688. package/plugins/specweave-github/lib/github-spec-sync.ts +0 -1281
  689. package/plugins/specweave-github/lib/github-sync-orchestrator.ts +0 -158
  690. package/plugins/specweave-github/lib/github-us-auto-closer.js +0 -190
  691. package/plugins/specweave-github/lib/github-us-auto-closer.ts +0 -313
  692. package/plugins/specweave-github/lib/per-us-sync.js +0 -330
  693. package/plugins/specweave-github/lib/per-us-sync.ts +0 -515
  694. package/plugins/specweave-github/lib/user-story-content-builder.js +0 -306
  695. package/plugins/specweave-github/lib/user-story-content-builder.ts +0 -424
  696. package/plugins/specweave-jira/.claude-plugin/plugin.json +0 -20
  697. package/plugins/specweave-jira/PLUGIN.md +0 -28
  698. package/plugins/specweave-jira/hooks/README.md +0 -201
  699. package/plugins/specweave-jira/lib/jira-ac-checkbox-sync.js +0 -300
  700. package/plugins/specweave-jira/lib/jira-ac-checkbox-sync.ts +0 -380
  701. package/plugins/specweave-jira/lib/jira-board-resolver.d.ts +0 -50
  702. package/plugins/specweave-jira/lib/jira-board-resolver.ts +0 -127
  703. package/plugins/specweave-jira/lib/jira-duplicate-detector.js +0 -279
  704. package/plugins/specweave-jira/lib/jira-duplicate-detector.ts +0 -420
  705. package/plugins/specweave-jira/lib/jira-epic-sync.js +0 -314
  706. package/plugins/specweave-jira/lib/jira-epic-sync.ts +0 -474
  707. package/plugins/specweave-jira/lib/jira-hierarchical-sync.d.ts +0 -33
  708. package/plugins/specweave-jira/lib/jira-hierarchical-sync.js +0 -144
  709. package/plugins/specweave-jira/lib/jira-hierarchical-sync.ts +0 -294
  710. package/plugins/specweave-jira/lib/jira-multi-project-sync.js +0 -279
  711. package/plugins/specweave-jira/lib/jira-multi-project-sync.ts +0 -398
  712. package/plugins/specweave-jira/lib/jira-spec-commit-sync.d.ts +0 -43
  713. package/plugins/specweave-jira/lib/jira-spec-commit-sync.js +0 -262
  714. package/plugins/specweave-jira/lib/jira-spec-commit-sync.ts +0 -370
  715. package/plugins/specweave-jira/lib/jira-spec-content-sync.js +0 -260
  716. package/plugins/specweave-jira/lib/jira-spec-content-sync.ts +0 -367
  717. package/plugins/specweave-jira/lib/jira-spec-sync.d.ts +0 -105
  718. package/plugins/specweave-jira/lib/jira-spec-sync.js +0 -689
  719. package/plugins/specweave-jira/lib/jira-spec-sync.ts +0 -947
  720. package/plugins/specweave-jira/lib/jira-status-sync.js +0 -215
  721. package/plugins/specweave-jira/lib/jira-status-sync.ts +0 -375
  722. package/plugins/specweave-jira/lib/per-us-sync.js +0 -235
  723. package/plugins/specweave-jira/lib/per-us-sync.ts +0 -384
  724. package/plugins/specweave-jira/lib/project-selector.d.ts +0 -42
  725. package/plugins/specweave-jira/lib/project-selector.ts +0 -310
  726. package/plugins/specweave-jira/lib/reorganization-detector.d.ts +0 -67
  727. package/plugins/specweave-jira/lib/reorganization-detector.ts +0 -449
  728. package/plugins/specweave-jira/lib/setup-wizard.d.js +0 -4
  729. package/plugins/specweave-jira/lib/setup-wizard.d.ts +0 -29
  730. package/plugins/specweave-jira/lib/setup-wizard.js +0 -156
  731. package/plugins/specweave-jira/lib/setup-wizard.ts +0 -238
  732. package/plugins/specweave-media/.claude-plugin/plugin.json +0 -24
  733. package/plugins/specweave-media/PLUGIN.md +0 -37
  734. package/plugins/specweave-media/test-providers.sh +0 -308
  735. package/plugins/specweave-release/.claude-plugin/plugin.json +0 -29
  736. package/plugins/specweave-release/IMPLEMENTATION.md +0 -446
  737. package/plugins/specweave-release/PLUGIN.md +0 -38
  738. package/plugins/specweave-release/README.md +0 -508
  739. package/plugins/specweave-release/hooks/post-task-completion.sh +0 -113
  740. /package/dist/plugins/{specweave-release/lib → specweave/lib/features/release}/dashboard-generator.d.ts +0 -0
  741. /package/dist/plugins/{specweave-release/lib → specweave/lib/features/release}/dashboard-generator.js +0 -0
  742. /package/dist/plugins/{specweave-release/lib → specweave/lib/features/release}/dora-tracker.d.ts +0 -0
  743. /package/dist/plugins/{specweave-release/lib → specweave/lib/features/release}/dora-tracker.js +0 -0
  744. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.d.ts +0 -0
  745. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.js +0 -0
  746. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client-v2.js +0 -0
  747. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.d.ts +0 -0
  748. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.js +0 -0
  749. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-permission-gate.d.ts +0 -0
  750. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-permission-gate.js +0 -0
  751. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-profile-resolver.d.ts +0 -0
  752. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-profile-resolver.js +0 -0
  753. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-pull-sync.d.ts +0 -0
  754. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-pull-sync.js +0 -0
  755. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-rate-limiter.d.ts +0 -0
  756. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-rate-limiter.js +0 -0
  757. /package/dist/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/conflict-resolver.d.ts +0 -0
  758. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/CodeValidator.d.ts +0 -0
  759. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/IssueStateManager.d.ts +0 -0
  760. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/IssueStateManager.js +0 -0
  761. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/completion-calculator.d.ts +0 -0
  762. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/completion-calculator.js +0 -0
  763. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/duplicate-detector.d.ts +0 -0
  764. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-ac-comment-poster.d.ts +0 -0
  765. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-batch-sync.d.ts +0 -0
  766. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-batch-sync.js +0 -0
  767. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver-v2.d.ts +0 -0
  768. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver-v2.js +0 -0
  769. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.d.ts +0 -0
  770. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.js +0 -0
  771. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-conflict-resolver.d.ts +0 -0
  772. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-conflict-resolver.js +0 -0
  773. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-cross-repo-sync.d.ts +0 -0
  774. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-feature-sync-cli.d.ts +0 -0
  775. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-feature-sync-cli.js +0 -0
  776. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-feature-sync.d.ts +0 -0
  777. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-field-sync.d.ts +0 -0
  778. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-field-sync.js +0 -0
  779. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-graphql-client.d.ts +0 -0
  780. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-graphql-client.js +0 -0
  781. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-generator.d.ts +0 -0
  782. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-generator.js +0 -0
  783. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-parser.d.ts +0 -0
  784. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-parser.js +0 -0
  785. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-updater.d.ts +0 -0
  786. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-push-sync.d.ts +0 -0
  787. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-rate-limiter.d.ts +0 -0
  788. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-frontmatter-updater.js +0 -0
  789. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-sync-orchestrator.js +0 -0
  790. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-us-auto-closer.d.ts +0 -0
  791. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.d.ts +0 -0
  792. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.js +0 -0
  793. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/progress-comment-builder.d.ts +0 -0
  794. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/progress-comment-builder.js +0 -0
  795. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.d.ts +0 -0
  796. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.js +0 -0
  797. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/user-story-content-builder.d.ts +0 -0
  798. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/user-story-issue-builder.d.ts +0 -0
  799. /package/dist/plugins/{specweave-github/lib → specweave/lib/integrations/github}/user-story-issue-builder.js +0 -0
  800. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/content-format-adapter.d.ts +0 -0
  801. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/content-format-adapter.js +0 -0
  802. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-board-resolver.js +0 -0
  803. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-deployment-detector.d.ts +0 -0
  804. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-deployment-detector.js +0 -0
  805. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-field-discovery.d.ts +0 -0
  806. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-field-discovery.js +0 -0
  807. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-paginated-search.d.ts +0 -0
  808. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-paginated-search.js +0 -0
  809. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-permission-gate.d.ts +0 -0
  810. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-permission-gate.js +0 -0
  811. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/metadata-paths.d.ts +0 -0
  812. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/metadata-paths.js +0 -0
  813. /package/dist/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/reorganization-detector.js +0 -0
  814. /package/plugins/{specweave-ado/commands/cleanup-duplicates.md → specweave/commands/ado-cleanup-duplicates.md} +0 -0
  815. /package/plugins/{specweave-ado/commands/clone.md → specweave/commands/ado-clone.md} +0 -0
  816. /package/plugins/{specweave-ado/commands/close.md → specweave/commands/ado-close.md} +0 -0
  817. /package/plugins/{specweave-ado/commands/create.md → specweave/commands/ado-create.md} +0 -0
  818. /package/plugins/{specweave-ado/commands/import-areas.md → specweave/commands/ado-import-areas.md} +0 -0
  819. /package/plugins/{specweave-ado/commands/import-projects.md → specweave/commands/ado-import-projects.md} +0 -0
  820. /package/plugins/{specweave-ado/commands/pull.md → specweave/commands/ado-pull.md} +0 -0
  821. /package/plugins/{specweave-ado/commands/push.md → specweave/commands/ado-push.md} +0 -0
  822. /package/plugins/{specweave-ado/commands/reconcile.md → specweave/commands/ado-reconcile.md} +0 -0
  823. /package/plugins/{specweave-ado/commands/status.md → specweave/commands/ado-status.md} +0 -0
  824. /package/plugins/{specweave-ado/commands/sync.md → specweave/commands/ado-sync.md} +0 -0
  825. /package/plugins/{specweave-diagrams → specweave}/commands/diagrams-generate.md +0 -0
  826. /package/plugins/{specweave-docs/commands/build.md → specweave/commands/docs-build.md} +0 -0
  827. /package/plugins/{specweave-docs/commands/generate.md → specweave/commands/docs-generate.md} +0 -0
  828. /package/plugins/{specweave-docs/commands/health.md → specweave/commands/docs-health.md} +0 -0
  829. /package/plugins/{specweave-docs/commands/init.md → specweave/commands/docs-init.md} +0 -0
  830. /package/plugins/{specweave-docs/commands/organize.md → specweave/commands/docs-organize.md} +0 -0
  831. /package/plugins/{specweave-docs/commands/validate.md → specweave/commands/docs-validate.md} +0 -0
  832. /package/plugins/{specweave-docs/commands/view.md → specweave/commands/docs-view.md} +0 -0
  833. /package/plugins/{specweave-github/commands/cleanup-duplicates.md → specweave/commands/github-cleanup-duplicates.md} +0 -0
  834. /package/plugins/{specweave-github/commands/clone.md → specweave/commands/github-clone.md} +0 -0
  835. /package/plugins/{specweave-github/commands/close.md → specweave/commands/github-close.md} +0 -0
  836. /package/plugins/{specweave-github/commands/create.md → specweave/commands/github-create.md} +0 -0
  837. /package/plugins/{specweave-github/commands/pull.md → specweave/commands/github-pull.md} +0 -0
  838. /package/plugins/{specweave-github/commands/push.md → specweave/commands/github-push.md} +0 -0
  839. /package/plugins/{specweave-github/commands/reconcile.md → specweave/commands/github-reconcile.md} +0 -0
  840. /package/plugins/{specweave-github/commands/status.md → specweave/commands/github-status.md} +0 -0
  841. /package/plugins/{specweave-github/commands/sync.md → specweave/commands/github-sync.md} +0 -0
  842. /package/plugins/{specweave-github/commands/update-user-story.md → specweave/commands/github-update-user-story.md} +0 -0
  843. /package/plugins/{specweave-jira/commands/cleanup-duplicates.md → specweave/commands/jira-cleanup-duplicates.md} +0 -0
  844. /package/plugins/{specweave-jira/commands/close.md → specweave/commands/jira-close.md} +0 -0
  845. /package/plugins/{specweave-jira/commands/create.md → specweave/commands/jira-create.md} +0 -0
  846. /package/plugins/{specweave-jira/commands/import-boards.md → specweave/commands/jira-import-boards.md} +0 -0
  847. /package/plugins/{specweave-jira/commands/import-projects-full.md → specweave/commands/jira-import-projects-full.md} +0 -0
  848. /package/plugins/{specweave-jira/commands/import-projects.md → specweave/commands/jira-import-projects.md} +0 -0
  849. /package/plugins/{specweave-jira/commands/pull.md → specweave/commands/jira-pull.md} +0 -0
  850. /package/plugins/{specweave-jira/commands/push.md → specweave/commands/jira-push.md} +0 -0
  851. /package/plugins/{specweave-jira/commands/reconcile.md → specweave/commands/jira-reconcile.md} +0 -0
  852. /package/plugins/{specweave-jira/commands/status.md → specweave/commands/jira-status.md} +0 -0
  853. /package/plugins/{specweave-jira/commands/sync.md → specweave/commands/jira-sync.md} +0 -0
  854. /package/plugins/{specweave-release/commands/align.md → specweave/commands/release-align.md} +0 -0
  855. /package/plugins/{specweave-release/commands/init.md → specweave/commands/release-init.md} +0 -0
  856. /package/plugins/{specweave-release/commands/npm.md → specweave/commands/release-npm.md} +0 -0
  857. /package/plugins/{specweave-release/commands/platform.md → specweave/commands/release-platform.md} +0 -0
  858. /package/plugins/{specweave-release/commands/rc.md → specweave/commands/release-rc.md} +0 -0
  859. /package/plugins/{specweave-ado/hooks/post-living-docs-update.sh → specweave/hooks/v2/integrations/ado-post-living-docs-update.sh} +0 -0
  860. /package/plugins/{specweave-ado/hooks/post-task-completion.sh → specweave/hooks/v2/integrations/ado-post-task.sh} +0 -0
  861. /package/plugins/{specweave-github/hooks → specweave/hooks/v2/integrations}/github-auto-create-handler.sh +0 -0
  862. /package/plugins/{specweave-github/hooks/post-task-completion.sh → specweave/hooks/v2/integrations/github-post-task.sh} +0 -0
  863. /package/plugins/{specweave-jira/hooks/post-task-completion.sh → specweave/hooks/v2/integrations/jira-post-task.sh} +0 -0
  864. /package/plugins/{specweave-release/lib → specweave/lib/features/release}/dashboard-generator.js +0 -0
  865. /package/plugins/{specweave-release/lib → specweave/lib/features/release}/dashboard-generator.ts +0 -0
  866. /package/plugins/{specweave-release/lib → specweave/lib/features/release}/dora-tracker.js +0 -0
  867. /package/plugins/{specweave-release/lib → specweave/lib/features/release}/dora-tracker.ts +0 -0
  868. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.d.js +0 -0
  869. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.d.ts +0 -0
  870. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.d.ts.map +0 -0
  871. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.js +0 -0
  872. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.js.map +0 -0
  873. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-board-resolver.ts +0 -0
  874. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client-v2.d.js +0 -0
  875. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client-v2.d.ts.map +0 -0
  876. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client-v2.js +0 -0
  877. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client-v2.js.map +0 -0
  878. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.d.js +0 -0
  879. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.d.ts +0 -0
  880. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.d.ts.map +0 -0
  881. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.js +0 -0
  882. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.js.map +0 -0
  883. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-client.ts +0 -0
  884. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-hierarchical-sync.d.js +0 -0
  885. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-hierarchical-sync.d.ts.map +0 -0
  886. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-hierarchical-sync.js.map +0 -0
  887. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-permission-gate.js +0 -0
  888. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-permission-gate.ts +0 -0
  889. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-profile-resolver.js +0 -0
  890. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-profile-resolver.ts +0 -0
  891. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-pull-sync.js +0 -0
  892. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-pull-sync.ts +0 -0
  893. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-rate-limiter.js +0 -0
  894. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-rate-limiter.ts +0 -0
  895. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-spec-commit-sync.d.js +0 -0
  896. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-spec-commit-sync.d.ts.map +0 -0
  897. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-spec-commit-sync.js.map +0 -0
  898. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-spec-sync.d.js +0 -0
  899. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-spec-sync.d.ts.map +0 -0
  900. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/ado-spec-sync.js.map +0 -0
  901. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/project-selector.d.js +0 -0
  902. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/project-selector.d.ts.map +0 -0
  903. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/project-selector.js +0 -0
  904. /package/plugins/{specweave-ado/lib → specweave/lib/integrations/ado}/project-selector.js.map +0 -0
  905. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/IssueStateManager.js +0 -0
  906. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/IssueStateManager.ts +0 -0
  907. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/completion-calculator.js +0 -0
  908. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/completion-calculator.ts +0 -0
  909. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-batch-sync.js +0 -0
  910. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-batch-sync.ts +0 -0
  911. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver-v2.js +0 -0
  912. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver-v2.ts +0 -0
  913. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver.d.js +0 -0
  914. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver.d.ts +0 -0
  915. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver.d.ts.map +0 -0
  916. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-board-resolver.js.map +0 -0
  917. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.d.js +0 -0
  918. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.d.ts +0 -0
  919. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.d.ts.map +0 -0
  920. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.js +0 -0
  921. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.js.map +0 -0
  922. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-client.ts +0 -0
  923. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-conflict-resolver.js +0 -0
  924. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-conflict-resolver.ts +0 -0
  925. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-feature-sync-cli.js +0 -0
  926. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-feature-sync-cli.ts +0 -0
  927. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-field-sync.js +0 -0
  928. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-field-sync.ts +0 -0
  929. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-graphql-client.js +0 -0
  930. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-graphql-client.ts +0 -0
  931. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-hierarchical-sync.d.js +0 -0
  932. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-hierarchical-sync.d.ts.map +0 -0
  933. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-hierarchical-sync.js.map +0 -0
  934. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-generator.js +0 -0
  935. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-generator.ts +0 -0
  936. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-parser.js +0 -0
  937. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-body-parser.ts +0 -0
  938. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-updater.d.js +0 -0
  939. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-updater.d.ts +0 -0
  940. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-updater.d.ts.map +0 -0
  941. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-issue-updater.js.map +0 -0
  942. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-commit-sync.d.js +0 -0
  943. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-commit-sync.d.ts.map +0 -0
  944. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-commit-sync.js.map +0 -0
  945. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-frontmatter-updater.js +0 -0
  946. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-sync.d.js +0 -0
  947. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-sync.d.ts.map +0 -0
  948. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-spec-sync.js.map +0 -0
  949. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/github-sync-orchestrator.js +0 -0
  950. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.d.js +0 -0
  951. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.d.ts +0 -0
  952. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.d.ts.map +0 -0
  953. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.js +0 -0
  954. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.js.map +0 -0
  955. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/index.ts +0 -0
  956. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/progress-comment-builder.js +0 -0
  957. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/progress-comment-builder.ts +0 -0
  958. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/repo-selector.d.js +0 -0
  959. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/repo-selector.d.ts +0 -0
  960. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/repo-selector.d.ts.map +0 -0
  961. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/repo-selector.js +0 -0
  962. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/repo-selector.js.map +0 -0
  963. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/repo-selector.ts +0 -0
  964. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.d.js +0 -0
  965. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.d.ts +0 -0
  966. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.d.ts.map +0 -0
  967. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.js +0 -0
  968. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.js.map +0 -0
  969. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/types.ts +0 -0
  970. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/user-story-issue-builder.js +0 -0
  971. /package/plugins/{specweave-github/lib → specweave/lib/integrations/github}/user-story-issue-builder.ts +0 -0
  972. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/content-format-adapter.js +0 -0
  973. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/content-format-adapter.ts +0 -0
  974. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-board-resolver.d.js +0 -0
  975. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-board-resolver.d.ts.map +0 -0
  976. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-board-resolver.js +0 -0
  977. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-board-resolver.js.map +0 -0
  978. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-deployment-detector.js +0 -0
  979. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-deployment-detector.ts +0 -0
  980. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-field-discovery.js +0 -0
  981. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-field-discovery.ts +0 -0
  982. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-hierarchical-sync.d.js +0 -0
  983. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-hierarchical-sync.d.ts.map +0 -0
  984. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-hierarchical-sync.js.map +0 -0
  985. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-paginated-search.js +0 -0
  986. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-paginated-search.ts +0 -0
  987. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-permission-gate.js +0 -0
  988. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-permission-gate.ts +0 -0
  989. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-profile-resolver.js +0 -0
  990. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-profile-resolver.ts +0 -0
  991. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-spec-commit-sync.d.js +0 -0
  992. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-spec-commit-sync.d.ts.map +0 -0
  993. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-spec-commit-sync.js.map +0 -0
  994. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-spec-sync.d.js +0 -0
  995. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-spec-sync.d.ts.map +0 -0
  996. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/jira-spec-sync.js.map +0 -0
  997. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/metadata-paths.js +0 -0
  998. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/metadata-paths.ts +0 -0
  999. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/project-selector.d.js +0 -0
  1000. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/project-selector.d.ts.map +0 -0
  1001. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/project-selector.js +0 -0
  1002. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/project-selector.js.map +0 -0
  1003. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/reorganization-detector.d.js +0 -0
  1004. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/reorganization-detector.d.ts.map +0 -0
  1005. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/reorganization-detector.js +0 -0
  1006. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/reorganization-detector.js.map +0 -0
  1007. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/setup-wizard.d.ts.map +0 -0
  1008. /package/plugins/{specweave-jira/lib → specweave/lib/integrations/jira}/setup-wizard.js.map +0 -0
  1009. /package/plugins/{specweave-ado/reference → specweave/reference/ado}/ado-specweave-mapping.md +0 -0
  1010. /package/plugins/{specweave-github/reference → specweave/reference/github}/github-specweave-mapping.md +0 -0
  1011. /package/plugins/{specweave-jira/reference → specweave/reference/jira}/confluence-page-api.md +0 -0
  1012. /package/plugins/{specweave-jira/reference → specweave/reference/jira}/jira-specweave-mapping.md +0 -0
  1013. /package/plugins/{specweave-ado/scripts → specweave/scripts/ado}/refresh-cache.js +0 -0
  1014. /package/plugins/{specweave-ado/scripts → specweave/scripts/ado}/refresh-cache.ts +0 -0
  1015. /package/plugins/{specweave-jira/scripts → specweave/scripts/jira}/import-projects.js +0 -0
  1016. /package/plugins/{specweave-jira/scripts → specweave/scripts/jira}/import-projects.ts +0 -0
  1017. /package/plugins/{specweave-jira/scripts → specweave/scripts/jira}/refresh-cache.js +0 -0
  1018. /package/plugins/{specweave-jira/scripts → specweave/scripts/jira}/refresh-cache.ts +0 -0
  1019. /package/plugins/{specweave-ado → specweave}/skills/ado-mapper/SKILL.md +0 -0
  1020. /package/plugins/{specweave-ado → specweave}/skills/ado-multi-project/SKILL.md +0 -0
  1021. /package/plugins/{specweave-ado → specweave}/skills/ado-resource-validator/SKILL.md +0 -0
  1022. /package/plugins/{specweave-ado → specweave}/skills/ado-sync/README.md +0 -0
  1023. /package/plugins/{specweave-ado → specweave}/skills/ado-sync/SKILL.md +0 -0
  1024. /package/plugins/{specweave-diagrams → specweave}/skills/diagrams/SKILL.md +0 -0
  1025. /package/plugins/{specweave-github → specweave}/skills/github-issue-standard/SKILL.md +0 -0
  1026. /package/plugins/{specweave-github → specweave}/skills/github-multi-project/SKILL.md +0 -0
  1027. /package/plugins/{specweave-github → specweave}/skills/github-sync/SKILL.md +0 -0
  1028. /package/plugins/{specweave-github → specweave}/skills/github-sync/evals/HOW-TO-RUN-EVALS.md +0 -0
  1029. /package/plugins/{specweave-github → specweave}/skills/github-sync/evals/evals.json +0 -0
  1030. /package/plugins/{specweave-media → specweave}/skills/image/SKILL.md +0 -0
  1031. /package/plugins/{specweave-jira → specweave}/skills/jira-mapper/SKILL.md +0 -0
  1032. /package/plugins/{specweave-jira → specweave}/skills/jira-resource-validator/SKILL.md +0 -0
  1033. /package/plugins/{specweave-jira → specweave}/skills/jira-sync/README.md +0 -0
  1034. /package/plugins/{specweave-jira → specweave}/skills/jira-sync/SKILL.md +0 -0
  1035. /package/plugins/{specweave-github → specweave}/skills/pr-review/SKILL.md +0 -0
  1036. /package/plugins/{specweave-release → specweave}/skills/release-expert/SKILL.md +0 -0
  1037. /package/plugins/{specweave-media → specweave}/skills/remotion/SKILL.md +0 -0
  1038. /package/plugins/{specweave-media → specweave}/skills/video/SKILL.md +0 -0
@@ -1,1112 +0,0 @@
1
- /**
2
- * GitHub Feature Sync - Universal Hierarchy Implementation
3
- *
4
- * Architecture:
5
- * - Feature (FS-XXX) → GitHub Milestone (Container)
6
- * - User Story (US-XXX) → GitHub Issue with format [FS-XXX][US-YYY] Title
7
- * - Tasks (T-XXX) → Checkboxes in User Story issue body
8
- *
9
- * This implements the Universal Hierarchy architecture for GitHub sync.
10
- * Creates ONE issue PER user story file from specs/{project}/FS-XXX/us-*.md
11
- */
12
- import { readdir, readFile, writeFile, mkdir } from 'fs/promises';
13
- import { existsSync } from 'fs';
14
- import * as path from 'path';
15
- import * as yaml from 'yaml';
16
- import { UserStoryIssueBuilder } from './user-story-issue-builder.js';
17
- import { CompletionCalculator } from './completion-calculator.js';
18
- import { DuplicateDetector } from './duplicate-detector.js';
19
- import { execFileNoThrow } from '../../specweave/lib/vendor/utils/execFileNoThrow.js';
20
- import { getGitHubAuthFromProject } from '../../specweave/lib/vendor/utils/auth-helpers.js';
21
- export class GitHubFeatureSync {
22
- constructor(client, specsDir, projectRoot) {
23
- // Cached default branch for the sync session (one API call per session)
24
- this.defaultBranch = null;
25
- this.client = client;
26
- this.specsDir = specsDir;
27
- this.projectRoot = projectRoot;
28
- this.calculator = new CompletionCalculator(projectRoot);
29
- // Get token from .env for gh CLI passthrough
30
- this.token = getGitHubAuthFromProject(projectRoot).token;
31
- }
32
- /**
33
- * Detect the default branch from the GitHub API.
34
- * Caches the result per sync session to avoid repeated API calls.
35
- * Falls back to 'main' if API call fails.
36
- */
37
- async detectDefaultBranch() {
38
- if (this.defaultBranch) {
39
- return this.defaultBranch;
40
- }
41
- const owner = this.client.getOwner();
42
- const repo = this.client.getRepo();
43
- const result = await execFileNoThrow('gh', [
44
- 'api', `repos/${owner}/${repo}`, '--jq', '.default_branch'
45
- ], { env: this.getGhEnv() });
46
- if (result.exitCode === 0 && result.stdout.trim()) {
47
- this.defaultBranch = result.stdout.trim();
48
- }
49
- else {
50
- console.warn(` ⚠️ Failed to detect default branch, falling back to 'main': ${result.stderr}`);
51
- this.defaultBranch = 'main';
52
- }
53
- return this.defaultBranch;
54
- }
55
- /**
56
- * Get environment object with GH_TOKEN for gh CLI commands.
57
- * This ensures the token from .env is passed to all gh operations,
58
- * regardless of `gh auth` status.
59
- */
60
- getGhEnv() {
61
- return this.token
62
- ? { ...process.env, GH_TOKEN: this.token }
63
- : process.env;
64
- }
65
- /**
66
- * Get the repo slug (owner/repo) for `-R` flag in gh CLI commands.
67
- * CRITICAL: All gh issue commands MUST use `-R` to target the correct repo,
68
- * not the repo inferred from the current working directory.
69
- */
70
- getRepoSlug() {
71
- return `${this.client.getOwner()}/${this.client.getRepo()}`;
72
- }
73
- /**
74
- * Sync Feature folder to GitHub (Milestone + User Story Issues)
75
- *
76
- * Process:
77
- * 1. Create/update GitHub Milestone for Feature
78
- * 2. Find all us-*.md files across all projects
79
- * 3. Create/update GitHub Issue for EACH user story
80
- * 4. Update frontmatter with GitHub issue links
81
- */
82
- async syncFeatureToGitHub(featureId, projectName) {
83
- // SYNC LOCK CHECK: Prevent concurrent/rapid syncs of the same feature+repo
84
- // Root cause: Two sync paths (task completion + status change) can fire simultaneously
85
- // Result: Duplicate GitHub comments due to race condition
86
- // Key includes owner/repo so cross-project syncs (same featureId, different repos) aren't throttled
87
- const lockKey = `${this.client.getOwner()}/${this.client.getRepo()}:${featureId}`;
88
- const now = Date.now();
89
- const lastSync = GitHubFeatureSync.syncLocks.get(lockKey);
90
- if (lastSync && (now - lastSync) < GitHubFeatureSync.LOCK_DURATION_MS) {
91
- const secondsRemaining = Math.ceil((GitHubFeatureSync.LOCK_DURATION_MS - (now - lastSync)) / 1000);
92
- console.log(`\n⏭️ Sync already in progress for ${featureId} (or completed ${Math.floor((now - lastSync) / 1000)}s ago)`);
93
- console.log(` ℹ️ Sync will be available in ${secondsRemaining}s to prevent duplicates`);
94
- console.log(` 💡 This prevents race conditions between task completion and status change syncs`);
95
- // Return placeholder result (sync was skipped, not failed)
96
- return {
97
- milestoneNumber: 0,
98
- milestoneUrl: '',
99
- issuesCreated: 0,
100
- issuesUpdated: 0,
101
- userStoriesProcessed: 0
102
- };
103
- }
104
- // Acquire lock
105
- GitHubFeatureSync.syncLocks.set(lockKey, now);
106
- console.log(`\n🔄 Syncing Feature ${featureId} to GitHub...`);
107
- // 1. Load Feature FEATURE.md
108
- const featureFolder = await this.findFeatureFolder(featureId, projectName);
109
- if (!featureFolder) {
110
- console.log(` ⚠️ Feature ${featureId} not found in ${this.specsDir} (no living docs and auto-create failed)`);
111
- console.log(` 💡 Run /sw:sync-docs or /sw:living-docs to generate living docs first`);
112
- return {
113
- milestoneNumber: 0,
114
- milestoneUrl: '',
115
- issuesCreated: 0,
116
- issuesUpdated: 0,
117
- userStoriesProcessed: 0,
118
- };
119
- }
120
- const featurePath = path.join(featureFolder, 'FEATURE.md');
121
- const featureData = await this.parseFeatureMd(featurePath);
122
- console.log(` 📦 Feature: ${featureData.title}`);
123
- console.log(` 📊 Status: ${featureData.status}`);
124
- // 2. Create or update GitHub Milestone
125
- let milestoneNumber = featureData.external_tools?.github?.id;
126
- let milestoneUrl = featureData.external_tools?.github?.url;
127
- if (!milestoneNumber) {
128
- console.log(` 🚀 Creating GitHub Milestone...`);
129
- const milestone = await this.createMilestone(featureData);
130
- milestoneNumber = milestone.number;
131
- milestoneUrl = milestone.url;
132
- console.log(` ✅ Created Milestone #${milestoneNumber}`);
133
- // Update FEATURE.md with Milestone ID
134
- await this.updateFeatureMd(featurePath, {
135
- type: 'milestone',
136
- id: milestoneNumber,
137
- url: milestoneUrl,
138
- });
139
- }
140
- else {
141
- console.log(` ♻️ Using existing Milestone #${milestoneNumber}`);
142
- milestoneUrl = featureData.external_tools?.github?.url || milestoneUrl;
143
- }
144
- // 3. Find User Story files (scoped to projectName in cross-project mode)
145
- const userStories = await this.findUserStories(featureId, projectName);
146
- console.log(`\n 📝 Found ${userStories.length} User Stories to sync...`);
147
- // 4. Sync each User Story as GitHub Issue
148
- let issuesCreated = 0;
149
- let issuesUpdated = 0;
150
- // Detect default branch once per sync session
151
- const detectedBranch = await this.detectDefaultBranch();
152
- console.log(` 🌿 Default branch: ${detectedBranch}`);
153
- for (const userStory of userStories) {
154
- console.log(`\n 🔹 Processing ${userStory.id}: ${userStory.title}`);
155
- // Build issue content using UserStoryIssueBuilder
156
- const repoInfo = {
157
- owner: this.client.getOwner(),
158
- repo: this.client.getRepo(),
159
- branch: detectedBranch
160
- };
161
- const builder = new UserStoryIssueBuilder(userStory.filePath, this.projectRoot, featureId, repoInfo);
162
- const issueContent = await builder.buildIssueBody();
163
- // ✅ FIX: Add status to issue content for sync
164
- issueContent.status = userStory.status;
165
- // ✅ DUPLICATE PROTECTION WITH GLOBAL DETECTOR
166
- // Uses proven 3-phase protection: Detection → Verification → Reflection
167
- //
168
- // WHY THIS MATTERS:
169
- // - Previous implementation had race conditions (--limit 1, eventual consistency)
170
- // - DuplicateDetector handles all edge cases automatically
171
- // - Auto-closes duplicates if they slip through
172
- //
173
- // @see .specweave/increments/0047-us-task-linkage/reports/DUPLICATE-GITHUB-ISSUES-ROOT-CAUSE.md
174
- let issueNumber;
175
- let wasUpdated = false;
176
- // Check 1: User Story frontmatter has issue number
177
- if (userStory.existingIssue) {
178
- console.log(` ♻️ Issue #${userStory.existingIssue} exists in frontmatter`);
179
- try {
180
- // Verify issue still exists on GitHub
181
- await this.client.getIssue(userStory.existingIssue);
182
- // Issue exists, update it with verification
183
- await this.updateUserStoryIssue(userStory.existingIssue, issueContent, userStory.filePath);
184
- issuesUpdated++;
185
- console.log(` ✅ Updated Issue #${userStory.existingIssue}`);
186
- continue;
187
- }
188
- catch (err) {
189
- // Issue deleted on GitHub, fall through to create new
190
- console.log(` ⚠️ Issue #${userStory.existingIssue} deleted on GitHub, creating new`);
191
- }
192
- }
193
- // Check 2 & 3: Use DuplicateDetector for robust duplicate prevention
194
- // This handles:
195
- // - Search with proper limits (not --limit 1)
196
- // - Post-create verification
197
- // - Auto-close duplicates
198
- // - Eventual consistency race conditions
199
- const titlePattern = `[${featureId}][${userStory.id}]`;
200
- const milestoneTitle = `${featureData.id}: ${featureData.title}`;
201
- console.log(` 🛡️ Using DuplicateDetector (pattern: ${titlePattern})`);
202
- const result = await DuplicateDetector.createWithProtection({
203
- title: issueContent.title,
204
- body: issueContent.body,
205
- titlePattern,
206
- incrementId: userStory.id,
207
- labels: issueContent.labels,
208
- milestone: milestoneTitle,
209
- repo: `${this.client.getOwner()}/${this.client.getRepo()}`
210
- });
211
- issueNumber = result.issue.number;
212
- // Log duplicate protection results
213
- if (result.wasReused) {
214
- console.log(` ♻️ Reused existing issue #${issueNumber} (duplicate prevented!)`);
215
- wasUpdated = true;
216
- }
217
- else {
218
- console.log(` ✅ Created issue #${issueNumber}`);
219
- }
220
- if (result.duplicatesFound > 0) {
221
- console.log(` 🛡️ Duplicates detected: ${result.duplicatesFound}, auto-closed: ${result.duplicatesClosed}`);
222
- }
223
- // Update User Story frontmatter with issue link
224
- await this.updateUserStoryFrontmatter(userStory.filePath, issueNumber);
225
- // v1.0.240 FIX: Backfill increment metadata.json for reconciler compatibility
226
- // Previously only US frontmatter was updated, leaving metadata.json empty.
227
- // This caused reconciler and closure flows to miss these issues.
228
- await this.backfillIncrementMetadata(featureId, userStory.id, issueNumber, milestoneNumber);
229
- // ✅ CRITICAL FIX (2025-11-24): Check completion for ALL issues (new AND reused)
230
- // BUG: Previously only checked completion for reused issues, not new ones
231
- // RESULT: New issues stayed OPEN even if status:complete
232
- //
233
- // Now we always call updateUserStoryIssue() which:
234
- // 1. Calculates ACTUAL completion from [x] checkboxes
235
- // 2. Closes issue if all ACs and tasks verified complete
236
- // 3. Updates status labels automatically
237
- await this.updateUserStoryIssue(issueNumber, issueContent, userStory.filePath);
238
- // Update completion tracking
239
- if (result.wasReused) {
240
- issuesUpdated++;
241
- }
242
- else {
243
- issuesCreated++;
244
- }
245
- }
246
- console.log(`\n✅ Feature sync complete!`);
247
- console.log(` Milestone: ${milestoneUrl}`);
248
- console.log(` User Stories: ${userStories.length}`);
249
- console.log(` Issues created: ${issuesCreated}`);
250
- console.log(` Issues updated: ${issuesUpdated}`);
251
- return {
252
- milestoneNumber: milestoneNumber,
253
- milestoneUrl: milestoneUrl,
254
- issuesCreated,
255
- issuesUpdated,
256
- userStoriesProcessed: userStories.length,
257
- };
258
- }
259
- /**
260
- * Find Feature folder in specs directory.
261
- * Falls back to auto-creating from increment spec.md if living docs don't exist.
262
- */
263
- async findFeatureFolder(featureId, projectName) {
264
- // v5.0.0+: NO _features folder - features live in project folders
265
- // In cross-project mode, look in the specific project folder first
266
- if (projectName) {
267
- const projectSpecific = path.join(this.specsDir, projectName, featureId);
268
- if (existsSync(projectSpecific) && existsSync(path.join(projectSpecific, 'FEATURE.md'))) {
269
- return projectSpecific;
270
- }
271
- }
272
- // Search all project folders for the feature
273
- const projectFolders = await this.findProjectFolders();
274
- for (const projectFolder of projectFolders) {
275
- const featureFolder = path.join(projectFolder, featureId);
276
- if (existsSync(featureFolder) && existsSync(path.join(featureFolder, 'FEATURE.md'))) {
277
- return featureFolder;
278
- }
279
- }
280
- // Legacy fallback: Check _features folder (for brownfield migration)
281
- const legacyFolder = path.join(this.specsDir, '_features', featureId);
282
- if (existsSync(legacyFolder)) {
283
- console.log(` ⚠️ Found feature in legacy _features folder - consider migrating to project folder`);
284
- return legacyFolder;
285
- }
286
- // FALLBACK (v1.0.302): Auto-create feature folder from increment spec.md
287
- // Most increments never get living docs created, so sync silently fails.
288
- // This makes sync self-healing by creating minimal living docs on-the-fly.
289
- console.log(` ℹ️ Feature folder not found in living docs, attempting auto-create from spec.md...`);
290
- const created = await this.createFeatureFolderFromSpec(featureId, projectFolders);
291
- if (created) {
292
- return created;
293
- }
294
- return null;
295
- }
296
- /**
297
- * Find the increment folder for a given feature ID.
298
- * Converts FS-271 -> finds 0271-xxx-xxx/ in .specweave/increments/
299
- */
300
- async findIncrementFolder(featureId) {
301
- const numMatch = featureId.match(/FS-0*(\d+)E?/i);
302
- if (!numMatch)
303
- return null;
304
- const num = parseInt(numMatch[1], 10);
305
- const paddedNum = String(num).padStart(4, '0');
306
- const incrementsDir = path.join(this.projectRoot, '.specweave/increments');
307
- if (!existsSync(incrementsDir))
308
- return null;
309
- const entries = await readdir(incrementsDir);
310
- const match = entries.find(e => e.startsWith(paddedNum + '-'));
311
- if (!match)
312
- return null;
313
- return path.join(incrementsDir, match);
314
- }
315
- /**
316
- * Auto-create a feature folder (FEATURE.md + us-NNN.md files) from an
317
- * increment's spec.md. This enables GitHub sync even when the living docs
318
- * builder hasn't run yet.
319
- */
320
- async createFeatureFolderFromSpec(featureId, projectFolders) {
321
- try {
322
- const incrementFolder = await this.findIncrementFolder(featureId);
323
- if (!incrementFolder) {
324
- console.log(` ⚠️ No increment folder found for ${featureId}`);
325
- return null;
326
- }
327
- const specPath = path.join(incrementFolder, 'spec.md');
328
- if (!existsSync(specPath)) {
329
- console.log(` ⚠️ No spec.md found in ${path.basename(incrementFolder)}`);
330
- return null;
331
- }
332
- const specContent = await readFile(specPath, 'utf-8');
333
- // Parse frontmatter (optional — many specs don't have YAML frontmatter)
334
- const fmMatch = specContent.match(/^---\n([\s\S]*?)\n---/);
335
- let frontmatter = {};
336
- if (fmMatch) {
337
- try {
338
- frontmatter = yaml.parse(fmMatch[1]) || {};
339
- }
340
- catch {
341
- // Invalid YAML — proceed without frontmatter
342
- }
343
- }
344
- const incrementBasename = path.basename(incrementFolder);
345
- const title = frontmatter.title
346
- || specContent.match(/^#\s+(.+)/m)?.[1]?.trim()
347
- || incrementBasename.replace(/^\d+-/, '').replace(/-/g, ' ');
348
- const status = frontmatter.status || 'active';
349
- const priority = frontmatter.priority || 'P2';
350
- const created = frontmatter.created || new Date().toISOString().split('T')[0];
351
- const incrementId = frontmatter.increment || incrementBasename;
352
- // Determine target project folder from spec.md user stories or first available
353
- let targetProjectFolder = projectFolders[0]; // Default: first project folder
354
- const projectMatch = specContent.match(/\*\*Project\*\*:\s*(\S+)/);
355
- if (projectMatch) {
356
- const projectName = projectMatch[1];
357
- const matchingFolder = projectFolders.find(f => path.basename(f) === projectName);
358
- if (matchingFolder) {
359
- targetProjectFolder = matchingFolder;
360
- }
361
- }
362
- if (!targetProjectFolder) {
363
- console.log(` ⚠️ No project folder available for feature creation`);
364
- return null;
365
- }
366
- // Create feature folder
367
- const featureFolder = path.join(targetProjectFolder, featureId);
368
- await mkdir(featureFolder, { recursive: true });
369
- // Parse user stories from spec.md body
370
- const userStories = this.parseUserStoriesFromSpec(specContent, featureId);
371
- // Create FEATURE.md
372
- const featureMd = this.buildFeatureMd(featureId, title, status, priority, created, incrementId, userStories);
373
- await writeFile(path.join(featureFolder, 'FEATURE.md'), featureMd, 'utf-8');
374
- // Create us-NNN.md files
375
- for (const us of userStories) {
376
- const usFilename = `us-${us.id.replace('US-', '').padStart(3, '0')}-${this.slugify(us.title)}.md`;
377
- const usMd = this.buildUserStoryMd(us, featureId, incrementId);
378
- await writeFile(path.join(featureFolder, usFilename), usMd, 'utf-8');
379
- }
380
- console.log(` ✅ Auto-created feature folder with ${userStories.length} user stories`);
381
- return featureFolder;
382
- }
383
- catch (error) {
384
- console.log(` ⚠️ Failed to auto-create feature folder: ${error.message}`);
385
- return null;
386
- }
387
- }
388
- /**
389
- * Parse user stories from spec.md markdown content.
390
- */
391
- parseUserStoriesFromSpec(specContent, featureId) {
392
- const stories = [];
393
- // Match ### US-NNN: Title (Priority) sections
394
- const usRegex = /### (US-\d+):\s*(.+?)(?:\s*\((P\d)\))?\s*\n([\s\S]*?)(?=\n### US-|\n## |\n---\s*\n### US-|$)/g;
395
- let match;
396
- while ((match = usRegex.exec(specContent)) !== null) {
397
- const usId = match[1];
398
- const rawTitle = match[2].trim();
399
- const priority = match[3] || 'P2';
400
- const body = match[4];
401
- // Skip template placeholders
402
- if (rawTitle === '[Story Title]')
403
- continue;
404
- // Extract project
405
- const projectMatch = body.match(/\*\*Project\*\*:\s*(\S+)/);
406
- const project = projectMatch ? projectMatch[1] : 'specweave';
407
- // Extract story text (As a... I want... So that...)
408
- const storyMatch = body.match(/\*\*As a\*\*\s+([\s\S]*?)(?=\n\*\*Acceptance Criteria|$)/);
409
- const storyText = storyMatch ? storyMatch[1].trim() : '';
410
- // Extract acceptance criteria
411
- const acs = [];
412
- const acRegex = /- \[[ x]\] \*\*AC-[^*]+\*\*:\s*(.+)/g;
413
- let acMatch;
414
- while ((acMatch = acRegex.exec(body)) !== null) {
415
- acs.push(acMatch[0]);
416
- }
417
- // Determine status from ACs
418
- const totalAcs = acs.length;
419
- const completedAcs = acs.filter(ac => ac.startsWith('- [x]')).length;
420
- let status = 'not-started';
421
- if (totalAcs > 0 && completedAcs === totalAcs)
422
- status = 'complete';
423
- else if (completedAcs > 0)
424
- status = 'active';
425
- stories.push({
426
- id: usId,
427
- title: rawTitle,
428
- priority,
429
- project,
430
- storyText,
431
- acceptanceCriteria: acs,
432
- status,
433
- });
434
- }
435
- return stories;
436
- }
437
- /**
438
- * Build FEATURE.md content matching the living docs format.
439
- */
440
- buildFeatureMd(featureId, title, status, priority, created, incrementId, userStories) {
441
- const now = new Date().toISOString().split('T')[0];
442
- const mappedStatus = status === 'planned' ? 'planning'
443
- : status === 'completed' ? 'complete'
444
- : status === 'active' ? 'active'
445
- : 'planning';
446
- const fm = {
447
- id: featureId,
448
- title,
449
- type: 'feature',
450
- status: mappedStatus,
451
- priority,
452
- created,
453
- lastUpdated: now,
454
- tldr: title,
455
- complexity: 'medium',
456
- auto_created: true,
457
- };
458
- const yamlFm = yaml.stringify(fm);
459
- let body = `\n# ${title}\n\n## TL;DR\n\n**What**: ${title}\n**Status**: ${mappedStatus} | **Priority**: ${priority}\n**User Stories**: ${userStories.length}\n\n## Overview\n\n${title}\n\n## Implementation History\n\n| Increment | Status |\n|-----------|--------|\n| [${incrementId}](../../../../../increments/${incrementId}/spec.md) | ${mappedStatus} |\n\n## User Stories\n`;
460
- for (const us of userStories) {
461
- body += `\n- [${us.id}: ${us.title}](./${us.id.toLowerCase()}.md)`;
462
- }
463
- return `---\n${yamlFm}---${body}\n`;
464
- }
465
- /**
466
- * Build us-NNN.md content matching the living docs format.
467
- */
468
- buildUserStoryMd(us, featureId, incrementId) {
469
- const now = new Date().toISOString().split('T')[0];
470
- const fm = {
471
- id: us.id,
472
- feature: featureId,
473
- title: us.title,
474
- status: us.status,
475
- priority: us.priority,
476
- created: now,
477
- project: us.project,
478
- };
479
- const yamlFm = yaml.stringify(fm);
480
- let body = `\n# ${us.id}: ${us.title}\n\n**Feature**: [${featureId}](./FEATURE.md)\n\n`;
481
- if (us.storyText) {
482
- body += `${us.storyText}\n\n`;
483
- }
484
- body += `---\n\n## Acceptance Criteria\n\n`;
485
- if (us.acceptanceCriteria.length > 0) {
486
- body += us.acceptanceCriteria.join('\n') + '\n';
487
- }
488
- else {
489
- body += `- [ ] **AC-${us.id.replace('US-', 'US')}-01**: Pending specification\n`;
490
- }
491
- body += `\n---\n\n## Implementation\n\n**Increment**: [${incrementId}](../../../../../increments/${incrementId}/spec.md)\n`;
492
- return `---\n${yamlFm}---${body}\n`;
493
- }
494
- /**
495
- * Convert a title to a URL-safe slug.
496
- */
497
- slugify(text) {
498
- return text
499
- .toLowerCase()
500
- .replace(/[^a-z0-9]+/g, '-')
501
- .replace(/^-+|-+$/g, '')
502
- .substring(0, 60);
503
- }
504
- /**
505
- * Backfill increment metadata.json with GitHub issue reference (v1.0.240)
506
- *
507
- * Writes in BOTH formats:
508
- * - OLD format (metadata.github.issues[]) for backward compatibility
509
- * - NEW format (metadata.externalLinks.github) for reconciler/closure flows
510
- * Non-blocking — errors are logged but don't halt sync.
511
- */
512
- async backfillIncrementMetadata(featureId, userStoryId, issueNumber, milestoneNumber) {
513
- try {
514
- // Derive increment ID from feature ID (reverse of deriveFeatureId)
515
- const featureNumMatch = featureId.match(/FS-0*(\d+)E?/i);
516
- if (!featureNumMatch)
517
- return;
518
- const num = parseInt(featureNumMatch[1], 10);
519
- const paddedNum = String(num).padStart(4, '0');
520
- // Find the increment directory
521
- const incrementsDir = path.join(this.projectRoot, '.specweave/increments');
522
- if (!existsSync(incrementsDir))
523
- return;
524
- const entries = await readdir(incrementsDir);
525
- const match = entries.find(e => e.startsWith(paddedNum + '-'));
526
- if (!match)
527
- return;
528
- const metadataPath = path.join(incrementsDir, match, 'metadata.json');
529
- if (!existsSync(metadataPath))
530
- return;
531
- const metadata = JSON.parse(await readFile(metadataPath, 'utf-8'));
532
- const issueUrl = `https://github.com/${this.client.getOwner()}/${this.client.getRepo()}/issues/${issueNumber}`;
533
- let changed = false;
534
- // Write in OLD format for backward compatibility
535
- if (!metadata.github)
536
- metadata.github = {};
537
- if (!metadata.github.issues)
538
- metadata.github.issues = [];
539
- const existsOld = metadata.github.issues.some((i) => i.userStory === userStoryId);
540
- if (!existsOld) {
541
- metadata.github.issues.push({
542
- userStory: userStoryId,
543
- number: issueNumber,
544
- url: issueUrl,
545
- createdAt: new Date().toISOString(),
546
- });
547
- metadata.github.lastSync = new Date().toISOString();
548
- changed = true;
549
- }
550
- // Write in NEW format (externalLinks.github) for reconciler/closure flows
551
- if (!metadata.externalLinks)
552
- metadata.externalLinks = {};
553
- if (!metadata.externalLinks.github)
554
- metadata.externalLinks.github = {};
555
- if (!metadata.externalLinks.github.issues)
556
- metadata.externalLinks.github.issues = {};
557
- const existsNew = metadata.externalLinks.github.issues[userStoryId];
558
- if (!existsNew) {
559
- metadata.externalLinks.github.issues[userStoryId] = {
560
- issueNumber,
561
- issueUrl,
562
- status: 'active',
563
- };
564
- changed = true;
565
- }
566
- // Always set milestone and syncedAt on the new format
567
- if (milestoneNumber && metadata.externalLinks.github.milestone !== milestoneNumber) {
568
- metadata.externalLinks.github.milestone = milestoneNumber;
569
- changed = true;
570
- }
571
- if (changed) {
572
- metadata.externalLinks.github.syncedAt = new Date().toISOString();
573
- await writeFile(metadataPath, JSON.stringify(metadata, null, 2) + '\n', 'utf-8');
574
- console.log(` 📝 Backfilled metadata.json for ${userStoryId} (dual-format)`);
575
- }
576
- }
577
- catch (error) {
578
- // Non-blocking
579
- console.warn(` ⚠️ Metadata backfill failed: ${error.message}`);
580
- }
581
- }
582
- /**
583
- * Parse FEATURE.md frontmatter
584
- */
585
- async parseFeatureMd(featurePath) {
586
- const content = await readFile(featurePath, 'utf-8');
587
- const match = content.match(/^---\n([\s\S]*?)\n---/);
588
- if (!match) {
589
- throw new Error(`${featurePath}: Missing YAML frontmatter`);
590
- }
591
- return yaml.parse(match[1]);
592
- }
593
- /**
594
- * Find all User Story files for this feature across all projects
595
- */
596
- async findUserStories(featureId, projectName) {
597
- const userStories = [];
598
- // In cross-project mode, only look in the target project's folder
599
- let projectFolders;
600
- if (projectName) {
601
- const projectSpecific = path.join(this.specsDir, projectName);
602
- projectFolders = existsSync(projectSpecific) ? [projectSpecific] : [];
603
- }
604
- else {
605
- projectFolders = await this.findProjectFolders();
606
- }
607
- for (const projectFolder of projectFolders) {
608
- const featureSpecsFolder = path.join(projectFolder, featureId);
609
- if (!existsSync(featureSpecsFolder)) {
610
- continue; // Feature not present in this project
611
- }
612
- // Read all us-*.md files
613
- const files = await readdir(featureSpecsFolder);
614
- const usFiles = files.filter((f) => f.startsWith('us-') && f.endsWith('.md'));
615
- for (const file of usFiles.sort()) {
616
- const filePath = path.join(featureSpecsFolder, file);
617
- const content = await readFile(filePath, 'utf-8');
618
- const match = content.match(/^---\n([\s\S]*?)\n---/);
619
- if (!match) {
620
- console.warn(` ⚠️ ${file}: Missing frontmatter, skipping`);
621
- continue;
622
- }
623
- const frontmatter = yaml.parse(match[1]);
624
- const projectName = path.basename(projectFolder);
625
- userStories.push({
626
- id: frontmatter.id || file.match(/us-(\d+)/)?.[0]?.toUpperCase() || 'UNKNOWN',
627
- title: frontmatter.title || 'Untitled User Story',
628
- filePath,
629
- project: projectName,
630
- status: frontmatter.status || 'not-started',
631
- existingIssue: frontmatter.external?.github?.issue || null,
632
- });
633
- }
634
- }
635
- return userStories;
636
- }
637
- /**
638
- * Find all project folders (default, backend, frontend, etc.)
639
- */
640
- async findProjectFolders() {
641
- const folders = [];
642
- const specsRoot = this.specsDir;
643
- // Read all directories in specs root
644
- const entries = await readdir(specsRoot, { withFileTypes: true });
645
- for (const entry of entries) {
646
- if (entry.isDirectory() && !entry.name.startsWith('_')) {
647
- folders.push(path.join(specsRoot, entry.name));
648
- }
649
- }
650
- return folders;
651
- }
652
- /**
653
- * Create GitHub Milestone for Feature (with duplicate detection)
654
- */
655
- async createMilestone(featureData) {
656
- const title = `${featureData.id}: ${featureData.title}`;
657
- // CRITICAL: Check if milestone already exists before creating
658
- // NOTE: Must use per_page=100 to handle repos with 30+ milestones (GitHub default is 30)
659
- // BUG FIX: Without pagination, milestone #31+ won't be found → false "not found" → HTTP 422 duplicate error
660
- // FIX (v1.0.302): Use explicit owner/repo from config, not :owner/:repo which resolves from git remote
661
- const owner = this.client.getOwner();
662
- const repo = this.client.getRepo();
663
- const existingResult = await execFileNoThrow('gh', [
664
- 'api',
665
- `repos/${owner}/${repo}/milestones?per_page=100&state=all`,
666
- '--paginate',
667
- '--jq',
668
- `.[] | select(.title == "${title}") | {number, html_url}`,
669
- ], { env: this.getGhEnv() });
670
- // DEBUG: Log detection result
671
- console.log(` 🔍 Milestone detection: exitCode=${existingResult.exitCode}, stdout length=${existingResult.stdout.length}`);
672
- if (existingResult.exitCode !== 0) {
673
- console.log(` ⚠️ Detection failed: ${existingResult.stderr}`);
674
- }
675
- if (existingResult.exitCode === 0 && existingResult.stdout.trim()) {
676
- const existing = JSON.parse(existingResult.stdout);
677
- console.log(` ♻️ Reusing existing Milestone #${existing.number}`);
678
- return {
679
- number: existing.number,
680
- url: existing.html_url,
681
- };
682
- }
683
- console.log(` ℹ️ No existing milestone found, creating new one...`);
684
- // Milestone doesn't exist, create new one
685
- const description = `Feature ${featureData.id}\n\nStatus: ${featureData.status}\nCreated: ${featureData.created}`;
686
- const result = await execFileNoThrow('gh', [
687
- 'api',
688
- `repos/${owner}/${repo}/milestones`,
689
- '-X',
690
- 'POST',
691
- '-f',
692
- `title=${title}`,
693
- '-f',
694
- `description=${description}`,
695
- '-f',
696
- 'state=open',
697
- ], { env: this.getGhEnv() });
698
- if (result.exitCode !== 0) {
699
- throw new Error(`Failed to create Milestone: ${result.stderr || result.stdout}`);
700
- }
701
- const milestone = JSON.parse(result.stdout);
702
- return {
703
- number: milestone.number,
704
- url: milestone.html_url,
705
- };
706
- }
707
- /**
708
- * Create GitHub Issue for User Story with AC/Task Verification
709
- *
710
- * ✅ VERIFICATION GATE FIX:
711
- * - Verifies actual completion before closing
712
- * - Prevents premature closure on creation
713
- */
714
- async createUserStoryIssue(issueContent, milestoneTitle, userStoryPath) {
715
- // Step 0: Ensure all required labels exist in the target repo
716
- const repoSlug = `${this.client.getOwner()}/${this.client.getRepo()}`;
717
- for (const label of issueContent.labels) {
718
- await execFileNoThrow('gh', [
719
- 'label', 'create', label, '--repo', repoSlug,
720
- '--color', 'ededed', '--description', 'SpecWeave auto-label', '--force'
721
- ], { env: this.getGhEnv() });
722
- }
723
- // Step 1: Create issue (always open initially - gh CLI limitation)
724
- const result = await execFileNoThrow('gh', [
725
- 'issue',
726
- 'create',
727
- '--repo',
728
- repoSlug,
729
- '--title',
730
- issueContent.title,
731
- '--body',
732
- issueContent.body,
733
- '--milestone',
734
- milestoneTitle,
735
- ...issueContent.labels.flatMap((label) => ['--label', label]),
736
- ], { env: this.getGhEnv() });
737
- if (result.exitCode !== 0) {
738
- throw new Error(`Failed to create GitHub Issue: ${result.stderr || result.stdout}`);
739
- }
740
- // Parse issue number from output
741
- // Format: "https://github.com/owner/repo/issues/123"
742
- const match = result.stdout.match(/issues\/(\d+)/);
743
- if (!match) {
744
- throw new Error(`Failed to parse issue number from: ${result.stdout}`);
745
- }
746
- const issueNumber = parseInt(match[1], 10);
747
- // Step 2: VERIFICATION GATE - Close only if ACs/tasks verified
748
- const completion = await this.calculator.calculateCompletion(userStoryPath);
749
- if (completion.overallComplete) {
750
- // ✅ SAFE TO CLOSE - All ACs and tasks verified [x]
751
- await execFileNoThrow('gh', [
752
- 'issue',
753
- 'close',
754
- issueNumber.toString(),
755
- '--comment',
756
- this.calculator.buildCompletionComment(completion),
757
- '-R',
758
- repoSlug,
759
- ], { env: this.getGhEnv() });
760
- console.log(` ✅ Created and verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`);
761
- }
762
- else {
763
- // ⚠️ INCOMPLETE - Leave open with progress comment (with deduplication)
764
- // Note: For newly created issues, this is the first comment so deduplication
765
- // will likely pass through, but the logic is here for consistency
766
- await this.postProgressCommentIfChanged(issueNumber, completion);
767
- }
768
- return issueNumber;
769
- }
770
- /**
771
- * Update existing GitHub Issue for User Story with AC/Task Verification
772
- *
773
- * ✅ VERIFICATION GATE FIX:
774
- * - OLD: Closed based on frontmatter `status: complete`
775
- * - NEW: Closes ONLY if all ACs and tasks are [x]
776
- *
777
- * This prevents Issue #574 type bugs (premature closure)
778
- */
779
- async updateUserStoryIssue(issueNumber, issueContent, userStoryPath) {
780
- // Update issue body
781
- const repoSlug = this.getRepoSlug();
782
- await execFileNoThrow('gh', [
783
- 'issue',
784
- 'edit',
785
- issueNumber.toString(),
786
- '--title',
787
- issueContent.title,
788
- '--body',
789
- issueContent.body,
790
- '-R',
791
- repoSlug,
792
- ], { env: this.getGhEnv() });
793
- // ✅ VERIFICATION GATE: Calculate ACTUAL completion from checkboxes
794
- const completion = await this.calculator.calculateCompletion(userStoryPath);
795
- // Get current issue state
796
- const issueData = await this.client.getIssue(issueNumber);
797
- const currentlyClosed = issueData.state === 'closed';
798
- // DECISION LOGIC: Close/Reopen/Update based on VERIFIED completion
799
- if (completion.overallComplete) {
800
- // ✅ SAFE TO CLOSE - All ACs and tasks verified [x]
801
- if (!currentlyClosed) {
802
- // Idempotency check: skip completion comment if already posted by another sync path
803
- const lastComment = await this.client.getLastComment(issueNumber);
804
- const commentAlreadyPosted = lastComment?.body?.includes('✅ User Story Complete');
805
- if (commentAlreadyPosted) {
806
- // Close without duplicate comment
807
- await execFileNoThrow('gh', [
808
- 'issue',
809
- 'close',
810
- issueNumber.toString(),
811
- '-R',
812
- repoSlug,
813
- ], { env: this.getGhEnv() });
814
- console.log(` ✅ Verified complete (comment already posted): ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`);
815
- }
816
- else {
817
- await execFileNoThrow('gh', [
818
- 'issue',
819
- 'close',
820
- issueNumber.toString(),
821
- '--comment',
822
- this.calculator.buildCompletionComment(completion),
823
- '-R',
824
- repoSlug,
825
- ], { env: this.getGhEnv() });
826
- console.log(` ✅ Verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`);
827
- }
828
- }
829
- }
830
- else {
831
- // ⚠️ INCOMPLETE - Keep open or reopen if needed
832
- if (currentlyClosed) {
833
- // Issue was closed prematurely - REOPEN
834
- await execFileNoThrow('gh', [
835
- 'issue',
836
- 'reopen',
837
- issueNumber.toString(),
838
- '--comment',
839
- this.calculator.buildReopenComment(completion, 'Work verification failed'),
840
- '-R',
841
- repoSlug,
842
- ], { env: this.getGhEnv() });
843
- console.log(` ⚠️ Reopened: ${completion.blockingAcs.length + completion.blockingTasks.length} items incomplete`);
844
- }
845
- else {
846
- // Update progress comment (with deduplication)
847
- await this.postProgressCommentIfChanged(issueNumber, completion);
848
- }
849
- }
850
- // **NEW (2025-11-24)**: Update status labels based on completion
851
- await this.updateStatusLabels(issueNumber, completion);
852
- }
853
- /**
854
- * Update status labels on GitHub issue based on completion state
855
- *
856
- * SMART LABEL MANAGEMENT:
857
- * - Only manages status:* labels (status:not_started, status:in-progress, status:completed)
858
- * - Preserves all other labels (priority, type, custom labels)
859
- * - Ensures exactly one status label is present
860
- */
861
- async updateStatusLabels(issueNumber, completion) {
862
- try {
863
- // Get current issue labels
864
- const issueData = await this.client.getIssue(issueNumber);
865
- const currentLabels = issueData.labels || [];
866
- // Separate status labels from other labels
867
- const statusLabels = currentLabels.filter((label) => label.startsWith('status:'));
868
- const otherLabels = currentLabels.filter((label) => !label.startsWith('status:'));
869
- // Determine correct status label based on completion
870
- // NOTE: Label names must match repository labels exactly
871
- let newStatusLabel;
872
- if (completion.overallComplete) {
873
- newStatusLabel = 'status:complete'; // Repository uses "complete" not "completed"
874
- }
875
- else if (completion.acsPercentage > 0 || completion.tasksPercentage > 0) {
876
- newStatusLabel = 'status:active'; // Repository uses "active" not "in-progress"
877
- }
878
- else if (
879
- // v0.35.1 FIX: For external-origin USs without ACs/tasks, use frontmatter status
880
- // This fixes issue #889 where external USs always showed "not_started"
881
- (completion.acsTotal === 0 || completion.acsTotal === undefined) &&
882
- (completion.tasksTotal === 0 || completion.tasksTotal === undefined) &&
883
- completion.frontmatterStatus) {
884
- // Map frontmatter status to GitHub label
885
- switch (completion.frontmatterStatus) {
886
- case 'complete':
887
- case 'completed':
888
- newStatusLabel = 'status:complete';
889
- break;
890
- case 'active':
891
- case 'in-progress':
892
- newStatusLabel = 'status:active';
893
- break;
894
- case 'planning':
895
- case 'not-started':
896
- default:
897
- newStatusLabel = 'status:not_started';
898
- }
899
- console.log(` ℹ️ Using frontmatter status (no ACs/tasks): ${completion.frontmatterStatus} → ${newStatusLabel}`);
900
- }
901
- else {
902
- newStatusLabel = 'status:not_started';
903
- }
904
- // Check if update needed
905
- const needsUpdate = statusLabels.length !== 1 || !statusLabels.includes(newStatusLabel);
906
- if (!needsUpdate) {
907
- return; // Status label already correct
908
- }
909
- // Update labels using gh CLI
910
- // Strategy: Remove old status labels first (if any), then add new one
911
- // Step 1: Remove old status labels (only if they exist)
912
- if (statusLabels.length > 0) {
913
- await execFileNoThrow('gh', [
914
- 'issue',
915
- 'edit',
916
- issueNumber.toString(),
917
- '-R', this.getRepoSlug(),
918
- '--remove-label',
919
- ...statusLabels,
920
- ], { env: this.getGhEnv() });
921
- }
922
- // Step 2: Add new status label
923
- const result = await execFileNoThrow('gh', [
924
- 'issue',
925
- 'edit',
926
- issueNumber.toString(),
927
- '-R', this.getRepoSlug(),
928
- '--add-label',
929
- newStatusLabel,
930
- ], { env: this.getGhEnv() });
931
- if (result.exitCode === 0) {
932
- console.log(` 🏷️ Updated label: ${newStatusLabel}`);
933
- }
934
- else {
935
- console.warn(` ⚠️ Failed to add label ${newStatusLabel}: ${result.stderr}`);
936
- }
937
- // Step 3: Auto-close issue when status:complete and issue still OPEN
938
- // This ensures closure happens atomically with the label update,
939
- // preventing issues like #1198 where label is applied but issue stays open
940
- if (newStatusLabel === 'status:complete' && issueData.state.toLowerCase() !== 'closed') {
941
- try {
942
- // Re-fetch issue state to avoid race with updateUserStoryIssue close
943
- const freshIssueData = await this.client.getIssue(issueNumber);
944
- if (freshIssueData.state.toLowerCase() === 'closed') {
945
- console.log(` ⏭️ Issue #${issueNumber} already closed (skipping duplicate close)`);
946
- }
947
- else {
948
- // Idempotency check: skip completion comment if already posted
949
- const lastComment = await this.client.getLastComment(issueNumber);
950
- if (lastComment?.body?.includes('✅ User Story Complete')) {
951
- // Comment already exists — close without posting duplicate
952
- await execFileNoThrow('gh', [
953
- 'issue',
954
- 'close',
955
- issueNumber.toString(),
956
- '-R', this.getRepoSlug(),
957
- ], { env: this.getGhEnv() });
958
- console.log(` ✅ Auto-closed issue #${issueNumber} (comment already posted)`);
959
- }
960
- else {
961
- const completionComment = this.calculator.buildCompletionComment(completion);
962
- await execFileNoThrow('gh', [
963
- 'issue',
964
- 'close',
965
- issueNumber.toString(),
966
- '-R', this.getRepoSlug(),
967
- '--comment',
968
- completionComment,
969
- ], { env: this.getGhEnv() });
970
- console.log(` ✅ Auto-closed issue #${issueNumber} (status:complete)`);
971
- }
972
- }
973
- }
974
- catch (closeError) {
975
- // Non-blocking: close failure shouldn't break sync
976
- console.warn(` ⚠️ Failed to auto-close issue #${issueNumber}: ${closeError.message}`);
977
- }
978
- }
979
- }
980
- catch (error) {
981
- // Non-blocking: Label update failure shouldn't break sync
982
- console.warn(` ⚠️ Failed to update status labels: ${error.message}`);
983
- }
984
- }
985
- /**
986
- * Post progress comment only if it differs from the last comment
987
- *
988
- * DEDUPLICATION FIX (2025-11-24):
989
- * - Prevents posting identical consecutive comments
990
- * - Fetches last comment from issue
991
- * - Compares content (ignoring timestamps)
992
- * - Only posts if progress has changed
993
- *
994
- * Root Cause: updateUserStoryIssue() was posting progress comments on EVERY sync,
995
- * even when progress hadn't changed, causing 4+ duplicate comments.
996
- *
997
- * @param issueNumber - GitHub issue number
998
- * @param completion - Completion status with AC/task metrics
999
- */
1000
- async postProgressCommentIfChanged(issueNumber, completion) {
1001
- try {
1002
- // 1. Fetch last comment from the issue
1003
- const repoSlug = this.getRepoSlug();
1004
- const commentsResult = await execFileNoThrow('gh', [
1005
- 'api',
1006
- `repos/${repoSlug}/issues/${issueNumber}/comments`,
1007
- '--jq',
1008
- '.[-1] | {body: .body, created_at: .created_at}', // Get last comment only
1009
- ], { env: this.getGhEnv() });
1010
- let lastCommentBody = '';
1011
- if (commentsResult.exitCode === 0 && commentsResult.stdout.trim()) {
1012
- try {
1013
- const lastComment = JSON.parse(commentsResult.stdout);
1014
- lastCommentBody = lastComment.body || '';
1015
- }
1016
- catch {
1017
- // No valid last comment, proceed with posting
1018
- }
1019
- }
1020
- // 2. Build new progress comment
1021
- const newCommentBody = this.calculator.buildProgressComment(completion);
1022
- // 3. Normalize both comments for comparison (remove timestamps, whitespace differences)
1023
- const normalizeComment = (text) => {
1024
- return text
1025
- .replace(/🤖 Auto-updated by SpecWeave AC Completion Gate/g, '')
1026
- .replace(/\s+/g, ' ')
1027
- .trim();
1028
- };
1029
- const normalizedLast = normalizeComment(lastCommentBody);
1030
- const normalizedNew = normalizeComment(newCommentBody);
1031
- // 4. Check if comments are identical (ignoring formatting differences)
1032
- if (normalizedLast === normalizedNew) {
1033
- console.log(` ⏭️ Progress unchanged (${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks) - skipping duplicate comment`);
1034
- return;
1035
- }
1036
- // 5. Post new comment only if progress has changed
1037
- await execFileNoThrow('gh', [
1038
- 'issue',
1039
- 'comment',
1040
- issueNumber.toString(),
1041
- '-R', repoSlug,
1042
- '--body',
1043
- newCommentBody,
1044
- ], { env: this.getGhEnv() });
1045
- console.log(` 📊 Progress: ${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks (updated)`);
1046
- }
1047
- catch (error) {
1048
- // Non-blocking: Log error but don't break sync
1049
- console.error(` ⚠️ Failed to check/post progress comment: ${error.message}`);
1050
- }
1051
- }
1052
- /**
1053
- * Update FEATURE.md with GitHub Milestone link
1054
- */
1055
- async updateFeatureMd(featurePath, milestone) {
1056
- const content = await readFile(featurePath, 'utf-8');
1057
- const match = content.match(/^---\n([\s\S]*?)\n---/);
1058
- if (!match) {
1059
- throw new Error(`${featurePath}: Missing YAML frontmatter`);
1060
- }
1061
- const frontmatter = yaml.parse(match[1]);
1062
- // Update external_tools.github
1063
- if (!frontmatter.external_tools) {
1064
- frontmatter.external_tools = {};
1065
- }
1066
- frontmatter.external_tools.github = milestone;
1067
- // Rebuild content
1068
- const newFrontmatter = yaml.stringify(frontmatter);
1069
- const bodyContent = content.slice(match[0].length);
1070
- const newContent = `---\n${newFrontmatter}---${bodyContent}`;
1071
- await writeFile(featurePath, newContent, 'utf-8');
1072
- }
1073
- /**
1074
- * Update User Story frontmatter with GitHub issue link
1075
- */
1076
- async updateUserStoryFrontmatter(userStoryPath, issueNumber) {
1077
- const content = await readFile(userStoryPath, 'utf-8');
1078
- const match = content.match(/^---\n([\s\S]*?)\n---/);
1079
- if (!match) {
1080
- throw new Error(`${userStoryPath}: Missing YAML frontmatter`);
1081
- }
1082
- const frontmatter = yaml.parse(match[1]);
1083
- // Update external_tools.github (consistent with JIRA/ADO write-back)
1084
- if (!frontmatter.external_tools) {
1085
- frontmatter.external_tools = {};
1086
- }
1087
- if (!frontmatter.external_tools.github) {
1088
- frontmatter.external_tools.github = {};
1089
- }
1090
- frontmatter.external_tools.github.issue = issueNumber;
1091
- frontmatter.external_tools.github.url = `https://github.com/${this.client.getOwner()}/${this.client.getRepo()}/issues/${issueNumber}`;
1092
- // Also keep legacy external.github for backwards compatibility
1093
- if (!frontmatter.external) {
1094
- frontmatter.external = {};
1095
- }
1096
- if (!frontmatter.external.github) {
1097
- frontmatter.external.github = {};
1098
- }
1099
- frontmatter.external.github.issue = issueNumber;
1100
- frontmatter.external.github.url = frontmatter.external_tools.github.url;
1101
- // Rebuild content
1102
- const newFrontmatter = yaml.stringify(frontmatter);
1103
- const bodyContent = content.slice(match[0].length);
1104
- const newContent = `---\n${newFrontmatter}---${bodyContent}`;
1105
- await writeFile(userStoryPath, newContent, 'utf-8');
1106
- }
1107
- }
1108
- // SYNC LOCK: Prevent concurrent syncs of the same feature
1109
- // Maps featureId → last sync timestamp
1110
- GitHubFeatureSync.syncLocks = new Map();
1111
- GitHubFeatureSync.LOCK_DURATION_MS = 30000; // 30 seconds
1112
- //# sourceMappingURL=github-feature-sync.js.map