specweave 0.33.4 → 0.33.6

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 (719) hide show
  1. package/.claude-plugin/README.md +13 -13
  2. package/.claude-plugin/marketplace.json +26 -37
  3. package/CLAUDE.md +445 -80
  4. package/README.md +34 -31
  5. package/bin/fix-marketplace-errors.sh +1 -1
  6. package/bin/install-commands.sh +2 -2
  7. package/bin/specweave.js +58 -1
  8. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +5 -0
  9. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +1 -1
  10. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +14 -4
  11. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -1
  12. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +1 -0
  13. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -1
  14. package/dist/plugins/specweave-github/lib/completion-calculator.js +2 -0
  15. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -1
  16. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts.map +1 -1
  17. package/dist/plugins/specweave-github/lib/duplicate-detector.js +20 -6
  18. package/dist/plugins/specweave-github/lib/duplicate-detector.js.map +1 -1
  19. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +9 -0
  20. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  21. package/dist/plugins/specweave-github/lib/github-client-v2.js +31 -18
  22. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  23. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +7 -0
  24. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
  25. package/dist/plugins/specweave-github/lib/github-feature-sync.js +47 -11
  26. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
  27. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +39 -13
  28. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +1 -1
  29. package/dist/plugins/specweave-github/lib/github-issue-updater.d.ts.map +1 -1
  30. package/dist/plugins/specweave-github/lib/github-issue-updater.js +15 -3
  31. package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +1 -1
  32. package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts +7 -0
  33. package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts.map +1 -1
  34. package/dist/plugins/specweave-github/lib/github-spec-sync.js +17 -4
  35. package/dist/plugins/specweave-github/lib/github-spec-sync.js.map +1 -1
  36. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.d.ts.map +1 -1
  37. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +13 -3
  38. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
  39. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.d.ts.map +1 -1
  40. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +14 -4
  41. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +1 -1
  42. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +1 -1
  43. package/dist/plugins/specweave-github/lib/increment-issue-builder.js +24 -8
  44. package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +1 -1
  45. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -1
  46. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +21 -18
  47. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -1
  48. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +3 -0
  49. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  50. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +20 -19
  51. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  52. package/dist/src/cli/cleanup-zombies.js +34 -18
  53. package/dist/src/cli/cleanup-zombies.js.map +1 -1
  54. package/dist/src/cli/commands/discrepancies.js +6 -6
  55. package/dist/src/cli/commands/discrepancies.js.map +1 -1
  56. package/dist/src/cli/commands/docs.js +1 -1
  57. package/dist/src/cli/commands/docs.js.map +1 -1
  58. package/dist/src/cli/commands/import-docs.d.ts +1 -1
  59. package/dist/src/cli/commands/import-docs.js +2 -2
  60. package/dist/src/cli/commands/import-docs.js.map +1 -1
  61. package/dist/src/cli/commands/import-external.d.ts +1 -1
  62. package/dist/src/cli/commands/import-external.js +1 -1
  63. package/dist/src/cli/commands/init-multiproject.d.ts +1 -1
  64. package/dist/src/cli/commands/init-multiproject.js +3 -3
  65. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  66. package/dist/src/cli/commands/init.js +2 -2
  67. package/dist/src/cli/commands/init.js.map +1 -1
  68. package/dist/src/cli/commands/jobs.js +19 -2
  69. package/dist/src/cli/commands/jobs.js.map +1 -1
  70. package/dist/src/cli/commands/living-docs.d.ts +1 -0
  71. package/dist/src/cli/commands/living-docs.d.ts.map +1 -1
  72. package/dist/src/cli/commands/living-docs.js +19 -3
  73. package/dist/src/cli/commands/living-docs.js.map +1 -1
  74. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  75. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  76. package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
  77. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  78. package/dist/src/cli/commands/next-command.d.ts +1 -1
  79. package/dist/src/cli/commands/next-command.js +9 -9
  80. package/dist/src/cli/commands/next-command.js.map +1 -1
  81. package/dist/src/cli/commands/notifications.js +3 -3
  82. package/dist/src/cli/commands/notifications.js.map +1 -1
  83. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  84. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  85. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +2 -2
  86. package/dist/src/cli/commands/plan/plan-orchestrator.js +2 -2
  87. package/dist/src/cli/commands/plan/plan-validator.js +2 -2
  88. package/dist/src/cli/commands/plan/plan-validator.js.map +1 -1
  89. package/dist/src/cli/commands/plan/types.d.ts +1 -1
  90. package/dist/src/cli/commands/plan/types.js +1 -1
  91. package/dist/src/cli/commands/plan-command.d.ts +3 -3
  92. package/dist/src/cli/commands/plan-command.js +12 -12
  93. package/dist/src/cli/commands/plan-command.js.map +1 -1
  94. package/dist/src/cli/commands/project.d.ts +77 -0
  95. package/dist/src/cli/commands/project.d.ts.map +1 -0
  96. package/dist/src/cli/commands/project.js +526 -0
  97. package/dist/src/cli/commands/project.js.map +1 -0
  98. package/dist/src/cli/commands/save.d.ts +49 -0
  99. package/dist/src/cli/commands/save.d.ts.map +1 -0
  100. package/dist/src/cli/commands/save.js +583 -0
  101. package/dist/src/cli/commands/save.js.map +1 -0
  102. package/dist/src/cli/commands/sync-spec-commits.js +15 -6
  103. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  104. package/dist/src/cli/commands/sync-spec-content.js +15 -6
  105. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  106. package/dist/src/cli/helpers/init/ado-repo-cloning.js +2 -2
  107. package/dist/src/cli/helpers/init/ado-repo-cloning.js.map +1 -1
  108. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.d.ts +1 -1
  109. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js +3 -3
  110. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js.map +1 -1
  111. package/dist/src/cli/helpers/init/brownfield-analysis.js +18 -18
  112. package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -1
  113. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
  114. package/dist/src/cli/helpers/init/directory-structure.js +3 -0
  115. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
  116. package/dist/src/cli/helpers/init/external-import-grouping.d.ts.map +1 -1
  117. package/dist/src/cli/helpers/init/external-import-grouping.js +11 -7
  118. package/dist/src/cli/helpers/init/external-import-grouping.js.map +1 -1
  119. package/dist/src/cli/helpers/init/external-import.js +18 -18
  120. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  121. package/dist/src/cli/helpers/init/github-repo-cloning.d.ts +1 -1
  122. package/dist/src/cli/helpers/init/github-repo-cloning.js +3 -3
  123. package/dist/src/cli/helpers/init/github-repo-cloning.js.map +1 -1
  124. package/dist/src/cli/helpers/init/initial-increment-generator.js +12 -12
  125. package/dist/src/cli/helpers/init/living-docs-preflight.js +5 -5
  126. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  127. package/dist/src/cli/helpers/init/next-steps.js +9 -9
  128. package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
  129. package/dist/src/cli/helpers/init/plugin-installer.js +3 -3
  130. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
  131. package/dist/src/cli/helpers/init/translation-config.js +9 -9
  132. package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
  133. package/dist/src/cli/helpers/init/types.d.ts +1 -1
  134. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  135. package/dist/src/cli/helpers/issue-tracker/ado.js +1 -1
  136. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  137. package/dist/src/cli/helpers/issue-tracker/github.js +1 -1
  138. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  139. package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
  140. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  141. package/dist/src/cli/helpers/issue-tracker/jira.js +1 -1
  142. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  143. package/dist/src/cli/update-status-line.js +1 -1
  144. package/dist/src/cli/update-status-line.js.map +1 -1
  145. package/dist/src/cli/workers/brownfield-worker.js +1 -1
  146. package/dist/src/cli/workers/brownfield-worker.js.map +1 -1
  147. package/dist/src/cli/workers/clone-worker.js +22 -5
  148. package/dist/src/cli/workers/clone-worker.js.map +1 -1
  149. package/dist/src/cli/workers/import-worker.js +1 -1
  150. package/dist/src/cli/workers/import-worker.js.map +1 -1
  151. package/dist/src/core/background/brownfield-launcher.js +4 -4
  152. package/dist/src/core/background/brownfield-launcher.js.map +1 -1
  153. package/dist/src/core/background/index.d.ts +3 -3
  154. package/dist/src/core/background/index.js +3 -3
  155. package/dist/src/core/background/job-dependency.d.ts.map +1 -1
  156. package/dist/src/core/background/job-dependency.js +1 -0
  157. package/dist/src/core/background/job-dependency.js.map +1 -1
  158. package/dist/src/core/background/job-launcher.d.ts +1 -1
  159. package/dist/src/core/background/job-launcher.js +5 -5
  160. package/dist/src/core/background/job-launcher.js.map +1 -1
  161. package/dist/src/core/background/job-manager.d.ts +8 -0
  162. package/dist/src/core/background/job-manager.d.ts.map +1 -1
  163. package/dist/src/core/background/job-manager.js +19 -1
  164. package/dist/src/core/background/job-manager.js.map +1 -1
  165. package/dist/src/core/background/types.d.ts +9 -1
  166. package/dist/src/core/background/types.d.ts.map +1 -1
  167. package/dist/src/core/background/types.js +8 -1
  168. package/dist/src/core/background/types.js.map +1 -1
  169. package/dist/src/core/brownfield/importer.js +1 -1
  170. package/dist/src/core/brownfield/importer.js.map +1 -1
  171. package/dist/src/core/config/config-manager.d.ts +7 -1
  172. package/dist/src/core/config/config-manager.d.ts.map +1 -1
  173. package/dist/src/core/config/config-manager.js +24 -2
  174. package/dist/src/core/config/config-manager.js.map +1 -1
  175. package/dist/src/core/config/single-project-migrator.d.ts +110 -0
  176. package/dist/src/core/config/single-project-migrator.d.ts.map +1 -0
  177. package/dist/src/core/config/single-project-migrator.js +179 -0
  178. package/dist/src/core/config/single-project-migrator.js.map +1 -0
  179. package/dist/src/core/config/types.d.ts +3 -3
  180. package/dist/src/core/credentials/credentials-manager.d.ts +25 -4
  181. package/dist/src/core/credentials/credentials-manager.d.ts.map +1 -1
  182. package/dist/src/core/credentials/credentials-manager.js +54 -15
  183. package/dist/src/core/credentials/credentials-manager.js.map +1 -1
  184. package/dist/src/core/deduplication/command-deduplicator.d.ts +4 -4
  185. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -1
  186. package/dist/src/core/deduplication/command-deduplicator.js +3 -3
  187. package/dist/src/core/external-tools/external-items-counter.d.ts +4 -4
  188. package/dist/src/core/external-tools/external-items-counter.js +4 -4
  189. package/dist/src/core/external-tools/external-items-display.js +4 -4
  190. package/dist/src/core/external-tools/external-items-display.js.map +1 -1
  191. package/dist/src/core/increment/completion-validator.js +3 -3
  192. package/dist/src/core/increment/completion-validator.js.map +1 -1
  193. package/dist/src/core/increment/conflict-resolver.js +2 -2
  194. package/dist/src/core/increment/conflict-resolver.js.map +1 -1
  195. package/dist/src/core/increment/desync-detector.d.ts +1 -1
  196. package/dist/src/core/increment/desync-detector.js +3 -3
  197. package/dist/src/core/increment/desync-detector.js.map +1 -1
  198. package/dist/src/core/increment/discipline-checker.js +2 -2
  199. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  200. package/dist/src/core/increment/increment-archiver.js +4 -4
  201. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  202. package/dist/src/core/increment/increment-utils.d.ts +53 -2
  203. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  204. package/dist/src/core/increment/increment-utils.js +78 -7
  205. package/dist/src/core/increment/increment-utils.js.map +1 -1
  206. package/dist/src/core/increment/metadata-manager.js +6 -6
  207. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  208. package/dist/src/core/increment/metadata-validator.js +1 -1
  209. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  210. package/dist/src/core/increment/recent-work-scanner.js +2 -2
  211. package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
  212. package/dist/src/core/increment/spec-sync-manager.js +1 -1
  213. package/dist/src/core/increment/spec-sync-manager.js.map +1 -1
  214. package/dist/src/core/increment/status-auto-transition.d.ts +68 -1
  215. package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -1
  216. package/dist/src/core/increment/status-auto-transition.js +141 -1
  217. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  218. package/dist/src/core/increment/status-change-sync-trigger.d.ts +1 -1
  219. package/dist/src/core/increment/status-change-sync-trigger.js +3 -3
  220. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  221. package/dist/src/core/living-docs/cross-project-sync.d.ts +12 -0
  222. package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
  223. package/dist/src/core/living-docs/cross-project-sync.js +33 -0
  224. package/dist/src/core/living-docs/cross-project-sync.js.map +1 -1
  225. package/dist/src/core/living-docs/feature-archiver.d.ts +3 -3
  226. package/dist/src/core/living-docs/feature-archiver.js +3 -3
  227. package/dist/src/core/living-docs/feature-consistency-validator.js +1 -1
  228. package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
  229. package/dist/src/core/living-docs/feature-id-manager.d.ts +5 -0
  230. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  231. package/dist/src/core/living-docs/feature-id-manager.js +19 -1
  232. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  233. package/dist/src/core/living-docs/governance/standards-generator.js +1 -1
  234. package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -1
  235. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +5 -0
  236. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  237. package/dist/src/core/living-docs/hierarchy-mapper.js +22 -2
  238. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  239. package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -0
  240. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  241. package/dist/src/core/living-docs/living-docs-sync.js +77 -8
  242. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  243. package/dist/src/core/living-docs/project-detector.d.ts +9 -0
  244. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  245. package/dist/src/core/living-docs/project-detector.js +38 -3
  246. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  247. package/dist/src/core/living-docs/suggestions-generator.js +1 -1
  248. package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
  249. package/dist/src/core/notifications/command-integration.js +1 -1
  250. package/dist/src/core/notifications/command-integration.js.map +1 -1
  251. package/dist/src/core/project/adapters/ado-project-adapter.d.ts +73 -0
  252. package/dist/src/core/project/adapters/ado-project-adapter.d.ts.map +1 -0
  253. package/dist/src/core/project/adapters/ado-project-adapter.js +304 -0
  254. package/dist/src/core/project/adapters/ado-project-adapter.js.map +1 -0
  255. package/dist/src/core/project/adapters/github-project-adapter.d.ts +76 -0
  256. package/dist/src/core/project/adapters/github-project-adapter.d.ts.map +1 -0
  257. package/dist/src/core/project/adapters/github-project-adapter.js +315 -0
  258. package/dist/src/core/project/adapters/github-project-adapter.js.map +1 -0
  259. package/dist/src/core/project/adapters/jira-project-adapter.d.ts +69 -0
  260. package/dist/src/core/project/adapters/jira-project-adapter.d.ts.map +1 -0
  261. package/dist/src/core/project/adapters/jira-project-adapter.js +241 -0
  262. package/dist/src/core/project/adapters/jira-project-adapter.js.map +1 -0
  263. package/dist/src/core/project/project-event-bus.d.ts +72 -0
  264. package/dist/src/core/project/project-event-bus.d.ts.map +1 -0
  265. package/dist/src/core/project/project-event-bus.js +150 -0
  266. package/dist/src/core/project/project-event-bus.js.map +1 -0
  267. package/dist/src/core/project/project-manager.d.ts +0 -22
  268. package/dist/src/core/project/project-manager.d.ts.map +1 -1
  269. package/dist/src/core/project/project-manager.js +5 -275
  270. package/dist/src/core/project/project-manager.js.map +1 -1
  271. package/dist/src/core/project/project-registry.d.ts +93 -0
  272. package/dist/src/core/project/project-registry.d.ts.map +1 -0
  273. package/dist/src/core/project/project-registry.js +448 -0
  274. package/dist/src/core/project/project-registry.js.map +1 -0
  275. package/dist/src/core/project/project-resolution.d.ts +229 -0
  276. package/dist/src/core/project/project-resolution.d.ts.map +1 -0
  277. package/dist/src/core/project/project-resolution.js +633 -0
  278. package/dist/src/core/project/project-resolution.js.map +1 -0
  279. package/dist/src/core/project/types/project-types.d.ts +214 -0
  280. package/dist/src/core/project/types/project-types.d.ts.map +1 -0
  281. package/dist/src/core/project/types/project-types.js +9 -0
  282. package/dist/src/core/project/types/project-types.js.map +1 -0
  283. package/dist/src/core/repo-structure/setup-summary.js +2 -2
  284. package/dist/src/core/repo-structure/setup-summary.js.map +1 -1
  285. package/dist/src/core/specs/spec-identifier-detector.d.ts.map +1 -1
  286. package/dist/src/core/specs/spec-identifier-detector.js +8 -5
  287. package/dist/src/core/specs/spec-identifier-detector.js.map +1 -1
  288. package/dist/src/core/status-line/status-line-updater.js +1 -1
  289. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  290. package/dist/src/core/types/increment-metadata.d.ts +3 -3
  291. package/dist/src/core/types/increment-metadata.js +3 -3
  292. package/dist/src/core/types/increment-metadata.js.map +1 -1
  293. package/dist/src/core/types/sync-profile.d.ts +1 -0
  294. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  295. package/dist/src/core/types/sync-profile.js.map +1 -1
  296. package/dist/src/core/validators/ac-presence-validator.d.ts +4 -4
  297. package/dist/src/core/validators/ac-presence-validator.js +3 -3
  298. package/dist/src/core/validators/ac-presence-validator.js.map +1 -1
  299. package/dist/src/core/workflow/backlog-scanner.d.ts +5 -0
  300. package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -1
  301. package/dist/src/core/workflow/backlog-scanner.js +14 -2
  302. package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
  303. package/dist/src/core/workflow/phase-detector.js +17 -17
  304. package/dist/src/core/workflow/phase-detector.js.map +1 -1
  305. package/dist/src/core/workflow/types.d.ts +1 -1
  306. package/dist/src/core/workflow/types.d.ts.map +1 -1
  307. package/dist/src/core/workflow/workflow-orchestrator.d.ts +1 -1
  308. package/dist/src/core/workflow/workflow-orchestrator.js +9 -9
  309. package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -1
  310. package/dist/src/hooks/scheduler-startup.js +1 -1
  311. package/dist/src/hooks/scheduler-startup.js.map +1 -1
  312. package/dist/src/importers/external-importer.d.ts +26 -5
  313. package/dist/src/importers/external-importer.d.ts.map +1 -1
  314. package/dist/src/importers/item-converter.d.ts.map +1 -1
  315. package/dist/src/importers/item-converter.js +19 -2
  316. package/dist/src/importers/item-converter.js.map +1 -1
  317. package/dist/src/importers/jira-importer.d.ts.map +1 -1
  318. package/dist/src/importers/jira-importer.js +15 -1
  319. package/dist/src/importers/jira-importer.js.map +1 -1
  320. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +17 -1
  321. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  322. package/dist/src/integrations/jira/jira-incremental-mapper.js +20 -12
  323. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  324. package/dist/src/integrations/jira/jira-mapper.d.ts +17 -1
  325. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  326. package/dist/src/integrations/jira/jira-mapper.js +13 -5
  327. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  328. package/dist/src/living-docs/enterprise-analyzer.js +1 -1
  329. package/dist/src/living-docs/enterprise-analyzer.js.map +1 -1
  330. package/dist/src/living-docs/smart-doc-organizer.js +1 -1
  331. package/dist/src/living-docs/smart-doc-organizer.js.map +1 -1
  332. package/dist/src/sync/ado-reconciler.d.ts +5 -0
  333. package/dist/src/sync/ado-reconciler.d.ts.map +1 -1
  334. package/dist/src/sync/ado-reconciler.js +16 -4
  335. package/dist/src/sync/ado-reconciler.js.map +1 -1
  336. package/dist/src/sync/jira-reconciler.d.ts +3 -0
  337. package/dist/src/sync/jira-reconciler.d.ts.map +1 -1
  338. package/dist/src/sync/jira-reconciler.js +12 -5
  339. package/dist/src/sync/jira-reconciler.js.map +1 -1
  340. package/dist/src/types/dashboard-cache.d.ts +4 -2
  341. package/dist/src/types/dashboard-cache.d.ts.map +1 -1
  342. package/dist/src/types/dashboard-cache.js +1 -1
  343. package/dist/src/types/dashboard-cache.js.map +1 -1
  344. package/dist/src/utils/ac-embedder.d.ts +1 -1
  345. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  346. package/dist/src/utils/docs-preview/config-generator.js +4 -0
  347. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  348. package/dist/src/utils/docs-preview/docusaurus-setup.js +2 -2
  349. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  350. package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
  351. package/dist/src/utils/env-multi-project-parser.d.ts +17 -0
  352. package/dist/src/utils/env-multi-project-parser.d.ts.map +1 -1
  353. package/dist/src/utils/env-multi-project-parser.js +26 -1
  354. package/dist/src/utils/env-multi-project-parser.js.map +1 -1
  355. package/dist/src/utils/external-tool-drift-detector.d.ts +2 -2
  356. package/dist/src/utils/external-tool-drift-detector.js +6 -6
  357. package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
  358. package/dist/src/utils/notification-constants.d.ts +8 -6
  359. package/dist/src/utils/notification-constants.d.ts.map +1 -1
  360. package/dist/src/utils/notification-constants.js +10 -8
  361. package/dist/src/utils/notification-constants.js.map +1 -1
  362. package/dist/src/utils/notification-manager.d.ts +36 -3
  363. package/dist/src/utils/notification-manager.d.ts.map +1 -1
  364. package/dist/src/utils/notification-manager.js +80 -49
  365. package/dist/src/utils/notification-manager.js.map +1 -1
  366. package/dist/src/utils/platform-utils.d.ts +12 -3
  367. package/dist/src/utils/platform-utils.d.ts.map +1 -1
  368. package/dist/src/utils/platform-utils.js +35 -16
  369. package/dist/src/utils/platform-utils.js.map +1 -1
  370. package/dist/src/utils/plugin-validator.js +11 -11
  371. package/dist/src/utils/plugin-validator.js.map +1 -1
  372. package/dist/src/validators/ac-coverage-validator.d.ts +1 -1
  373. package/dist/src/validators/ac-coverage-validator.js +1 -1
  374. package/package.json +3 -1
  375. package/plugins/PLUGINS-INDEX.md +1 -2
  376. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  377. package/plugins/specweave/COMMANDS.md +49 -49
  378. package/plugins/specweave/agents/pm/AGENT.md +18 -18
  379. package/plugins/specweave/agents/test-aware-planner/AGENT.md +7 -7
  380. package/plugins/specweave/agents/translator/AGENT.md +2 -2
  381. package/plugins/specweave/commands/{specweave-abandon.md → abandon.md} +20 -20
  382. package/plugins/specweave/commands/{specweave-analyze-standards.sh → analyze-standards.sh} +4 -4
  383. package/plugins/specweave/commands/{specweave-archive-features.md → archive-features.md} +7 -7
  384. package/plugins/specweave/commands/{specweave-archive.md → archive.md} +36 -36
  385. package/plugins/specweave/commands/{specweave-backlog.md → backlog.md} +24 -24
  386. package/plugins/specweave/commands/{specweave-check-hooks.md → check-hooks.md} +10 -10
  387. package/plugins/specweave/commands/{specweave-check-tests.md → check-tests.md} +14 -14
  388. package/plugins/specweave/commands/{specweave-costs.md → costs.md} +8 -8
  389. package/plugins/specweave/commands/{specweave-discrepancies.md → discrepancies.md} +15 -15
  390. package/plugins/specweave/commands/{specweave-discrepancy-to-increment.md → discrepancy-to-increment.md} +10 -10
  391. package/plugins/specweave/commands/{specweave-do.md → do.md} +37 -39
  392. package/plugins/specweave/commands/{specweave-done.md → done.md} +23 -23
  393. package/plugins/specweave/commands/{specweave-embed-acs.md → embed-acs.md} +21 -21
  394. package/plugins/specweave/commands/{specweave-external.md → external.md} +11 -11
  395. package/plugins/specweave/commands/{specweave-fix-duplicates.md → fix-duplicates.md} +16 -16
  396. package/plugins/specweave/commands/{specweave-import-docs.md → import-docs.md} +7 -7
  397. package/plugins/specweave/commands/{specweave-import-external.md → import-external.md} +9 -9
  398. package/plugins/specweave/commands/{specweave-increment.md → increment.md} +17 -17
  399. package/plugins/specweave/commands/{specweave-jobs.md → jobs.md} +28 -28
  400. package/plugins/specweave/commands/judge-llm.md +296 -0
  401. package/plugins/specweave/commands/{specweave-living-docs.md → living-docs.md} +72 -29
  402. package/plugins/specweave/commands/migrate-config.md +2 -2
  403. package/plugins/specweave/commands/{specweave-next.md → next.md} +20 -20
  404. package/plugins/specweave/commands/{specweave-notifications.md → notifications.md} +11 -11
  405. package/plugins/specweave/commands/{specweave-organize-docs.md → organize-docs.md} +9 -9
  406. package/plugins/specweave/commands/{specweave-pause.md → pause.md} +19 -19
  407. package/plugins/specweave/commands/{specweave-plan.md → plan.md} +19 -19
  408. package/plugins/specweave/commands/{specweave-progress.md → progress.md} +6 -6
  409. package/plugins/specweave/commands/{specweave-qa.md → qa.md} +15 -15
  410. package/plugins/specweave/commands/{specweave-reopen.md → reopen.md} +41 -41
  411. package/plugins/specweave/commands/{specweave-restore-feature.md → restore-feature.md} +6 -6
  412. package/plugins/specweave/commands/{specweave-restore.md → restore.md} +26 -26
  413. package/plugins/specweave/commands/{specweave-resume.md → resume.md} +33 -33
  414. package/plugins/specweave/commands/revert-wip-limit.md +4 -4
  415. package/plugins/specweave/commands/{specweave-save.md → save.md} +34 -34
  416. package/plugins/specweave/commands/{specweave-status.md → status.md} +29 -29
  417. package/plugins/specweave/commands/{specweave.md → sw.md} +28 -28
  418. package/plugins/specweave/commands/{specweave-sync-acs.md → sync-acs.md} +12 -12
  419. package/plugins/specweave/commands/sync-diagnostics.md +5 -5
  420. package/plugins/specweave/commands/{specweave-sync-docs.md → sync-docs.md} +7 -7
  421. package/plugins/specweave/commands/{specweave-sync-logs.md → sync-logs.md} +14 -14
  422. package/plugins/specweave/commands/{specweave-sync-monitor.md → sync-monitor.md} +5 -5
  423. package/plugins/specweave/commands/{specweave-sync-progress.md → sync-progress.md} +38 -38
  424. package/plugins/specweave/commands/{specweave-sync-specs.md → sync-specs.md} +17 -17
  425. package/plugins/specweave/commands/{specweave-sync-status.md → sync-status.md} +16 -16
  426. package/plugins/specweave/commands/{specweave-sync-tasks.md → sync-tasks.md} +13 -13
  427. package/plugins/specweave/commands/{specweave-tdd-cycle.md → tdd-cycle.md} +1 -1
  428. package/plugins/specweave/commands/{specweave-tdd-green.md → tdd-green.md} +1 -1
  429. package/plugins/specweave/commands/{specweave-tdd-red.md → tdd-red.md} +1 -1
  430. package/plugins/specweave/commands/{specweave-tdd-refactor.md → tdd-refactor.md} +1 -1
  431. package/plugins/specweave/commands/{specweave-translate.md → translate.md} +17 -17
  432. package/plugins/specweave/commands/{specweave-update-scope.md → update-scope.md} +8 -8
  433. package/plugins/specweave/commands/{specweave-update-status.md → update-status.md} +6 -6
  434. package/plugins/specweave/commands/{specweave-validate-features.md → validate-features.md} +8 -8
  435. package/plugins/specweave/commands/{specweave-validate.md → validate.md} +20 -20
  436. package/plugins/specweave/commands/{specweave-workflow.md → workflow.md} +40 -40
  437. package/plugins/specweave/hooks/README.md +5 -5
  438. package/plugins/specweave/hooks/config-env-separator.sh +99 -0
  439. package/plugins/specweave/hooks/github-metadata-guard.sh +73 -0
  440. package/plugins/specweave/hooks/hooks.json +41 -1
  441. package/plugins/specweave/hooks/post-first-increment.sh +2 -2
  442. package/plugins/specweave/hooks/post-increment-completion.sh +7 -7
  443. package/plugins/specweave/hooks/post-increment-planning.sh +11 -11
  444. package/plugins/specweave/hooks/post-increment-status-change.sh +1 -1
  445. package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
  446. package/plugins/specweave/hooks/post-spec-update.sh +2 -2
  447. package/plugins/specweave/hooks/post-task-completion.sh +2 -2
  448. package/plugins/specweave/hooks/pre-increment-start.sh +7 -7
  449. package/plugins/specweave/hooks/project-folder-guard.sh +272 -0
  450. package/plugins/specweave/hooks/spec-project-validator.sh +68 -47
  451. package/plugins/specweave/hooks/user-prompt-submit.sh +27 -27
  452. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +2 -2
  453. package/plugins/specweave/hooks/v2/guards/metadata-json-guard.sh +87 -0
  454. package/plugins/specweave/hooks/v2/guards/metadata-json-guard.test.sh +302 -0
  455. package/plugins/specweave/hooks/v2/guards/per-us-project-validator.sh +72 -18
  456. package/plugins/specweave/hooks/v2/guards/per-us-project-validator.test.sh +406 -0
  457. package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +1 -1
  458. package/plugins/specweave/lib/hooks/consolidated-sync.js +35 -5
  459. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +2 -2
  460. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +2 -2
  461. package/plugins/specweave/lib/hooks/prepare-reflection-context.js +1 -1
  462. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +1 -1
  463. package/plugins/specweave/lib/hooks/sync-living-docs.js +5 -5
  464. package/plugins/specweave/lib/hooks/translate-file.d.ts +1 -1
  465. package/plugins/specweave/lib/hooks/translate-file.js +2 -2
  466. package/plugins/specweave/lib/hooks/translate-file.ts +3 -3
  467. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +1 -1
  468. package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +2 -2
  469. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +6 -6
  470. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  471. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.d.ts +113 -0
  472. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js +318 -0
  473. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js.map +1 -0
  474. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +3 -3
  475. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js +3 -3
  476. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js.map +1 -1
  477. package/plugins/specweave/scripts/README.md +9 -9
  478. package/plugins/specweave/scripts/cleanup-state.sh +1 -1
  479. package/plugins/specweave/scripts/jobs.js +2 -2
  480. package/plugins/specweave/scripts/progress.js +6 -6
  481. package/plugins/specweave/scripts/read-costs.sh +3 -3
  482. package/plugins/specweave/scripts/read-jobs.sh +8 -8
  483. package/plugins/specweave/scripts/read-progress.sh +17 -10
  484. package/plugins/specweave/scripts/read-status.sh +7 -7
  485. package/plugins/specweave/scripts/read-workflow.sh +18 -18
  486. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +6 -5
  487. package/plugins/specweave/scripts/session-watchdog.sh +14 -8
  488. package/plugins/specweave/scripts/status.js +7 -7
  489. package/plugins/specweave/scripts/update-dashboard-cache.sh +28 -10
  490. package/plugins/specweave/skills/SKILLS-INDEX.md +4 -4
  491. package/plugins/specweave/skills/archive-increments/SKILL.md +15 -15
  492. package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +5 -5
  493. package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +4 -4
  494. package/plugins/specweave/skills/context-loader/SKILL.md +1 -1
  495. package/plugins/specweave/skills/{specweave-detector → detector}/SKILL.md +5 -5
  496. package/plugins/specweave/skills/discrepancy-viewer.md +4 -4
  497. package/plugins/specweave/skills/external-sync-wizard/SKILL.md +24 -24
  498. package/plugins/specweave/skills/{specweave-framework → framework}/SKILL.md +33 -33
  499. package/plugins/specweave/skills/increment-planner/SKILL.md +25 -24
  500. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +6 -16
  501. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -12
  502. package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +6 -6
  503. package/plugins/specweave/skills/increment-work-router/SKILL.md +23 -23
  504. package/plugins/specweave/skills/instant-status/SKILL.md +7 -7
  505. package/plugins/specweave/skills/plugin-validator/SKILL.md +9 -9
  506. package/plugins/specweave/skills/pm-closure-validation/SKILL.md +4 -4
  507. package/plugins/specweave/skills/progress-sync/SKILL.md +51 -51
  508. package/plugins/specweave/skills/project-kickstarter/SKILL.md +11 -11
  509. package/plugins/specweave/skills/role-orchestrator/README.md +1 -1
  510. package/plugins/specweave/skills/role-orchestrator/SKILL.md +4 -4
  511. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +17 -17
  512. package/plugins/specweave/skills/spec-generator/SKILL.md +6 -6
  513. package/plugins/specweave/skills/tdd-workflow/SKILL.md +21 -21
  514. package/plugins/specweave/skills/translator/SKILL.md +4 -4
  515. package/plugins/specweave/skills/umbrella-repo-detector/SKILL.md +5 -5
  516. package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
  517. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +4 -4
  518. package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +4 -4
  519. package/plugins/specweave-ado/commands/cleanup-duplicates.md +9 -9
  520. package/plugins/specweave-ado/commands/clone.md +17 -17
  521. package/plugins/specweave-ado/commands/close.md +10 -10
  522. package/plugins/specweave-ado/commands/create.md +8 -8
  523. package/plugins/specweave-ado/commands/import-areas.md +15 -15
  524. package/plugins/specweave-ado/commands/import-projects.md +12 -12
  525. package/plugins/specweave-ado/commands/pull.md +25 -25
  526. package/plugins/specweave-ado/commands/push.md +20 -20
  527. package/plugins/specweave-ado/commands/reconcile.md +7 -7
  528. package/plugins/specweave-ado/commands/status.md +7 -7
  529. package/plugins/specweave-ado/commands/sync.md +17 -17
  530. package/plugins/specweave-ado/hooks/post-living-docs-update.sh +2 -2
  531. package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
  532. package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
  533. package/plugins/specweave-ado/skills/{specweave-ado-mapper → ado-mapper}/SKILL.md +2 -2
  534. package/plugins/specweave-ado/skills/ado-multi-project/SKILL.md +6 -6
  535. package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +5 -5
  536. package/plugins/specweave-ado/skills/ado-sync/SKILL.md +19 -19
  537. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +1 -1
  538. package/plugins/specweave-alternatives/commands/alternatives-analyze.md +14 -14
  539. package/plugins/specweave-backend/.claude-plugin/plugin.json +1 -1
  540. package/plugins/specweave-confluent/.claude-plugin/plugin.json +1 -1
  541. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +1 -1
  542. package/plugins/specweave-cost-optimizer/commands/cost-analyze.md +1 -1
  543. package/plugins/specweave-cost-optimizer/commands/cost-optimize.md +1 -1
  544. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
  545. package/plugins/specweave-diagrams/commands/diagrams-generate.md +1 -1
  546. package/plugins/specweave-docs/.claude-plugin/plugin.json +1 -1
  547. package/plugins/specweave-docs/commands/build.md +9 -9
  548. package/plugins/specweave-docs/commands/generate.md +22 -22
  549. package/plugins/specweave-docs/commands/health.md +10 -10
  550. package/plugins/specweave-docs/commands/init.md +9 -9
  551. package/plugins/specweave-docs/commands/organize.md +10 -10
  552. package/plugins/specweave-docs/commands/validate.md +9 -9
  553. package/plugins/specweave-docs/commands/view.md +391 -0
  554. package/plugins/specweave-docs/skills/preview/SKILL.md +60 -21
  555. package/plugins/specweave-figma/.claude-plugin/plugin.json +1 -1
  556. package/plugins/specweave-figma/commands/figma-import.md +1 -1
  557. package/plugins/specweave-figma/commands/figma-to-react.md +1 -1
  558. package/plugins/specweave-figma/commands/figma-tokens.md +1 -1
  559. package/plugins/specweave-frontend/.claude-plugin/plugin.json +1 -1
  560. package/plugins/specweave-frontend/agents/frontend-architect/README.md +5 -5
  561. package/plugins/specweave-frontend/commands/component-generate.md +1 -1
  562. package/plugins/specweave-frontend/commands/design-system-init.md +1 -1
  563. package/plugins/specweave-frontend/commands/frontend-scaffold.md +1 -1
  564. package/plugins/specweave-frontend/commands/nextjs-setup.md +1 -1
  565. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
  566. package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +4 -4
  567. package/plugins/specweave-github/SYNC-ARCHITECTURE-FIX-SUMMARY.md +18 -18
  568. package/plugins/specweave-github/agents/github-manager/AGENT.md +8 -8
  569. package/plugins/specweave-github/commands/cleanup-duplicates.md +8 -8
  570. package/plugins/specweave-github/commands/close.md +25 -25
  571. package/plugins/specweave-github/commands/create.md +17 -17
  572. package/plugins/specweave-github/commands/pull.md +12 -12
  573. package/plugins/specweave-github/commands/push.md +12 -12
  574. package/plugins/specweave-github/commands/reconcile.md +7 -7
  575. package/plugins/specweave-github/commands/status.md +24 -24
  576. package/plugins/specweave-github/commands/sync.md +34 -34
  577. package/plugins/specweave-github/commands/update-user-story.md +6 -6
  578. package/plugins/specweave-github/hooks/README.md +8 -8
  579. package/plugins/specweave-github/hooks/post-task-completion.sh +2 -2
  580. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +12 -4
  581. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +16 -4
  582. package/plugins/specweave-github/lib/completion-calculator.js +3 -1
  583. package/plugins/specweave-github/lib/completion-calculator.ts +6 -0
  584. package/plugins/specweave-github/lib/duplicate-detector.js +12 -6
  585. package/plugins/specweave-github/lib/duplicate-detector.ts +22 -6
  586. package/plugins/specweave-github/lib/github-board-resolver.js +7 -2
  587. package/plugins/specweave-github/lib/github-board-resolver.ts +13 -2
  588. package/plugins/specweave-github/lib/github-client-v2.js +29 -18
  589. package/plugins/specweave-github/lib/github-client-v2.ts +33 -18
  590. package/plugins/specweave-github/lib/github-feature-sync.js +41 -11
  591. package/plugins/specweave-github/lib/github-feature-sync.ts +52 -11
  592. package/plugins/specweave-github/lib/github-hierarchical-sync.js +6 -1
  593. package/plugins/specweave-github/lib/github-hierarchical-sync.ts +12 -1
  594. package/plugins/specweave-github/lib/github-increment-sync-cli.js +35 -17
  595. package/plugins/specweave-github/lib/github-increment-sync-cli.ts +44 -16
  596. package/plugins/specweave-github/lib/github-issue-updater.js +8 -3
  597. package/plugins/specweave-github/lib/github-issue-updater.ts +16 -3
  598. package/plugins/specweave-github/lib/github-spec-sync.js +14 -4
  599. package/plugins/specweave-github/lib/github-spec-sync.ts +19 -4
  600. package/plugins/specweave-github/lib/github-sync-bidirectional.js +8 -3
  601. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +14 -3
  602. package/plugins/specweave-github/lib/github-sync-increment-changes.js +9 -4
  603. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +15 -4
  604. package/plugins/specweave-github/lib/increment-issue-builder.js +23 -10
  605. package/plugins/specweave-github/lib/increment-issue-builder.ts +29 -11
  606. package/plugins/specweave-github/lib/user-story-content-builder.js +19 -16
  607. package/plugins/specweave-github/lib/user-story-content-builder.ts +24 -19
  608. package/plugins/specweave-github/lib/user-story-issue-builder.js +10 -13
  609. package/plugins/specweave-github/lib/user-story-issue-builder.ts +20 -19
  610. package/plugins/specweave-github/reference/github-specweave-mapping.md +1 -1
  611. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +3 -3
  612. package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +8 -8
  613. package/plugins/specweave-github/skills/github-sync/SKILL.md +14 -14
  614. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
  615. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-monitor-setup.md → monitor-setup.md} +1 -1
  616. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-slo-implement.md → slo-implement.md} +1 -1
  617. package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
  618. package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +3 -3
  619. package/plugins/specweave-jira/commands/cleanup-duplicates.md +9 -9
  620. package/plugins/specweave-jira/commands/close.md +13 -13
  621. package/plugins/specweave-jira/commands/create.md +8 -8
  622. package/plugins/specweave-jira/commands/import-boards.md +15 -15
  623. package/plugins/specweave-jira/commands/import-projects-full.md +15 -15
  624. package/plugins/specweave-jira/commands/import-projects.md +10 -10
  625. package/plugins/specweave-jira/commands/pull.md +10 -10
  626. package/plugins/specweave-jira/commands/push.md +11 -11
  627. package/plugins/specweave-jira/commands/reconcile.md +7 -7
  628. package/plugins/specweave-jira/commands/status.md +16 -16
  629. package/plugins/specweave-jira/commands/sync.md +27 -27
  630. package/plugins/specweave-jira/skills/{specweave-jira-mapper → jira-mapper}/SKILL.md +2 -2
  631. package/plugins/specweave-jira/skills/jira-resource-validator/SKILL.md +4 -4
  632. package/plugins/specweave-jira/skills/jira-sync/SKILL.md +5 -5
  633. package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
  634. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +10 -10
  635. package/plugins/specweave-kafka/README.md +12 -12
  636. package/plugins/specweave-kafka/commands/deploy.md +5 -5
  637. package/plugins/specweave-kafka/commands/dev-env.md +2 -2
  638. package/plugins/specweave-kafka/commands/mcp-configure.md +3 -3
  639. package/plugins/specweave-kafka/commands/monitor-setup.md +3 -3
  640. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +4 -4
  641. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +5 -5
  642. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +6 -6
  643. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
  644. package/plugins/specweave-kafka-streams/commands/topology.md +4 -4
  645. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +1 -1
  646. package/plugins/specweave-ml/.claude-plugin/plugin.json +1 -1
  647. package/plugins/specweave-ml/README.md +9 -9
  648. package/plugins/specweave-ml/commands/{specweave-ml-deploy.md → deploy.md} +1 -1
  649. package/plugins/specweave-ml/commands/{specweave-ml-evaluate.md → evaluate.md} +1 -1
  650. package/plugins/specweave-ml/commands/{specweave-ml-explain.md → explain.md} +1 -1
  651. package/plugins/specweave-ml/commands/{specweave-ml-pipeline.md → pipeline.md} +1 -1
  652. package/plugins/specweave-ml/skills/automl-optimizer/SKILL.md +1 -1
  653. package/plugins/specweave-ml/skills/data-visualizer/SKILL.md +1 -1
  654. package/plugins/specweave-ml/skills/experiment-tracker/SKILL.md +4 -4
  655. package/plugins/specweave-ml/skills/feature-engineer/SKILL.md +1 -1
  656. package/plugins/specweave-ml/skills/ml-deployment-helper/SKILL.md +2 -2
  657. package/plugins/specweave-ml/skills/ml-pipeline-orchestrator/SKILL.md +10 -10
  658. package/plugins/specweave-ml/skills/model-registry/SKILL.md +1 -1
  659. package/plugins/specweave-ml/skills/time-series-forecaster/SKILL.md +1 -1
  660. package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -1
  661. package/plugins/specweave-mobile/README.md +2 -2
  662. package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +2 -2
  663. package/plugins/specweave-mobile/skills/react-native-setup/SKILL.md +1 -1
  664. package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
  665. package/plugins/specweave-n8n/commands/workflow-template.md +4 -4
  666. package/plugins/specweave-payments/.claude-plugin/plugin.json +1 -1
  667. package/plugins/specweave-payments/commands/stripe-setup.md +1 -1
  668. package/plugins/specweave-payments/commands/subscription-flow.md +1 -1
  669. package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +1 -1
  670. package/plugins/specweave-plugin-dev/commands/plugin-create.md +1 -1
  671. package/plugins/specweave-plugin-dev/commands/plugin-publish.md +1 -1
  672. package/plugins/specweave-plugin-dev/commands/plugin-test.md +1 -1
  673. package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
  674. package/plugins/specweave-release/IMPLEMENTATION.md +14 -14
  675. package/plugins/specweave-release/README.md +33 -33
  676. package/plugins/specweave-release/agents/release-manager/AGENT.md +18 -18
  677. package/plugins/specweave-release/commands/{specweave-release-align.md → align.md} +19 -19
  678. package/plugins/specweave-release/commands/{specweave-release-init.md → init.md} +19 -19
  679. package/plugins/specweave-release/commands/{specweave-release-npm.md → npm.md} +14 -14
  680. package/plugins/specweave-release/commands/{specweave-release-platform.md → platform.md} +17 -17
  681. package/plugins/specweave-release/commands/{specweave-release-rc.md → rc.md} +37 -37
  682. package/plugins/specweave-release/hooks/post-task-completion.sh +1 -1
  683. package/plugins/specweave-release/skills/rc-manager/SKILL.md +12 -12
  684. package/plugins/specweave-release/skills/release-coordinator/SKILL.md +11 -11
  685. package/plugins/specweave-release/skills/release-strategy-advisor/SKILL.md +4 -4
  686. package/plugins/specweave-release/skills/version-aligner/SKILL.md +7 -7
  687. package/plugins/specweave-testing/.claude-plugin/plugin.json +1 -1
  688. package/plugins/specweave-testing/agents/qa-engineer/README.md +5 -5
  689. package/plugins/specweave-testing/commands/e2e-setup.md +1 -1
  690. package/plugins/specweave-testing/commands/test-coverage.md +1 -1
  691. package/plugins/specweave-testing/commands/test-generate.md +1 -1
  692. package/plugins/specweave-testing/commands/test-init.md +1 -1
  693. package/plugins/specweave-tooling/.claude-plugin/plugin.json +1 -1
  694. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-create.md → skill-create.md} +1 -1
  695. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-package.md → skill-package.md} +1 -1
  696. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-validate.md → skill-validate.md} +1 -1
  697. package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
  698. package/plugins/specweave-ui/commands/ui-automate.md +9 -9
  699. package/plugins/specweave-ui/commands/ui-inspect.md +6 -6
  700. package/src/templates/AGENTS.md.template +73 -77
  701. package/src/templates/CLAUDE.md.template +23 -19
  702. package/dist/src/cli/commands/switch-project.d.ts +0 -13
  703. package/dist/src/cli/commands/switch-project.d.ts.map +0 -1
  704. package/dist/src/cli/commands/switch-project.js +0 -78
  705. package/dist/src/cli/commands/switch-project.js.map +0 -1
  706. package/plugins/specweave/commands/specweave-init-multiproject.md +0 -146
  707. package/plugins/specweave/commands/specweave-judge.md +0 -276
  708. package/plugins/specweave-core/.claude-plugin/plugin.json +0 -21
  709. package/plugins/specweave-core/commands/architecture-review.md +0 -288
  710. package/plugins/specweave-core/commands/code-review.md +0 -213
  711. package/plugins/specweave-core/commands/refactor-plan.md +0 -249
  712. package/plugins/specweave-core/skills/code-quality/SKILL.md +0 -158
  713. package/plugins/specweave-core/skills/design-patterns/SKILL.md +0 -245
  714. package/plugins/specweave-core/skills/software-architecture/SKILL.md +0 -84
  715. package/plugins/specweave-docs/commands/preview.md +0 -274
  716. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-1-increment-naming.yaml +0 -0
  717. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-2-source-of-truth.yaml +0 -0
  718. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-3-increment-discipline.yaml +0 -0
  719. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-4-file-placement.yaml +0 -0
