specweave 0.33.5 → 0.34.0

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 (683) hide show
  1. package/.claude-plugin/README.md +13 -13
  2. package/.claude-plugin/marketplace.json +26 -37
  3. package/CLAUDE.md +427 -70
  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/living-docs.d.ts +1 -0
  69. package/dist/src/cli/commands/living-docs.d.ts.map +1 -1
  70. package/dist/src/cli/commands/living-docs.js +18 -2
  71. package/dist/src/cli/commands/living-docs.js.map +1 -1
  72. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  73. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  74. package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
  75. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  76. package/dist/src/cli/commands/next-command.d.ts +1 -1
  77. package/dist/src/cli/commands/next-command.js +9 -9
  78. package/dist/src/cli/commands/next-command.js.map +1 -1
  79. package/dist/src/cli/commands/notifications.js +3 -3
  80. package/dist/src/cli/commands/notifications.js.map +1 -1
  81. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  82. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  83. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +2 -2
  84. package/dist/src/cli/commands/plan/plan-orchestrator.js +2 -2
  85. package/dist/src/cli/commands/plan/plan-validator.js +2 -2
  86. package/dist/src/cli/commands/plan/plan-validator.js.map +1 -1
  87. package/dist/src/cli/commands/plan/types.d.ts +1 -1
  88. package/dist/src/cli/commands/plan/types.js +1 -1
  89. package/dist/src/cli/commands/plan-command.d.ts +3 -3
  90. package/dist/src/cli/commands/plan-command.js +12 -12
  91. package/dist/src/cli/commands/plan-command.js.map +1 -1
  92. package/dist/src/cli/commands/project.d.ts +77 -0
  93. package/dist/src/cli/commands/project.d.ts.map +1 -0
  94. package/dist/src/cli/commands/project.js +526 -0
  95. package/dist/src/cli/commands/project.js.map +1 -0
  96. package/dist/src/cli/commands/save.d.ts +49 -0
  97. package/dist/src/cli/commands/save.d.ts.map +1 -0
  98. package/dist/src/cli/commands/save.js +583 -0
  99. package/dist/src/cli/commands/save.js.map +1 -0
  100. package/dist/src/cli/commands/sync-spec-commits.js +15 -6
  101. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  102. package/dist/src/cli/commands/sync-spec-content.js +15 -6
  103. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  104. package/dist/src/cli/helpers/init/ado-repo-cloning.js +2 -2
  105. package/dist/src/cli/helpers/init/ado-repo-cloning.js.map +1 -1
  106. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.d.ts +1 -1
  107. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js +3 -3
  108. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js.map +1 -1
  109. package/dist/src/cli/helpers/init/brownfield-analysis.js +18 -18
  110. package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -1
  111. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
  112. package/dist/src/cli/helpers/init/directory-structure.js +3 -0
  113. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
  114. package/dist/src/cli/helpers/init/external-import.js +18 -18
  115. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  116. package/dist/src/cli/helpers/init/github-repo-cloning.d.ts +1 -1
  117. package/dist/src/cli/helpers/init/github-repo-cloning.js +3 -3
  118. package/dist/src/cli/helpers/init/github-repo-cloning.js.map +1 -1
  119. package/dist/src/cli/helpers/init/initial-increment-generator.js +12 -12
  120. package/dist/src/cli/helpers/init/living-docs-preflight.js +5 -5
  121. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  122. package/dist/src/cli/helpers/init/next-steps.js +9 -9
  123. package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
  124. package/dist/src/cli/helpers/init/plugin-installer.js +3 -3
  125. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
  126. package/dist/src/cli/helpers/init/translation-config.js +9 -9
  127. package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
  128. package/dist/src/cli/helpers/init/types.d.ts +1 -1
  129. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  130. package/dist/src/cli/helpers/issue-tracker/ado.js +1 -1
  131. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  132. package/dist/src/cli/helpers/issue-tracker/github.js +1 -1
  133. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  134. package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
  135. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  136. package/dist/src/cli/helpers/issue-tracker/jira.js +1 -1
  137. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  138. package/dist/src/cli/update-status-line.js +1 -1
  139. package/dist/src/cli/update-status-line.js.map +1 -1
  140. package/dist/src/cli/workers/brownfield-worker.js +1 -1
  141. package/dist/src/cli/workers/brownfield-worker.js.map +1 -1
  142. package/dist/src/cli/workers/import-worker.js +1 -1
  143. package/dist/src/cli/workers/import-worker.js.map +1 -1
  144. package/dist/src/core/background/brownfield-launcher.js +4 -4
  145. package/dist/src/core/background/brownfield-launcher.js.map +1 -1
  146. package/dist/src/core/background/index.d.ts +3 -3
  147. package/dist/src/core/background/index.js +3 -3
  148. package/dist/src/core/background/job-launcher.d.ts +1 -1
  149. package/dist/src/core/background/job-launcher.js +3 -3
  150. package/dist/src/core/background/job-launcher.js.map +1 -1
  151. package/dist/src/core/brownfield/importer.js +1 -1
  152. package/dist/src/core/brownfield/importer.js.map +1 -1
  153. package/dist/src/core/config/config-manager.d.ts +7 -1
  154. package/dist/src/core/config/config-manager.d.ts.map +1 -1
  155. package/dist/src/core/config/config-manager.js +24 -2
  156. package/dist/src/core/config/config-manager.js.map +1 -1
  157. package/dist/src/core/config/single-project-migrator.d.ts +110 -0
  158. package/dist/src/core/config/single-project-migrator.d.ts.map +1 -0
  159. package/dist/src/core/config/single-project-migrator.js +179 -0
  160. package/dist/src/core/config/single-project-migrator.js.map +1 -0
  161. package/dist/src/core/config/types.d.ts +3 -3
  162. package/dist/src/core/credentials/credentials-manager.d.ts +25 -4
  163. package/dist/src/core/credentials/credentials-manager.d.ts.map +1 -1
  164. package/dist/src/core/credentials/credentials-manager.js +54 -15
  165. package/dist/src/core/credentials/credentials-manager.js.map +1 -1
  166. package/dist/src/core/deduplication/command-deduplicator.d.ts +4 -4
  167. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -1
  168. package/dist/src/core/deduplication/command-deduplicator.js +3 -3
  169. package/dist/src/core/external-tools/external-items-counter.d.ts +4 -4
  170. package/dist/src/core/external-tools/external-items-counter.js +4 -4
  171. package/dist/src/core/external-tools/external-items-display.js +4 -4
  172. package/dist/src/core/external-tools/external-items-display.js.map +1 -1
  173. package/dist/src/core/increment/completion-validator.js +3 -3
  174. package/dist/src/core/increment/completion-validator.js.map +1 -1
  175. package/dist/src/core/increment/conflict-resolver.js +2 -2
  176. package/dist/src/core/increment/conflict-resolver.js.map +1 -1
  177. package/dist/src/core/increment/desync-detector.d.ts +1 -1
  178. package/dist/src/core/increment/desync-detector.js +3 -3
  179. package/dist/src/core/increment/desync-detector.js.map +1 -1
  180. package/dist/src/core/increment/discipline-checker.js +2 -2
  181. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  182. package/dist/src/core/increment/increment-archiver.js +4 -4
  183. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  184. package/dist/src/core/increment/increment-utils.d.ts +53 -2
  185. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  186. package/dist/src/core/increment/increment-utils.js +78 -7
  187. package/dist/src/core/increment/increment-utils.js.map +1 -1
  188. package/dist/src/core/increment/metadata-manager.js +6 -6
  189. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  190. package/dist/src/core/increment/metadata-validator.js +1 -1
  191. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  192. package/dist/src/core/increment/recent-work-scanner.js +2 -2
  193. package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
  194. package/dist/src/core/increment/spec-sync-manager.js +1 -1
  195. package/dist/src/core/increment/spec-sync-manager.js.map +1 -1
  196. package/dist/src/core/increment/status-auto-transition.d.ts +68 -1
  197. package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -1
  198. package/dist/src/core/increment/status-auto-transition.js +141 -1
  199. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  200. package/dist/src/core/increment/status-change-sync-trigger.d.ts +1 -1
  201. package/dist/src/core/increment/status-change-sync-trigger.js +3 -3
  202. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  203. package/dist/src/core/living-docs/cross-project-sync.d.ts +12 -0
  204. package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
  205. package/dist/src/core/living-docs/cross-project-sync.js +33 -0
  206. package/dist/src/core/living-docs/cross-project-sync.js.map +1 -1
  207. package/dist/src/core/living-docs/feature-archiver.d.ts +3 -3
  208. package/dist/src/core/living-docs/feature-archiver.js +3 -3
  209. package/dist/src/core/living-docs/feature-consistency-validator.js +1 -1
  210. package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
  211. package/dist/src/core/living-docs/feature-id-manager.d.ts +5 -0
  212. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  213. package/dist/src/core/living-docs/feature-id-manager.js +19 -1
  214. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  215. package/dist/src/core/living-docs/governance/standards-generator.js +1 -1
  216. package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -1
  217. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +5 -0
  218. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  219. package/dist/src/core/living-docs/hierarchy-mapper.js +22 -2
  220. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  221. package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -0
  222. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  223. package/dist/src/core/living-docs/living-docs-sync.js +77 -8
  224. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  225. package/dist/src/core/living-docs/project-detector.d.ts +9 -0
  226. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  227. package/dist/src/core/living-docs/project-detector.js +38 -3
  228. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  229. package/dist/src/core/living-docs/suggestions-generator.js +1 -1
  230. package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
  231. package/dist/src/core/notifications/command-integration.js +1 -1
  232. package/dist/src/core/notifications/command-integration.js.map +1 -1
  233. package/dist/src/core/project/adapters/ado-project-adapter.d.ts +73 -0
  234. package/dist/src/core/project/adapters/ado-project-adapter.d.ts.map +1 -0
  235. package/dist/src/core/project/adapters/ado-project-adapter.js +304 -0
  236. package/dist/src/core/project/adapters/ado-project-adapter.js.map +1 -0
  237. package/dist/src/core/project/adapters/github-project-adapter.d.ts +76 -0
  238. package/dist/src/core/project/adapters/github-project-adapter.d.ts.map +1 -0
  239. package/dist/src/core/project/adapters/github-project-adapter.js +315 -0
  240. package/dist/src/core/project/adapters/github-project-adapter.js.map +1 -0
  241. package/dist/src/core/project/adapters/jira-project-adapter.d.ts +69 -0
  242. package/dist/src/core/project/adapters/jira-project-adapter.d.ts.map +1 -0
  243. package/dist/src/core/project/adapters/jira-project-adapter.js +241 -0
  244. package/dist/src/core/project/adapters/jira-project-adapter.js.map +1 -0
  245. package/dist/src/core/project/project-event-bus.d.ts +72 -0
  246. package/dist/src/core/project/project-event-bus.d.ts.map +1 -0
  247. package/dist/src/core/project/project-event-bus.js +150 -0
  248. package/dist/src/core/project/project-event-bus.js.map +1 -0
  249. package/dist/src/core/project/project-manager.d.ts +0 -22
  250. package/dist/src/core/project/project-manager.d.ts.map +1 -1
  251. package/dist/src/core/project/project-manager.js +5 -275
  252. package/dist/src/core/project/project-manager.js.map +1 -1
  253. package/dist/src/core/project/project-registry.d.ts +93 -0
  254. package/dist/src/core/project/project-registry.d.ts.map +1 -0
  255. package/dist/src/core/project/project-registry.js +448 -0
  256. package/dist/src/core/project/project-registry.js.map +1 -0
  257. package/dist/src/core/project/project-resolution.d.ts +229 -0
  258. package/dist/src/core/project/project-resolution.d.ts.map +1 -0
  259. package/dist/src/core/project/project-resolution.js +633 -0
  260. package/dist/src/core/project/project-resolution.js.map +1 -0
  261. package/dist/src/core/project/types/project-types.d.ts +214 -0
  262. package/dist/src/core/project/types/project-types.d.ts.map +1 -0
  263. package/dist/src/core/project/types/project-types.js +9 -0
  264. package/dist/src/core/project/types/project-types.js.map +1 -0
  265. package/dist/src/core/repo-structure/setup-summary.js +2 -2
  266. package/dist/src/core/repo-structure/setup-summary.js.map +1 -1
  267. package/dist/src/core/specs/spec-identifier-detector.d.ts.map +1 -1
  268. package/dist/src/core/specs/spec-identifier-detector.js +8 -5
  269. package/dist/src/core/specs/spec-identifier-detector.js.map +1 -1
  270. package/dist/src/core/status-line/status-line-updater.js +1 -1
  271. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  272. package/dist/src/core/types/increment-metadata.d.ts +3 -3
  273. package/dist/src/core/types/increment-metadata.js +3 -3
  274. package/dist/src/core/types/increment-metadata.js.map +1 -1
  275. package/dist/src/core/types/sync-profile.d.ts +1 -0
  276. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  277. package/dist/src/core/types/sync-profile.js.map +1 -1
  278. package/dist/src/core/validators/ac-presence-validator.d.ts +4 -4
  279. package/dist/src/core/validators/ac-presence-validator.js +3 -3
  280. package/dist/src/core/validators/ac-presence-validator.js.map +1 -1
  281. package/dist/src/core/workflow/backlog-scanner.d.ts +5 -0
  282. package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -1
  283. package/dist/src/core/workflow/backlog-scanner.js +14 -2
  284. package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
  285. package/dist/src/core/workflow/phase-detector.js +17 -17
  286. package/dist/src/core/workflow/phase-detector.js.map +1 -1
  287. package/dist/src/core/workflow/types.d.ts +1 -1
  288. package/dist/src/core/workflow/types.d.ts.map +1 -1
  289. package/dist/src/core/workflow/workflow-orchestrator.d.ts +1 -1
  290. package/dist/src/core/workflow/workflow-orchestrator.js +9 -9
  291. package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -1
  292. package/dist/src/hooks/scheduler-startup.js +1 -1
  293. package/dist/src/hooks/scheduler-startup.js.map +1 -1
  294. package/dist/src/importers/item-converter.js +1 -1
  295. package/dist/src/importers/item-converter.js.map +1 -1
  296. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +17 -1
  297. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  298. package/dist/src/integrations/jira/jira-incremental-mapper.js +20 -12
  299. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  300. package/dist/src/integrations/jira/jira-mapper.d.ts +17 -1
  301. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  302. package/dist/src/integrations/jira/jira-mapper.js +13 -5
  303. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  304. package/dist/src/living-docs/enterprise-analyzer.js +1 -1
  305. package/dist/src/living-docs/enterprise-analyzer.js.map +1 -1
  306. package/dist/src/sync/ado-reconciler.d.ts +5 -0
  307. package/dist/src/sync/ado-reconciler.d.ts.map +1 -1
  308. package/dist/src/sync/ado-reconciler.js +16 -4
  309. package/dist/src/sync/ado-reconciler.js.map +1 -1
  310. package/dist/src/sync/jira-reconciler.d.ts +3 -0
  311. package/dist/src/sync/jira-reconciler.d.ts.map +1 -1
  312. package/dist/src/sync/jira-reconciler.js +12 -5
  313. package/dist/src/sync/jira-reconciler.js.map +1 -1
  314. package/dist/src/types/dashboard-cache.d.ts +4 -2
  315. package/dist/src/types/dashboard-cache.d.ts.map +1 -1
  316. package/dist/src/types/dashboard-cache.js +1 -1
  317. package/dist/src/types/dashboard-cache.js.map +1 -1
  318. package/dist/src/utils/ac-embedder.d.ts +1 -1
  319. package/dist/src/utils/docs-preview/docusaurus-setup.js +2 -2
  320. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  321. package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
  322. package/dist/src/utils/env-multi-project-parser.d.ts +17 -0
  323. package/dist/src/utils/env-multi-project-parser.d.ts.map +1 -1
  324. package/dist/src/utils/env-multi-project-parser.js +26 -1
  325. package/dist/src/utils/env-multi-project-parser.js.map +1 -1
  326. package/dist/src/utils/external-tool-drift-detector.d.ts +2 -2
  327. package/dist/src/utils/external-tool-drift-detector.js +6 -6
  328. package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
  329. package/dist/src/utils/notification-constants.js +2 -2
  330. package/dist/src/utils/notification-constants.js.map +1 -1
  331. package/dist/src/utils/notification-manager.d.ts +12 -3
  332. package/dist/src/utils/notification-manager.d.ts.map +1 -1
  333. package/dist/src/utils/notification-manager.js +51 -49
  334. package/dist/src/utils/notification-manager.js.map +1 -1
  335. package/dist/src/utils/platform-utils.d.ts +12 -3
  336. package/dist/src/utils/platform-utils.d.ts.map +1 -1
  337. package/dist/src/utils/platform-utils.js +35 -16
  338. package/dist/src/utils/platform-utils.js.map +1 -1
  339. package/dist/src/utils/plugin-validator.js +11 -11
  340. package/dist/src/utils/plugin-validator.js.map +1 -1
  341. package/dist/src/validators/ac-coverage-validator.d.ts +1 -1
  342. package/dist/src/validators/ac-coverage-validator.js +1 -1
  343. package/package.json +3 -1
  344. package/plugins/PLUGINS-INDEX.md +1 -2
  345. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  346. package/plugins/specweave/COMMANDS.md +49 -49
  347. package/plugins/specweave/agents/pm/AGENT.md +18 -18
  348. package/plugins/specweave/agents/test-aware-planner/AGENT.md +7 -7
  349. package/plugins/specweave/agents/translator/AGENT.md +2 -2
  350. package/plugins/specweave/commands/{specweave-abandon.md → abandon.md} +20 -20
  351. package/plugins/specweave/commands/{specweave-analyze-standards.sh → analyze-standards.sh} +4 -4
  352. package/plugins/specweave/commands/{specweave-archive-features.md → archive-features.md} +7 -7
  353. package/plugins/specweave/commands/{specweave-archive.md → archive.md} +36 -36
  354. package/plugins/specweave/commands/{specweave-backlog.md → backlog.md} +24 -24
  355. package/plugins/specweave/commands/{specweave-check-hooks.md → check-hooks.md} +10 -10
  356. package/plugins/specweave/commands/{specweave-check-tests.md → check-tests.md} +14 -14
  357. package/plugins/specweave/commands/{specweave-costs.md → costs.md} +8 -8
  358. package/plugins/specweave/commands/{specweave-discrepancies.md → discrepancies.md} +15 -15
  359. package/plugins/specweave/commands/{specweave-discrepancy-to-increment.md → discrepancy-to-increment.md} +10 -10
  360. package/plugins/specweave/commands/{specweave-do.md → do.md} +37 -39
  361. package/plugins/specweave/commands/{specweave-done.md → done.md} +23 -23
  362. package/plugins/specweave/commands/{specweave-embed-acs.md → embed-acs.md} +21 -21
  363. package/plugins/specweave/commands/{specweave-external.md → external.md} +11 -11
  364. package/plugins/specweave/commands/{specweave-fix-duplicates.md → fix-duplicates.md} +16 -16
  365. package/plugins/specweave/commands/{specweave-import-docs.md → import-docs.md} +7 -7
  366. package/plugins/specweave/commands/{specweave-import-external.md → import-external.md} +9 -9
  367. package/plugins/specweave/commands/{specweave-increment.md → increment.md} +17 -17
  368. package/plugins/specweave/commands/{specweave-jobs.md → jobs.md} +28 -28
  369. package/plugins/specweave/commands/{specweave-judge-llm.md → judge-llm.md} +19 -19
  370. package/plugins/specweave/commands/{specweave-living-docs.md → living-docs.md} +72 -29
  371. package/plugins/specweave/commands/migrate-config.md +2 -2
  372. package/plugins/specweave/commands/{specweave-next.md → next.md} +20 -20
  373. package/plugins/specweave/commands/{specweave-notifications.md → notifications.md} +11 -11
  374. package/plugins/specweave/commands/{specweave-organize-docs.md → organize-docs.md} +9 -9
  375. package/plugins/specweave/commands/{specweave-pause.md → pause.md} +19 -19
  376. package/plugins/specweave/commands/{specweave-plan.md → plan.md} +19 -19
  377. package/plugins/specweave/commands/{specweave-progress.md → progress.md} +6 -6
  378. package/plugins/specweave/commands/{specweave-qa.md → qa.md} +15 -15
  379. package/plugins/specweave/commands/{specweave-reopen.md → reopen.md} +41 -41
  380. package/plugins/specweave/commands/{specweave-restore-feature.md → restore-feature.md} +6 -6
  381. package/plugins/specweave/commands/{specweave-restore.md → restore.md} +26 -26
  382. package/plugins/specweave/commands/{specweave-resume.md → resume.md} +33 -33
  383. package/plugins/specweave/commands/revert-wip-limit.md +4 -4
  384. package/plugins/specweave/commands/{specweave-save.md → save.md} +34 -34
  385. package/plugins/specweave/commands/{specweave-status.md → status.md} +29 -29
  386. package/plugins/specweave/commands/{specweave.md → sw.md} +28 -28
  387. package/plugins/specweave/commands/{specweave-sync-acs.md → sync-acs.md} +12 -12
  388. package/plugins/specweave/commands/sync-diagnostics.md +5 -5
  389. package/plugins/specweave/commands/{specweave-sync-docs.md → sync-docs.md} +7 -7
  390. package/plugins/specweave/commands/{specweave-sync-logs.md → sync-logs.md} +14 -14
  391. package/plugins/specweave/commands/{specweave-sync-monitor.md → sync-monitor.md} +5 -5
  392. package/plugins/specweave/commands/{specweave-sync-progress.md → sync-progress.md} +38 -38
  393. package/plugins/specweave/commands/{specweave-sync-specs.md → sync-specs.md} +17 -17
  394. package/plugins/specweave/commands/{specweave-sync-status.md → sync-status.md} +16 -16
  395. package/plugins/specweave/commands/{specweave-sync-tasks.md → sync-tasks.md} +13 -13
  396. package/plugins/specweave/commands/{specweave-tdd-cycle.md → tdd-cycle.md} +1 -1
  397. package/plugins/specweave/commands/{specweave-tdd-green.md → tdd-green.md} +1 -1
  398. package/plugins/specweave/commands/{specweave-tdd-red.md → tdd-red.md} +1 -1
  399. package/plugins/specweave/commands/{specweave-tdd-refactor.md → tdd-refactor.md} +1 -1
  400. package/plugins/specweave/commands/{specweave-translate.md → translate.md} +17 -17
  401. package/plugins/specweave/commands/{specweave-update-scope.md → update-scope.md} +8 -8
  402. package/plugins/specweave/commands/{specweave-update-status.md → update-status.md} +6 -6
  403. package/plugins/specweave/commands/{specweave-validate-features.md → validate-features.md} +8 -8
  404. package/plugins/specweave/commands/{specweave-validate.md → validate.md} +20 -20
  405. package/plugins/specweave/commands/{specweave-workflow.md → workflow.md} +40 -40
  406. package/plugins/specweave/hooks/README.md +5 -5
  407. package/plugins/specweave/hooks/config-env-separator.sh +99 -0
  408. package/plugins/specweave/hooks/github-metadata-guard.sh +73 -0
  409. package/plugins/specweave/hooks/hooks.json +32 -2
  410. package/plugins/specweave/hooks/post-first-increment.sh +2 -2
  411. package/plugins/specweave/hooks/post-increment-completion.sh +7 -7
  412. package/plugins/specweave/hooks/post-increment-planning.sh +11 -11
  413. package/plugins/specweave/hooks/post-increment-status-change.sh +1 -1
  414. package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
  415. package/plugins/specweave/hooks/post-spec-update.sh +2 -2
  416. package/plugins/specweave/hooks/post-task-completion.sh +2 -2
  417. package/plugins/specweave/hooks/pre-increment-start.sh +7 -7
  418. package/plugins/specweave/hooks/project-folder-guard.sh +272 -0
  419. package/plugins/specweave/hooks/spec-project-validator.sh +68 -47
  420. package/plugins/specweave/hooks/user-prompt-submit.sh +27 -27
  421. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +2 -2
  422. package/plugins/specweave/hooks/v2/guards/metadata-json-guard.sh +1 -1
  423. package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +1 -1
  424. package/plugins/specweave/lib/hooks/consolidated-sync.js +35 -5
  425. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +2 -2
  426. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +2 -2
  427. package/plugins/specweave/lib/hooks/prepare-reflection-context.js +1 -1
  428. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +1 -1
  429. package/plugins/specweave/lib/hooks/sync-living-docs.js +5 -5
  430. package/plugins/specweave/lib/hooks/translate-file.d.ts +1 -1
  431. package/plugins/specweave/lib/hooks/translate-file.js +2 -2
  432. package/plugins/specweave/lib/hooks/translate-file.ts +3 -3
  433. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +1 -1
  434. package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +2 -2
  435. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +6 -6
  436. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  437. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.d.ts +113 -0
  438. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js +318 -0
  439. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js.map +1 -0
  440. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +3 -3
  441. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js +3 -3
  442. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js.map +1 -1
  443. package/plugins/specweave/scripts/README.md +9 -9
  444. package/plugins/specweave/scripts/cleanup-state.sh +1 -1
  445. package/plugins/specweave/scripts/jobs.js +2 -2
  446. package/plugins/specweave/scripts/progress.js +6 -6
  447. package/plugins/specweave/scripts/read-costs.sh +3 -3
  448. package/plugins/specweave/scripts/read-jobs.sh +8 -8
  449. package/plugins/specweave/scripts/read-progress.sh +17 -10
  450. package/plugins/specweave/scripts/read-status.sh +7 -7
  451. package/plugins/specweave/scripts/read-workflow.sh +18 -18
  452. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +6 -5
  453. package/plugins/specweave/scripts/session-watchdog.sh +4 -4
  454. package/plugins/specweave/scripts/status.js +7 -7
  455. package/plugins/specweave/scripts/update-dashboard-cache.sh +28 -10
  456. package/plugins/specweave/skills/SKILLS-INDEX.md +4 -4
  457. package/plugins/specweave/skills/archive-increments/SKILL.md +15 -15
  458. package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +5 -5
  459. package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +4 -4
  460. package/plugins/specweave/skills/context-loader/SKILL.md +1 -1
  461. package/plugins/specweave/skills/{specweave-detector → detector}/SKILL.md +5 -5
  462. package/plugins/specweave/skills/discrepancy-viewer.md +4 -4
  463. package/plugins/specweave/skills/external-sync-wizard/SKILL.md +24 -24
  464. package/plugins/specweave/skills/{specweave-framework → framework}/SKILL.md +33 -33
  465. package/plugins/specweave/skills/increment-planner/SKILL.md +25 -24
  466. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +6 -16
  467. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -12
  468. package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +6 -6
  469. package/plugins/specweave/skills/increment-work-router/SKILL.md +23 -23
  470. package/plugins/specweave/skills/instant-status/SKILL.md +7 -7
  471. package/plugins/specweave/skills/plugin-validator/SKILL.md +9 -9
  472. package/plugins/specweave/skills/pm-closure-validation/SKILL.md +4 -4
  473. package/plugins/specweave/skills/progress-sync/SKILL.md +51 -51
  474. package/plugins/specweave/skills/project-kickstarter/SKILL.md +11 -11
  475. package/plugins/specweave/skills/role-orchestrator/README.md +1 -1
  476. package/plugins/specweave/skills/role-orchestrator/SKILL.md +4 -4
  477. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +17 -17
  478. package/plugins/specweave/skills/spec-generator/SKILL.md +6 -6
  479. package/plugins/specweave/skills/tdd-workflow/SKILL.md +21 -21
  480. package/plugins/specweave/skills/translator/SKILL.md +4 -4
  481. package/plugins/specweave/skills/umbrella-repo-detector/SKILL.md +5 -5
  482. package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
  483. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +4 -4
  484. package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +4 -4
  485. package/plugins/specweave-ado/commands/cleanup-duplicates.md +9 -9
  486. package/plugins/specweave-ado/commands/clone.md +17 -17
  487. package/plugins/specweave-ado/commands/close.md +10 -10
  488. package/plugins/specweave-ado/commands/create.md +8 -8
  489. package/plugins/specweave-ado/commands/import-areas.md +15 -15
  490. package/plugins/specweave-ado/commands/import-projects.md +12 -12
  491. package/plugins/specweave-ado/commands/pull.md +25 -25
  492. package/plugins/specweave-ado/commands/push.md +20 -20
  493. package/plugins/specweave-ado/commands/reconcile.md +7 -7
  494. package/plugins/specweave-ado/commands/status.md +7 -7
  495. package/plugins/specweave-ado/commands/sync.md +17 -17
  496. package/plugins/specweave-ado/hooks/post-living-docs-update.sh +2 -2
  497. package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
  498. package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
  499. package/plugins/specweave-ado/skills/{specweave-ado-mapper → ado-mapper}/SKILL.md +2 -2
  500. package/plugins/specweave-ado/skills/ado-multi-project/SKILL.md +6 -6
  501. package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +5 -5
  502. package/plugins/specweave-ado/skills/ado-sync/SKILL.md +19 -19
  503. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +1 -1
  504. package/plugins/specweave-alternatives/commands/alternatives-analyze.md +14 -14
  505. package/plugins/specweave-backend/.claude-plugin/plugin.json +1 -1
  506. package/plugins/specweave-confluent/.claude-plugin/plugin.json +1 -1
  507. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +1 -1
  508. package/plugins/specweave-cost-optimizer/commands/cost-analyze.md +1 -1
  509. package/plugins/specweave-cost-optimizer/commands/cost-optimize.md +1 -1
  510. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
  511. package/plugins/specweave-diagrams/commands/diagrams-generate.md +1 -1
  512. package/plugins/specweave-docs/.claude-plugin/plugin.json +1 -1
  513. package/plugins/specweave-docs/commands/build.md +8 -8
  514. package/plugins/specweave-docs/commands/generate.md +22 -22
  515. package/plugins/specweave-docs/commands/health.md +10 -10
  516. package/plugins/specweave-docs/commands/init.md +9 -9
  517. package/plugins/specweave-docs/commands/organize.md +10 -10
  518. package/plugins/specweave-docs/commands/validate.md +9 -9
  519. package/plugins/specweave-docs/commands/view.md +14 -14
  520. package/plugins/specweave-docs/skills/preview/SKILL.md +11 -11
  521. package/plugins/specweave-figma/.claude-plugin/plugin.json +1 -1
  522. package/plugins/specweave-figma/commands/figma-import.md +1 -1
  523. package/plugins/specweave-figma/commands/figma-to-react.md +1 -1
  524. package/plugins/specweave-figma/commands/figma-tokens.md +1 -1
  525. package/plugins/specweave-frontend/.claude-plugin/plugin.json +1 -1
  526. package/plugins/specweave-frontend/agents/frontend-architect/README.md +5 -5
  527. package/plugins/specweave-frontend/commands/component-generate.md +1 -1
  528. package/plugins/specweave-frontend/commands/design-system-init.md +1 -1
  529. package/plugins/specweave-frontend/commands/frontend-scaffold.md +1 -1
  530. package/plugins/specweave-frontend/commands/nextjs-setup.md +1 -1
  531. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
  532. package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +4 -4
  533. package/plugins/specweave-github/SYNC-ARCHITECTURE-FIX-SUMMARY.md +18 -18
  534. package/plugins/specweave-github/agents/github-manager/AGENT.md +8 -8
  535. package/plugins/specweave-github/commands/cleanup-duplicates.md +8 -8
  536. package/plugins/specweave-github/commands/close.md +25 -25
  537. package/plugins/specweave-github/commands/create.md +17 -17
  538. package/plugins/specweave-github/commands/pull.md +12 -12
  539. package/plugins/specweave-github/commands/push.md +12 -12
  540. package/plugins/specweave-github/commands/reconcile.md +7 -7
  541. package/plugins/specweave-github/commands/status.md +24 -24
  542. package/plugins/specweave-github/commands/sync.md +34 -34
  543. package/plugins/specweave-github/commands/update-user-story.md +6 -6
  544. package/plugins/specweave-github/hooks/README.md +8 -8
  545. package/plugins/specweave-github/hooks/post-task-completion.sh +2 -2
  546. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +12 -4
  547. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +16 -4
  548. package/plugins/specweave-github/lib/completion-calculator.js +3 -1
  549. package/plugins/specweave-github/lib/completion-calculator.ts +6 -0
  550. package/plugins/specweave-github/lib/duplicate-detector.js +12 -6
  551. package/plugins/specweave-github/lib/duplicate-detector.ts +22 -6
  552. package/plugins/specweave-github/lib/github-board-resolver.js +7 -2
  553. package/plugins/specweave-github/lib/github-board-resolver.ts +13 -2
  554. package/plugins/specweave-github/lib/github-client-v2.js +29 -18
  555. package/plugins/specweave-github/lib/github-client-v2.ts +33 -18
  556. package/plugins/specweave-github/lib/github-feature-sync.js +41 -11
  557. package/plugins/specweave-github/lib/github-feature-sync.ts +52 -11
  558. package/plugins/specweave-github/lib/github-hierarchical-sync.js +6 -1
  559. package/plugins/specweave-github/lib/github-hierarchical-sync.ts +12 -1
  560. package/plugins/specweave-github/lib/github-increment-sync-cli.js +35 -17
  561. package/plugins/specweave-github/lib/github-increment-sync-cli.ts +44 -16
  562. package/plugins/specweave-github/lib/github-issue-updater.js +8 -3
  563. package/plugins/specweave-github/lib/github-issue-updater.ts +16 -3
  564. package/plugins/specweave-github/lib/github-spec-sync.js +14 -4
  565. package/plugins/specweave-github/lib/github-spec-sync.ts +19 -4
  566. package/plugins/specweave-github/lib/github-sync-bidirectional.js +8 -3
  567. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +14 -3
  568. package/plugins/specweave-github/lib/github-sync-increment-changes.js +9 -4
  569. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +15 -4
  570. package/plugins/specweave-github/lib/increment-issue-builder.js +23 -10
  571. package/plugins/specweave-github/lib/increment-issue-builder.ts +29 -11
  572. package/plugins/specweave-github/lib/user-story-content-builder.js +19 -16
  573. package/plugins/specweave-github/lib/user-story-content-builder.ts +24 -19
  574. package/plugins/specweave-github/lib/user-story-issue-builder.js +10 -13
  575. package/plugins/specweave-github/lib/user-story-issue-builder.ts +20 -19
  576. package/plugins/specweave-github/reference/github-specweave-mapping.md +1 -1
  577. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +3 -3
  578. package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +8 -8
  579. package/plugins/specweave-github/skills/github-sync/SKILL.md +14 -14
  580. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
  581. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-monitor-setup.md → monitor-setup.md} +1 -1
  582. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-slo-implement.md → slo-implement.md} +1 -1
  583. package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
  584. package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +3 -3
  585. package/plugins/specweave-jira/commands/cleanup-duplicates.md +9 -9
  586. package/plugins/specweave-jira/commands/close.md +13 -13
  587. package/plugins/specweave-jira/commands/create.md +8 -8
  588. package/plugins/specweave-jira/commands/import-boards.md +15 -15
  589. package/plugins/specweave-jira/commands/import-projects-full.md +15 -15
  590. package/plugins/specweave-jira/commands/import-projects.md +10 -10
  591. package/plugins/specweave-jira/commands/pull.md +10 -10
  592. package/plugins/specweave-jira/commands/push.md +11 -11
  593. package/plugins/specweave-jira/commands/reconcile.md +7 -7
  594. package/plugins/specweave-jira/commands/status.md +16 -16
  595. package/plugins/specweave-jira/commands/sync.md +27 -27
  596. package/plugins/specweave-jira/skills/{specweave-jira-mapper → jira-mapper}/SKILL.md +2 -2
  597. package/plugins/specweave-jira/skills/jira-resource-validator/SKILL.md +4 -4
  598. package/plugins/specweave-jira/skills/jira-sync/SKILL.md +5 -5
  599. package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
  600. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +10 -10
  601. package/plugins/specweave-kafka/README.md +12 -12
  602. package/plugins/specweave-kafka/commands/deploy.md +5 -5
  603. package/plugins/specweave-kafka/commands/dev-env.md +2 -2
  604. package/plugins/specweave-kafka/commands/mcp-configure.md +3 -3
  605. package/plugins/specweave-kafka/commands/monitor-setup.md +3 -3
  606. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +4 -4
  607. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +5 -5
  608. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +6 -6
  609. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
  610. package/plugins/specweave-kafka-streams/commands/topology.md +4 -4
  611. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +1 -1
  612. package/plugins/specweave-ml/.claude-plugin/plugin.json +1 -1
  613. package/plugins/specweave-ml/README.md +9 -9
  614. package/plugins/specweave-ml/commands/{specweave-ml-deploy.md → deploy.md} +1 -1
  615. package/plugins/specweave-ml/commands/{specweave-ml-evaluate.md → evaluate.md} +1 -1
  616. package/plugins/specweave-ml/commands/{specweave-ml-explain.md → explain.md} +1 -1
  617. package/plugins/specweave-ml/commands/{specweave-ml-pipeline.md → pipeline.md} +1 -1
  618. package/plugins/specweave-ml/skills/automl-optimizer/SKILL.md +1 -1
  619. package/plugins/specweave-ml/skills/data-visualizer/SKILL.md +1 -1
  620. package/plugins/specweave-ml/skills/experiment-tracker/SKILL.md +4 -4
  621. package/plugins/specweave-ml/skills/feature-engineer/SKILL.md +1 -1
  622. package/plugins/specweave-ml/skills/ml-deployment-helper/SKILL.md +2 -2
  623. package/plugins/specweave-ml/skills/ml-pipeline-orchestrator/SKILL.md +10 -10
  624. package/plugins/specweave-ml/skills/model-registry/SKILL.md +1 -1
  625. package/plugins/specweave-ml/skills/time-series-forecaster/SKILL.md +1 -1
  626. package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -1
  627. package/plugins/specweave-mobile/README.md +2 -2
  628. package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +2 -2
  629. package/plugins/specweave-mobile/skills/react-native-setup/SKILL.md +1 -1
  630. package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
  631. package/plugins/specweave-n8n/commands/workflow-template.md +4 -4
  632. package/plugins/specweave-payments/.claude-plugin/plugin.json +1 -1
  633. package/plugins/specweave-payments/commands/stripe-setup.md +1 -1
  634. package/plugins/specweave-payments/commands/subscription-flow.md +1 -1
  635. package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +1 -1
  636. package/plugins/specweave-plugin-dev/commands/plugin-create.md +1 -1
  637. package/plugins/specweave-plugin-dev/commands/plugin-publish.md +1 -1
  638. package/plugins/specweave-plugin-dev/commands/plugin-test.md +1 -1
  639. package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
  640. package/plugins/specweave-release/IMPLEMENTATION.md +14 -14
  641. package/plugins/specweave-release/README.md +33 -33
  642. package/plugins/specweave-release/agents/release-manager/AGENT.md +18 -18
  643. package/plugins/specweave-release/commands/{specweave-release-align.md → align.md} +19 -19
  644. package/plugins/specweave-release/commands/{specweave-release-init.md → init.md} +19 -19
  645. package/plugins/specweave-release/commands/{specweave-release-npm.md → npm.md} +14 -14
  646. package/plugins/specweave-release/commands/{specweave-release-platform.md → platform.md} +17 -17
  647. package/plugins/specweave-release/commands/{specweave-release-rc.md → rc.md} +37 -37
  648. package/plugins/specweave-release/hooks/post-task-completion.sh +1 -1
  649. package/plugins/specweave-release/skills/rc-manager/SKILL.md +12 -12
  650. package/plugins/specweave-release/skills/release-coordinator/SKILL.md +11 -11
  651. package/plugins/specweave-release/skills/release-strategy-advisor/SKILL.md +4 -4
  652. package/plugins/specweave-release/skills/version-aligner/SKILL.md +7 -7
  653. package/plugins/specweave-testing/.claude-plugin/plugin.json +1 -1
  654. package/plugins/specweave-testing/agents/qa-engineer/README.md +5 -5
  655. package/plugins/specweave-testing/commands/e2e-setup.md +1 -1
  656. package/plugins/specweave-testing/commands/test-coverage.md +1 -1
  657. package/plugins/specweave-testing/commands/test-generate.md +1 -1
  658. package/plugins/specweave-testing/commands/test-init.md +1 -1
  659. package/plugins/specweave-tooling/.claude-plugin/plugin.json +1 -1
  660. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-create.md → skill-create.md} +1 -1
  661. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-package.md → skill-package.md} +1 -1
  662. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-validate.md → skill-validate.md} +1 -1
  663. package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
  664. package/plugins/specweave-ui/commands/ui-automate.md +9 -9
  665. package/plugins/specweave-ui/commands/ui-inspect.md +6 -6
  666. package/src/templates/AGENTS.md.template +49 -49
  667. package/src/templates/CLAUDE.md.template +11 -11
  668. package/dist/src/cli/commands/switch-project.d.ts +0 -13
  669. package/dist/src/cli/commands/switch-project.d.ts.map +0 -1
  670. package/dist/src/cli/commands/switch-project.js +0 -78
  671. package/dist/src/cli/commands/switch-project.js.map +0 -1
  672. package/plugins/specweave/commands/specweave-init-multiproject.md +0 -146
  673. package/plugins/specweave-core/.claude-plugin/plugin.json +0 -21
  674. package/plugins/specweave-core/commands/architecture-review.md +0 -288
  675. package/plugins/specweave-core/commands/code-review.md +0 -213
  676. package/plugins/specweave-core/commands/refactor-plan.md +0 -249
  677. package/plugins/specweave-core/skills/code-quality/SKILL.md +0 -158
  678. package/plugins/specweave-core/skills/design-patterns/SKILL.md +0 -245
  679. package/plugins/specweave-core/skills/software-architecture/SKILL.md +0 -84
  680. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-1-increment-naming.yaml +0 -0
  681. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-2-source-of-truth.yaml +0 -0
  682. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-3-increment-discipline.yaml +0 -0
  683. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-4-file-placement.yaml +0 -0
