specweave 0.32.0 → 0.32.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/CLAUDE.md +215 -2
  2. package/README.md +22 -0
  3. package/bin/specweave.js +52 -1
  4. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts +100 -0
  5. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts.map +1 -0
  6. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js +291 -0
  7. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js.map +1 -0
  8. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts +103 -0
  9. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts.map +1 -0
  10. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js +310 -0
  11. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js.map +1 -0
  12. package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts +126 -0
  13. package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts.map +1 -0
  14. package/dist/plugins/specweave-jira/lib/jira-permission-gate.js +207 -0
  15. package/dist/plugins/specweave-jira/lib/jira-permission-gate.js.map +1 -0
  16. package/dist/src/adapters/codex/README.md +1 -1
  17. package/dist/src/adapters/codex/adapter.js +1 -1
  18. package/dist/src/cli/commands/archive.d.ts +2 -0
  19. package/dist/src/cli/commands/archive.d.ts.map +1 -1
  20. package/dist/src/cli/commands/archive.js +33 -0
  21. package/dist/src/cli/commands/archive.js.map +1 -1
  22. package/dist/src/cli/commands/cache.d.ts +17 -0
  23. package/dist/src/cli/commands/cache.d.ts.map +1 -0
  24. package/dist/src/cli/commands/cache.js +126 -0
  25. package/dist/src/cli/commands/cache.js.map +1 -0
  26. package/dist/src/cli/commands/context.d.ts +92 -0
  27. package/dist/src/cli/commands/context.d.ts.map +1 -0
  28. package/dist/src/cli/commands/context.js +205 -0
  29. package/dist/src/cli/commands/context.js.map +1 -0
  30. package/dist/src/cli/commands/init.d.ts.map +1 -1
  31. package/dist/src/cli/commands/init.js +112 -70
  32. package/dist/src/cli/commands/init.js.map +1 -1
  33. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  34. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  35. package/dist/src/cli/commands/sync-spec-commits.js +1 -1
  36. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  37. package/dist/src/cli/commands/sync-specs.js +2 -2
  38. package/dist/src/cli/commands/sync-specs.js.map +1 -1
  39. package/dist/src/cli/helpers/github/increment-profile-selector.js +1 -1
  40. package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
  41. package/dist/src/cli/helpers/init/external-import.d.ts +3 -0
  42. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  43. package/dist/src/cli/helpers/init/external-import.js +17 -4
  44. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  45. package/dist/src/cli/helpers/init/index.d.ts +1 -0
  46. package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
  47. package/dist/src/cli/helpers/init/index.js +2 -0
  48. package/dist/src/cli/helpers/init/index.js.map +1 -1
  49. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +70 -0
  50. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -1
  51. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +214 -4
  52. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -1
  53. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +4 -0
  54. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -1
  55. package/dist/src/cli/helpers/init/living-docs-preflight.js +34 -3
  56. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  57. package/dist/src/cli/helpers/init/testing-config.d.ts +3 -0
  58. package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -1
  59. package/dist/src/cli/helpers/init/testing-config.js +9 -2
  60. package/dist/src/cli/helpers/init/testing-config.js.map +1 -1
  61. package/dist/src/cli/helpers/init/translation-config.d.ts +3 -0
  62. package/dist/src/cli/helpers/init/translation-config.d.ts.map +1 -1
  63. package/dist/src/cli/helpers/init/translation-config.js +21 -4
  64. package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
  65. package/dist/src/cli/helpers/init/wizard-navigation.d.ts +45 -0
  66. package/dist/src/cli/helpers/init/wizard-navigation.d.ts.map +1 -0
  67. package/dist/src/cli/helpers/init/wizard-navigation.js +97 -0
  68. package/dist/src/cli/helpers/init/wizard-navigation.js.map +1 -0
  69. package/dist/src/cli/workers/living-docs-worker.js +66 -1
  70. package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
  71. package/dist/src/config/types.d.ts +203 -1208
  72. package/dist/src/config/types.d.ts.map +1 -1
  73. package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -1
  74. package/dist/src/core/discrepancy/increment-generator.js +5 -2
  75. package/dist/src/core/discrepancy/increment-generator.js.map +1 -1
  76. package/dist/src/core/increment/duplicate-detector.js +2 -2
  77. package/dist/src/core/increment/duplicate-detector.js.map +1 -1
  78. package/dist/src/core/increment/increment-archiver.d.ts +49 -4
  79. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  80. package/dist/src/core/increment/increment-archiver.js +123 -22
  81. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  82. package/dist/src/core/increment/increment-status.js +2 -2
  83. package/dist/src/core/increment/increment-status.js.map +1 -1
  84. package/dist/src/core/increment/increment-utils.d.ts +150 -0
  85. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  86. package/dist/src/core/increment/increment-utils.js +216 -4
  87. package/dist/src/core/increment/increment-utils.js.map +1 -1
  88. package/dist/src/core/increment/metadata-validator.js +1 -1
  89. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  90. package/dist/src/core/living-docs/feature-archiver.d.ts +4 -0
  91. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  92. package/dist/src/core/living-docs/feature-archiver.js +32 -10
  93. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  94. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  95. package/dist/src/core/living-docs/feature-id-manager.js +8 -4
  96. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  97. package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts +38 -0
  98. package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts.map +1 -0
  99. package/dist/src/core/living-docs/governance/ecosystem-detector.js +325 -0
  100. package/dist/src/core/living-docs/governance/ecosystem-detector.js.map +1 -0
  101. package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts +74 -0
  102. package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts.map +1 -0
  103. package/dist/src/core/living-docs/governance/frontend-standards-parser.js +366 -0
  104. package/dist/src/core/living-docs/governance/frontend-standards-parser.js.map +1 -0
  105. package/dist/src/core/living-docs/governance/go-standards-parser.d.ts +64 -0
  106. package/dist/src/core/living-docs/governance/go-standards-parser.d.ts.map +1 -0
  107. package/dist/src/core/living-docs/governance/go-standards-parser.js +229 -0
  108. package/dist/src/core/living-docs/governance/go-standards-parser.js.map +1 -0
  109. package/dist/src/core/living-docs/governance/index.d.ts +50 -0
  110. package/dist/src/core/living-docs/governance/index.d.ts.map +1 -0
  111. package/dist/src/core/living-docs/governance/index.js +56 -0
  112. package/dist/src/core/living-docs/governance/index.js.map +1 -0
  113. package/dist/src/core/living-docs/governance/java-standards-parser.d.ts +89 -0
  114. package/dist/src/core/living-docs/governance/java-standards-parser.d.ts.map +1 -0
  115. package/dist/src/core/living-docs/governance/java-standards-parser.js +356 -0
  116. package/dist/src/core/living-docs/governance/java-standards-parser.js.map +1 -0
  117. package/dist/src/core/living-docs/governance/python-standards-parser.d.ts +83 -0
  118. package/dist/src/core/living-docs/governance/python-standards-parser.d.ts.map +1 -0
  119. package/dist/src/core/living-docs/governance/python-standards-parser.js +347 -0
  120. package/dist/src/core/living-docs/governance/python-standards-parser.js.map +1 -0
  121. package/dist/src/core/living-docs/governance/standards-generator.d.ts +38 -0
  122. package/dist/src/core/living-docs/governance/standards-generator.d.ts.map +1 -0
  123. package/dist/src/core/living-docs/governance/standards-generator.js +476 -0
  124. package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -0
  125. package/dist/src/core/living-docs/hierarchy-mapper.js +3 -3
  126. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  127. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts +18 -0
  128. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -0
  129. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +299 -0
  130. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -0
  131. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts +15 -0
  132. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -0
  133. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +138 -0
  134. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -0
  135. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts +24 -0
  136. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts.map +1 -0
  137. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js +198 -0
  138. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js.map +1 -0
  139. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +17 -0
  140. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -0
  141. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +241 -0
  142. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -0
  143. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +28 -0
  144. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -0
  145. package/dist/src/core/living-docs/intelligent-analyzer/index.js +197 -0
  146. package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -0
  147. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts +22 -0
  148. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -0
  149. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +482 -0
  150. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -0
  151. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts +42 -0
  152. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts.map +1 -0
  153. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js +343 -0
  154. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js.map +1 -0
  155. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +190 -0
  156. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -0
  157. package/dist/src/core/living-docs/intelligent-analyzer/types.js +7 -0
  158. package/dist/src/core/living-docs/intelligent-analyzer/types.js.map +1 -0
  159. package/dist/src/core/living-docs/living-docs-sync.d.ts +11 -3
  160. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  161. package/dist/src/core/living-docs/living-docs-sync.js +53 -10
  162. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  163. package/dist/src/core/living-docs/module-analyzer.d.ts +22 -0
  164. package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
  165. package/dist/src/core/living-docs/module-analyzer.js +123 -19
  166. package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
  167. package/dist/src/core/llm/provider-factory.js +2 -2
  168. package/dist/src/core/llm/provider-factory.js.map +1 -1
  169. package/dist/src/core/llm/providers/anthropic-provider.js +1 -1
  170. package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
  171. package/dist/src/core/llm/providers/bedrock-provider.js +8 -4
  172. package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
  173. package/dist/src/core/sync/spec-increment-mapper.js +3 -3
  174. package/dist/src/core/sync/spec-increment-mapper.js.map +1 -1
  175. package/dist/src/importers/item-converter.d.ts +25 -0
  176. package/dist/src/importers/item-converter.d.ts.map +1 -1
  177. package/dist/src/importers/item-converter.js +135 -5
  178. package/dist/src/importers/item-converter.js.map +1 -1
  179. package/dist/src/importers/jira-importer.d.ts +14 -0
  180. package/dist/src/importers/jira-importer.d.ts.map +1 -1
  181. package/dist/src/importers/jira-importer.js +75 -0
  182. package/dist/src/importers/jira-importer.js.map +1 -1
  183. package/dist/src/init/architecture/types.d.ts +33 -140
  184. package/dist/src/init/architecture/types.d.ts.map +1 -1
  185. package/dist/src/init/compliance/types.d.ts +30 -27
  186. package/dist/src/init/compliance/types.d.ts.map +1 -1
  187. package/dist/src/init/repo/types.d.ts +11 -34
  188. package/dist/src/init/repo/types.d.ts.map +1 -1
  189. package/dist/src/init/research/src/config/types.d.ts +15 -82
  190. package/dist/src/init/research/src/config/types.d.ts.map +1 -1
  191. package/dist/src/init/research/types.d.ts +38 -93
  192. package/dist/src/init/research/types.d.ts.map +1 -1
  193. package/dist/src/init/team/types.d.ts +4 -42
  194. package/dist/src/init/team/types.d.ts.map +1 -1
  195. package/dist/src/integrations/jira/jira-token-provider.d.ts +93 -0
  196. package/dist/src/integrations/jira/jira-token-provider.d.ts.map +1 -0
  197. package/dist/src/integrations/jira/jira-token-provider.js +160 -0
  198. package/dist/src/integrations/jira/jira-token-provider.js.map +1 -0
  199. package/dist/src/sync/ado-reconciler.d.ts +92 -0
  200. package/dist/src/sync/ado-reconciler.d.ts.map +1 -0
  201. package/dist/src/sync/ado-reconciler.js +335 -0
  202. package/dist/src/sync/ado-reconciler.js.map +1 -0
  203. package/dist/src/sync/jira-reconciler.d.ts +106 -0
  204. package/dist/src/sync/jira-reconciler.d.ts.map +1 -0
  205. package/dist/src/sync/jira-reconciler.js +405 -0
  206. package/dist/src/sync/jira-reconciler.js.map +1 -0
  207. package/dist/src/types/dashboard-cache.d.ts +181 -0
  208. package/dist/src/types/dashboard-cache.d.ts.map +1 -0
  209. package/dist/src/types/dashboard-cache.js +65 -0
  210. package/dist/src/types/dashboard-cache.js.map +1 -0
  211. package/dist/src/types/model-selection.d.ts +6 -4
  212. package/dist/src/types/model-selection.d.ts.map +1 -1
  213. package/dist/src/types/model-selection.js +3 -1
  214. package/dist/src/types/model-selection.js.map +1 -1
  215. package/dist/src/utils/docs-validator.d.ts +131 -0
  216. package/dist/src/utils/docs-validator.d.ts.map +1 -0
  217. package/dist/src/utils/docs-validator.js +529 -0
  218. package/dist/src/utils/docs-validator.js.map +1 -0
  219. package/dist/src/utils/external-tool-drift-detector.d.ts +1 -1
  220. package/dist/src/utils/external-tool-drift-detector.d.ts.map +1 -1
  221. package/dist/src/utils/external-tool-drift-detector.js +5 -4
  222. package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
  223. package/dist/src/utils/feature-id-collision.js +1 -1
  224. package/dist/src/utils/feature-id-collision.js.map +1 -1
  225. package/dist/src/utils/feature-id-derivation.d.ts +8 -3
  226. package/dist/src/utils/feature-id-derivation.d.ts.map +1 -1
  227. package/dist/src/utils/feature-id-derivation.js +14 -6
  228. package/dist/src/utils/feature-id-derivation.js.map +1 -1
  229. package/dist/src/utils/html-to-mdx.d.ts +1 -0
  230. package/dist/src/utils/html-to-mdx.d.ts.map +1 -1
  231. package/dist/src/utils/html-to-mdx.js +43 -5
  232. package/dist/src/utils/html-to-mdx.js.map +1 -1
  233. package/dist/src/utils/model-selection.d.ts +3 -4
  234. package/dist/src/utils/model-selection.d.ts.map +1 -1
  235. package/dist/src/utils/model-selection.js +3 -4
  236. package/dist/src/utils/model-selection.js.map +1 -1
  237. package/package.json +1 -1
  238. package/plugins/specweave/agents/code-standards-detective/AGENT.md +48 -0
  239. package/plugins/specweave/agents/pm/AGENT.md +10 -7
  240. package/plugins/specweave/commands/specweave-archive-features.md +5 -7
  241. package/plugins/specweave/commands/specweave-archive.md +2 -1
  242. package/plugins/specweave/commands/specweave-costs.md +4 -4
  243. package/plugins/specweave/commands/specweave-do.md +44 -10
  244. package/plugins/specweave/commands/specweave-done.md +109 -0
  245. package/plugins/specweave/commands/specweave-import-external.md +45 -18
  246. package/plugins/specweave/commands/specweave-increment.md +331 -33
  247. package/plugins/specweave/commands/specweave-jobs.md +2 -2
  248. package/plugins/specweave/commands/specweave-progress.md +4 -4
  249. package/plugins/specweave/commands/specweave-restore-feature.md +5 -4
  250. package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
  251. package/plugins/specweave/commands/specweave-sync-specs.md +216 -322
  252. package/plugins/specweave/commands/specweave-validate-features.md +13 -8
  253. package/plugins/specweave/commands/specweave-validate.md +27 -1
  254. package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
  255. package/plugins/specweave/hooks/hooks.json +43 -4
  256. package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
  257. package/plugins/specweave/hooks/lib/common-setup.sh +375 -0
  258. package/plugins/specweave/hooks/lib/crash-prevention.sh +336 -0
  259. package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
  260. package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
  261. package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
  262. package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
  263. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
  264. package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
  265. package/plugins/specweave/hooks/post-task-completion.sh +4 -23
  266. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
  267. package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -6
  268. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
  269. package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
  270. package/plugins/specweave/hooks/pre-task-completion.sh +8 -37
  271. package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
  272. package/plugins/specweave/hooks/pre-tool-use.sh +2 -11
  273. package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
  274. package/plugins/specweave/hooks/spec-project-validator.sh +80 -25
  275. package/plugins/specweave/hooks/universal/dispatcher.mjs +135 -42
  276. package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +183 -0
  277. package/plugins/specweave/hooks/user-prompt-submit.sh +140 -38
  278. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
  279. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +12 -0
  280. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +89 -0
  281. package/plugins/specweave/hooks/v2/guards/bash-file-guard.sh +211 -0
  282. package/plugins/specweave/hooks/v2/guards/bash-file-guard.test.sh +163 -0
  283. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +26 -28
  284. package/plugins/specweave/hooks/v2/guards/features-folder-guard.sh +50 -0
  285. package/plugins/specweave/hooks/v2/guards/increment-duplicate-guard.sh +135 -0
  286. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +2 -2
  287. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
  288. package/plugins/specweave/scripts/README.md +166 -0
  289. package/plugins/specweave/scripts/cleanup-state.sh +142 -0
  290. package/plugins/specweave/scripts/force-kill.sh +142 -0
  291. package/plugins/specweave/scripts/jobs.js +171 -0
  292. package/plugins/specweave/scripts/progress.js +170 -0
  293. package/plugins/specweave/scripts/read-costs.sh +132 -0
  294. package/plugins/specweave/scripts/read-jobs.sh +324 -0
  295. package/plugins/specweave/scripts/read-progress.sh +185 -0
  296. package/plugins/specweave/scripts/read-status.sh +146 -0
  297. package/plugins/specweave/scripts/read-workflow.sh +173 -0
  298. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +327 -0
  299. package/plugins/specweave/scripts/session-watchdog.sh +192 -0
  300. package/plugins/specweave/scripts/status.js +154 -0
  301. package/plugins/specweave/scripts/update-dashboard-cache.sh +281 -0
  302. package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +58 -6
  303. package/plugins/specweave/skills/increment-planner/SKILL.md +388 -48
  304. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +17 -7
  305. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -1
  306. package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +1 -1
  307. package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +1 -1
  308. package/plugins/specweave/skills/instant-status/SKILL.md +70 -0
  309. package/plugins/specweave-ado/commands/cleanup-duplicates.md +212 -0
  310. package/plugins/specweave-ado/commands/reconcile.md +120 -0
  311. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
  312. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
  313. package/plugins/specweave-ado/lib/ado-duplicate-detector.js +279 -0
  314. package/plugins/specweave-ado/lib/ado-duplicate-detector.ts +407 -0
  315. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  316. package/plugins/specweave-docs/commands/build.md +32 -4
  317. package/plugins/specweave-docs/commands/preview.md +43 -1
  318. package/plugins/specweave-docs/commands/validate.md +250 -0
  319. package/plugins/specweave-github/agents/github-manager/AGENT.md +2 -2
  320. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1262 -0
  321. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
  322. package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
  323. package/plugins/specweave-infrastructure/skills/hetzner-provisioner/README.md +1 -1
  324. package/plugins/specweave-jira/agents/jira-manager/AGENT.md +1 -1
  325. package/plugins/specweave-jira/agents/jira-multi-project-mapper/AGENT.md +530 -0
  326. package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +438 -0
  327. package/plugins/specweave-jira/commands/cleanup-duplicates.md +219 -0
  328. package/plugins/specweave-jira/commands/close.md +297 -0
  329. package/plugins/specweave-jira/commands/create.md +198 -0
  330. package/plugins/specweave-jira/commands/reconcile.md +123 -0
  331. package/plugins/specweave-jira/commands/status.md +215 -0
  332. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
  333. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
  334. package/plugins/specweave-jira/lib/jira-duplicate-detector.js +296 -0
  335. package/plugins/specweave-jira/lib/jira-duplicate-detector.ts +434 -0
  336. package/plugins/specweave-jira/lib/jira-permission-gate.js +160 -0
  337. package/plugins/specweave-jira/lib/jira-permission-gate.ts +276 -0
  338. package/plugins/specweave-jira/lib/jira-profile-resolver.js +222 -0
  339. package/plugins/specweave-jira/lib/jira-profile-resolver.ts +427 -0
  340. package/plugins/specweave-jira/reference/jira-specweave-mapping.md +16 -11
  341. package/plugins/specweave-release/commands/specweave-release-npm.md +140 -14
  342. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1254 -0
  343. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
  344. package/plugins/specweave/hooks/post-edit-spec.sh +0 -265
  345. package/plugins/specweave/hooks/post-write-spec.sh +0 -267
  346. package/plugins/specweave/hooks/pre-edit-spec.sh +0 -151
  347. package/plugins/specweave/hooks/pre-write-spec.sh +0 -151