@@ -0,0 +1,406 @@
1
+ #!/bin/bash
2
+ # Comprehensive test suite for per-us-project-validator.sh
3
+ # Tests that each User Story in spec.md has **Project**: (and **Board**: for 2-level)
4
+ #
5
+ # Usage: bash per-us-project-validator.test.sh
6
+ #
7
+ # v0.34.0 - Initial test suite with all US formats
8
+
9
+ set -e
10
+
11
+ GUARD="$(dirname "$0")/per-us-project-validator.sh"
12
+ TEST_DIR=$(mktemp -d)
13
+ PASS=0
14
+ FAIL=0
15
+ TOTAL=0
16
+
17
+ # Colors for output
18
+ RED='\033[0;31m'
19
+ GREEN='\033[0;32m'
20
+ YELLOW='\033[1;33m'
21
+ NC='\033[0m' # No Color
22
+
23
+ cleanup() {
24
+ rm -rf "$TEST_DIR"
25
+ }
26
+ trap cleanup EXIT
27
+
28
+ # Test helper: should block
29
+ test_should_block() {
30
+ local name="$1"
31
+ local spec_content="$2"
32
+ TOTAL=$((TOTAL + 1))
33
+
34
+ local file_path="$TEST_DIR/.specweave/increments/0001-test/spec.md"
35
+ mkdir -p "$(dirname "$file_path")"
36
+
37
+ # Build JSON input for the guard
38
+ # Use printf + jq -Rs to properly escape newlines in the content
39
+ local json_input
40
+ json_input=$(printf '%s' "$spec_content" | jq -Rs \
41
+ --arg tool_name "Write" \
42
+ --arg file_path "$file_path" \
43
+ '{tool_name: $tool_name, tool_input: {file_path: $file_path, content: .}}')
44
+
45
+ result=$(echo "$json_input" | bash "$GUARD" 2>&1; echo "EXIT:$?")
46
+ exit_code=$(echo "$result" | grep -o 'EXIT:[0-9]*' | cut -d: -f2)
47
+
48
+ if [[ "$exit_code" == "0" ]] && echo "$result" | grep -q '"decision".*"block"'; then
49
+ echo -e "${GREEN}✓ BLOCKED${NC}: $name"
50
+ PASS=$((PASS + 1))
51
+ else
52
+ echo -e "${RED}✗ NOT BLOCKED${NC}: $name"
53
+ echo " Exit code: $exit_code"
54
+ echo " Result: $(echo "$result" | head -3)"
55
+ FAIL=$((FAIL + 1))
56
+ fi
57
+ }
58
+
59
+ # Test helper: should allow
60
+ test_should_allow() {
61
+ local name="$1"
62
+ local spec_content="$2"
63
+ TOTAL=$((TOTAL + 1))
64
+
65
+ local file_path="$TEST_DIR/.specweave/increments/0001-test/spec.md"
66
+ mkdir -p "$(dirname "$file_path")"
67
+
68
+ # Build JSON input for the guard
69
+ # Use printf + jq -Rs to properly escape newlines in the content
70
+ local json_input
71
+ json_input=$(printf '%s' "$spec_content" | jq -Rs \
72
+ --arg tool_name "Write" \
73
+ --arg file_path "$file_path" \
74
+ '{tool_name: $tool_name, tool_input: {file_path: $file_path, content: .}}')
75
+
76
+ result=$(echo "$json_input" | bash "$GUARD" 2>&1; echo "EXIT:$?")
77
+ exit_code=$(echo "$result" | grep -o 'EXIT:[0-9]*' | cut -d: -f2)
78
+
79
+ if [[ "$exit_code" == "0" ]] && echo "$result" | grep -q '"decision".*"allow"'; then
80
+ echo -e "${GREEN}✓ ALLOWED${NC}: $name"
81
+ PASS=$((PASS + 1))
82
+ else
83
+ echo -e "${RED}✗ WRONGLY BLOCKED${NC}: $name"
84
+ echo " Exit code: $exit_code"
85
+ echo " Result: $(echo "$result" | head -5)"
86
+ FAIL=$((FAIL + 1))
87
+ fi
88
+ }
89
+
90
+ echo "========================================"
91
+ echo " PER-US PROJECT VALIDATOR - COMPREHENSIVE TESTS"
92
+ echo "========================================"
93
+ echo ""
94
+ echo "Test directory: $TEST_DIR"
95
+ echo ""
96
+
97
+ echo -e "${YELLOW}=== SIMPLE US FORMAT (### US-001:) ===${NC}"
98
+
99
+ test_should_allow "Simple US with Project field" '---
100
+ increment: 0001-test
101
+ project: my-app
102
+ ---
103
+ # Feature
104
+
105
+ ### US-001: Login Form
106
+ **Project**: frontend-app
107
+
108
+ **As a** user
109
+ **I want** to log in
110
+ **So that** I can access the app
111
+
112
+ **Acceptance Criteria**:
113
+ - [ ] **AC-US1-01**: Form exists
114
+ '
115
+
116
+ test_should_block "Simple US WITHOUT Project field" '---
117
+ increment: 0001-test
118
+ project: my-app
119
+ ---
120
+ # Feature
121
+
122
+ ### US-001: Login Form
123
+
124
+ **As a** user
125
+ **I want** to log in
126
+ **So that** I can access the app
127
+ '
128
+
129
+ echo ""
130
+ echo -e "${YELLOW}=== MULTI-PROJECT US FORMAT (#### US-FE-001:) ===${NC}"
131
+
132
+ test_should_allow "Multi-project US-FE-001 with Project field" '---
133
+ increment: 0001-test
134
+ project: my-app
135
+ multi_project: true
136
+ ---
137
+ # Feature
138
+
139
+ #### US-FE-001: Login Form UI
140
+ **Project**: frontend-app
141
+
142
+ **As a** user
143
+ **I want** to see a login form
144
+
145
+ #### US-BE-001: Auth API
146
+ **Project**: backend-api
147
+
148
+ **As a** frontend
149
+ **I want** auth endpoints
150
+ '
151
+
152
+ test_should_block "Multi-project US-FE-001 WITHOUT Project field" '---
153
+ increment: 0001-test
154
+ project: my-app
155
+ multi_project: true
156
+ ---
157
+ # Feature
158
+
159
+ #### US-FE-001: Login Form UI
160
+
161
+ **As a** user
162
+ **I want** to see a login form
163
+ '
164
+
165
+ echo ""
166
+ echo -e "${YELLOW}=== MIXED FORMAT (### with prefixes) ===${NC}"
167
+
168
+ test_should_allow "Mixed: ### US-FE-001 with Project" '---
169
+ increment: 0001-test
170
+ project: my-app
171
+ ---
172
+ # Feature
173
+
174
+ ### US-FE-001: Frontend Story
175
+ **Project**: frontend
176
+
177
+ ### US-BE-001: Backend Story
178
+ **Project**: backend
179
+ '
180
+
181
+ test_should_block "Mixed: ### US-FE-001 without Project" '---
182
+ increment: 0001-test
183
+ project: my-app
184
+ ---
185
+ # Feature
186
+
187
+ ### US-FE-001: Frontend Story
188
+
189
+ ### US-BE-001: Backend Story
190
+ **Project**: backend
191
+ '
192
+
193
+ echo ""
194
+ echo -e "${YELLOW}=== SHARED PROJECT PREFIX ===${NC}"
195
+
196
+ test_should_allow "US-SHARED-001 with Project" '---
197
+ increment: 0001-test
198
+ project: my-app
199
+ ---
200
+ # Feature
201
+
202
+ #### US-SHARED-001: Shared Types
203
+ **Project**: shared-lib
204
+
205
+ **As a** developer
206
+ **I want** shared types
207
+ '
208
+
209
+ test_should_block "US-SHARED-001 without Project" '---
210
+ increment: 0001-test
211
+ project: my-app
212
+ ---
213
+ # Feature
214
+
215
+ #### US-SHARED-001: Shared Types
216
+
217
+ **As a** developer
218
+ **I want** shared types
219
+ '
220
+
221
+ echo ""
222
+ echo -e "${YELLOW}=== MULTIPLE PROJECTS (1:1 VIOLATION - COMMA SEPARATED) ===${NC}"
223
+
224
+ test_should_block "Multiple projects (comma separated) - FORBIDDEN" '---
225
+ increment: 0001-test
226
+ project: my-app
227
+ ---
228
+ # Feature
229
+
230
+ ### US-001: Cross-cutting Story
231
+ **Project**: frontend-app, backend-api
232
+
233
+ **As a** user
234
+ **I want** everything
235
+ '
236
+
237
+ test_should_block "Multiple projects with spaces" '---
238
+ increment: 0001-test
239
+ project: my-app
240
+ ---
241
+ # Feature
242
+
243
+ ### US-001: Cross-cutting Story
244
+ **Project**: frontend-app,backend-api,shared
245
+
246
+ **As a** user
247
+ **I want** everything
248
+ '
249
+
250
+ echo ""
251
+ echo -e "${YELLOW}=== NO USER STORIES (should allow) ===${NC}"
252
+
253
+ test_should_allow "Spec without any User Stories" '---
254
+ increment: 0001-test
255
+ project: my-app
256
+ ---
257
+ # Feature Overview
258
+
259
+ This is just an overview document.
260
+
261
+ ## Goals
262
+
263
+ - Goal 1
264
+ - Goal 2
265
+ '
266
+
267
+ test_should_allow "Tasks-only spec (no US headings)" '---
268
+ increment: 0001-test
269
+ project: my-app
270
+ ---
271
+ # Implementation Tasks
272
+
273
+ ## T-001: Setup
274
+
275
+ Do setup stuff.
276
+ '
277
+
278
+ echo ""
279
+ echo -e "${YELLOW}=== ALL USER STORIES HAVE PROJECT ===${NC}"
280
+
281
+ test_should_allow "Multiple US, all with Project" '---
282
+ increment: 0001-test
283
+ project: my-app
284
+ ---
285
+ # Feature
286
+
287
+ ### US-001: First Story
288
+ **Project**: app-a
289
+
290
+ ### US-002: Second Story
291
+ **Project**: app-b
292
+
293
+ ### US-003: Third Story
294
+ **Project**: app-c
295
+ '
296
+
297
+ test_should_block "Multiple US, one missing Project" '---
298
+ increment: 0001-test
299
+ project: my-app
300
+ ---
301
+ # Feature
302
+
303
+ ### US-001: First Story
304
+ **Project**: app-a
305
+
306
+ ### US-002: Second Story
307
+
308
+ ### US-003: Third Story
309
+ **Project**: app-c
310
+ '
311
+
312
+ echo ""
313
+ echo -e "${YELLOW}=== NON-WRITE TOOLS ===${NC}"
314
+
315
+ # Test with Edit tool (should allow - no full content)
316
+ TOTAL=$((TOTAL + 1))
317
+ json_input=$(jq -n \
318
+ --arg tool_name "Edit" \
319
+ --arg file_path "$TEST_DIR/.specweave/increments/0001-test/spec.md" \
320
+ '{tool_name: $tool_name, tool_input: {file_path: $file_path}}')
321
+
322
+ result=$(echo "$json_input" | bash "$GUARD" 2>&1; echo "EXIT:$?")
323
+ exit_code=$(echo "$result" | grep -o 'EXIT:[0-9]*' | cut -d: -f2)
324
+ if [[ "$exit_code" == "0" ]]; then
325
+ echo -e "${GREEN}✓ ALLOWED${NC}: Edit tool (no full content validation)"
326
+ PASS=$((PASS + 1))
327
+ else
328
+ echo -e "${RED}✗ FAILED${NC}: Edit tool should be allowed"
329
+ FAIL=$((FAIL + 1))
330
+ fi
331
+
332
+ echo ""
333
+ echo -e "${YELLOW}=== BYPASS MODES ===${NC}"
334
+
335
+ # Test SPECWEAVE_FORCE_PROJECT bypass
336
+ TOTAL=$((TOTAL + 1))
337
+ spec_content='---
338
+ increment: 0001-test
339
+ ---
340
+ ### US-001: No Project
341
+ **As a** user
342
+ **I want** something
343
+ '
344
+ json_input=$(jq -n \
345
+ --arg tool_name "Write" \
346
+ --arg file_path "$TEST_DIR/.specweave/increments/0001-test/spec.md" \
347
+ --arg content "$spec_content" \
348
+ '{tool_name: $tool_name, tool_input: {file_path: $file_path, content: $content}}')
349
+
350
+ result=$(SPECWEAVE_FORCE_PROJECT=1 bash -c "echo '$json_input' | bash '$GUARD'" 2>&1; echo "EXIT:$?")
351
+ exit_code=$(echo "$result" | grep -o 'EXIT:[0-9]*' | cut -d: -f2)
352
+ if [[ "$exit_code" == "0" ]] && echo "$result" | grep -q "bypassed"; then
353
+ echo -e "${GREEN}✓ ALLOWED (bypass)${NC}: SPECWEAVE_FORCE_PROJECT=1"
354
+ PASS=$((PASS + 1))
355
+ else
356
+ echo -e "${RED}✗ BYPASS FAILED${NC}: SPECWEAVE_FORCE_PROJECT=1"
357
+ FAIL=$((FAIL + 1))
358
+ fi
359
+
360
+ # Test SPECWEAVE_LEGACY_SPEC bypass
361
+ TOTAL=$((TOTAL + 1))
362
+ result=$(SPECWEAVE_LEGACY_SPEC=1 bash -c "echo '$json_input' | bash '$GUARD'" 2>&1; echo "EXIT:$?")
363
+ exit_code=$(echo "$result" | grep -o 'EXIT:[0-9]*' | cut -d: -f2)
364
+ if [[ "$exit_code" == "0" ]] && echo "$result" | grep -q "legacy"; then
365
+ echo -e "${GREEN}✓ ALLOWED (bypass)${NC}: SPECWEAVE_LEGACY_SPEC=1"
366
+ PASS=$((PASS + 1))
367
+ else
368
+ echo -e "${RED}✗ BYPASS FAILED${NC}: SPECWEAVE_LEGACY_SPEC=1"
369
+ FAIL=$((FAIL + 1))
370
+ fi
371
+
372
+ echo ""
373
+ echo -e "${YELLOW}=== FILES OUTSIDE INCREMENTS ===${NC}"
374
+
375
+ # Test file outside increments folder
376
+ TOTAL=$((TOTAL + 1))
377
+ json_input=$(jq -n \
378
+ --arg tool_name "Write" \
379
+ --arg file_path "$TEST_DIR/other/spec.md" \
380
+ --arg content "no project" \
381
+ '{tool_name: $tool_name, tool_input: {file_path: $file_path, content: $content}}')
382
+
383
+ result=$(echo "$json_input" | bash "$GUARD" 2>&1; echo "EXIT:$?")
384
+ exit_code=$(echo "$result" | grep -o 'EXIT:[0-9]*' | cut -d: -f2)
385
+ if [[ "$exit_code" == "0" ]] && echo "$result" | grep -q '"decision".*"allow"'; then
386
+ echo -e "${GREEN}✓ ALLOWED${NC}: spec.md outside increments folder"
387
+ PASS=$((PASS + 1))
388
+ else
389
+ echo -e "${RED}✗ FAILED${NC}: Files outside increments should be allowed"
390
+ FAIL=$((FAIL + 1))
391
+ fi
392
+
393
+ echo ""
394
+ echo "========================================"
395
+ echo " RESULTS"
396
+ echo "========================================"
397
+ echo -e "Total: $TOTAL"
398
+ echo -e "${GREEN}Passed: $PASS${NC}"
399
+ if [[ $FAIL -gt 0 ]]; then
400
+ echo -e "${RED}Failed: $FAIL${NC}"
401
+ exit 1
402
+ else
403
+ echo -e "Failed: 0"
404
+ echo ""
405
+ echo -e "${GREEN}ALL TESTS PASSED!${NC}"
406
+ fi
@@ -38,7 +38,7 @@ if [[ -f "$THROTTLE_FILE" ]]; then
38
38
  fi