@@ -0,0 +1,272 @@
1
+ #!/usr/bin/env bash
2
+ # Project Folder Guard (Pre-tool-use Hook)
3
+ # Prevents creation of project folders unless project exists in config.json
4
+ #
5
+ # Triggers: Write tool creating files in .specweave/docs/internal/specs/{project}/
6
+ # Blocks: Project folders not in config.json multiProject.projects
7
+ # Version: 0.35.1+ (Enhanced with example project detection)
8
+ #
9
+ # CRITICAL v0.35.1: Added detection of common example project names
10
+ # These are NEVER allowed unless explicitly configured:
11
+ # - frontend-app, backend-api, mobile-app, shared-lib (common examples)
12
+ # - acme-corp, my-app, myapp (placeholder names)
13
+ # - Comma-separated values like "frontend-app, backend-api"
14
+ # - Placeholder patterns like {{PROJECT_ID}}
15
+
16
+ set -euo pipefail
17
+
18
+ TOOL_NAME="$1"
19
+ shift
20
+ TOOL_ARGS="$*"
21
+
22
+ # Only check Write tool operations to specs/ folder
23
+ if [ "$TOOL_NAME" != "Write" ]; then
24
+ exit 0
25
+ fi
26
+
27
+ # Extract file_path from tool args (JSON format)
28
+ FILE_PATH=$(echo "$TOOL_ARGS" | jq -r '.file_path // empty')
29
+
30
+ if [ -z "$FILE_PATH" ]; then
31
+ exit 0
32
+ fi
33
+
34
+ # Check if writing to specs folder
35
+ if [[ ! "$FILE_PATH" =~ \.specweave/docs/internal/specs/([^/]+)/ ]]; then
36
+ exit 0
37
+ fi
38
+
39
+ # Extract project name from path
40
+ PROJECT_NAME="${BASH_REMATCH[1]}"
41
+
42
+ # Skip validation for README.md in specs root
43
+ if [ "$PROJECT_NAME" = "README.md" ]; then
44
+ exit 0
45
+ fi
46
+
47
+ # CRITICAL v0.35.1: Check for template placeholders like {{PROJECT_ID}}
48
+ if [[ "$PROJECT_NAME" =~ \{\{.*\}\} ]]; then
49
+ echo "❌ BLOCKED: Unresolved placeholder detected: '$PROJECT_NAME'"
50
+ echo ""
51
+ echo " Project name contains template placeholder syntax: {{ ... }}"
52
+ echo " This is NOT a valid project name."
53
+ echo ""
54
+ echo " 🔧 Edit spec.md and replace {{...}} with your actual project name"
55
+ exit 1
56
+ fi
57
+
58
+ # CRITICAL v0.35.1: Check for comma-separated values (invalid format)
59
+ if [[ "$PROJECT_NAME" =~ , ]]; then
60
+ echo "❌ BLOCKED: Comma-separated project names detected: '$PROJECT_NAME'"
61
+ echo ""
62
+ echo " Each User Story must have exactly ONE project."
63
+ echo " Multiple comma-separated projects are NOT allowed."
64
+ echo ""
65
+ echo " 🔧 Split into separate User Stories, one per project"
66
+ exit 1
67
+ fi
68
+
69
+ # CRITICAL v0.35.1: Check for parentheses (often seen in examples)
70
+ if [[ "$PROJECT_NAME" =~ \( || "$PROJECT_NAME" =~ \) ]]; then
71
+ echo "❌ BLOCKED: Invalid characters in project name: '$PROJECT_NAME'"
72
+ echo ""
73
+ echo " Project names cannot contain parentheses."
74
+ echo " This looks like an example/documentation string."
75
+ echo ""
76
+ echo " 🔧 Use a valid kebab-case project name (e.g., my-project)"
77
+ exit 1
78
+ fi
79
+
80
+ # CRITICAL v0.35.1: Check ProjectRegistry FIRST (.specweave/state/projects.json)
81
+ # This is the single source of truth for projects (v0.35.0+)
82
+ REGISTRY_FILE=".specweave/state/projects.json"
83
+ CONFIG_FILE=".specweave/config.json"
84
+
85
+ # CRITICAL v0.35.1: List of known example project names
86
+ # These are blocked UNLESS explicitly registered
87
+ EXAMPLE_PROJECTS="frontend-app backend-api mobile-app shared-lib acme-corp my-app myapp example-project sample-project test-project demo placeholder per default"
88
+
89
+ # Check if project is in example list (case-insensitive)
90
+ PROJECT_NAME_LOWER=$(echo "$PROJECT_NAME" | tr '[:upper:]' '[:lower:]')
91
+ IS_EXAMPLE="false"
92
+ for EXAMPLE in $EXAMPLE_PROJECTS; do
93
+ if [ "$PROJECT_NAME_LOWER" = "$EXAMPLE" ]; then
94
+ IS_EXAMPLE="true"
95
+ break
96
+ fi
97
+ done
98
+
99
+ # PRIMARY: Check ProjectRegistry (projects.json)
100
+ if [ -f "$REGISTRY_FILE" ]; then
101
+ # Get all project IDs from registry
102
+ REGISTRY_PROJECTS=$(jq -r '.projects | keys[]' "$REGISTRY_FILE" 2>/dev/null || echo "")
103
+
104
+ if [ -n "$REGISTRY_PROJECTS" ]; then
105
+ # Check if project exists in registry (case-insensitive)
106
+ PROJECT_IN_REGISTRY="false"
107
+ for REG_PROJECT in $REGISTRY_PROJECTS; do
108
+ REG_PROJECT_LOWER=$(echo "$REG_PROJECT" | tr '[:upper:]' '[:lower:]')
109
+ if [ "$PROJECT_NAME_LOWER" = "$REG_PROJECT_LOWER" ]; then
110
+ PROJECT_IN_REGISTRY="true"
111
+ break
112
+ fi
113
+ done
114
+
115
+ if [ "$PROJECT_IN_REGISTRY" = "true" ]; then
116
+ # Project exists in registry - ALLOW
117
+ exit 0
118
+ fi
119
+
120
+ # Project NOT in registry
121
+ VALID_PROJECTS=$(echo "$REGISTRY_PROJECTS" | tr '\n' ', ' | sed 's/,$//')
122
+
123
+ if [ "$IS_EXAMPLE" = "true" ]; then
124
+ echo "❌ BLOCKED: Example project name detected: '$PROJECT_NAME'"
125
+ echo ""
126
+ echo " '$PROJECT_NAME' is a common example/placeholder name used in documentation."
127
+ echo " It was likely extracted from example User Stories in spec.md."
128
+ echo ""
129
+ echo " ⚠️ This is NOT a real project - it's a documentation example!"
130
+ echo ""
131
+ echo " Registered projects: $VALID_PROJECTS"
132
+ echo ""
133
+ echo " 🔧 How to fix:"
134
+ echo " 1. Edit the spec.md file and update **Project**: fields"
135
+ echo " 2. Replace example names with a registered project"
136
+ echo " 3. Re-run the sync command"
137
+ else
138
+ echo "❌ BLOCKED: Project '$PROJECT_NAME' not in registry"
139
+ echo ""
140
+ echo " Project '$PROJECT_NAME' is NOT registered in .specweave/state/projects.json"
141
+ echo ""
142
+ echo " Registered projects: $VALID_PROJECTS"
143
+ echo ""
144
+ echo " 🔧 To add this project:"
145
+ echo " specweave project add $PROJECT_NAME --name \"Project Display Name\""
146
+ fi
147
+ exit 1
148
+ fi
149
+ fi
150
+
151
+ # FALLBACK: Check config.json if registry doesn't exist or is empty
152
+ if [ ! -f "$CONFIG_FILE" ]; then
153
+ echo "❌ ERROR: Neither projects.json nor config.json found"
154
+ echo " Cannot validate project folder creation without configuration"
155
+ exit 1
156
+ fi
157
+
158
+ # Check if multi-project mode is enabled
159
+ MULTI_PROJECT_ENABLED=$(jq -r '.multiProject.enabled // false' "$CONFIG_FILE")
160
+
161
+ if [ "$MULTI_PROJECT_ENABLED" != "true" ]; then
162
+ # Single-project mode - only allow configured project name
163
+ ALLOWED_PROJECT=$(jq -r '.project.name // "specweave"' "$CONFIG_FILE")
164
+
165
+ if [ "$PROJECT_NAME" != "$ALLOWED_PROJECT" ]; then
166
+ # Special message for example projects
167
+ if [ "$IS_EXAMPLE" = "true" ]; then
168
+ echo "❌ BLOCKED: Example project name detected: '$PROJECT_NAME'"
169
+ echo ""
170
+ echo " '$PROJECT_NAME' is a common example/placeholder name used in documentation."
171
+ echo " It was likely extracted from example User Stories in spec.md."
172
+ echo ""
173
+ echo " ⚠️ This is NOT a real project - it's a documentation example!"
174
+ echo ""
175
+ echo " 🔧 How to fix:"
176
+ echo " 1. Edit the spec.md file and update **Project**: fields"
177
+ echo " 2. Replace example names with: $ALLOWED_PROJECT"
178
+ echo " 3. Re-run the sync command"
179
+ echo ""
180
+ echo " 📋 Example fix in spec.md:"
181
+ echo " BEFORE: **Project**: $PROJECT_NAME ← EXAMPLE (WRONG)"
182
+ echo " AFTER: **Project**: $ALLOWED_PROJECT ← Your actual project"
183
+ echo ""
184
+ else
185
+ echo "❌ BLOCKED: Project folder creation for '$PROJECT_NAME'"
186
+ echo ""
187
+ echo " This repository is in SINGLE-PROJECT mode."
188
+ echo " Only folder allowed: $ALLOWED_PROJECT"
189
+ echo ""
190
+ echo " Current config (.specweave/config.json):"
191
+ echo " {"
192
+ echo " \"project\": { \"name\": \"$ALLOWED_PROJECT\" },"
193
+ echo " \"multiProject\": { \"enabled\": false }"
194
+ echo " }"
195
+ echo ""
196
+ echo " ⚠️ If '$PROJECT_NAME' is an example/placeholder in spec.md, update it to:"
197
+ echo " **Project**: $ALLOWED_PROJECT"
198
+ echo ""
199
+ echo " 💡 To add new projects:"
200
+ echo " 1. Run: specweave config set multiProject.enabled true"
201
+ echo " 2. Run: specweave config set multiProject.projects.$PROJECT_NAME.id \"$PROJECT_NAME\""
202
+ echo " 3. Re-run your command"
203
+ fi
204
+ exit 1
205
+ fi
206
+
207
+ exit 0
208
+ fi
209
+
210
+ # Multi-project mode - check if project exists in config
211
+ if jq -e ".multiProject.projects.\"$PROJECT_NAME\"" "$CONFIG_FILE" &>/dev/null; then
212
+ PROJECT_EXISTS="true"
213
+ else
214
+ PROJECT_EXISTS="false"
215
+ fi
216
+
217
+ if [ "$PROJECT_EXISTS" = "false" ]; then
218
+ # Get list of valid projects
219
+ VALID_PROJECTS=$(jq -r '.multiProject.projects | keys[]' "$CONFIG_FILE" 2>/dev/null | tr '\n' ', ' | sed 's/,$//' || echo "")
220
+
221
+ # Special message for example projects
222
+ if [ "$IS_EXAMPLE" = "true" ]; then
223
+ echo "❌ BLOCKED: Example project name detected: '$PROJECT_NAME'"
224
+ echo ""
225
+ echo " '$PROJECT_NAME' is a common example/placeholder name used in documentation."
226
+ echo " It was likely extracted from example User Stories in spec.md."
227
+ echo ""
228
+ echo " ⚠️ This is NOT a real project - it's a documentation example!"
229
+ echo ""
230
+ if [ -n "$VALID_PROJECTS" ]; then
231
+ echo " Valid projects: $VALID_PROJECTS"
232
+ echo ""
233
+ fi
234
+ echo " 🔧 How to fix:"
235
+ echo " 1. Edit the spec.md file and update **Project**: fields"
236
+ echo " 2. Replace example names with a configured project"
237
+ echo " 3. Re-run the sync command"
238
+ echo ""
239
+ else
240
+ echo "❌ BLOCKED: Project folder creation for '$PROJECT_NAME'"
241
+ echo ""
242
+ echo " Project '$PROJECT_NAME' is NOT configured in .specweave/config.json"
243
+ echo ""
244
+ if [ -n "$VALID_PROJECTS" ]; then
245
+ echo " Valid projects: $VALID_PROJECTS"
246
+ echo ""
247
+ fi
248
+ echo " ⚠️ Common causes:"
249
+ echo " 1. Example/placeholder project in spec.md User Stories"
250
+ echo " 2. Typo in **Project**: field (e.g., 'MyApp (3 repos)' instead of real project)"
251
+ echo " 3. Missing project configuration"
252
+ echo ""
253
+ echo " 🔧 How to fix:"
254
+ if [ -n "$VALID_PROJECTS" ]; then
255
+ echo " • If this is an EXAMPLE in spec.md, update to a real project:"
256
+ echo " **Project**: ${VALID_PROJECTS%%,*} # Use first valid project"
257
+ echo ""
258
+ fi
259
+ echo " • If this is a NEW project, add it to config:"
260
+ echo " specweave config set multiProject.projects.$PROJECT_NAME.id \"$PROJECT_NAME\""
261
+ echo " specweave config set multiProject.projects.$PROJECT_NAME.name \"Project Display Name\""
262
+ echo ""
263
+ echo " • Check spec.md for placeholder User Stories like:"
264
+ echo " **Project**: frontend-app, backend-api ← FORBIDDEN (comma-separated)"
265
+ echo " **Project**: MyApp (3 repos) ← FORBIDDEN (parentheses not allowed)"
266
+ echo ""
267
+ fi
268
+ exit 1
269
+ fi
270
+
271
+ # Project exists - allow creation
272
+ exit 0
@@ -2,18 +2,19 @@
2
2
  #