@@ -176,78 +176,362 @@ echo "Using coverageTarget: $coverageTarget"
176
176
 
177
177
  **Store these values for use in STEP 4 and STEP 7!**
178
178
 
179
- ### STEP 0B: Detect Structure Level & Select Project/Board (MANDATORY!)
179
+ ### STEP 0B: Get Project Context (MANDATORY - BLOCKING!)
180
180
 
181
- **⚠️ CRITICAL: Before generating spec.md, you MUST know the target project (and board for 2-level structures)!**
181
+ **⛔ DO NOT PROCEED TO STEP 1 WITHOUT COMPLETING THIS STEP!**
182
+
183
+ Before generating ANY spec.md content, you MUST run this CLI command:
184
+
185
+ ```bash
186
+ specweave context projects
187
+ ```
188
+
189
+ This returns JSON with available projects and structure level:
190
+
191
+ ```json
192
+ {
193
+ "level": 1,
194
+ "projects": [{"id": "my-app", "name": "My App"}],
195
+ "detectionReason": "multiProject configuration",
196
+ "source": "multi-project"
197
+ }
198
+ ```
199
+
200
+ **For 2-level structures**, output includes boards:
201
+ ```json
202
+ {
203
+ "level": 2,
204
+ "projects": [{"id": "acme-corp", "name": "ACME Corporation"}],
205
+ "boardsByProject": {
206
+ "acme-corp": [
207
+ {"id": "digital-ops", "name": "Digital Operations"},
208
+ {"id": "mobile-team", "name": "Mobile Team"}
209
+ ]
210
+ },
211
+ "detectionReason": "ADO area path mapping configured",
212
+ "source": "ado-area-path"
213
+ }
214
+ ```
215
+
216
+ **VALIDATION RULES:**
217
+
218
+ ```
219
+ ✅ REQUIRED: Parse the JSON output and use ONLY those project/board values
220
+ ✅ REQUIRED: project field MUST match one of the returned projects[].id
221
+ ✅ REQUIRED: board field (2-level) MUST match one of boardsByProject[project].id
222
+ ❌ FORBIDDEN: Inventing or guessing project names
223
+ ❌ FORBIDDEN: Using folder name as project (e.g., "sw-olysense")
224
+ ❌ FORBIDDEN: Creating spec.md with {{PROJECT_ID}} placeholder
225
+ ❌ FORBIDDEN: Creating spec.md for 2-level without board: field
226
+ ```
182
227
 
