specweave 0.32.0 → 0.32.3

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 (347) hide show
  1. package/CLAUDE.md +215 -2
  2. package/README.md +22 -0
  3. package/bin/specweave.js +52 -1
  4. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts +100 -0
  5. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts.map +1 -0
  6. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js +291 -0
  7. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js.map +1 -0
  8. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts +103 -0
  9. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts.map +1 -0
  10. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js +310 -0
  11. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js.map +1 -0
  12. package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts +126 -0
  13. package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts.map +1 -0
  14. package/dist/plugins/specweave-jira/lib/jira-permission-gate.js +207 -0
  15. package/dist/plugins/specweave-jira/lib/jira-permission-gate.js.map +1 -0
  16. package/dist/src/adapters/codex/README.md +1 -1
  17. package/dist/src/adapters/codex/adapter.js +1 -1
  18. package/dist/src/cli/commands/archive.d.ts +2 -0
  19. package/dist/src/cli/commands/archive.d.ts.map +1 -1
  20. package/dist/src/cli/commands/archive.js +33 -0
  21. package/dist/src/cli/commands/archive.js.map +1 -1
  22. package/dist/src/cli/commands/cache.d.ts +17 -0
  23. package/dist/src/cli/commands/cache.d.ts.map +1 -0
  24. package/dist/src/cli/commands/cache.js +126 -0
  25. package/dist/src/cli/commands/cache.js.map +1 -0
  26. package/dist/src/cli/commands/context.d.ts +92 -0
  27. package/dist/src/cli/commands/context.d.ts.map +1 -0
  28. package/dist/src/cli/commands/context.js +205 -0
  29. package/dist/src/cli/commands/context.js.map +1 -0
  30. package/dist/src/cli/commands/init.d.ts.map +1 -1
  31. package/dist/src/cli/commands/init.js +112 -70
  32. package/dist/src/cli/commands/init.js.map +1 -1
  33. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  34. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  35. package/dist/src/cli/commands/sync-spec-commits.js +1 -1
  36. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  37. package/dist/src/cli/commands/sync-specs.js +2 -2
  38. package/dist/src/cli/commands/sync-specs.js.map +1 -1
  39. package/dist/src/cli/helpers/github/increment-profile-selector.js +1 -1
  40. package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
  41. package/dist/src/cli/helpers/init/external-import.d.ts +3 -0
  42. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  43. package/dist/src/cli/helpers/init/external-import.js +17 -4
  44. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  45. package/dist/src/cli/helpers/init/index.d.ts +1 -0
  46. package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
  47. package/dist/src/cli/helpers/init/index.js +2 -0
  48. package/dist/src/cli/helpers/init/index.js.map +1 -1
  49. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +70 -0
  50. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -1
  51. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +214 -4
  52. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -1
  53. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +4 -0
  54. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -1
  55. package/dist/src/cli/helpers/init/living-docs-preflight.js +34 -3
  56. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  57. package/dist/src/cli/helpers/init/testing-config.d.ts +3 -0
  58. package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -1
  59. package/dist/src/cli/helpers/init/testing-config.js +9 -2
  60. package/dist/src/cli/helpers/init/testing-config.js.map +1 -1
  61. package/dist/src/cli/helpers/init/translation-config.d.ts +3 -0
  62. package/dist/src/cli/helpers/init/translation-config.d.ts.map +1 -1
  63. package/dist/src/cli/helpers/init/translation-config.js +21 -4
  64. package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
  65. package/dist/src/cli/helpers/init/wizard-navigation.d.ts +45 -0
  66. package/dist/src/cli/helpers/init/wizard-navigation.d.ts.map +1 -0
  67. package/dist/src/cli/helpers/init/wizard-navigation.js +97 -0
  68. package/dist/src/cli/helpers/init/wizard-navigation.js.map +1 -0
  69. package/dist/src/cli/workers/living-docs-worker.js +66 -1
  70. package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
  71. package/dist/src/config/types.d.ts +203 -1208
  72. package/dist/src/config/types.d.ts.map +1 -1
  73. package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -1
  74. package/dist/src/core/discrepancy/increment-generator.js +5 -2
  75. package/dist/src/core/discrepancy/increment-generator.js.map +1 -1
  76. package/dist/src/core/increment/duplicate-detector.js +2 -2
  77. package/dist/src/core/increment/duplicate-detector.js.map +1 -1
  78. package/dist/src/core/increment/increment-archiver.d.ts +49 -4
  79. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  80. package/dist/src/core/increment/increment-archiver.js +123 -22
  81. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  82. package/dist/src/core/increment/increment-status.js +2 -2
  83. package/dist/src/core/increment/increment-status.js.map +1 -1
  84. package/dist/src/core/increment/increment-utils.d.ts +150 -0
  85. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  86. package/dist/src/core/increment/increment-utils.js +216 -4
  87. package/dist/src/core/increment/increment-utils.js.map +1 -1
  88. package/dist/src/core/increment/metadata-validator.js +1 -1
  89. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  90. package/dist/src/core/living-docs/feature-archiver.d.ts +4 -0
  91. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  92. package/dist/src/core/living-docs/feature-archiver.js +32 -10
  93. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  94. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  95. package/dist/src/core/living-docs/feature-id-manager.js +8 -4
  96. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  97. package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts +38 -0
  98. package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts.map +1 -0
  99. package/dist/src/core/living-docs/governance/ecosystem-detector.js +325 -0
  100. package/dist/src/core/living-docs/governance/ecosystem-detector.js.map +1 -0
  101. package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts +74 -0
  102. package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts.map +1 -0
  103. package/dist/src/core/living-docs/governance/frontend-standards-parser.js +366 -0
  104. package/dist/src/core/living-docs/governance/frontend-standards-parser.js.map +1 -0
  105. package/dist/src/core/living-docs/governance/go-standards-parser.d.ts +64 -0
  106. package/dist/src/core/living-docs/governance/go-standards-parser.d.ts.map +1 -0
  107. package/dist/src/core/living-docs/governance/go-standards-parser.js +229 -0
  108. package/dist/src/core/living-docs/governance/go-standards-parser.js.map +1 -0
  109. package/dist/src/core/living-docs/governance/index.d.ts +50 -0
  110. package/dist/src/core/living-docs/governance/index.d.ts.map +1 -0
  111. package/dist/src/core/living-docs/governance/index.js +56 -0
  112. package/dist/src/core/living-docs/governance/index.js.map +1 -0
  113. package/dist/src/core/living-docs/governance/java-standards-parser.d.ts +89 -0
  114. package/dist/src/core/living-docs/governance/java-standards-parser.d.ts.map +1 -0
  115. package/dist/src/core/living-docs/governance/java-standards-parser.js +356 -0
  116. package/dist/src/core/living-docs/governance/java-standards-parser.js.map +1 -0
  117. package/dist/src/core/living-docs/governance/python-standards-parser.d.ts +83 -0
  118. package/dist/src/core/living-docs/governance/python-standards-parser.d.ts.map +1 -0
  119. package/dist/src/core/living-docs/governance/python-standards-parser.js +347 -0
  120. package/dist/src/core/living-docs/governance/python-standards-parser.js.map +1 -0
  121. package/dist/src/core/living-docs/governance/standards-generator.d.ts +38 -0
  122. package/dist/src/core/living-docs/governance/standards-generator.d.ts.map +1 -0
  123. package/dist/src/core/living-docs/governance/standards-generator.js +476 -0
  124. package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -0
  125. package/dist/src/core/living-docs/hierarchy-mapper.js +3 -3
  126. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  127. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts +18 -0
  128. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -0
  129. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +299 -0
  130. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -0
  131. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts +15 -0
  132. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -0
  133. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +138 -0
  134. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -0
  135. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts +24 -0
  136. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts.map +1 -0
  137. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js +198 -0
  138. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js.map +1 -0
  139. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +17 -0
  140. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -0
  141. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +241 -0
  142. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -0
  143. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +28 -0
  144. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -0
  145. package/dist/src/core/living-docs/intelligent-analyzer/index.js +197 -0
  146. package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -0
  147. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts +22 -0
  148. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -0
  149. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +482 -0
  150. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -0
  151. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts +42 -0
  152. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts.map +1 -0
  153. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js +343 -0
  154. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js.map +1 -0
  155. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +190 -0
  156. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -0
  157. package/dist/src/core/living-docs/intelligent-analyzer/types.js +7 -0
  158. package/dist/src/core/living-docs/intelligent-analyzer/types.js.map +1 -0
  159. package/dist/src/core/living-docs/living-docs-sync.d.ts +11 -3
  160. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  161. package/dist/src/core/living-docs/living-docs-sync.js +53 -10
  162. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  163. package/dist/src/core/living-docs/module-analyzer.d.ts +22 -0
  164. package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
  165. package/dist/src/core/living-docs/module-analyzer.js +123 -19
  166. package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
  167. package/dist/src/core/llm/provider-factory.js +2 -2
  168. package/dist/src/core/llm/provider-factory.js.map +1 -1
  169. package/dist/src/core/llm/providers/anthropic-provider.js +1 -1
  170. package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
  171. package/dist/src/core/llm/providers/bedrock-provider.js +8 -4
  172. package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
  173. package/dist/src/core/sync/spec-increment-mapper.js +3 -3
  174. package/dist/src/core/sync/spec-increment-mapper.js.map +1 -1
  175. package/dist/src/importers/item-converter.d.ts +25 -0
  176. package/dist/src/importers/item-converter.d.ts.map +1 -1
  177. package/dist/src/importers/item-converter.js +135 -5
  178. package/dist/src/importers/item-converter.js.map +1 -1
  179. package/dist/src/importers/jira-importer.d.ts +14 -0
  180. package/dist/src/importers/jira-importer.d.ts.map +1 -1
  181. package/dist/src/importers/jira-importer.js +75 -0
  182. package/dist/src/importers/jira-importer.js.map +1 -1
  183. package/dist/src/init/architecture/types.d.ts +33 -140
  184. package/dist/src/init/architecture/types.d.ts.map +1 -1
  185. package/dist/src/init/compliance/types.d.ts +30 -27
  186. package/dist/src/init/compliance/types.d.ts.map +1 -1
  187. package/dist/src/init/repo/types.d.ts +11 -34
  188. package/dist/src/init/repo/types.d.ts.map +1 -1
  189. package/dist/src/init/research/src/config/types.d.ts +15 -82
  190. package/dist/src/init/research/src/config/types.d.ts.map +1 -1
  191. package/dist/src/init/research/types.d.ts +38 -93
  192. package/dist/src/init/research/types.d.ts.map +1 -1
  193. package/dist/src/init/team/types.d.ts +4 -42
  194. package/dist/src/init/team/types.d.ts.map +1 -1
  195. package/dist/src/integrations/jira/jira-token-provider.d.ts +93 -0
  196. package/dist/src/integrations/jira/jira-token-provider.d.ts.map +1 -0
  197. package/dist/src/integrations/jira/jira-token-provider.js +160 -0
  198. package/dist/src/integrations/jira/jira-token-provider.js.map +1 -0
  199. package/dist/src/sync/ado-reconciler.d.ts +92 -0
  200. package/dist/src/sync/ado-reconciler.d.ts.map +1 -0
  201. package/dist/src/sync/ado-reconciler.js +335 -0
  202. package/dist/src/sync/ado-reconciler.js.map +1 -0
  203. package/dist/src/sync/jira-reconciler.d.ts +106 -0
  204. package/dist/src/sync/jira-reconciler.d.ts.map +1 -0
  205. package/dist/src/sync/jira-reconciler.js +405 -0
  206. package/dist/src/sync/jira-reconciler.js.map +1 -0
  207. package/dist/src/types/dashboard-cache.d.ts +181 -0
  208. package/dist/src/types/dashboard-cache.d.ts.map +1 -0
  209. package/dist/src/types/dashboard-cache.js +65 -0
  210. package/dist/src/types/dashboard-cache.js.map +1 -0
  211. package/dist/src/types/model-selection.d.ts +6 -4
  212. package/dist/src/types/model-selection.d.ts.map +1 -1
  213. package/dist/src/types/model-selection.js +3 -1
  214. package/dist/src/types/model-selection.js.map +1 -1
  215. package/dist/src/utils/docs-validator.d.ts +131 -0
  216. package/dist/src/utils/docs-validator.d.ts.map +1 -0
  217. package/dist/src/utils/docs-validator.js +529 -0
  218. package/dist/src/utils/docs-validator.js.map +1 -0
  219. package/dist/src/utils/external-tool-drift-detector.d.ts +1 -1
  220. package/dist/src/utils/external-tool-drift-detector.d.ts.map +1 -1
  221. package/dist/src/utils/external-tool-drift-detector.js +5 -4
  222. package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
  223. package/dist/src/utils/feature-id-collision.js +1 -1
  224. package/dist/src/utils/feature-id-collision.js.map +1 -1
  225. package/dist/src/utils/feature-id-derivation.d.ts +8 -3
  226. package/dist/src/utils/feature-id-derivation.d.ts.map +1 -1
  227. package/dist/src/utils/feature-id-derivation.js +14 -6
  228. package/dist/src/utils/feature-id-derivation.js.map +1 -1
  229. package/dist/src/utils/html-to-mdx.d.ts +1 -0
  230. package/dist/src/utils/html-to-mdx.d.ts.map +1 -1
  231. package/dist/src/utils/html-to-mdx.js +43 -5
  232. package/dist/src/utils/html-to-mdx.js.map +1 -1
  233. package/dist/src/utils/model-selection.d.ts +3 -4
  234. package/dist/src/utils/model-selection.d.ts.map +1 -1
  235. package/dist/src/utils/model-selection.js +3 -4
  236. package/dist/src/utils/model-selection.js.map +1 -1
  237. package/package.json +1 -1
  238. package/plugins/specweave/agents/code-standards-detective/AGENT.md +48 -0
  239. package/plugins/specweave/agents/pm/AGENT.md +10 -7
  240. package/plugins/specweave/commands/specweave-archive-features.md +5 -7
  241. package/plugins/specweave/commands/specweave-archive.md +2 -1
  242. package/plugins/specweave/commands/specweave-costs.md +4 -4
  243. package/plugins/specweave/commands/specweave-do.md +44 -10
  244. package/plugins/specweave/commands/specweave-done.md +109 -0
  245. package/plugins/specweave/commands/specweave-import-external.md +45 -18
  246. package/plugins/specweave/commands/specweave-increment.md +331 -33
  247. package/plugins/specweave/commands/specweave-jobs.md +2 -2
  248. package/plugins/specweave/commands/specweave-progress.md +4 -4
  249. package/plugins/specweave/commands/specweave-restore-feature.md +5 -4
  250. package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
  251. package/plugins/specweave/commands/specweave-sync-specs.md +216 -322
  252. package/plugins/specweave/commands/specweave-validate-features.md +13 -8
  253. package/plugins/specweave/commands/specweave-validate.md +27 -1
  254. package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
  255. package/plugins/specweave/hooks/hooks.json +43 -4
  256. package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
  257. package/plugins/specweave/hooks/lib/common-setup.sh +375 -0
  258. package/plugins/specweave/hooks/lib/crash-prevention.sh +336 -0
  259. package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
  260. package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
  261. package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
  262. package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
  263. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
  264. package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
  265. package/plugins/specweave/hooks/post-task-completion.sh +4 -23
  266. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
  267. package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -6
  268. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
  269. package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
  270. package/plugins/specweave/hooks/pre-task-completion.sh +8 -37
  271. package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
  272. package/plugins/specweave/hooks/pre-tool-use.sh +2 -11
  273. package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
  274. package/plugins/specweave/hooks/spec-project-validator.sh +80 -25
  275. package/plugins/specweave/hooks/universal/dispatcher.mjs +135 -42
  276. package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +183 -0
  277. package/plugins/specweave/hooks/user-prompt-submit.sh +140 -38
  278. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
  279. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +12 -0
  280. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +89 -0
  281. package/plugins/specweave/hooks/v2/guards/bash-file-guard.sh +211 -0
  282. package/plugins/specweave/hooks/v2/guards/bash-file-guard.test.sh +163 -0
  283. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +26 -28
  284. package/plugins/specweave/hooks/v2/guards/features-folder-guard.sh +50 -0
  285. package/plugins/specweave/hooks/v2/guards/increment-duplicate-guard.sh +135 -0
  286. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +2 -2
  287. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
  288. package/plugins/specweave/scripts/README.md +166 -0
  289. package/plugins/specweave/scripts/cleanup-state.sh +142 -0
  290. package/plugins/specweave/scripts/force-kill.sh +142 -0
  291. package/plugins/specweave/scripts/jobs.js +171 -0
  292. package/plugins/specweave/scripts/progress.js +170 -0
  293. package/plugins/specweave/scripts/read-costs.sh +132 -0
  294. package/plugins/specweave/scripts/read-jobs.sh +324 -0
  295. package/plugins/specweave/scripts/read-progress.sh +185 -0
  296. package/plugins/specweave/scripts/read-status.sh +146 -0
  297. package/plugins/specweave/scripts/read-workflow.sh +173 -0
  298. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +327 -0
  299. package/plugins/specweave/scripts/session-watchdog.sh +192 -0
  300. package/plugins/specweave/scripts/status.js +154 -0
  301. package/plugins/specweave/scripts/update-dashboard-cache.sh +281 -0
  302. package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +58 -6
  303. package/plugins/specweave/skills/increment-planner/SKILL.md +388 -48
  304. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +17 -7
  305. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -1
  306. package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +1 -1
  307. package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +1 -1
  308. package/plugins/specweave/skills/instant-status/SKILL.md +70 -0
  309. package/plugins/specweave-ado/commands/cleanup-duplicates.md +212 -0
  310. package/plugins/specweave-ado/commands/reconcile.md +120 -0
  311. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
  312. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
  313. package/plugins/specweave-ado/lib/ado-duplicate-detector.js +279 -0
  314. package/plugins/specweave-ado/lib/ado-duplicate-detector.ts +407 -0
  315. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  316. package/plugins/specweave-docs/commands/build.md +32 -4
  317. package/plugins/specweave-docs/commands/preview.md +43 -1
  318. package/plugins/specweave-docs/commands/validate.md +250 -0
  319. package/plugins/specweave-github/agents/github-manager/AGENT.md +2 -2
  320. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1262 -0
  321. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
  322. package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
  323. package/plugins/specweave-infrastructure/skills/hetzner-provisioner/README.md +1 -1
  324. package/plugins/specweave-jira/agents/jira-manager/AGENT.md +1 -1
  325. package/plugins/specweave-jira/agents/jira-multi-project-mapper/AGENT.md +530 -0
  326. package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +438 -0
  327. package/plugins/specweave-jira/commands/cleanup-duplicates.md +219 -0
  328. package/plugins/specweave-jira/commands/close.md +297 -0
  329. package/plugins/specweave-jira/commands/create.md +198 -0
  330. package/plugins/specweave-jira/commands/reconcile.md +123 -0
  331. package/plugins/specweave-jira/commands/status.md +215 -0
  332. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
  333. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
  334. package/plugins/specweave-jira/lib/jira-duplicate-detector.js +296 -0
  335. package/plugins/specweave-jira/lib/jira-duplicate-detector.ts +434 -0
  336. package/plugins/specweave-jira/lib/jira-permission-gate.js +160 -0
  337. package/plugins/specweave-jira/lib/jira-permission-gate.ts +276 -0
  338. package/plugins/specweave-jira/lib/jira-profile-resolver.js +222 -0
  339. package/plugins/specweave-jira/lib/jira-profile-resolver.ts +427 -0
  340. package/plugins/specweave-jira/reference/jira-specweave-mapping.md +16 -11
  341. package/plugins/specweave-release/commands/specweave-release-npm.md +140 -14
  342. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1254 -0
  343. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
  344. package/plugins/specweave/hooks/post-edit-spec.sh +0 -265
  345. package/plugins/specweave/hooks/post-write-spec.sh +0 -267
  346. package/plugins/specweave/hooks/pre-edit-spec.sh +0 -151
  347. package/plugins/specweave/hooks/pre-write-spec.sh +0 -151