3
3
  # spec-project-validator.sh
4
4
  #
5
- # Pre-tool-use hook that validates spec.md has required project/board fields
5
+ # Pre-tool-use hook that validates spec.md project/board configuration
6
6
  # before allowing Write tool to create/update spec.md files.
7
7
  #
8
8
  # Activation:
9
9
  # - tool_name: Write
10
10
  # - file_path matches: .specweave/increments/*/spec.md
11
11
  #
12
- # Rules:
13
- # - 1-level structure: spec.md MUST have `project:` in YAML frontmatter
14
- # - 2-level structure: spec.md MUST have BOTH `project:` AND `board:` in frontmatter
15
- # - Project MUST exist in configuration (validated via specweave context projects)
16
- # - Board MUST exist under project for 2-level (validated via specweave context boards)
12
+ # Rules (ADR-0140 v0.35.0+):
13
+ # - Frontmatter `project:` and `board:` fields are OPTIONAL (deprecated)
14
+ # - Per-US `**Project**:` and `**Board**:` fields are the PRIMARY source
15
+ # - Validates no unresolved {{...}} placeholders exist
16
+ # - Single-project mode: frontmatter project must match config if present
17
+ # - Multi-project mode: validates projects exist in config if referenced
17
18
  #
18
19
  # Returns exit code 1 (block) if validation fails, 0 (allow) otherwise.