183
228
  **Structure Levels:**
184
229
  - **1-Level**: `internal/specs/{project}/FS-XXX/` - requires `project` in spec.md
185
230
  - **2-Level**: `internal/specs/{project}/{board}/FS-XXX/` - requires BOTH `project` AND `board`
186
231
 
187
- **Detection Logic** (use `src/utils/structure-level-detector.ts`):
232
+ **Alternative: Interactive Selection:**
233
+ ```bash
234
+ specweave context select
235
+ # Returns auto-selected or prompts for selection
236
+ ```
188
237
 
189
- ```typescript
190
- import { detectStructureLevel, getRequiredSpecFields } from './utils/structure-level-detector.js';
238
+ **Get boards for a specific project (2-level):**
239
+ ```bash
240
+ specweave context boards --project=acme-corp
241
+ ```
191
242
 
192
- const structureConfig = detectStructureLevel(projectRoot);
193
- console.log(`Structure level: ${structureConfig.level}`);
194
- console.log(`Detection reason: ${structureConfig.detectionReason}`);
195
- console.log(`Available projects: ${structureConfig.projects.map(p => p.id).join(', ')}`);
243
+ **Project/Board Selection - ULTRA-SMART LOGIC (MANDATORY BEFORE STEP 4!):**
196
244
 
197
- if (structureConfig.level === 2 && structureConfig.boardsByProject) {
198
- console.log('Available boards by project:');
199
- for (const [projectId, boards] of Object.entries(structureConfig.boardsByProject)) {
200
- console.log(` ${projectId}: ${boards.map(b => b.id).join(', ')}`);
201
- }
202
- }
245
+ **⚠️ CORE PRINCIPLE: Each User Story belongs to exactly ONE project (1-level) or ONE project+board (2-level). An increment can contain USs spanning MULTIPLE projects/boards.**
246
+
247
+ ---
248
+
249
+ ### SMART SELECTION DECISION TREE
250
+
251
+ **RULE 1: NO QUESTION IF ONLY 1 OPTION**
252
+ ```
253
+ IF 1-level AND only 1 project → AUTO-SELECT silently
254
+ IF 2-level AND only 1 project AND only 1 board → AUTO-SELECT silently
203
255
  ```
204
256
 
205
- **Manual Detection:**
206
- ```bash
207
- # Check if 2-level (ADO area paths or JIRA boards)
208
- jq '.sync.profiles | to_entries[] | select(.value.provider == "ado") | .value.config.areaPathMapping' .specweave/config.json
257
+ **RULE 2: KEYWORD-BASED AUTO-DETECTION**
258
+
259
+ Analyze feature description and US content for keywords:
260
+
261
+ **Project-Level Keywords (1-level and 2-level):**
262
+ ```
263
+ Frontend (FE) keywords:
264
+ UI, form, button, page, component, React, Vue, Angular, Next.js,
265
+ CSS, style, responsive, chart, dashboard, view, modal, widget,
266
+ Tailwind, Material-UI, Recharts
267
+
268
+ Backend (BE) keywords:
269
+ API, endpoint, REST, GraphQL, database, query, migration, service,
270
+ controller, authentication, JWT, session, middleware, CRUD,
271
+ Redis, PostgreSQL, MongoDB, microservice
272
+
273
+ Mobile keywords:
274
+ mobile, iOS, Android, React Native, Flutter, Expo, app, native,
275
+ push notification, offline, AsyncStorage, screen, touch, gesture
276
+
277
+ Infrastructure (INFRA) keywords:
278
+ deploy, CI/CD, Docker, Kubernetes, terraform, monitoring,
279
+ logging, pipeline, AWS, Azure, GCP, nginx, Helm, ArgoCD
280
+
281
+ Shared (SHARED) keywords:
282
+ types, interfaces, utilities, validators, shared, common, library,
283
+ SDK, models, constants, helpers
284
+ ```
285
+
286
+ **Board-Level Keywords (2-level structures only):**
287
+ ```
288
+ When project has multiple boards, also match board-specific keywords:
289
+
290
+ analytics/reporting: analytics, metrics, KPI, dashboard, report, chart, graph
291
+ user-management: user, auth, login, registration, profile, permissions, roles
292
+ integrations: integration, webhook, API, third-party, sync, import, export
293
+ payments: payment, billing, subscription, invoice, stripe, checkout
294
+ notifications: notification, alert, email, SMS, push, messaging
295
+ devops/platform: deploy, infrastructure, monitoring, CI/CD, pipeline
296
+ ```
297
+
298
+ **RULE 3: CONFIDENCE CALCULATION FORMULA**
299
+ ```
300
+ confidence = (matched_keywords / total_feature_keywords) × 100
301
+
302
+ Example: "Add React login form with JWT authentication"
303
+ Keywords found: React (FE), login (FE), form (FE), JWT (BE), authentication (BE)
304
+ FE matches: 3, BE matches: 2
305
+ FE confidence: 3/5 = 60%
306
+ BE confidence: 2/5 = 40%
307
+ → Primary: FE (60%), Secondary: BE (40%)
308
+ → SUGGEST: "Frontend (60%), but also touches Backend (40%)"
309
+
310
+ If multiple projects have similar confidence (within 15%):
311
+ → Treat as MULTI-PROJECT feature
312
+ → Auto-split USs by detected keywords
313
+ ```
314
+
315
+ **RULE 4: CONFIDENCE-BASED DECISION**
316
+ ```
317
+ >80% single project → AUTO-SELECT with notification (no question)
318
+ 50-80% single project → SUGGEST with quick confirm option
319
+ Multiple projects within 15% → AUTO-SPLIT across projects
320
+ <50% OR ambiguous → ASK user with all options
321
+ ```
322
+
323
+ **RULE 5: FALLBACK TO DEFAULTS**
324
+ ```
325
+ IF US has explicit **Project**: field → USE IT
326
+ ELSE IF frontmatter has default_project → USE default_project
327
+ ELSE → ASK user (should not happen if flow followed correctly)
328
+
329
+ Same logic applies to **Board**: and default_board for 2-level
330
+ ```
331
+
332
+ ---
333
+
334
+ ### DECISION FLOWCHART
335
+
336
+ ```
337
+ START
338
+
339
+
340
+ ┌─────────────────────────────────────┐
341
+ │ 1. Detect structure level (1 or 2) │
342
+ │ 2. Count available projects/boards │
343
+ └─────────────────────────────────────┘
344
+
345
+
346
+ ┌─────────────────────────────────────┐
347
+ │ ONLY 1 PROJECT? │
348
+ │ (1-level: 1 project) │
349
+ │ (2-level: 1 project + 1 board) │
350
+ └─────────────────────────────────────┘
351
+
352
+ ├── YES ──► AUTO-SELECT SILENTLY
353
+ │ Output: "✅ Project: {name} (auto-selected)"
354
+ │ NO QUESTION ASKED
355
+
356
+ ▼ NO
357
+ ┌─────────────────────────────────────┐
358
+ │ ANALYZE KEYWORDS in feature desc │
359
+ │ Calculate confidence per project │
360
+ └─────────────────────────────────────┘
361
+
362
+ ├── HIGH CONFIDENCE (>80% single) ──► AUTO-SELECT + NOTIFY
363
+ │ Output: "✅ Detected: {project} (keywords: form, React)"
364
+
365
+ ├── MULTI-PROJECT (within 15%) ──► AUTO-SPLIT USs
366
+ │ Output: "🔀 Multi-project detected:
367
+ │ • US-001 (Login UI) → web-app (60%)
368
+ │ • US-002 (Auth API) → api-service (55%)
369
+ │ Proceed? (Y/n)"
370
+
371
+ ├── MEDIUM CONFIDENCE (50-80%) ──► SUGGEST + CONFIRM
372
+ │ Output: "📍 Suggested: {project}. Confirm? (Y/n)"
373
+
374
+ ▼ LOW CONFIDENCE (<50%)
375
+ ┌─────────────────────────────────────┐
376
+ │ ASK USER with ALL options listed │
377
+ │ multiSelect: true │
378
+ │ Show complete list (never truncate)│
379
+ └─────────────────────────────────────┘
380
+ ```
381
+
382
+ ---
383
+
384
+ ### PER-USER-STORY ASSIGNMENT MODEL
385
+
386
+ **CRITICAL: Assignment is at USER STORY level, not increment level!**
387
+
388
+ Each US in spec.md has its own project (and board for 2-level):
389
+
390
+ ```markdown
391
+ ## User Stories
209
392
 
210
- # Check existing folder structure
211
- ls -la .specweave/docs/internal/specs/*/ # If sub-folders exist (not FS-XXX) → 2-level
393
+ ### US-001: Login Form UI
394
+ **Project**: web-app
395
+ **Board**: frontend <!-- 2-level only -->
396
+ **As a** user...
397
+
398
+ ### US-002: Auth API Endpoints
399
+ **Project**: api-service
400
+ **Board**: backend <!-- 2-level only -->
401
+ **As a** developer...
402
+
403
+ ### US-003: Mobile Login Screen
404
+ **Project**: mobile-app
405
+ **Board**: mobile-team <!-- 2-level only -->
406
+ **As a** mobile user...
407
+ ```
408
+
409
+ **User can manually change project/board per US at any time by editing spec.md!**
410
+
411
+ ---
412
+
413
+ ### EXAMPLE SCENARIOS
414
+
415
+ **Scenario 1: Single Project (NO QUESTION)**
416
+ ```
417
+ Config: 1 project (my-app)
418
+ Feature: "Add user authentication"
419
+
420
+ → AUTO-SELECT: my-app
421
+ → Output: "✅ Project: my-app (single project - auto-selected)"
422
+ → NO question asked
423
+ ```
424
+
425
+ **Scenario 2: Multiple Projects, Clear Keywords (AUTO-DETECT)**
426
+ ```
427
+ Config: 3 projects (web-app, api-service, mobile-app)
428
+ Feature: "Add React dashboard with charts"
429
+
430
+ → Keyword analysis: "React" (FE), "dashboard" (FE), "charts" (FE)
431
+ → Confidence: 95% → web-app
432
+ → Output: "✅ Detected project: web-app (keywords: React, dashboard, charts)"
433
+ → NO question asked (high confidence)
434
+ ```
435
+
436
+ **Scenario 3: Multiple Projects, Multi-Area Feature (SMART SPLIT)**
212
437
  ```
438
+ Config: 3 projects (web-app, api-service, shared-lib)
439
+ Feature: "User authentication with JWT"
213
440
 
214
- **Project/Board Selection (MANDATORY BEFORE STEP 4!):**
441
+ Analyze: This spans FE (login form) + BE (auth API) + possibly shared (types)
442
+ → Output:
443
+ "🔍 This feature likely spans multiple projects:
215
444
 
216
- 1. **For 1-level structure:**
217
- - ASK user: "Which project should this increment sync to?"
218
- - Options: List from `structureConfig.projects`
219
- - Store selected `PROJECT_ID`
445
+ Based on 'user authentication with JWT', I'll create:
446
+ • US-001: Login/Register UI web-app (keywords: UI, form)
447
+ • US-002: Auth API endpoints → api-service (keywords: API, JWT)
448
+ • US-003: Auth types/validators → shared-lib (keywords: types, shared)
220
449
 
221
- 2. **For 2-level structure:**
222
- - ASK user: "Which project should this increment sync to?"
223
- - Then ASK: "Which board/area path within {project}?"
224
- - Options: List from `structureConfig.boardsByProject[selectedProject]`
225
- - Store BOTH `PROJECT_ID` and `BOARD_ID`
450
+ Proceed with this assignment? (Y/n)
451
+ 💡 You can modify project per US in spec.md anytime"
452
+ ```
453
+
454
+ **Scenario 4: 2-Level, Single Project, Auto-Detect Board**
455
+ ```
456
+ Config: 1 project (enterprise-corp), 5 boards (analytics, frontend, backend, mobile, devops)
457
+ Feature: "Add reporting dashboard"
458
+
459
+ → Project: AUTO-SELECT enterprise-corp (only option)
460
+ → Board keywords: "reporting" → analytics, "dashboard" → frontend
461
+ → Confidence: 70% analytics, 60% frontend
462
+ → Output:
463
+ "✅ Project: enterprise-corp (auto-selected)
464
+ 📍 Suggested board: analytics (keyword: reporting)
226
465
 
227
- **VALIDATION RULE:**
466
+ Confirm or select different board:
467
+ 1. analytics (suggested)
468
+ 2. frontend
469
+ 3. backend
470
+ 4. mobile
471
+ 5. devops"
228
472
  ```