package/CLAUDE.md CHANGED
@@ -111,6 +111,63 @@ const config = detectStructureLevel(projectRoot);
111
111
 
112
112
  **Pre-tool-use hook `spec-project-validator.sh` BLOCKS spec.md without required fields (2-level).**
113
113
 
114
+ ### 2d. NEVER Create Files in _features/ Folder (OBSOLETE v5.0.0+)
115
+
116
+ **The `_features/` folder is OBSOLETE!** Features MUST live in project folders:
117
+
118
+ ```
119
+ ❌ FORBIDDEN (Bug pattern from 2025-12-06):
120
+ .specweave/docs/internal/specs/_features/FS-116/FEATURE.md
121
+
122
+ ✅ CORRECT:
123
+ .specweave/docs/internal/specs/{project}/FS-116/FEATURE.md
124
+ ```
125
+
126
+ **Where `{project}` comes from:**
127
+ 1. spec.md YAML frontmatter `project:` field (MANDATORY)
128
+ 2. Example: `project: specweave` → `.specweave/docs/internal/specs/specweave/FS-116/`
129
+
130
+ **Pre-tool-use hook `features-folder-guard.sh` BLOCKS writes to `_features/` (v0.33.0+).**
131
+
132
+ ### 2e. NEVER Create Duplicate Increment IDs (v0.33.0+)
133
+
134
+ **Increment numbers MUST be unique across ALL directories!**
135
+
136
+ ```
137
+ ❌ FORBIDDEN (Bug pattern from 2025-12-07):
138
+ 0121-ado-jira-feature-parity-p2-p3/ ← exists
139
+ 0121-intelligent-living-docs-content/ ← DUPLICATE!
140
+
141
+ ❌ ALSO FORBIDDEN (0001 and 0001E share SAME base number):
142
+ 0001-internal-feature/
143
+ 0001E-external-fix/ ← COLLISION! Same base number!
144
+ ```
145
+
146
+ **VALIDATION RULES:**
147
+ ```
148
+ ✅ ALWAYS use IncrementNumberManager.generateUniqueIncrementId()
149
+ ✅ ALWAYS use IncrementNumberManager.validateUnique() before creating
150
+ ✅ Check ALL directories: active, _archive, _abandoned, _paused
151
+ ```
152
+
153
+ **API (v0.33.0+):**
154
+ ```typescript
155
+ import { IncrementNumberManager } from './core/increment/increment-utils.js';
156
+
157
+ // Safe generation with validation:
158
+ const id = IncrementNumberManager.generateUniqueIncrementId('feature-name');
159
+ // → "0122-feature-name" (guaranteed unique)
160
+
161
+ // Manual validation:
162
+ IncrementNumberManager.validateUnique('0121-new-name'); // throws if duplicate!
163
+
164
+ // Find duplicates:
165
+ IncrementNumberManager.findDuplicates('0121');
166
+ // → ["0121-ado-jira-feature (active)", "0121-intelligent-living-docs (active)"]
167
+ ```
168
+
169
+ **Pre-tool-use hook `increment-duplicate-guard.sh` BLOCKS duplicate increment creation (v0.33.0+).**
170
+
114
171
  ### 3. Protected Directories