19
20
  #
@@ -105,6 +106,10 @@ PROJECT_ROOT="${FILE_PATH%%/.specweave/*}"
105
106
  # Change to project root for specweave command
106
107
  cd "$PROJECT_ROOT" 2>/dev/null || true
107
108
 
109
+ # Check if single-project or multi-project mode (NEW - v0.34.0+)
110
+ CONFIG_FILE="$PROJECT_ROOT/.specweave/config.json"
111
+ MULTI_PROJECT_ENABLED=$(jq -r '.multiProject.enabled // false' "$CONFIG_FILE" 2>/dev/null || echo "false")
112
+
108
113
  # Get project context via CLI command
109
114
  CONTEXT_OUTPUT=$(specweave context projects 2>/dev/null || echo '{"level": 1, "projects": []}')
110
115
 
@@ -114,63 +119,79 @@ STRUCTURE_LEVEL=$(echo "$CONTEXT_OUTPUT" | jq -r '.level // 1')
114
119
  # Parse available projects
115
120
  AVAILABLE_PROJECTS=$(echo "$CONTEXT_OUTPUT" | jq -r '.projects[].id // empty' | tr '\n' ', ' | sed 's/,$//')
116
121
 
117
- # Validation based on structure level
118
- if [ "$STRUCTURE_LEVEL" = "2" ]; then
119
- # 2-level: BOTH project AND board required
122
+ # NEW (v0.34.0+): Single-project mode validation
123
+ if [ "$MULTI_PROJECT_ENABLED" = "false" ]; then
124
+ # Single-project mode: project field is OPTIONAL
125
+ # If provided, validate it matches config.project.name
126
+ CONFIGURED_PROJECT=$(jq -r '.project.name // "specweave"' "$CONFIG_FILE" 2>/dev/null)
120
127
 