229
- ❌ FORBIDDEN: Creating spec.md without PROJECT_ID set
230
- FORBIDDEN: Creating spec.md for 2-level without BOARD_ID set
231
- ❌ FORBIDDEN: Vague increments like "show last git commits" without project context
232
- ✅ REQUIRED: Always know WHERE this increment will sync BEFORE creating spec.md
473
+
474
+ **Scenario 5: Completely Ambiguous (ASK WITH ALL OPTIONS)**
475
+ ```
476
+ Config: 4 projects (proj-a, proj-b, proj-c, proj-d)
477
+ Feature: "Improve system performance"
478
+
479
+ → Keyword analysis: No clear project match
480
+ → Output:
481
+ "❓ Which project(s) should this increment target?
482
+
483
+ Available projects:
484
+ • proj-a - E-commerce frontend
485
+ • proj-b - Order processing API
486
+ • proj-c - Mobile shopping app
487
+ • proj-d - Infrastructure/DevOps
488
+
489
+ Select one or more (comma-separated, e.g., '1,2' or 'proj-a,proj-b'):"
233
490
  ```
234
491
 
235
- **Example User Interaction:**
492
+ ---
493
+
494
+ ### VALIDATION RULES
236
495
 
237
496
  ```
238
- 🔍 Detected 2-level structure (ADO area path mapping)
239
- Available projects: acme-corp
497
+ FORBIDDEN: Asking project question when only 1 project exists
498
+ FORBIDDEN: Asking board question when only 1 board exists in project
499
+ ❌ FORBIDDEN: Hiding options behind "Let me see all" - ALWAYS show complete list
500
+ ❌ FORBIDDEN: Truncating project/board lists
501
+ ❌ FORBIDDEN: Assigning ALL USs to same project when content clearly differs
502
+ ✅ REQUIRED: Auto-select when only 1 option available
503
+ ✅ REQUIRED: Use keyword matching before asking user
504
+ ✅ REQUIRED: Each US has explicit project (and board for 2-level) assignment
505
+ ✅ REQUIRED: Allow user to modify assignments per-US in spec.md
506
+ ✅ REQUIRED: When asking, show ALL options with descriptions
507
+ ```
240
508
 