39
39
  if [[ $AGE -lt $THROTTLE_WINDOW ]]; then
40
40
  REMAINING=$((THROTTLE_WINDOW - AGE))
41
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] [github-sync] THROTTLED $INC_ID (wait ${REMAINING}s, use /specweave:sync-progress to bypass)" >> "$THROTTLE_LOG" 2>/dev/null
41
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] [github-sync] THROTTLED $INC_ID (wait ${REMAINING}s, use /sw:sync-progress to bypass)" >> "$THROTTLE_LOG" 2>/dev/null
42
42
  exit 0
43
43
  fi
44
44
  fi
@@ -50,6 +50,9 @@ import { consoleLogger } from '../vendor/utils/logger.js';
50
50
  // Import US completion orchestrator (NEW in v0.25.0+)
51
51
  import { syncCompletedUserStories } from './us-completion-orchestrator.js';
52
52
 
53
+ // Import auto-transition (NEW in v0.35.0+ - CRITICAL for preventing auto-completion bug)
54
+ import { checkAndTransitionToReadyForReview } from '../vendor/core/increment/status-auto-transition.js';
55
+
53
56
  // ============================================================================
54
57
  // WRAPPER: UPDATE AC STATUS
55
58
  // ============================================================================
@@ -57,7 +60,7 @@ import { syncCompletedUserStories } from './us-completion-orchestrator.js';
57
60
  // So we replicate the core logic here using ACStatusManager