121
- # Check project field exists
122
- if [ -z "$PROJECT" ] || [ "$PROJECT" = "null" ]; then
123
- echo "{\"decision\": \"block\", \"reason\": \"spec.md missing required 'project:' field in YAML frontmatter.\\n\\n2-level structure detected.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS:-none detected}\\n\\nAdd 'project: <project_name>' to frontmatter.\\n\\nRun 'specweave context projects' to see all options.\"}"
128
+ if [ -n "$PROJECT" ] && [ "$PROJECT" != "null" ] && [ "$PROJECT" != "$CONFIGURED_PROJECT" ]; then
129
+ echo "{\"decision\": \"block\", \"reason\": \"spec.md has project: '${PROJECT}' but config has project.name: '${CONFIGURED_PROJECT}'.\\n\\nIn single-project mode, the project: field MUST match config.project.name OR be omitted.\\n\\nFix:\\n1. Remove project: field (recommended for single-project mode)\\n2. OR change to: project: ${CONFIGURED_PROJECT}\\n3. OR enable multi-project mode: /sw:enable-multiproject\"}"
124
130
  exit 0
125
131
  fi
126
132
 
127
- # Check board field exists
128
- if [ -z "$BOARD" ] || [ "$BOARD" = "null" ]; then
129
- # Get available boards for the project
130
- AVAILABLE_BOARDS=$(specweave context boards --project="$PROJECT" 2>/dev/null | jq -r '.boards[].id // empty' | tr '\n' ', ' | sed 's/,$//')
131
-
132
- echo "{\"decision\": \"block\", \"reason\": \"spec.md missing required 'board:' field in YAML frontmatter.\\n\\n2-level structure detected (project: ${PROJECT}).\\n\\nAvailable boards: ${AVAILABLE_BOARDS:-none detected}\\n\\nAdd 'board: <board_name>' to frontmatter.\\n\\nRun 'specweave context boards --project=${PROJECT}' to see all options.\"}"
133
+ # ALWAYS block board: field in single-project mode
134
+ if [ -n "$BOARD" ] && [ "$BOARD" != "null" ]; then
135
+ echo "{\"decision\": \"block\", \"reason\": \"spec.md has board: field but this is a SINGLE-PROJECT repository.\\n\\nThe board: field is ONLY for multi-project mode.\\n\\nFix:\\n1. Remove the board: field\\n2. OR enable multi-project mode: /sw:enable-multiproject\"}"
133
136
  exit 0