115
172
 
116
173
  **NEVER delete**: `.specweave/docs/`, `.specweave/increments/`
@@ -188,6 +245,79 @@ find .specweave/docs -name "*.md" -exec sed -i '' 's/target=_blank/target="_blan
188
245
  find .specweave/docs -name "*.md" -exec sed -i '' 's/dir=auto/dir="auto"/g' {} \;
189
246
  ```
190
247
 
248
+ ### 9. NEVER Use Bash for File Creation (INFINITE HANG PREVENTION!)
249
+
250
+ **Bash + heredoc/echo for files = SESSION FREEZE** (shell waits forever for EOF)
251
+
252
+ ```
253
+ ❌ FORBIDDEN (Crash pattern from 2025-12-06 - 2 HOUR HANG!):
254
+ Bash("cat > file.md << 'EOF'\nContent here\nEOF")
255
+ Bash("echo 'content' > file.md")
256
+ Bash("printf 'content' > file.md")
257
+
258
+ → If heredoc is truncated mid-content, shell waits FOREVER for EOF terminator!
259
+ → Claude Code session stuck "Marinating..." for hours with no recovery!
260
+
261
+ ✅ MANDATORY - Use Write tool:
262
+ Write({ file_path: "/path/to/file.md", content: "Content here" })
263
+
264
+ ✅ MANDATORY - Use Edit tool for modifications:
265
+ Edit({ file_path: "/path/to/file.md", old_string: "old", new_string: "new" })
266
+ ```
267
+
268
+ **Why heredocs are catastrophically dangerous:**
269
+ 1. **Truncation = infinite wait**: Token limits can cut off EOF terminator
270
+ 2. **No timeout**: Shell waits forever, bypasses Claude Code's 2-min limit
271
+ 3. **No recovery**: Session becomes completely unresponsive
272
+ 4. **Silent failure**: No error message, just endless "Waiting..."
273
+
274
+ **Tool selection rules:**
275
+ | Operation | CORRECT Tool | FORBIDDEN |
276
+ |-----------|--------------|-----------|
277
+ | Create file | `Write` | `Bash cat/echo/printf >` |
278
+ | Edit file | `Edit` | `Bash sed/awk` |
279
+ | Append to file | `Read` + `Write` | `Bash echo >>` |
280
+ | Create directory | `Bash mkdir -p` | ✅ OK |
281
+
282
+ **Pre-tool-use hook `bash-file-guard.sh` BLOCKS dangerous Bash file patterns (v0.32.1+).**
283
+ This hook automatically blocks: heredoc, echo >, printf >, cat > patterns.
284
+
285
+ **If session gets stuck ("Marinating..." / "Waiting..."):**
286
+ ```bash
287
+ # 1. Kill Claude Code (Ctrl+C or close terminal)
288
+ # 2. Kill zombie shell processes:
289
+ pkill -f "cat.*EOF"
290
+ pkill -f "bash.*heredoc"
291
+ # 3. Clean state:
292
+ rm -f .specweave/state/.processor.lock
293
+ rm -f .specweave/state/.dedup-cache/*.lock
294
+ # 4. Restart Claude Code
295
+ ```
296
+
297
+ ### 10. Bash Tool - Terminal Operations ONLY
298
+
299
+ **Bash is for system commands, NOT file manipulation:**
300
+
301
+ ```
302
+ ✅ ALLOWED Bash operations:
303
+ - git commands (status, add, commit, push, diff)
304
+ - npm/pnpm/yarn commands (install, build, test)
305
+ - Directory operations (mkdir, ls, pwd)
306
+ - Process management (ps, kill, pkill)
307
+ - Network tools (curl, wget for APIs)
308
+ - Build tools (make, cmake, cargo)
309
+
310
+ ❌ FORBIDDEN - Use dedicated tools instead:
311
+ - File reading → Read tool
312
+ - File writing → Write tool
313
+ - File editing → Edit tool
314
+ - File searching → Glob tool
315
+ - Content searching → Grep tool
316
+ - Communication → Direct text output
317
+ ```
318
+
319
+ **Mental model**: Bash = "run a program". Write/Edit/Read = "modify files".
320
+
191
321
  ---
192
322
 
193
323
  ## Development Setup
@@ -227,11 +357,37 @@ git add . && git commit -m "feat: feature" && git push origin develop
227
357
 
228
358
  ## Folder Structure
229
359
 
230
- **At `.specweave/increments/` root - ONLY**: `####-name/` folders, `_archive/`, `README.md`
360
+ **At `.specweave/increments/` root - ONLY**: `####-name/` or `####E-name/` folders, `_archive/`, `README.md`
231
361
 
232
362
  **Inside increment folders - ONLY at root**: `spec.md`, `plan.md`, `tasks.md`, `metadata.json`
233
363
  **Everything else → subfolders**: `reports/`, `scripts/`, `logs/`, `backups/`, `docs/`
234
364
 
365
+ ### External Increment E-Suffix (v0.32.0+)
366
+
367
+ **Increments for external items MUST use E suffix** to match FS-XXXE, US-XXXE conventions:
368
+
369
+ ```
370
+ ✅ CORRECT: 0111E-dora-metrics-fix (external GitHub issue #779)
371
+ ❌ WRONG: 0111-dora-metrics-fix (missing E suffix)
372
+ ```
373
+
374
+ **When to use E suffix:**
375
+ - Increment works on imported GitHub/JIRA/ADO issue
376
+ - spec.md has `origin: external` or `external_ref:`
377
+ - Feature folder is FS-XXXE (ends with E)
378
+
379
+ **API (v0.32.0+):**
380
+ ```typescript
381
+ import { IncrementNumberManager } from './core/increment/increment-utils.js';
382
+
383
+ // For external items:
384
+ const id = IncrementNumberManager.generateIncrementId('fix-name', { isExternal: true });
385
+ // → "0112E-fix-name"
386
+
387
+ // Check if external:
388
+ IncrementNumberManager.isExternalIncrement('0111E-fix'); // true
389
+ ```
390
+
235
391
  ### CLI Command Structure (ADR-0138)
236
392
 
237
393
  **Init command** is modular - DO NOT add logic to main file:
@@ -345,7 +501,60 @@ npm run test:all # All tests (80%+ coverage required)
345
501
 
346
502
  ## Emergency
347
503
 
348
- **Crash loop / prompt duplication? Disable hooks FIRST:**
504
+ ### Session Stuck ("Marinating..." for hours)
505
+
506
+ **Cause**: Heredoc command truncated, shell waiting forever for EOF.
507
+
508
+ ```bash
509
+ # 1. Force quit Claude Code (Ctrl+C multiple times, or close terminal)
510
+
511
+ # 2. Kill zombie processes:
512
+ pkill -f "cat.*EOF"
513
+ pkill -9 -f "bash.*specweave"
514
+
515
+ # 3. Clean locks:
516
+ rm -f .specweave/state/.processor.lock
517
+ rm -f .specweave/state/*.lock
518
+ rm -rf .specweave/state/.dedup-cache/*.lock
519
+
520
+ # 4. Restart Claude Code
521
+ ```
522
+
523
+ **Prevention**: NEVER use `Bash("cat > file << EOF")` - use `Write` tool instead!
524
+
525
+ ### MCP IDE Connection Drops (v0.32.1+)
526
+
527
+ **Symptoms**: Session hangs, commands not responding, "Waiting..." forever, UI frozen
528
+ **Root Cause**: VSCode MCP server WebSocket connection drops after ~2 seconds
529
+
530
+ **Detection** (check `~/.claude/debug/latest`):
531
+ ```
532
+ MCP server "ide": WS-IDE connection dropped after 2s uptime
533
+ MCP server "ide": Connection error: Received a response for an unknown message ID
534
+ ```
535
+
536
+ **Quick Fix:**
537
+ ```bash
538
+ # 1. Restart VS Code Extension Host:
539
+ # Cmd+Shift+P → "Developer: Restart Extension Host"
540
+
541
+ # 2. Reduce diagnostics payload (close extra tabs/files in VS Code)
542
+
543
+ # 3. If persists, run Claude Code in plain terminal (not VS Code integrated):
544
+ cd /path/to/project && claude
545
+
546
+ # 4. Run cleanup script:
547
+ bash plugins/specweave/scripts/cleanup-state.sh
548
+ ```
549
+
550
+ **Prevention:**
551
+ - Keep VS Code file count low (large diagnostics payloads cause drops)
552
+ - Update Claude Code VS Code extension regularly
553
+ - Use terminal mode for long-running sessions
554
+
555
+ ### Crash loop / prompt duplication
556
+
557
+ **Disable hooks FIRST:**
349
558
  ```bash
350
559
  export SPECWEAVE_DISABLE_HOOKS=1 # In terminal before starting Claude
351
560
  # OR rename hooks.json:
@@ -367,10 +576,14 @@ npm run rebuild
367
576
 
368
577
  | Aspect | Rule |
369
578
  |--------|------|
579
+ | **File ops** | Write/Edit/Read tools ONLY. NEVER Bash heredoc/echo! |
580
+ | **Bash guard** | Hook `bash-file-guard.sh` BLOCKS dangerous patterns (v0.32.1+) |
370
581
  | Skills vs Agents | Skills = auto-activate (keywords), Agents = explicit `Task()` |
371
582
  | Hook events | PostToolUse, PreToolUse, UserPromptSubmit, Stop, SessionStart/End, etc. |
372
583
  | Cache location | `.specweave/cache/` (24h TTL) |
373
584
  | Pre-commit | Blocks 50+ deletions, `rm -rf` on protected dirs |
585
+ | Stuck session | Kill + `pkill -f "cat.*EOF"` + clean locks + restart |
586
+ | MCP drops | Restart Extension Host OR use terminal mode |
374
587
 
375
588
  ---
376
589
 
package/README.md CHANGED
@@ -217,6 +217,28 @@ As a user, I want to toggle dark mode so that I can reduce eye strain at night.
217
217
 
218
218
  ---
219
219
 
220
+ ## When to Use Increments
221
+
222
+ Not every change needs an increment. **The rule of thumb:**
223
+
224
+ | Change Type | Use Increment? | Why |
225
+ |-------------|----------------|-----|
226
+ | **Typo fix, version bump** | No | Zero learning, purely mechanical |
227
+ | **Bug fix that taught you something** | **Yes** | Capture the knowledge for future devs |
228
+ | **Any user-facing change** | **Yes** | Track delivery, enable DORA metrics |
229
+ | **Architecture decision** | **Yes** | Needs ADR for future understanding |
230
+
231
+ **The principle**: *If you'd explain this change to a colleague, document it in an increment.*
232
+
233
+ Increments capture **knowledge**. Ad-hoc work is **ephemeral**. When teams routinely do meaningful work without increments, they lose:
234
+ - **Traceability** — Why was this decision made?
235
+ - **Knowledge transfer** — How does this system work?
236
+ - **Metrics accuracy** — DORA metrics reflect reality
237
+
238
+ **Quick check before ad-hoc work**: "Will I remember why I made this change in 6 months?" If no → increment.
239
+
240
+ ---
241
+
220
242
  ## Key Features
221
243
 
222
244
  ### Works With ANY AI Tool
package/bin/specweave.js CHANGED
@@ -108,13 +108,14 @@ program
108
108
  // Archive command - Archive completed increments and sync living docs
109
109
  program
110
110
  .command('archive [increments...]')
111
- .description('Archive completed increments and sync living docs (_features/ + project-specific)')
111
+ .description('Archive completed increments and sync living docs (project-specific folders)')
112
112
  .option('--keep-last <n>', 'Keep last N increments, archive the rest', '5')
113
113
  .option('--last <n>', 'STRICT: Keep exactly last N increments by number, ignoring all protections')
114
114
  .option('--older-than <days>', 'Archive increments older than N days')
115
115
  .option('--pattern <pattern>', 'Archive increments matching pattern (regex)')
116
116
  .option('--archive-completed', 'Archive all completed increments')
117
117
  .option('--no-preserve-active', 'Allow archiving active/paused increments (dangerous!)')
118
+ .option('--external', 'Archive external living docs (FS-XXXE features imported from ADO/JIRA/GitHub)')
118
119
  .option('--dry-run', 'Preview what would be archived without moving files')
119
120
  .action(async (incrementIds, options) => {
120
121
  const { archiveCommand } = await import('../dist/src/cli/commands/archive.js');
@@ -321,6 +322,20 @@ program
321
322
  await livingDocsCommand(options);
322
323
  });
323
324
 
325
+ // Cache command - Dashboard cache management
326
+ program
327
+ .command('cache')
328
+ .description('Manage dashboard cache for instant status commands')
329
+ .option('--rebuild', 'Rebuild cache from increments')
330
+ .option('--status', 'Show cache status (default)')
331
+ .option('--clear', 'Clear cache')
332
+ .option('--quiet', 'Minimal output')
333
+ .option('--debug', 'Show debug information')
334
+ .action(async (options) => {
335
+ const { cacheCommand } = await import('../dist/src/cli/commands/cache.js');
336
+ await cacheCommand(options);
337
+ });
338
+
324
339
  // Commits command - Display last 2 git commits
325
340
  program
326
341
  .command('commits')
@@ -344,6 +359,36 @@ program
344
359
  await syncCmd.parseAsync(['node', 'sync-scheduled', ...process.argv.slice(3)], { from: 'user' });
345
360
  });
346
361
 
362
+ // Context command - Get project/board context for increment planning
363
+ const contextCmd = program
364
+ .command('context')
365
+ .description('Get project/board context for increment planning');
366
+
367
+ contextCmd
368
+ .command('projects')
369
+ .description('List available projects and structure level')
370
+ .action(async () => {
371
+ const { contextProjectsCommand } = await import('../dist/src/cli/commands/context.js');
372
+ await contextProjectsCommand();
373
+ });
374
+
375
+ contextCmd
376
+ .command('boards')
377
+ .description('List available boards for a project (2-level structures)')
378
+ .option('-p, --project <id>', 'Project ID to filter boards')
379
+ .action(async (options) => {
380
+ const { contextBoardsCommand } = await import('../dist/src/cli/commands/context.js');
381
+ await contextBoardsCommand(options);
382
+ });
383
+
384
+ contextCmd
385
+ .command('select')
386
+ .description('Interactive project/board selection (auto-selects if single option)')
387
+ .action(async () => {
388
+ const { contextSelectCommand } = await import('../dist/src/cli/commands/context.js');
389
+ await contextSelectCommand();
390
+ });
391
+
347
392
  // Help text
348
393
  program.on('--help', () => {
349
394
  console.log('');
@@ -378,7 +423,13 @@ program.on('--help', () => {
378
423
  console.log(' $ specweave living-docs --resume <jobId> # Resume orphaned job');
379
424
  console.log(' $ specweave sync-scheduled # Execute due sync jobs');
380
425
  console.log(' $ specweave sync-scheduled --force # Force sync all jobs');
426
+ console.log(' $ specweave cache # Show cache status');
427
+ console.log(' $ specweave cache --rebuild # Rebuild dashboard cache');
428
+ console.log(' $ specweave cache --debug # Show cache debug info');
381
429
  console.log(' $ specweave validate-jira --env .env.prod # Validate with custom .env file');
430
+ console.log(' $ specweave context projects # Get available projects as JSON');
431
+ console.log(' $ specweave context boards --project myapp # Get boards for a project');
432
+ console.log(' $ specweave context select # Interactive project/board selection');
382
433
  console.log('');
383
434
  console.log('Supported AI Tools:');
384
435
  console.log(' - Claude Code (full automation) - Native skills, agents, hooks');
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Azure DevOps Duplicate Detector (v0.33.0)
3
+ *
4
+ * Implements 3-phase duplicate protection for ADO work items:
5
+ * 1. Detection: Check before create
6
+ * 2. Verification: Count check after create
7
+ * 3. Reflection: Auto-close duplicates
8
+ *
9
+ * Mirrors the GitHub DuplicateDetector pattern for consistency.
10
+ */
11
+ import { Logger } from '../../../src/utils/logger.js';
12
+ export interface AdoWorkItem {
13
+ id: number;
14
+ title: string;
15
+ state: string;
16
+ createdDate: string;
17
+ url?: string;
18
+ }
19
+ export interface DuplicateGroup {
20
+ title: string;
21
+ items: AdoWorkItem[];
22
+ keepItem: AdoWorkItem;
23
+ duplicates: AdoWorkItem[];
24
+ }
25
+ export interface DetectionResult {
26
+ found: boolean;
27
+ existingItem?: AdoWorkItem;
28
+ count: number;
29
+ }
30
+ export interface VerificationResult {
31
+ success: boolean;
32
+ expectedCount: number;
33
+ actualCount: number;
34
+ duplicates: AdoWorkItem[];
35
+ }
36
+ export interface CleanupResult {
37
+ closedCount: number;
38
+ keptCount: number;
39
+ errors: string[];
40
+ }
41
+ export declare class AdoDuplicateDetector {
42
+ private org;
43
+ private project;
44
+ private pat;
45
+ private logger;
46
+ constructor(options?: {
47
+ org?: string;
48
+ project?: string;
49
+ pat?: string;
50
+ logger?: Logger;
51
+ });
52
+ /**
53
+ * Phase 1: Check if work item exists before creating
54
+ */
55
+ checkBeforeCreate(titlePattern: string, incrementId?: string): Promise<DetectionResult>;
56
+ /**
57
+ * Phase 2: Verify count after creation
58
+ */
59
+ verifyAfterCreate(titlePattern: string, expectedCount?: number): Promise<VerificationResult>;
60
+ /**
61
+ * Phase 3: Auto-close duplicates
62
+ */
63
+ closeDuplicates(duplicates: AdoWorkItem[], keepItemId: number): Promise<CleanupResult>;
64
+ /**
65
+ * Full cleanup: Find and close all duplicates for a feature
66
+ */
67
+ cleanupFeatureDuplicates(featureId: string, dryRun?: boolean): Promise<{
68
+ groups: DuplicateGroup[];
69
+ totalItems: number;
70
+ duplicateCount: number;
71
+ closedCount: number;
72
+ }>;
73
+ /**
74
+ * Group work items by title
75
+ */
76
+ private groupByTitle;
77
+ /**
78
+ * Search for work items using WIQL
79
+ */
80
+ private searchWorkItems;
81
+ /**
82
+ * Get work item details by IDs
83
+ */
84
+ private getWorkItemDetails;
85
+ /**
86
+ * Close a work item with duplicate comment
87
+ */
88
+ private closeWorkItem;
89
+ }
90
+ /**
91
+ * Convenience function for quick duplicate cleanup
92
+ */
93
+ export declare function cleanupAdoDuplicates(featureId: string, dryRun?: boolean): Promise<{
94
+ groups: DuplicateGroup[];
95
+ totalItems: number;
96
+ duplicateCount: number;
97
+ closedCount: number;
98
+ }>;
99
+ export default AdoDuplicateDetector;
100
+ //# sourceMappingURL=ado-duplicate-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ado-duplicate-detector.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-duplicate-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAiB,MAAM,8BAA8B,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ;IAON;;OAEG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC;IAoB3B;;OAEG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAmC9B;;OAEG;IACG,eAAe,CACnB,UAAU,EAAE,WAAW,EAAE,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAqBzB;;OAEG;IACG,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC;QACT,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAyEF;;OAEG;IACH,OAAO,CAAC,YAAY;IA0BpB;;OAEG;YACW,eAAe;IAwC7B;;OAEG;YACW,kBAAkB;IA2BhC;;OAEG;YACW,aAAa;CAwC5B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC;IACT,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAGD;AAED,eAAe,oBAAoB,CAAC"}