241
- 📁 Project: acme-corp
242
- Boards: clinical-insights, platform-engineering, digital-operations
509
+ ---
510
+
511
+ ### SPEC.MD YAML FORMAT
243
512
 
244
- Which board should this increment sync to?
245
- > digital-operations
513
+ **1-Level Structure:**
514
+ ```yaml
515
+ ---
516
+ increment: 0045-user-auth
517
+ title: "User Authentication"
518
+ # Optional default (used if US doesn't specify)
519
+ default_project: web-app
520
+ ---
521
+ ```
246
522
 
247
- Increment will sync to: internal/specs/acme-corp/digital-operations/FS-XXX/
523
+ **2-Level Structure:**
524
+ ```yaml
525
+ ---
526
+ increment: 0045-user-auth
527
+ title: "User Authentication"
528
+ # Optional defaults (used if US doesn't specify)
529
+ default_project: enterprise-corp
530
+ default_board: backend
531
+ ---
248
532
  ```
249
533
 
250
- **Store PROJECT_ID and BOARD_ID for use in STEP 4!**
534
+ **Store detected/selected values for use in STEP 4!**
251
535
 
252
536
  ---
253
537
 
@@ -445,6 +729,60 @@ const metadata = {
445
729
 
446
730
  **DO NOT invoke Task() tool to spawn agents from this skill!**
447
731
 
732
+ ### STEP 9: Trigger Living Docs & External Tool Sync (v0.32.2+)
733
+
734
+ **🔄 CRITICAL: After increment files are created, trigger sync to living docs AND external tools!**
735
+
736
+ This step uses the existing sync infrastructure to:
737
+ 1. Create living docs (FS-XXX folder with FEATURE.md and us-*.md files)
738
+ 2. Check permissions (`canUpsertInternalItems`) from `.specweave/config.json`
739
+ 3. Sync to external tools (GitHub/JIRA/ADO) if configured and permitted
740
+
741
+ **Run the sync-specs command:**
742
+
743
+ ```bash
744
+ /specweave:sync-specs {increment-id}
745
+ ```
746
+
747
+ **Expected output:**
748
+
749
+ ```
750
+ 🔄 Syncing increment to living docs...
751
+ ✅ Living docs synced: FS-021
752
+ Created: 4 files (FEATURE.md, us-001.md, us-002.md, us-003.md)
753
+
754
+ 📡 Syncing to external tools: github
755
+ 📋 Permissions: upsert=true, update=true, status=true
756
+ ✅ Synced to GitHub: 0 updated, 3 created
757
+ ```
758
+
759
+ **Permission handling (v0.32.2+):**
760
+
761
+ If `canUpsertInternalItems: false` in config:
762
+ ```
763
+ ⚠️ Skipping external sync - canUpsertInternalItems is disabled
764
+ 💡 Enable in .specweave/config.json: sync.settings.canUpsertInternalItems: true
765
+ ```
766
+
767
+ **Error handling:**
768
+
769
+ External tool sync failures are NON-BLOCKING:
770
+ ```
771
+ ⚠️ External sync failed: Rate limit exceeded
772
+ 💡 Run /specweave:sync-specs {increment-id} to retry
773
+ ```
774
+
775
+ **Output after sync:**
776
+
777
+ ```
778
+ ✅ Increment created and synced!
779
+
780
+ Next steps:
781
+ 1. Review the increment plan and docs
782
+ 2. Start implementation: /specweave:do {increment-id}
783
+ 3. Monitor status: /specweave:status {increment-id}
784
+ ```
785
+
448
786
  ---
449
787
 
450
788
  ## Model Selection for Tasks
@@ -457,19 +795,21 @@ When creating tasks, assign optimal models:
457
795
  - Simple CRUD, configuration, setup
458
796
  - Mechanical work with defined approach
459
797
 
460
- **🧠 Sonnet** (thinking, balanced):
798
+ **💎 Opus** (best quality, default):
461
799
  - Architecture decisions
462
800
  - Multiple valid approaches
463
801
  - Integration between components
464
802
  - Complex business logic
465
803
  - Error handling strategies
466
-
467
- **💎 Opus** (critical, expensive):
468
804
  - Critical system architecture
469
805
  - Security-critical decisions
470
806
  - Performance-critical algorithms
471
807
  - Novel problem-solving
472
808
 
809
+ **🧠 Sonnet** (legacy, rarely needed):
810
+ - Use only for backwards compatibility
811
+ - Prefer Opus or Haiku instead
812
+
473
813
  ---
474
814
 
475
815
  ## Validation Checklist
@@ -8,6 +8,8 @@ created: {{DATE}}
8
8
  structure: user-stories
9
9
  test_mode: {{TEST_MODE}}
10
10
  coverage_target: {{COVERAGE_TARGET}}
11
+ # MANDATORY: Run "specweave context projects" to get valid project/board IDs
12
+ # For 2-level structures: BOTH project AND board are REQUIRED
11
13
  project: {{PROJECT_ID}}
12
14
  board: {{BOARD_ID}}
13
15
  multi_project: true
@@ -26,12 +28,16 @@ projects:
26
28
 
27
29
  [High-level description - WHAT this feature does and WHY it's needed]
28
30
 
29
- ## User Stories by Project
31
+ ## User Stories
30
32
 
31
- ### Frontend ({{PROJECT_FE_ID}})
33
+ <!-- Each US has its own **Project** and **Board** fields. User can modify per-US anytime. -->
34
+
35
+ ### Frontend Stories
32
36
 
33
37
  #### US-FE-001: [Story Title] (P1)
34
- **Related Repo**: {{PROJECT_FE_ID}}
38
+ **Project**: {{PROJECT_ID}}
39
+ **Board**: {{BOARD_FE_ID}}
40
+
35
41
  **As a** [user type]
36
42
  **I want** [goal]
37
43
  **So that** [benefit]
@@ -42,10 +48,12 @@ projects:
42
48
 
43
49
  ---
44
50
 
45
- ### Backend ({{PROJECT_BE_ID}})
51
+ ### Backend Stories
46
52
 
47
53
  #### US-BE-001: [Story Title] (P1)
48
- **Related Repo**: {{PROJECT_BE_ID}}
54
+ **Project**: {{PROJECT_ID}}
55
+ **Board**: {{BOARD_BE_ID}}
56
+
49
57
  **As a** [system/frontend application]
50
58
  **I want** [API endpoint/service goal]
51
59
  **So that** [benefit]
@@ -56,10 +64,12 @@ projects:
56
64
 
57
65
  ---
58
66
 
59
- ### Shared Library ({{PROJECT_SHARED_ID}})
67
+ ### Shared Library Stories
60
68
 
61
69
  #### US-SHARED-001: [Story Title] (P1)
62
- **Related Repo**: {{PROJECT_SHARED_ID}}
70
+ **Project**: {{PROJECT_ID}}
71
+ **Board**: {{BOARD_SHARED_ID}}
72
+
63
73
  **As a** developer in FE or BE repos
64
74
  **I want** [shared types/utilities/validators]
65
75
  **So that** [consistency across projects]
@@ -8,6 +8,7 @@ created: {{DATE}}
8
8
  structure: user-stories
9
9
  test_mode: {{TEST_MODE}}
10
10
  coverage_target: {{COVERAGE_TARGET}}
11
+ # MANDATORY: Run "specweave context projects" to get valid project ID
11
12
  project: {{PROJECT_ID}}
12
13
  ---
13
14
 
@@ -19,7 +20,10 @@ project: {{PROJECT_ID}}
19
20
 
20
21
  ## User Stories
21
22
 
23
+ <!-- Each US can have its own **Project** field. If omitted, uses default_project from frontmatter -->
24
+
22
25
  ### US-001: [Story Title] (P1)
26
+ **Project**: {{PROJECT_ID}}
23
27
 
24
28
  **As a** [user type]
25
29
  **I want** [goal]
@@ -30,8 +34,9 @@ project: {{PROJECT_ID}}
30
34
  - [ ] **AC-US1-02**: [Another criterion]
31
35
 
32
36
  ### US-002: [Story Title] (P2)
37
+ **Project**: {{PROJECT_ID}}
33
38
 
34
- [Repeat structure]
39
+ [Repeat structure - change Project per US if spanning multiple projects]
35
40
 
36
41
  ## Functional Requirements
37
42
 
@@ -6,7 +6,7 @@
6
6
  - `[P]`: Parallelizable
7
7
  - `[ ]`: Not started
8
8
  - `[x]`: Completed
9
- - Model hints: ⚡ haiku, 🧠 sonnet, 💎 opus
9
+ - Model hints: ⚡ haiku (simple), 💎 opus (default)
10
10
 
11
11
  ## Phase 1: Foundation & Setup
12
12
 
@@ -6,7 +6,7 @@
6
6
  - `[P]`: Parallelizable
7
7
  - `[ ]`: Not started
8
8
  - `[x]`: Completed
9
- - Model hints: ⚡ haiku, 🧠 sonnet, 💎 opus
9
+ - Model hints: ⚡ haiku (simple), 💎 opus (default)
10
10
 
11
11
  ## Phase 1: Setup
12
12
 
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: instant-status
3
+ description: Instant status commands that bypass LLM processing. Execute scripts directly for /specweave:status, /specweave:progress, /specweave:jobs. Activates for specweave status, specweave progress, specweave jobs, increment status, show status, show progress, background jobs, job status.
4
+ ---
5
+
6
+ # Instant Status Commands
7
+
8
+ These commands need **NO LLM reasoning** - execute scripts directly for instant results.
9
+
10
+ ## Commands and Scripts
11
+
12
+ | Command | Script | Purpose |
13
+ |---------|--------|---------|
14
+ | `/specweave:status` | `bash plugins/specweave/scripts/read-status.sh` | Increment status overview |
15
+ | `/specweave:progress` | `bash plugins/specweave/scripts/read-progress.sh` | Task completion progress |
16
+ | `/specweave:jobs` | `bash plugins/specweave/scripts/read-jobs.sh` | Background job status |
17
+
18
+ ## CRITICAL: Direct Execution Required
19
+
20
+ When user requests these commands:
21
+
22
+ 1. **DO NOT** process as natural language
23
+ 2. **DO NOT** expand slash command markdown
24
+ 3. **RUN** the bash script via Bash tool (NOT node!)
25
+ 4. **SHOW** output directly to user
26
+
27
+ ### Example Execution
28
+
29
+ ```bash
30
+ # User types: /specweave:status
31
+ # You execute:
32
+ bash plugins/specweave/scripts/read-status.sh
33
+
34
+ # User types: /specweave:progress
35
+ # You execute:
36
+ bash plugins/specweave/scripts/read-progress.sh
37
+
38
+ # User types: /specweave:jobs
39
+ # You execute:
40
+ bash plugins/specweave/scripts/read-jobs.sh
41
+ ```
42
+
43
+ ## Three Execution Paths
44
+
45
+ | Layer | Context | Speed | When Used |
46
+ |-------|---------|-------|-----------|
47
+ | **Hook** | Claude Code | <100ms | Automatic (UserPromptSubmit intercepts) |
48
+ | **Skill** | Any LLM | ~2s | When hook not available (you are here) |
49
+ | **CLI** | Terminal | ~500ms | Direct `specweave status` command |
50
+
51
+ ## CLI Alternative
52
+
53
+ Users can also run directly in terminal:
54
+ ```bash
55
+ specweave status # Full CLI command
56
+ specweave jobs # Background jobs
57
+ ```
58
+
59
+ ## Script Arguments
60
+
61
+ ```bash
62
+ bash plugins/specweave/scripts/read-status.sh 0045 # Specific increment
63
+ bash plugins/specweave/scripts/read-jobs.sh --all # All jobs
64
+ ```
65
+
66
+ ## Why This Matters
67
+
68
+ - **3+ minutes** to **<100ms**: Status commands were expanding as prompts
69
+ - **Zero LLM tokens**: Pure filesystem reads, no AI needed
70
+ - **Universal**: Works in Claude Code, Cursor, Copilot, CLI