134
137
  fi
135
138
 
136
- # Validate project exists in configuration
137
- PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id == $proj)' 2>/dev/null)
138
- if [ -z "$PROJECT_EXISTS" ]; then
139
- # Try case-insensitive match
140
- PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id | ascii_downcase == ($proj | ascii_downcase))' 2>/dev/null)
141
- fi
139
+ # All validations passed for single-project mode
140
+ echo '{"decision": "allow"}'
141
+ exit 0
142
+ fi
142
143
 
143
- if [ -z "$PROJECT_EXISTS" ] && [ -n "$AVAILABLE_PROJECTS" ]; then
144
- echo "{\"decision\": \"block\", \"reason\": \"Project '${PROJECT}' not found in configuration.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS}\\n\\nEither:\\n1. Update project: field to a valid project\\n2. Set SPECWEAVE_FORCE_PROJECT=1 to bypass validation\"}"
145
- exit 0
146
- fi
144
+ # Multi-project mode validation continues below
145
+ # ADR-0140 (v0.35.0+): Frontmatter project/board fields are OPTIONAL
146
+ # Per-US fields are the PRIMARY source of truth
147
147
 
148
- # Validate board exists under project
149
- BOARDS_OUTPUT=$(specweave context boards --project="$PROJECT" 2>/dev/null || echo '{"boards": []}')
150
- BOARD_EXISTS=$(echo "$BOARDS_OUTPUT" | jq --arg board "$BOARD" '.boards[] | select(.id == $board)' 2>/dev/null)
148
+ # Validation based on structure level
149
+ if [ "$STRUCTURE_LEVEL" = "2" ]; then
150
+ # 2-level: Frontmatter project/board are OPTIONAL (per-US fields are primary)
151
151
 