58
61
  async function updateACStatus(incrementId) {
59
62
  try {
60
- console.log(`\n🔄 [3/5] Syncing AC status for increment ${incrementId}...`);
63
+ console.log(`\n🔄 [3/6] Syncing AC status for increment ${incrementId}...`);
61
64
 
62
65
  const projectRoot = process.cwd();
63
66
 
@@ -100,7 +103,7 @@ async function updateACStatus(incrementId) {
100
103
  // ============================================================================
101
104
  async function syncGitHub(incrementId) {
102
105
  try {
103
- console.log(`\n🔗 [5/5] Syncing to GitHub...`);
106
+ console.log(`\n🔗 [5/6] Syncing to GitHub...`);
104
107
 
105
108
  const projectRoot = process.cwd();
106
109
 
@@ -137,8 +140,35 @@ async function runConsolidatedSync(incrementId) {
137
140
  const results = {};
138
141
 
139
142
  try {
143
+ // OPERATION 0 (v0.35.0+ - CRITICAL): Check for ACTIVE → READY_FOR_REVIEW transition
144
+ // This MUST run FIRST to prevent the auto-completion bug!
145
+ // When all tasks are done, increment transitions to READY_FOR_REVIEW (not COMPLETED).
146
+ // Only /sw:done can then transition to COMPLETED with user approval.
147
+ console.log('\n📋 [0/6] Checking for status auto-transition...');
148
+ try {
149
+ const transitionResult = checkAndTransitionToReadyForReview(incrementId);
150
+ if (transitionResult.transitioned) {
151
+ console.log(`\n🎉 ${transitionResult.message}`);
152
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
153
+ console.log('📋 INCREMENT READY FOR REVIEW');
154
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
155
+ console.log(` Status: ACTIVE → READY_FOR_REVIEW`);
156
+ console.log(` Tasks: ${transitionResult.taskStatus?.completedTasks}/${transitionResult.taskStatus?.totalTasks} completed`);
157
+ console.log('');
158
+ console.log(' To close this increment, run:');
159
+ console.log(` /sw:done ${incrementId}`);
160
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
161
+ } else {
162
+ console.log(` ${transitionResult.message}`);
163
+ }
164
+ results.autoTransition = { success: true, ...transitionResult };
165
+ } catch (error) {
166
+ console.error('❌ Error checking auto-transition:', error.message);
167
+ results.autoTransition = { success: false, error: error.message };
168
+ }
169
+
140
170
  // OPERATION 1: Update tasks.md (uses imported function)
141
- console.log('\n🔄 [1/5] Updating tasks.md...');
171
+ console.log('\n🔄 [1/6] Updating tasks.md...');
142
172
  try {
143
173
  await updateTasksMd(incrementId);
144
174
  results.updateTasks = { success: true };
@@ -148,7 +178,7 @@ async function runConsolidatedSync(incrementId) {
148
178
  }
149
179
 
150
180
  // OPERATION 2: Sync living docs (uses imported function)
151
- console.log('\n📚 [2/5] Syncing living docs...');
181
+ console.log('\n📚 [2/6] Syncing living docs...');
152
182
  try {
153
183
  await syncLivingDocs(incrementId);
154
184
  results.syncDocs = { success: true };
@@ -166,7 +196,7 @@ async function runConsolidatedSync(incrementId) {
166
196
  }
167
197
 
168
198
  // OPERATION 4: Translate living docs (uses imported function)
169
- console.log('\n🌐 [4/5] Checking translation needs...');
199
+ console.log('\n🌐 [4/6] Checking translation needs...');
170
200
  try {
171
201
  await translateLivingDocs(incrementId);
172
202
  results.translate = { success: true };
@@ -81,12 +81,12 @@ ${contentToTranslate}`,
81
81
  } else {
82
82
  console.error("\n\u26A0\uFE0F AUTO-TRANSLATION REQUIRES ONE OF:");
83
83
  console.error(" Option A (Recommended): Set ANTHROPIC_API_KEY environment variable");
84
- console.error(" Option B: Run /specweave:translate <file-path>");
84
+ console.error(" Option B: Run /sw:translate <file-path>");
85
85
  console.error(" Option C: Manually translate the content\n");
86
86
  return postProcessTranslation(
87
87
  `<!-- \u26A0\uFE0F AUTO-TRANSLATION PENDING -->
88
88
  <!-- Set ANTHROPIC_API_KEY for automatic translation -->
89
- <!-- Or run: /specweave:translate to complete -->
89
+ <!-- Or run: /sw:translate to complete -->
90
90
  <!-- Original content below -->
91
91
 
92
92
  ${contentToTranslate}`,
@@ -165,11 +165,11 @@ async function performTranslation(
165
165
  // Non-interactive environment - provide clear instructions
166
166
  console.error('\n⚠️ AUTO-TRANSLATION REQUIRES ONE OF:');
167
167
  console.error(' Option A (Recommended): Set ANTHROPIC_API_KEY environment variable');
168
- console.error(' Option B: Run /specweave:translate <file-path>');
168
+ console.error(' Option B: Run /sw:translate <file-path>');
169
169
  console.error(' Option C: Manually translate the content\n');
170
170
 
171
171
  return postProcessTranslation(
172
- `<!-- ⚠️ AUTO-TRANSLATION PENDING -->\n<!-- Set ANTHROPIC_API_KEY for automatic translation -->\n<!-- Or run: /specweave:translate to complete -->\n<!-- Original content below -->\n\n${contentToTranslate}`,
172
+ `<!-- ⚠️ AUTO-TRANSLATION PENDING -->\n<!-- Set ANTHROPIC_API_KEY for automatic translation -->\n<!-- Or run: /sw:translate to complete -->\n<!-- Original content below -->\n\n${contentToTranslate}`,
173
173
  preserved
174
174
  );
175
175
  }
@@ -97,7 +97,7 @@ if (require.main === module) {
97
97
  const contextFile = prepareReflectionContext(incrementId, taskId);
98
98
  if (contextFile) {
99
99
  console.log(`Reflection context prepared: ${contextFile}`);
100
- console.log("\u2728 Reflection ready. Run /specweave:reflect to analyze your work.");
100
+ console.log("\u2728 Reflection ready. Run /sw:reflect to analyze your work.");
101
101
  } else {
102
102
  console.log("Reflection skipped (disabled or no changes).");
103
103
  }
@@ -171,7 +171,7 @@ if (require.main === module) {
171
171
 
172
172
  if (contextFile) {
173
173
  console.log(`Reflection context prepared: ${contextFile}`);
174
- console.log('✨ Reflection ready. Run /specweave:reflect to analyze your work.');
174
+ console.log('✨ Reflection ready. Run /sw:reflect to analyze your work.');
175
175
  } else {
176
176
  console.log('Reflection skipped (disabled or no changes).');
177
177
  }
@@ -107,10 +107,10 @@ async function syncLivingDocs(incrementId) {
107
107
  } catch (importErr) {
108
108
  // translate-file.js may not be compiled yet
109
109
  console.log(` \u2139\uFE0F Translation module not available (run 'npm run build')`);
110
- console.log(` \u{1F4A1} Tip: Run /specweave:translate to translate manually`);
110
+ console.log(` \u{1F4A1} Tip: Run /sw:translate to translate manually`);
111
111
  }
112
112
  } else if (targetLang !== 'en' && !translationEnabled) {
113
- console.log(` \u2139\uFE0F Translation disabled (use /specweave:translate manually)`);
113
+ console.log(` \u2139\uFE0F Translation disabled (use /sw:translate manually)`);
114
114
  }
115
115
 
116
116
  // ========================================================================
@@ -133,7 +133,7 @@ async function syncLivingDocs(incrementId) {
133
133
  // GATE 3: autoSyncOnCompletion (v0.24.0+ - Automatic vs Manual Sync)
134
134
  // ========================================================================
135
135
  // This setting controls whether sync to external tools happens automatically
136
- // on increment completion or requires manual /specweave:sync-* commands.
136
+ // on increment completion or requires manual /sw:sync-* commands.
137
137
  // DEFAULT: true (automatic sync enabled for better UX)
138
138
  const autoSync = config.sync?.settings?.autoSyncOnCompletion ?? true;
139
139
 
@@ -170,7 +170,7 @@ async function hierarchicalDistribution(incrementId) {
170
170
  // Why this change:
171
171
  // - Old SpecDistributor.distribute() method no longer exists (removed in v3.0.0)
172
172
  // - LivingDocsSync is the official, stable API for syncing increments
173
- // - Used by /specweave:sync-docs command - battle-tested and maintained
173
+ // - Used by /sw:sync-docs command - battle-tested and maintained
174
174
  // - Future-proof: Won't break when internal APIs change
175
175
  //
176
176
  // Architecture:
@@ -259,7 +259,7 @@ async function hierarchicalDistribution(incrementId) {
259
259
  console.error(` \u274C Living docs sync failed: ${error}`);
260
260
  console.error(error.stack);
261
261
  console.error(" \u26A0\uFE0F Living docs sync skipped due to error");
262
- console.error(" \u{1F4A1} Tip: Run /specweave:sync-docs manually to retry");
262
+ console.error(" \u{1F4A1} Tip: Run /sw:sync-docs manually to retry");
263
263
  return {
264
264
  success: false,
265
265
  changedFiles: []
@@ -7,7 +7,7 @@
7
7
  * This script is called from:
8
8
  * - Post-increment-planning hook (auto-translate spec.md, plan.md, tasks.md)
9
9
  * - Post-task-completion hook (auto-translate living docs)
10
- * - Manual /specweave:translate command
10
+ * - Manual /sw:translate command
11
11
  *
12
12
  * Usage:
13
13
  * node translate-file.js <file-path> [--target-lang en] [--preview]
@@ -163,11 +163,11 @@ ${contentToTranslate}`;
163
163
  }
164
164
  console.error("\n\u26A0\uFE0F AUTO-TRANSLATION REQUIRES MANUAL STEP:");
165
165
  console.error(" Option A (Recommended): Set ANTHROPIC_API_KEY environment variable");
166
- console.error(" Option B: Run /specweave:translate <file-path>");
166
+ console.error(" Option B: Run /sw:translate <file-path>");
167
167
  console.error(" Option C: Manually translate the content\n");
168
168
  return `<!-- \u26A0\uFE0F AUTO-TRANSLATION PENDING -->
169
169
  <!-- Set ANTHROPIC_API_KEY for automatic translation -->
170
- <!-- Or run: /specweave:translate to complete -->
170
+ <!-- Or run: /sw:translate to complete -->
171
171
  <!-- Original content below -->
172
172
 
173
173
  ${contentToTranslate}`;
@@ -7,7 +7,7 @@
7
7
  * This script is called from:
8
8
  * - Post-increment-planning hook (auto-translate spec.md, plan.md, tasks.md)
9
9
  * - Post-task-completion hook (auto-translate living docs)
10
- * - Manual /specweave:translate command
10
+ * - Manual /sw:translate command
11
11
  *
12
12
  * Usage:
13
13
  * node translate-file.js <file-path> [--target-lang en] [--preview]
@@ -273,11 +273,11 @@ async function invokeLLMTranslation(prompt: string, verbose: boolean): Promise<s
273
273
 
274
274
  console.error('\n⚠️ AUTO-TRANSLATION REQUIRES MANUAL STEP:');
275
275
  console.error(' Option A (Recommended): Set ANTHROPIC_API_KEY environment variable');
276
- console.error(' Option B: Run /specweave:translate <file-path>');
276
+ console.error(' Option B: Run /sw:translate <file-path>');
277
277
  console.error(' Option C: Manually translate the content\n');
278
278
 
279
279
  // Return original content with clear marker
280
- return `<!-- ⚠️ AUTO-TRANSLATION PENDING -->\n<!-- Set ANTHROPIC_API_KEY for automatic translation -->\n<!-- Or run: /specweave:translate to complete -->\n<!-- Original content below -->\n\n${contentToTranslate}`;
280
+ return `<!-- ⚠️ AUTO-TRANSLATION PENDING -->\n<!-- Set ANTHROPIC_API_KEY for automatic translation -->\n<!-- Or run: /sw:translate to complete -->\n<!-- Original content below -->\n\n${contentToTranslate}`;
281
281
  }
282
282
  }
283
283
 
@@ -67,7 +67,7 @@ async function syncCompletedUserStories(incrementId) {
67
67
  const secondsRemaining = Math.ceil((6e4 - timeSinceLastSync) / 1e3);
68
68
  console.log(`\u23ED\uFE0F US sync throttled (last sync ${Math.floor(timeSinceLastSync / 1e3)}s ago)`);
69
69
  console.log(` \u2139\uFE0F Sync will be available in ${secondsRemaining}s`);
70
- console.log(` \u{1F4A1} Manual sync: /specweave:sync-progress ${incrementId}`);
70
+ console.log(` \u{1F4A1} Manual sync: /sw:sync-progress ${incrementId}`);
71
71
  return {
72
72
  success: true,
73
73
  message: "Sync throttled",
@@ -163,7 +163,7 @@ export async function syncCompletedUserStories(incrementId: string): Promise<USS
163
163
  // Safety:
164
164
  // - fs.writeFile() confirmed to NOT trigger hooks (no infinite loop risk)
165
165
  // - SKIP_EXTERNAL_SYNC still guards external tool sync layer
166
- // - Users can manually sync if needed: /specweave:sync-progress
166
+ // - Users can manually sync if needed: /sw:sync-progress
167
167
  //
168
168
  // Trade-off:
169
169
  // - Potential 60s delay for US completion visibility
@@ -177,7 +177,7 @@ export async function syncCompletedUserStories(incrementId: string): Promise<USS
177
177
 
178
178
  console.log(`⏭️ US sync throttled (last sync ${Math.floor(timeSinceLastSync / 1000)}s ago)`);
179
179
  console.log(` ℹ️ Sync will be available in ${secondsRemaining}s`);
180
- console.log(` 💡 Manual sync: /specweave:sync-progress ${incrementId}`);
180
+ console.log(` 💡 Manual sync: /sw:sync-progress ${incrementId}`);
181
181
 
182
182
  return {
183
183
  success: true,