152
- if [ -z "$BOARD_EXISTS" ]; then
153
- # Try case-insensitive match
154
- BOARD_EXISTS=$(echo "$BOARDS_OUTPUT" | jq --arg board "$BOARD" '.boards[] | select(.id | ascii_downcase == ($board | ascii_downcase))' 2>/dev/null)
152
+ # If project is provided in frontmatter, validate it exists
153
+ if [ -n "$PROJECT" ] && [ "$PROJECT" != "null" ]; then
154
+ PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id == $proj)' 2>/dev/null)
155
+ if [ -z "$PROJECT_EXISTS" ]; then
156
+ # Try case-insensitive match
157
+ PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id | ascii_downcase == ($proj | ascii_downcase))' 2>/dev/null)
158
+ fi
159
+
160
+ if [ -z "$PROJECT_EXISTS" ] && [ -n "$AVAILABLE_PROJECTS" ]; then
161
+ echo "{\"decision\": \"block\", \"reason\": \"Frontmatter project '${PROJECT}' not found in configuration.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS}\\n\\nFix:\\n1. Remove project: field (recommended - use per-US **Project**: instead)\\n2. OR update to a valid project\\n3. OR set SPECWEAVE_FORCE_PROJECT=1 to bypass\"}"
162
+ exit 0
163
+ fi
155
164
  fi
156
165
 
157
- AVAILABLE_BOARDS=$(echo "$BOARDS_OUTPUT" | jq -r '.boards[].id // empty' | tr '\n' ', ' | sed 's/,$//')
166
+ # If board is provided in frontmatter, validate it exists under project
167
+ if [ -n "$BOARD" ] && [ "$BOARD" != "null" ]; then
168
+ # Need project to validate board
169
+ if [ -z "$PROJECT" ] || [ "$PROJECT" = "null" ]; then
170
+ echo "{\"decision\": \"block\", \"reason\": \"Frontmatter has board: '${BOARD}' but no project: field.\\n\\nIf using board: you must also specify project:.\\n\\nRecommended: Remove both and use per-US **Project**: and **Board**: fields instead.\"}"
171
+ exit 0
172
+ fi
158
173
 
159
- if [ -z "$BOARD_EXISTS" ] && [ -n "$AVAILABLE_BOARDS" ]; then
160
- echo "{\"decision\": \"block\", \"reason\": \"Board '${BOARD}' not found under project '${PROJECT}'.\\n\\nAvailable boards: ${AVAILABLE_BOARDS}\\n\\nEither:\\n1. Update board: field to a valid board\\n2. Set SPECWEAVE_FORCE_PROJECT=1 to bypass validation\"}"
161
- exit 0
162
- fi
174
+ BOARDS_OUTPUT=$(specweave context boards --project="$PROJECT" 2>/dev/null || echo '{"boards": []}')
175
+ BOARD_EXISTS=$(echo "$BOARDS_OUTPUT" | jq --arg board "$BOARD" '.boards[] | select(.id == $board)' 2>/dev/null)
163
176
 
164
- else
165
- # 1-level: project is REQUIRED (not just recommended)
177
+ if [ -z "$BOARD_EXISTS" ]; then
178
+ # Try case-insensitive match
179
+ BOARD_EXISTS=$(echo "$BOARDS_OUTPUT" | jq --arg board "$BOARD" '.boards[] | select(.id | ascii_downcase == ($board | ascii_downcase))' 2>/dev/null)
180
+ fi
166
181
 
167
- if [ -z "$PROJECT" ] || [ "$PROJECT" = "null" ]; then
168
- echo "{\"decision\": \"block\", \"reason\": \"spec.md missing required 'project:' field in YAML frontmatter.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS:-none detected}\\n\\nAdd 'project: <project_name>' to frontmatter.\\n\\nRun 'specweave context projects' to see all options.\"}"
169
- exit 0
182
+ AVAILABLE_BOARDS=$(echo "$BOARDS_OUTPUT" | jq -r '.boards[].id // empty' | tr '\n' ', ' | sed 's/,$//')
183
+
184
+ if [ -z "$BOARD_EXISTS" ] && [ -n "$AVAILABLE_BOARDS" ]; then
185
+ echo "{\"decision\": \"block\", \"reason\": \"Frontmatter board '${BOARD}' not found under project '${PROJECT}'.\\n\\nAvailable boards: ${AVAILABLE_BOARDS}\\n\\nFix:\\n1. Remove board: field (recommended - use per-US **Board**: instead)\\n2. OR update to a valid board\\n3. OR set SPECWEAVE_FORCE_PROJECT=1 to bypass\"}"
186
+ exit 0
187
+ fi
170
188
  fi
171
189
 
172
- # Validate project exists in configuration (if we have projects configured)
173
- if [ -n "$AVAILABLE_PROJECTS" ]; then
190
+ else
191
+ # 1-level multi-project: Frontmatter project is OPTIONAL (per-US fields are primary)
192
+
193
+ # If project is provided in frontmatter, validate it exists
194
+ if [ -n "$PROJECT" ] && [ "$PROJECT" != "null" ] && [ -n "$AVAILABLE_PROJECTS" ]; then
174
195
  PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id == $proj)' 2>/dev/null)
175
196
  if [ -z "$PROJECT_EXISTS" ]; then
176
197
  # Try case-insensitive match
@@ -178,7 +199,7 @@ else
178
199
  fi
179
200
 
180
201
  if [ -z "$PROJECT_EXISTS" ]; then
181
- echo "{\"decision\": \"block\", \"reason\": \"Project '${PROJECT}' not found in configuration.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS}\\n\\nEither:\\n1. Update project: field to a valid project\\n2. Set SPECWEAVE_FORCE_PROJECT=1 to bypass validation\"}"
202
+ echo "{\"decision\": \"block\", \"reason\": \"Frontmatter project '${PROJECT}' not found in configuration.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS}\\n\\nFix:\\n1. Remove project: field (recommended - use per-US **Project**: instead)\\n2. OR update to a valid project\\n3. OR set SPECWEAVE_FORCE_PROJECT=1 to bypass\"}"
182
203
  exit 0
183
204
  fi
184
205
  fi
@@ -30,7 +30,7 @@ fi
30
30
 
31
31
  # CRITICAL: Exit immediately for non-SpecWeave prompts
32
32
  # This covers 90%+ of prompts with <5ms overhead
33
- if ! echo "$PROMPT" | grep -qE "(specweave|/specweave:|increment|add|create|implement|build|develop)"; then
33
+ if ! echo "$PROMPT" | grep -qE "(specweave|/sw:|increment|add|create|implement|build|develop)"; then
34
34
  echo '{"decision":"approve"}'
35
35
  exit 0
36
36
  fi
@@ -61,9 +61,9 @@ escape_json() {
61
61
  echo "$input" | sed 's/\\/\\\\/g; s/"/\\"/g' | awk '{printf "%s\\n", $0}' | sed 's/\\n$//'
62
62
  }
63
63
 
64
- # /specweave:jobs → Execute read-jobs.sh (pure bash, ~2ms)
65
- if echo "$PROMPT" | grep -qE "^/specweave:jobs($| )"; then
66
- ARGS=$(echo "$PROMPT" | sed 's|^/specweave:jobs\s*||')
64
+ # /sw:jobs → Execute read-jobs.sh (pure bash, ~2ms)
65
+ if echo "$PROMPT" | grep -qE "^/sw:jobs($| )"; then
66
+ ARGS=$(echo "$PROMPT" | sed 's|^/sw:jobs\s*||')
67
67
  if [[ -f "$SCRIPTS_DIR/read-jobs.sh" ]]; then
68
68
  OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-jobs.sh" $ARGS 2>&1)
69
69
  elif [[ -f "$SCRIPTS_DIR/jobs.js" ]] && command -v node >/dev/null 2>&1; then
@@ -76,9 +76,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:jobs($| )"; then
76
76
  exit 0
77
77
  fi
78
78
 
79
- # /specweave:progress → Execute read-progress.sh (pure bash, ~30ms)
80
- if echo "$PROMPT" | grep -qE "^/specweave:progress($| )"; then
81
- ARGS=$(echo "$PROMPT" | sed 's|^/specweave:progress\s*||')
79
+ # /sw:progress → Execute read-progress.sh (pure bash, ~30ms)
80
+ if echo "$PROMPT" | grep -qE "^/sw:progress($| )"; then
81
+ ARGS=$(echo "$PROMPT" | sed 's|^/sw:progress\s*||')
82
82
  if [[ -f "$SCRIPTS_DIR/read-progress.sh" ]]; then
83
83
  OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-progress.sh" $ARGS 2>&1)
84
84
  elif [[ -f "$SCRIPTS_DIR/progress.js" ]] && command -v node >/dev/null 2>&1; then
@@ -91,9 +91,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:progress($| )"; then
91
91
  exit 0
92
92
  fi
93
93
 
94
- # /specweave:status → Execute read-status.sh (pure bash, ~150ms)
95
- if echo "$PROMPT" | grep -qE "^/specweave:status($| )"; then
96
- ARGS=$(echo "$PROMPT" | sed 's|^/specweave:status\s*||')
94
+ # /sw:status → Execute read-status.sh (pure bash, ~150ms)
95
+ if echo "$PROMPT" | grep -qE "^/sw:status($| )"; then
96
+ ARGS=$(echo "$PROMPT" | sed 's|^/sw:status\s*||')
97
97
  if [[ -f "$SCRIPTS_DIR/read-status.sh" ]]; then
98
98
  OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-status.sh" $ARGS 2>&1)
99
99
  elif [[ -f "$SCRIPTS_DIR/status.js" ]] && command -v node >/dev/null 2>&1; then
@@ -106,9 +106,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:status($| )"; then
106
106
  exit 0
107
107
  fi
108
108
 
109
- # /specweave:workflow → Execute read-workflow.sh (pure bash, ~100ms)
110
- if echo "$PROMPT" | grep -qE "^/specweave:workflow($| )"; then
111
- ARGS=$(echo "$PROMPT" | sed 's|^/specweave:workflow\s*||')
109
+ # /sw:workflow → Execute read-workflow.sh (pure bash, ~100ms)
110
+ if echo "$PROMPT" | grep -qE "^/sw:workflow($| )"; then
111
+ ARGS=$(echo "$PROMPT" | sed 's|^/sw:workflow\s*||')
112
112
  if [[ -f "$SCRIPTS_DIR/read-workflow.sh" ]]; then
113
113
  OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-workflow.sh" $ARGS 2>&1)
114
114
  else
@@ -119,9 +119,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:workflow($| )"; then
119
119
  exit 0
120
120
  fi
121
121
 
122
- # /specweave:costs → Execute read-costs.sh (pure bash, ~50ms)
123
- if echo "$PROMPT" | grep -qE "^/specweave:costs($| )"; then
124
- ARGS=$(echo "$PROMPT" | sed 's|^/specweave:costs\s*||')
122
+ # /sw:costs → Execute read-costs.sh (pure bash, ~50ms)
123
+ if echo "$PROMPT" | grep -qE "^/sw:costs($| )"; then
124
+ ARGS=$(echo "$PROMPT" | sed 's|^/sw:costs\s*||')
125
125
  if [[ -f "$SCRIPTS_DIR/read-costs.sh" ]]; then
126
126
  OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-costs.sh" $ARGS 2>&1)
127
127
  else
@@ -133,12 +133,12 @@ if echo "$PROMPT" | grep -qE "^/specweave:costs($| )"; then
133
133
  fi
134
134
 
135
135
  # ==============================================================================
136
- # TASK COUNT GUARD: Block /specweave:do for oversized increments (v0.32.2+)
136
+ # TASK COUNT GUARD: Block /sw:do for oversized increments (v0.32.2+)
137
137
  # ==============================================================================
138
138
  # >8 tasks = context explosion = CRASH (per CLAUDE.md)
139
139
  MAX_TASKS=8
140
140
 
141
- if echo "$PROMPT" | grep -qE "^/specweave:do($| )"; then
141
+ if echo "$PROMPT" | grep -qE "^/sw:do($| )"; then
142
142
  # Extract increment ID from prompt
143
143
  DO_INCREMENT_ID=$(echo "$PROMPT" | grep -oE "[0-9]{4}[a-zA-Z0-9-]*" | head -1)
144
144
 
@@ -205,13 +205,13 @@ fi
205
205
  # ==============================================================================
206
206
 
207
207
  # ==============================================================================
208
- # PROJECT CONTEXT + WIP LIMITS FOR /specweave:increment (v0.34.0)
208
+ # PROJECT CONTEXT + WIP LIMITS FOR /sw:increment (v0.34.0)
209
209
  # ==============================================================================
210
210
  # CRITICAL: Inject project/board context BEFORE Claude generates spec.md
211
211
  # This ensures Claude knows available projects and uses correct IDs
212
212
  # ALSO: Check WIP limits in same block to avoid duplicate command detection
213
213
 
214
- if echo "$PROMPT" | grep -qE "^/specweave:increment"; then
214
+ if echo "$PROMPT" | grep -qE "^/sw:increment"; then
215
215
  # Get project context (uses specweave CLI if available)
216
216
  PROJECT_CONTEXT=""
217
217
 
@@ -310,7 +310,7 @@ if echo "$PROMPT" | grep -qE "^/specweave:increment"; then
310
310
 
311
311
  # Above hard cap: strong warning but NOT a block (user decides!)
312
312
  if [[ "$ACTIVE_COUNT" -ge "$HARD_CAP" ]]; then
313
- WIP_MSG="⚠️ WIP LIMIT EXCEEDED (${ACTIVE_COUNT}/${HARD_CAP})\\n\\nYou have ${ACTIVE_COUNT} active increments (configured maximum: ${HARD_CAP})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Research shows 3+ concurrent tasks = 40%% slower + more bugs\\n\\n💡 Options:\\n 1️⃣ Complete an increment: /specweave:done <id>\\n 2️⃣ Pause an increment: /specweave:pause <id>\\n 3️⃣ Increase limit: Edit .specweave/config.json limits.hardCap\\n 4️⃣ Continue anyway (not recommended)\\n\\n📝 To proceed anyway, just confirm your intent."
313
+ WIP_MSG="⚠️ WIP LIMIT EXCEEDED (${ACTIVE_COUNT}/${HARD_CAP})\\n\\nYou have ${ACTIVE_COUNT} active increments (configured maximum: ${HARD_CAP})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Research shows 3+ concurrent tasks = 40%% slower + more bugs\\n\\n💡 Options:\\n 1️⃣ Complete an increment: /sw:done <id>\\n 2️⃣ Pause an increment: /sw:pause <id>\\n 3️⃣ Increase limit: Edit .specweave/config.json limits.hardCap\\n 4️⃣ Continue anyway (not recommended)\\n\\n📝 To proceed anyway, just confirm your intent."
314
314
  # Prepend project context if available
315
315
  if [[ -n "$PROJECT_CONTEXT" ]]; then
316
316
  printf '{"decision":"approve","systemMessage":"%s%s"}\n' "$PROJECT_CONTEXT" "$WIP_MSG"
@@ -322,7 +322,7 @@ if echo "$PROMPT" | grep -qE "^/specweave:increment"; then
322
322
 
323
323
  # At soft limit: mild warning, approve
324
324
  if [[ "$ACTIVE_COUNT" -ge "$SOFT_LIMIT" ]]; then
325
- WIP_MSG="⚠️ WIP LIMIT REACHED (${ACTIVE_COUNT}/${SOFT_LIMIT})\\n\\nYou have ${ACTIVE_COUNT} active increment(s) (recommended limit: ${SOFT_LIMIT})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Focus Principle: Fewer active increments = maximum productivity\\n\\n💡 Consider:\\n 1️⃣ Complete current work (recommended)\\n 2️⃣ Pause current work (/specweave:pause)\\n 3️⃣ Continue anyway\\n\\n⚠️ Emergency hotfix/bug? Use --type=hotfix or --type=bug"
325
+ WIP_MSG="⚠️ WIP LIMIT REACHED (${ACTIVE_COUNT}/${SOFT_LIMIT})\\n\\nYou have ${ACTIVE_COUNT} active increment(s) (recommended limit: ${SOFT_LIMIT})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Focus Principle: Fewer active increments = maximum productivity\\n\\n💡 Consider:\\n 1️⃣ Complete current work (recommended)\\n 2️⃣ Pause current work (/sw:pause)\\n 3️⃣ Continue anyway\\n\\n⚠️ Emergency hotfix/bug? Use --type=hotfix or --type=bug"
326
326
  # Prepend project context if available
327
327
  if [[ -n "$PROJECT_CONTEXT" ]]; then
328
328
  printf '{"decision":"approve","systemMessage":"%s%s"}\n' "$PROJECT_CONTEXT" "$WIP_MSG"
@@ -380,7 +380,7 @@ if [[ -n "$ACTIVE_INCREMENT" ]] && echo "$PROMPT" | grep -qE "/(specweave:)?(syn
380
380
  if [[ -f "$SPEC_FILE" ]] && [[ -f "$PLAN_FILE" ]]; then
381
381
  # Check if spec is newer than plan (indicates spec changes need sync)
382
382
  if [[ -n $(find "$SPEC_FILE" -newer "$PLAN_FILE" 2>/dev/null) ]]; then
383
- printf '{"decision":"approve","systemMessage":"⚠️ Spec changes detected in %s\\n\\nspec.md has been modified after plan.md.\\nConsider running /specweave:sync-docs to update living documentation."}\n' "$ACTIVE_INCREMENT"
383
+ printf '{"decision":"approve","systemMessage":"⚠️ Spec changes detected in %s\\n\\nspec.md has been modified after plan.md.\\nConsider running /sw:sync-docs to update living documentation."}\n' "$ACTIVE_INCREMENT"
384
384
  exit 0
385
385
  fi
386
386
  fi
@@ -437,14 +437,14 @@ fi
437
437
  # COMMAND SUGGESTIONS: Guide users to structured workflow
438
438
  # ==============================================================================
439
439
 
440
- if echo "$PROMPT" | grep -qiE "(add|create|implement|build|develop)" && ! echo "$PROMPT" | grep -q "/specweave:"; then
440
+ if echo "$PROMPT" | grep -qiE "(add|create|implement|build|develop)" && ! echo "$PROMPT" | grep -q "/sw:"; then
441
441
  if [[ -n "$CONTEXT" ]]; then
442
442
  CONTEXT="$CONTEXT
443
443
 
444
444
  💡 TIP: Consider using SpecWeave commands for structured development:
445
- - /specweave:increment \"feature name\" # Plan new increment
446
- - /specweave:do # Execute current tasks
447
- - /specweave:progress # Check progress"
445
+ - /sw:increment \"feature name\" # Plan new increment
446
+ - /sw:do # Execute current tasks
447
+ - /sw:progress # Check progress"
448
448
  fi
449
449
  fi
450
450
 
@@ -2,7 +2,7 @@
2
2
  # completion-guard.sh - Block direct editing of metadata.json to "completed" status
3
3
  #
4
4
  # v0.28.63+: Prevents the auto-completion bug by blocking direct status changes to completed.
5
- # Status MUST go through ready_for_review first, and only /specweave:done can mark completed.
5
+ # Status MUST go through ready_for_review first, and only /sw:done can mark completed.
6
6
  #
7
7
  # PreToolUse hook - can BLOCK the tool call by returning non-zero exit code
8
8
  #
@@ -57,7 +57,7 @@ if echo "$NEW_CONTENT" | grep -q '"status"[[:space:]]*:[[:space:]]*"completed"';
57
57
  echo ""
58
58
  echo "CORRECT WORKFLOW:"
59
59
  echo "1. All tasks completed -> status auto-transitions to \"ready_for_review\""
60
- echo "2. Run /specweave:done <increment-id> with explicit user confirmation"
60
+ echo "2. Run /sw:done <increment-id> with explicit user confirmation"
61
61
  echo "3. Only then does status become \"completed\""
62
62
  echo ""
63
63
  echo "WHY THIS MATTERS:"
@@ -5,7 +5,7 @@
5
5
  # Pre-tool-use hook that ensures metadata.json exists BEFORE spec.md can be created.
6
6
  # This prevents increments from being created without proper metadata.
7
7
  #
8
- # ROOT CAUSE: When Claude creates increments via user prompt (not /specweave:increment),
8
+ # ROOT CAUSE: When Claude creates increments via user prompt (not /sw:increment),
9
9
  # metadata.json may be forgotten, causing:
10
10
  # - Status tracking broken
11
11
  # - WIP limits don't work
@@ -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