specweave 0.24.13 → 0.26.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 (447) hide show
  1. package/CLAUDE.md +586 -18
  2. package/bin/specweave.js +14 -0
  3. package/dist/plugins/specweave-github/lib/CodeValidator.js +2 -2
  4. package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -1
  5. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
  6. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -1
  7. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  8. package/dist/plugins/specweave-github/lib/github-client-v2.js +17 -1
  9. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  10. package/dist/plugins/specweave-github/lib/github-issue-updater.js +1 -1
  11. package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +1 -1
  12. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
  13. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
  14. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
  15. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +1 -1
  16. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  17. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +7 -6
  18. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  19. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
  20. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js.map +1 -1
  21. package/dist/src/adapters/adapter-base.js +1 -1
  22. package/dist/src/adapters/adapter-base.js.map +1 -1
  23. package/dist/src/adapters/adapter-loader.js +1 -1
  24. package/dist/src/adapters/adapter-loader.js.map +1 -1
  25. package/dist/src/adapters/agents-md-generator.js +1 -1
  26. package/dist/src/adapters/agents-md-generator.js.map +1 -1
  27. package/dist/src/adapters/claude/adapter.js +1 -1
  28. package/dist/src/adapters/claude/adapter.js.map +1 -1
  29. package/dist/src/adapters/claude-md-generator.js +1 -1
  30. package/dist/src/adapters/claude-md-generator.js.map +1 -1
  31. package/dist/src/adapters/codex/adapter.js +1 -1
  32. package/dist/src/adapters/codex/adapter.js.map +1 -1
  33. package/dist/src/adapters/cursor/adapter.js +1 -1
  34. package/dist/src/adapters/cursor/adapter.js.map +1 -1
  35. package/dist/src/adapters/doc-generator.js +1 -1
  36. package/dist/src/adapters/doc-generator.js.map +1 -1
  37. package/dist/src/adapters/gemini/adapter.js +1 -1
  38. package/dist/src/adapters/gemini/adapter.js.map +1 -1
  39. package/dist/src/adapters/generic/adapter.js +1 -1
  40. package/dist/src/adapters/generic/adapter.js.map +1 -1
  41. package/dist/src/cli/commands/cicd-monitor.js +1 -1
  42. package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
  43. package/dist/src/cli/commands/delete-feature.d.ts +14 -0
  44. package/dist/src/cli/commands/delete-feature.d.ts.map +1 -0
  45. package/dist/src/cli/commands/delete-feature.js +87 -0
  46. package/dist/src/cli/commands/delete-feature.js.map +1 -0
  47. package/dist/src/cli/commands/detect-specs.js +1 -1
  48. package/dist/src/cli/commands/detect-specs.js.map +1 -1
  49. package/dist/src/cli/commands/import-external.js +1 -1
  50. package/dist/src/cli/commands/import-external.js.map +1 -1
  51. package/dist/src/cli/commands/init.d.ts.map +1 -1
  52. package/dist/src/cli/commands/init.js +39 -49
  53. package/dist/src/cli/commands/init.js.map +1 -1
  54. package/dist/src/cli/commands/install.js +1 -1
  55. package/dist/src/cli/commands/install.js.map +1 -1
  56. package/dist/src/cli/commands/list.js +1 -1
  57. package/dist/src/cli/commands/list.js.map +1 -1
  58. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  59. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  60. package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
  61. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  62. package/dist/src/cli/commands/plan/agent-invoker.js +1 -1
  63. package/dist/src/cli/commands/repair-status-desync.js +1 -1
  64. package/dist/src/cli/commands/repair-status-desync.js.map +1 -1
  65. package/dist/src/cli/commands/revert-wip-limit.js +1 -1
  66. package/dist/src/cli/commands/revert-wip-limit.js.map +1 -1
  67. package/dist/src/cli/commands/sync-specs.js +1 -1
  68. package/dist/src/cli/commands/sync-specs.js.map +1 -1
  69. package/dist/src/cli/helpers/init/initial-increment-generator.js +1 -1
  70. package/dist/src/cli/helpers/init/initial-increment-generator.js.map +1 -1
  71. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  72. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +13 -46
  73. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  74. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  75. package/dist/src/cli/helpers/issue-tracker/index.js +12 -31
  76. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  77. package/dist/src/cli/helpers/issue-tracker/types.d.ts +6 -1
  78. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  79. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  80. package/dist/src/config/import-config.js +1 -1
  81. package/dist/src/config/import-config.js.map +1 -1
  82. package/dist/src/core/ac-test-validator-cli.js +1 -1
  83. package/dist/src/core/ac-test-validator-cli.js.map +1 -1
  84. package/dist/src/core/ac-test-validator.js +1 -1
  85. package/dist/src/core/ac-test-validator.js.map +1 -1
  86. package/dist/src/core/brownfield/analyzer.js +1 -1
  87. package/dist/src/core/brownfield/analyzer.js.map +1 -1
  88. package/dist/src/core/brownfield/importer.js +1 -1
  89. package/dist/src/core/brownfield/importer.js.map +1 -1
  90. package/dist/src/core/cicd/config-loader.js +1 -1
  91. package/dist/src/core/cicd/config-loader.js.map +1 -1
  92. package/dist/src/core/cicd/notifier.js +1 -1
  93. package/dist/src/core/cicd/notifier.js.map +1 -1
  94. package/dist/src/core/cicd/parent-repo-validator.js +1 -1
  95. package/dist/src/core/cicd/parent-repo-validator.js.map +1 -1
  96. package/dist/src/core/cicd/state-manager.js +1 -1
  97. package/dist/src/core/cicd/state-manager.js.map +1 -1
  98. package/dist/src/core/config-manager.js +1 -1
  99. package/dist/src/core/config-manager.js.map +1 -1
  100. package/dist/src/core/cost-tracker.js +1 -1
  101. package/dist/src/core/cost-tracker.js.map +1 -1
  102. package/dist/src/core/deduplication/command-deduplicator.js +1 -1
  103. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -1
  104. package/dist/src/core/feature-deleter/audit-logger.d.ts +30 -0
  105. package/dist/src/core/feature-deleter/audit-logger.d.ts.map +1 -0
  106. package/dist/src/core/feature-deleter/audit-logger.js +77 -0
  107. package/dist/src/core/feature-deleter/audit-logger.js.map +1 -0
  108. package/dist/src/core/feature-deleter/confirmation-manager.d.ts +39 -0
  109. package/dist/src/core/feature-deleter/confirmation-manager.d.ts.map +1 -0
  110. package/dist/src/core/feature-deleter/confirmation-manager.js +89 -0
  111. package/dist/src/core/feature-deleter/confirmation-manager.js.map +1 -0
  112. package/dist/src/core/feature-deleter/deletion-transaction.d.ts +51 -0
  113. package/dist/src/core/feature-deleter/deletion-transaction.d.ts.map +1 -0
  114. package/dist/src/core/feature-deleter/deletion-transaction.js +185 -0
  115. package/dist/src/core/feature-deleter/deletion-transaction.js.map +1 -0
  116. package/dist/src/core/feature-deleter/git-service.d.ts +43 -0
  117. package/dist/src/core/feature-deleter/git-service.d.ts.map +1 -0
  118. package/dist/src/core/feature-deleter/git-service.js +127 -0
  119. package/dist/src/core/feature-deleter/git-service.js.map +1 -0
  120. package/dist/src/core/feature-deleter/github-service.d.ts +36 -0
  121. package/dist/src/core/feature-deleter/github-service.d.ts.map +1 -0
  122. package/dist/src/core/feature-deleter/github-service.js +102 -0
  123. package/dist/src/core/feature-deleter/github-service.js.map +1 -0
  124. package/dist/src/core/feature-deleter/index.d.ts +35 -0
  125. package/dist/src/core/feature-deleter/index.d.ts.map +1 -0
  126. package/dist/src/core/feature-deleter/index.js +199 -0
  127. package/dist/src/core/feature-deleter/index.js.map +1 -0
  128. package/dist/src/core/feature-deleter/types.d.ts +179 -0
  129. package/dist/src/core/feature-deleter/types.d.ts.map +1 -0
  130. package/dist/src/core/feature-deleter/types.js +7 -0
  131. package/dist/src/core/feature-deleter/types.js.map +1 -0
  132. package/dist/src/core/feature-deleter/validator.d.ts +46 -0
  133. package/dist/src/core/feature-deleter/validator.d.ts.map +1 -0
  134. package/dist/src/core/feature-deleter/validator.js +231 -0
  135. package/dist/src/core/feature-deleter/validator.js.map +1 -0
  136. package/dist/src/core/hooks/HealthReporter.js +1 -1
  137. package/dist/src/core/hooks/HealthReporter.js.map +1 -1
  138. package/dist/src/core/hooks/HookAutoFixer.js +1 -1
  139. package/dist/src/core/hooks/HookAutoFixer.js.map +1 -1
  140. package/dist/src/core/hooks/HookScanner.js +1 -1
  141. package/dist/src/core/hooks/HookScanner.js.map +1 -1
  142. package/dist/src/core/i18n/language-manager.js +1 -1
  143. package/dist/src/core/i18n/language-manager.js.map +1 -1
  144. package/dist/src/core/i18n/locale-manager.js +1 -1
  145. package/dist/src/core/i18n/locale-manager.js.map +1 -1
  146. package/dist/src/core/i18n/system-prompt-injector.js +1 -1
  147. package/dist/src/core/i18n/system-prompt-injector.js.map +1 -1
  148. package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -1
  149. package/dist/src/core/increment/ac-status-manager.js +18 -4
  150. package/dist/src/core/increment/ac-status-manager.js.map +1 -1
  151. package/dist/src/core/increment/active-increment-manager.js +1 -1
  152. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  153. package/dist/src/core/increment/completion-validator.js +1 -1
  154. package/dist/src/core/increment/completion-validator.js.map +1 -1
  155. package/dist/src/core/increment/conflict-resolver.js +1 -1
  156. package/dist/src/core/increment/conflict-resolver.js.map +1 -1
  157. package/dist/src/core/increment/desync-detector.js +1 -1
  158. package/dist/src/core/increment/desync-detector.js.map +1 -1
  159. package/dist/src/core/increment/discipline-checker.js +1 -1
  160. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  161. package/dist/src/core/increment/duplicate-detector.js +1 -1
  162. package/dist/src/core/increment/duplicate-detector.js.map +1 -1
  163. package/dist/src/core/increment/increment-archiver.js +1 -1
  164. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  165. package/dist/src/core/increment/increment-reopener.js +1 -1
  166. package/dist/src/core/increment/increment-reopener.js.map +1 -1
  167. package/dist/src/core/increment/metadata-manager.js +1 -1
  168. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  169. package/dist/src/core/increment/metadata-validator.js +1 -1
  170. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  171. package/dist/src/core/increment/recent-work-scanner.js +1 -1
  172. package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
  173. package/dist/src/core/increment/spec-frontmatter-updater.js +1 -1
  174. package/dist/src/core/increment/spec-frontmatter-updater.js.map +1 -1
  175. package/dist/src/core/increment/status-auto-transition.js +1 -1
  176. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  177. package/dist/src/core/increment-status.js +1 -1
  178. package/dist/src/core/increment-status.js.map +1 -1
  179. package/dist/src/core/living-docs/content-distributor.js +1 -1
  180. package/dist/src/core/living-docs/content-distributor.js.map +1 -1
  181. package/dist/src/core/living-docs/cross-linker.js +1 -1
  182. package/dist/src/core/living-docs/cross-linker.js.map +1 -1
  183. package/dist/src/core/living-docs/feature-archiver.js +1 -1
  184. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  185. package/dist/src/core/living-docs/feature-id-manager.js +1 -1
  186. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  187. package/dist/src/core/living-docs/hierarchy-mapper.js +1 -1
  188. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  189. package/dist/src/core/living-docs/living-docs-sync.d.ts +14 -0
  190. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  191. package/dist/src/core/living-docs/living-docs-sync.js +72 -13
  192. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  193. package/dist/src/core/living-docs/project-detector.js +1 -1
  194. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  195. package/dist/src/core/living-docs/task-project-specific-generator.js +1 -1
  196. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -1
  197. package/dist/src/core/logging/prompt-logger.js +1 -1
  198. package/dist/src/core/logging/prompt-logger.js.map +1 -1
  199. package/dist/src/core/plugin-loader.js +1 -1
  200. package/dist/src/core/plugin-loader.js.map +1 -1
  201. package/dist/src/core/project-manager.js +1 -1
  202. package/dist/src/core/project-manager.js.map +1 -1
  203. package/dist/src/core/qa/qa-runner.js +1 -1
  204. package/dist/src/core/qa/qa-runner.js.map +1 -1
  205. package/dist/src/core/repo-structure/folder-detector.js +1 -1
  206. package/dist/src/core/repo-structure/folder-detector.js.map +1 -1
  207. package/dist/src/core/repo-structure/setup-state-manager.js +1 -1
  208. package/dist/src/core/repo-structure/setup-state-manager.js.map +1 -1
  209. package/dist/src/core/spec-detector.js +1 -1
  210. package/dist/src/core/spec-detector.js.map +1 -1
  211. package/dist/src/core/specs/spec-metadata-manager.js +1 -1
  212. package/dist/src/core/specs/spec-metadata-manager.js.map +1 -1
  213. package/dist/src/core/status-line/status-line-updater.js +1 -1
  214. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  215. package/dist/src/core/status-line-validator.js +1 -1
  216. package/dist/src/core/status-line-validator.js.map +1 -1
  217. package/dist/src/core/sync/bidirectional-engine.js +1 -1
  218. package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
  219. package/dist/src/core/sync/profile-manager.js +1 -1
  220. package/dist/src/core/sync/profile-manager.js.map +1 -1
  221. package/dist/src/core/sync/project-context.js +1 -1
  222. package/dist/src/core/sync/project-context.js.map +1 -1
  223. package/dist/src/core/sync/sync-event-logger.js +1 -1
  224. package/dist/src/core/sync/sync-event-logger.js.map +1 -1
  225. package/dist/src/core/types/config.js +1 -1
  226. package/dist/src/core/types/config.js.map +1 -1
  227. package/dist/src/core/us-completion-detector.d.ts +124 -0
  228. package/dist/src/core/us-completion-detector.d.ts.map +1 -0
  229. package/dist/src/core/us-completion-detector.js +270 -0
  230. package/dist/src/core/us-completion-detector.js.map +1 -0
  231. package/dist/src/core/utils/permission-checker.js +1 -1
  232. package/dist/src/core/utils/permission-checker.js.map +1 -1
  233. package/dist/src/core/workflow/autonomous-executor.js +1 -1
  234. package/dist/src/core/workflow/autonomous-executor.js.map +1 -1
  235. package/dist/src/core/workflow/backlog-scanner.js +1 -1
  236. package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
  237. package/dist/src/core/workflow/cost-estimator.js +1 -1
  238. package/dist/src/core/workflow/cost-estimator.js.map +1 -1
  239. package/dist/src/core/workflow/state-manager.js +1 -1
  240. package/dist/src/core/workflow/state-manager.js.map +1 -1
  241. package/dist/src/importers/duplicate-detector.js +1 -1
  242. package/dist/src/importers/duplicate-detector.js.map +1 -1
  243. package/dist/src/importers/item-converter.js +1 -1
  244. package/dist/src/importers/item-converter.js.map +1 -1
  245. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +1 -1
  246. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  247. package/dist/src/integrations/jira/jira-incremental-mapper.js +3 -3
  248. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  249. package/dist/src/living-docs/fs-id-allocator.js +1 -1
  250. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  251. package/dist/src/living-docs/id-registry.js +1 -1
  252. package/dist/src/living-docs/id-registry.js.map +1 -1
  253. package/dist/src/sync/external-item-sync-service.js +1 -1
  254. package/dist/src/sync/external-item-sync-service.js.map +1 -1
  255. package/dist/src/sync/sync-metadata.js +1 -1
  256. package/dist/src/sync/sync-metadata.js.map +1 -1
  257. package/dist/src/utils/agents-md-compiler.js +1 -1
  258. package/dist/src/utils/agents-md-compiler.js.map +1 -1
  259. package/dist/src/utils/auto-install.js +1 -1
  260. package/dist/src/utils/auto-install.js.map +1 -1
  261. package/dist/src/utils/cost-reporter.js +1 -1
  262. package/dist/src/utils/cost-reporter.js.map +1 -1
  263. package/dist/src/utils/docs-preview/config-generator.js +1 -1
  264. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  265. package/dist/src/utils/docs-preview/docusaurus-setup.js +1 -1
  266. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  267. package/dist/src/utils/docs-preview/package-installer.js +1 -1
  268. package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
  269. package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
  270. package/dist/src/utils/docs-preview/sidebar-builder.js.map +1 -1
  271. package/dist/src/utils/env-file-generator.js +1 -1
  272. package/dist/src/utils/env-file-generator.js.map +1 -1
  273. package/dist/src/utils/external-resource-validator.js +1 -1
  274. package/dist/src/utils/external-resource-validator.js.map +1 -1
  275. package/dist/src/utils/fs-native.d.ts +51 -5
  276. package/dist/src/utils/fs-native.d.ts.map +1 -1
  277. package/dist/src/utils/fs-native.js +100 -5
  278. package/dist/src/utils/fs-native.js.map +1 -1
  279. package/dist/src/utils/plugin-validator.js +1 -1
  280. package/dist/src/utils/plugin-validator.js.map +1 -1
  281. package/dist/src/utils/project-detection.js +1 -1
  282. package/dist/src/utils/project-detection.js.map +1 -1
  283. package/dist/src/utils/project-validator.js +1 -1
  284. package/dist/src/utils/project-validator.js.map +1 -1
  285. package/dist/src/utils/spec-parser.js +1 -1
  286. package/dist/src/utils/spec-parser.js.map +1 -1
  287. package/dist/src/utils/spec-splitter.js +1 -1
  288. package/dist/src/utils/spec-splitter.js.map +1 -1
  289. package/dist/src/validators/ac-coverage-validator.js +1 -1
  290. package/dist/src/validators/ac-coverage-validator.js.map +1 -1
  291. package/package.json +5 -6
  292. package/plugins/specweave/agents/code-standards-detective/AGENT.md +47 -0
  293. package/plugins/specweave/agents/docs-writer/AGENT.md +134 -1
  294. package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +1 -0
  295. package/plugins/specweave/agents/infrastructure/AGENT.md +48 -1
  296. package/plugins/specweave/agents/performance/AGENT.md +46 -0
  297. package/plugins/specweave/agents/pm/AGENT.md +115 -3
  298. package/plugins/specweave/agents/qa-lead/AGENT.md +40 -1
  299. package/plugins/specweave/agents/reflective-reviewer/AGENT.md +5 -0
  300. package/plugins/specweave/agents/security/AGENT.md +45 -0
  301. package/plugins/specweave/agents/tdd-orchestrator/AGENT.md +128 -1
  302. package/plugins/specweave/agents/tech-lead/AGENT.md +138 -1
  303. package/plugins/specweave/agents/translator/AGENT.md +132 -0
  304. package/plugins/specweave/commands/specweave-sync-progress.md +616 -0
  305. package/plugins/specweave/hooks/hooks.json +0 -9
  306. package/plugins/specweave/hooks/post-increment-completion.sh +133 -0
  307. package/plugins/specweave/hooks/post-metadata-change.sh +28 -23
  308. package/plugins/specweave/hooks/post-task-completion.sh +7 -0
  309. package/plugins/specweave/hooks/pre-edit-write-consolidated.sh +44 -7
  310. package/plugins/specweave/hooks/shared/bulk-operation-detector.sh +167 -0
  311. package/plugins/specweave/lib/hooks/consolidated-sync.js +19 -2
  312. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +135 -0
  313. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +18 -4
  314. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -1
  315. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js +1 -1
  316. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js.map +1 -1
  317. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +1 -1
  318. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
  319. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +1 -1
  320. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  321. package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
  322. package/plugins/specweave/skills/progress-sync/SKILL.md +405 -0
  323. package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
  324. package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
  325. package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
  326. package/plugins/specweave-ado/lib/conflict-resolver.js +1 -1
  327. package/plugins/specweave-ado/lib/conflict-resolver.ts +1 -1
  328. package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +1 -1
  329. package/plugins/specweave-frontend/agents/frontend-architect/AGENT.md +5 -0
  330. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -15
  331. package/plugins/specweave-github/hooks/README.md +34 -25
  332. package/plugins/specweave-github/lib/CodeValidator.js +1 -1
  333. package/plugins/specweave-github/lib/CodeValidator.ts +2 -2
  334. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
  335. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +1 -1
  336. package/plugins/specweave-github/lib/github-client-v2.js +13 -1
  337. package/plugins/specweave-github/lib/github-client-v2.ts +17 -1
  338. package/plugins/specweave-github/lib/github-issue-updater.js +1 -1
  339. package/plugins/specweave-github/lib/github-issue-updater.ts +1 -1
  340. package/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
  341. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +1 -1
  342. package/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
  343. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +1 -1
  344. package/plugins/specweave-github/lib/user-story-issue-builder.js +4 -4
  345. package/plugins/specweave-github/lib/user-story-issue-builder.ts +7 -6
  346. package/plugins/specweave-infrastructure/agents/devops/AGENT.md +48 -1
  347. package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +6 -1
  348. package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +6 -1
  349. package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +6 -1
  350. package/plugins/specweave-infrastructure/agents/sre/AGENT.md +5 -0
  351. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  352. package/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
  353. package/plugins/specweave-jira/lib/jira-epic-sync.ts +1 -1
  354. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +5 -0
  355. package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +47 -2
  356. package/plugins/specweave-ml/agents/data-scientist/AGENT.md +1 -1
  357. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +5 -0
  358. package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +6 -1
  359. package/plugins/specweave-payments/agents/payment-integration/AGENT.md +1 -1
  360. package/plugins/specweave/agents/pm/AGENT.md.bak +0 -1893
  361. package/plugins/specweave/hooks/docs-changed.sh.backup +0 -79
  362. package/plugins/specweave/hooks/human-input-required.sh.backup +0 -75
  363. package/plugins/specweave/hooks/lib/migrate-increment-work.sh.bak +0 -245
  364. package/plugins/specweave/hooks/lib/sync-spec-content.sh.bak +0 -149
  365. package/plugins/specweave/hooks/lib/validate-spec-status.sh.bak +0 -163
  366. package/plugins/specweave/hooks/post-first-increment.sh.backup +0 -61
  367. package/plugins/specweave/hooks/post-first-increment.sh.bak +0 -61
  368. package/plugins/specweave/hooks/post-increment-change.sh.backup +0 -98
  369. package/plugins/specweave/hooks/post-increment-completion.sh.backup +0 -231
  370. package/plugins/specweave/hooks/post-increment-planning.sh.backup +0 -1048
  371. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +0 -147
  372. package/plugins/specweave/hooks/post-spec-update.sh.backup +0 -158
  373. package/plugins/specweave/hooks/post-spec-update.sh.bak +0 -158
  374. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +0 -179
  375. package/plugins/specweave/hooks/post-user-story-complete.sh.bak +0 -179
  376. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +0 -83
  377. package/plugins/specweave/hooks/pre-command-deduplication.sh.bak +0 -83
  378. package/plugins/specweave/hooks/pre-implementation.sh.backup +0 -67
  379. package/plugins/specweave/hooks/pre-task-completion.sh.backup +0 -194
  380. package/plugins/specweave/hooks/pre-tool-use.sh.backup +0 -133
  381. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +0 -386
  382. package/plugins/specweave/hooks/user-prompt-submit.sh.bak +0 -386
  383. package/plugins/specweave/lib/hooks/auto-transition.js.bak +0 -50
  384. package/plugins/specweave/lib/hooks/auto-transition.ts.bak +0 -84
  385. package/plugins/specweave/lib/hooks/git-diff-analyzer.d.js.bak +0 -0
  386. package/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.bak +0 -89
  387. package/plugins/specweave/lib/hooks/git-diff-analyzer.js.bak +0 -142
  388. package/plugins/specweave/lib/hooks/git-diff-analyzer.ts.bak +0 -269
  389. package/plugins/specweave/lib/hooks/invoke-translator-skill.d.js.bak +0 -0
  390. package/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.bak +0 -60
  391. package/plugins/specweave/lib/hooks/invoke-translator-skill.js.bak +0 -155
  392. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts.bak +0 -264
  393. package/plugins/specweave/lib/hooks/prepare-reflection-context.d.js.bak +0 -0
  394. package/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.bak +0 -42
  395. package/plugins/specweave/lib/hooks/prepare-reflection-context.js.bak +0 -110
  396. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts.bak +0 -178
  397. package/plugins/specweave/lib/hooks/reflection-config-loader.d.js.bak +0 -0
  398. package/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.bak +0 -45
  399. package/plugins/specweave/lib/hooks/reflection-config-loader.js.bak +0 -92
  400. package/plugins/specweave/lib/hooks/reflection-config-loader.ts.bak +0 -156
  401. package/plugins/specweave/lib/hooks/reflection-parser.d.js.bak +0 -0
  402. package/plugins/specweave/lib/hooks/reflection-parser.d.ts.bak +0 -33
  403. package/plugins/specweave/lib/hooks/reflection-parser.js.bak +0 -301
  404. package/plugins/specweave/lib/hooks/reflection-parser.ts.bak +0 -484
  405. package/plugins/specweave/lib/hooks/reflection-prompt-builder.d.js.bak +0 -0
  406. package/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.bak +0 -56
  407. package/plugins/specweave/lib/hooks/reflection-prompt-builder.js.bak +0 -182
  408. package/plugins/specweave/lib/hooks/reflection-prompt-builder.ts.bak +0 -306
  409. package/plugins/specweave/lib/hooks/reflection-storage.d.js.bak +0 -0
  410. package/plugins/specweave/lib/hooks/reflection-storage.d.ts.bak +0 -64
  411. package/plugins/specweave/lib/hooks/reflection-storage.js.bak +0 -231
  412. package/plugins/specweave/lib/hooks/reflection-storage.ts.bak +0 -369
  413. package/plugins/specweave/lib/hooks/run-self-reflection.d.js.bak +0 -0
  414. package/plugins/specweave/lib/hooks/run-self-reflection.d.ts.bak +0 -43
  415. package/plugins/specweave/lib/hooks/run-self-reflection.js.bak +0 -132
  416. package/plugins/specweave/lib/hooks/run-self-reflection.ts.bak +0 -258
  417. package/plugins/specweave/lib/hooks/sync-cache.js.bak +0 -294
  418. package/plugins/specweave/lib/hooks/sync-living-docs.d.js.bak +0 -1
  419. package/plugins/specweave/lib/hooks/sync-living-docs.d.ts.bak +0 -27
  420. package/plugins/specweave/lib/hooks/sync-living-docs.js.bak +0 -339
  421. package/plugins/specweave/lib/hooks/sync-us-tasks.js.bak +0 -476
  422. package/plugins/specweave/lib/hooks/translate-file.d.js.bak +0 -0
  423. package/plugins/specweave/lib/hooks/translate-file.d.ts.bak +0 -59
  424. package/plugins/specweave/lib/hooks/translate-file.js.bak +0 -289
  425. package/plugins/specweave/lib/hooks/translate-file.ts.bak +0 -428
  426. package/plugins/specweave/lib/hooks/translate-living-docs.d.js.bak +0 -0
  427. package/plugins/specweave/lib/hooks/translate-living-docs.d.ts.bak +0 -13
  428. package/plugins/specweave/lib/hooks/translate-living-docs.js.bak +0 -119
  429. package/plugins/specweave/lib/hooks/translate-living-docs.ts.bak +0 -224
  430. package/plugins/specweave/lib/hooks/update-ac-status.js.bak +0 -51
  431. package/plugins/specweave/lib/hooks/update-ac-status.ts.bak +0 -103
  432. package/plugins/specweave/lib/hooks/update-tasks-md.d.js.bak +0 -1
  433. package/plugins/specweave/lib/hooks/update-tasks-md.d.ts.bak +0 -29
  434. package/plugins/specweave/lib/hooks/update-tasks-md.js.bak +0 -296
  435. package/plugins/specweave/lib/hooks/update-tasks-md.ts.bak +0 -489
  436. package/plugins/specweave-ado/hooks/hooks.json +0 -15
  437. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +0 -353
  438. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +0 -172
  439. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -170
  440. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +0 -718
  441. package/plugins/specweave-github/hooks/hooks.json +0 -15
  442. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +0 -258
  443. package/plugins/specweave-jira/hooks/hooks.json +0 -15
  444. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +0 -172
  445. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +0 -600
  446. package/plugins/specweave-release/hooks/hooks.json +0 -15
  447. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +0 -110
@@ -1,147 +0,0 @@
1
- #!/bin/bash
2
-
3
- # SpecWeave Post-Increment-Status-Change Hook
4
- # Runs automatically after increment status changes (pause/resume/abandon)
5
- #
6
- # Trigger: /specweave:pause, /specweave:resume, /specweave:abandon commands
7
- # Purpose: Notify GitHub when increment status changes
8
- #
9
- # What it does:
10
- # 1. Detects status change (paused, resumed, abandoned)
11
- # 2. Posts comment to GitHub issue
12
- # 3. Updates metadata
13
- #
14
- # Usage:
15
- # ./post-increment-status-change.sh <incrementId> <newStatus> <reason>
16
- #
17
- # Example:
18
- # ./post-increment-status-change.sh 0015-hierarchical-sync paused "Waiting for API keys"
19
-
20
- set -e
21
-
22
- # Find project root
23
- find_project_root() {
24
- local dir="$1"
25
- while [ "$dir" != "/" ]; do
26
- if [ -d "$dir/.specweave" ]; then
27
- echo "$dir"
28
- return 0
29
- fi
30
- dir="$(dirname "$dir")"
31
- done
32
- pwd
33
- }
34
-
35
- PROJECT_ROOT="$(find_project_root "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")"
36
- cd "$PROJECT_ROOT" 2>/dev/null || true
37
-
38
- # Configuration
39
- LOGS_DIR=".specweave/logs"
40
- DEBUG_LOG="$LOGS_DIR/hooks-debug.log"
41
-
42
- mkdir -p "$LOGS_DIR" 2>/dev/null || true
43
-
44
- # Arguments
45
- INCREMENT_ID="$1"
46
- NEW_STATUS="$2"
47
- REASON="$3"
48
-
49
- if [ -z "$INCREMENT_ID" ] || [ -z "$NEW_STATUS" ]; then
50
- echo "Usage: $0 <incrementId> <newStatus> [reason]" >&2
51
- echo "Example: $0 0015-hierarchical-sync paused 'Waiting for API'" >&2
52
- exit 1
53
- fi
54
-
55
- echo "[$(date)] 📊 Status changed: $NEW_STATUS" >> "$DEBUG_LOG" 2>/dev/null || true
56
-
57
- # Validate status
58
- case "$NEW_STATUS" in
59
- paused|resumed|abandoned)
60
- ;;
61
- *)
62
- echo "[$(date)] âš ī¸ Unknown status: $NEW_STATUS (skipping sync)" >> "$DEBUG_LOG" 2>/dev/null || true
63
- exit 0
64
- ;;
65
- esac
66
-
67
- # Check if GitHub CLI available
68
- if ! command -v gh &> /dev/null; then
69
- echo "[$(date)] â„šī¸ GitHub CLI not found, skipping sync" >> "$DEBUG_LOG" 2>/dev/null || true
70
- exit 0
71
- fi
72
-
73
- # Check if authenticated
74
- if ! gh auth status &> /dev/null; then
75
- echo "[$(date)] â„šī¸ GitHub CLI not authenticated, skipping sync" >> "$DEBUG_LOG" 2>/dev/null || true
76
- exit 0
77
- fi
78
-
79
- # Load metadata
80
- METADATA_FILE=".specweave/increments/$INCREMENT_ID/metadata.json"
81
-
82
- if [ ! -f "$METADATA_FILE" ]; then
83
- echo "[$(date)] â„šī¸ No metadata.json found, skipping sync" >> "$DEBUG_LOG" 2>/dev/null || true
84
- exit 0
85
- fi
86
-
87
- # Extract GitHub issue number
88
- GITHUB_ISSUE=$(jq -r '.github.issue // empty' "$METADATA_FILE" 2>/dev/null)
89
-
90
- if [ -z "$GITHUB_ISSUE" ]; then
91
- echo "[$(date)] â„šī¸ No GitHub issue linked, skipping sync" >> "$DEBUG_LOG" 2>/dev/null || true
92
- exit 0
93
- fi
94
-
95
- # Detect repository
96
- GITHUB_REMOTE=$(git remote get-url origin 2>/dev/null || echo "")
97
- REPO_MATCH=$(echo "$GITHUB_REMOTE" | grep -o 'github\.com[:/][^/]*/[^/]*' | sed 's/github\.com[:/]//')
98
-
99
- if [ -z "$REPO_MATCH" ]; then
100
- echo "[$(date)] âš ī¸ Could not detect GitHub repository" >> "$DEBUG_LOG" 2>/dev/null || true
101
- exit 0
102
- fi
103
-
104
- echo "[$(date)] 🔄 Posting status change to GitHub issue #$GITHUB_ISSUE" >> "$DEBUG_LOG" 2>/dev/null || true
105
-
106
- # Build comment based on status
107
- EMOJI=""
108
- TITLE=""
109
- case "$NEW_STATUS" in
110
- paused)
111
- EMOJI="â¸ī¸"
112
- TITLE="Increment Paused"
113
- ;;
114
- resumed)
115
- EMOJI="â–ļī¸"
116
- TITLE="Increment Resumed"
117
- ;;
118
- abandoned)
119
- EMOJI="đŸ—‘ī¸"
120
- TITLE="Increment Abandoned"
121
- ;;
122
- esac
123
-
124
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
125
-
126
- COMMENT="$EMOJI **$TITLE**
127
-
128
- **Reason**: ${REASON:-Not specified}
129
-
130
- **Timestamp**: $TIMESTAMP
131
-
132
- ---
133
- 🤖 Auto-updated by SpecWeave"
134
-
135
- # Post comment
136
- echo "$COMMENT" | gh issue comment "$GITHUB_ISSUE" --body-file - 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
137
- echo "[$(date)] âš ī¸ Failed to post comment (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
138
- }
139
-
140
- echo "[$(date)] ✅ Status change synced to GitHub" >> "$DEBUG_LOG" 2>/dev/null || true
141
-
142
- # Update status line cache (status changed - may affect which increment is "current")
143
- HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
144
- bash "$HOOK_DIR/lib/update-status-line.sh" 2>/dev/null || true
145
-
146
- # Return success (non-blocking)
147
- exit 0
@@ -1,158 +0,0 @@
1
- #!/bin/bash
2
-
3
- ###############################################################################
4
- # SpecWeave Post-Spec-Update Hook
5
- #
6
- # CRITICAL ARCHITECTURE:
7
- # - Fires when .specweave/docs/internal/specs/spec-*.md is updated
8
- # - Auto-syncs to linked external tool (GitHub Project/Jira Epic/ADO Feature)
9
- # - Replaces increment-based sync (which was wrong!)
10
- #
11
- # Trigger Points:
12
- # 1. After /specweave:sync-docs update (spec updated from increment)
13
- # 2. After manual spec.md edits (user updates living docs directly)
14
- # 3. After bidirectional sync from external tool
15
- #
16
- # What It Does:
17
- # - Detects which spec was updated
18
- # - Checks if spec is linked to external tool (frontmatter: externalLinks)
19
- # - Syncs changes to GitHub Project / Jira Epic / ADO Feature
20
- # - Updates user stories, acceptance criteria, progress
21
- #
22
- # Usage:
23
- # post-spec-update.sh <spec-file-path>
24
- #
25
- # Example:
26
- # post-spec-update.sh .specweave/docs/internal/specs/spec-001-core-framework.md
27
- #
28
- ###############################################################################
29
-
30
- set -euo pipefail
31
-
32
- # Arguments
33
- SPEC_FILE_PATH="${1:-}"
34
-
35
- # Validate arguments
36
- if [[ -z "$SPEC_FILE_PATH" ]]; then
37
- echo "❌ Error: Spec file path required"
38
- echo "Usage: post-spec-update.sh <spec-file-path>"
39
- exit 1
40
- fi
41
-
42
- # Check if spec file exists
43
- if [[ ! -f "$SPEC_FILE_PATH" ]]; then
44
- echo "❌ Error: Spec file not found: $SPEC_FILE_PATH"
45
- exit 1
46
- fi
47
-
48
- # Extract spec ID from file path
49
- # Example: .specweave/docs/internal/specs/spec-001-core-framework.md → spec-001
50
- SPEC_ID=$(basename "$SPEC_FILE_PATH" .md)
51
-
52
- echo ""
53
- echo "🔗 Post-Spec-Update Hook"
54
- echo " Spec: $SPEC_ID"
55
- echo " File: $SPEC_FILE_PATH"
56
-
57
- # Load config to check if auto-sync is enabled
58
- CONFIG_FILE=".specweave/config.json"
59
- if [[ ! -f "$CONFIG_FILE" ]]; then
60
- echo " â„šī¸ No config file found, skipping auto-sync"
61
- exit 0
62
- fi
63
-
64
- # Check if auto-sync is enabled
65
- AUTO_SYNC=$(jq -r '.hooks.post_spec_update.auto_sync // true' "$CONFIG_FILE")
66
-
67
- if [[ "$AUTO_SYNC" != "true" ]]; then
68
- echo " â„šī¸ Auto-sync disabled in config, skipping"
69
- exit 0
70
- fi
71
-
72
- # Parse spec frontmatter to detect external links
73
- # Use gray-matter or similar to extract YAML frontmatter
74
- # For now, use simple grep/sed approach
75
-
76
- # Check if GitHub link exists
77
- GITHUB_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE_PATH" | grep -A 5 "github:" | grep "projectId:" | sed 's/.*projectId: *//; s/ *$//' || echo "")
78
-
79
- # Check if Jira link exists
80
- JIRA_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE_PATH" | grep -A 5 "jira:" | grep "epicKey:" | sed 's/.*epicKey: *//; s/ *$//' || echo "")
81
-
82
- # Check if ADO link exists
83
- ADO_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE_PATH" | grep -A 5 "ado:" | grep "featureId:" | sed 's/.*featureId: *//; s/ *$//' || echo "")
84
-
85
- # Determine which provider to sync
86
- PROVIDER=""
87
- if [[ -n "$GITHUB_LINK" ]]; then
88
- PROVIDER="github"
89
- EXTERNAL_ID="$GITHUB_LINK"
90
- elif [[ -n "$JIRA_LINK" ]]; then
91
- PROVIDER="jira"
92
- EXTERNAL_ID="$JIRA_LINK"
93
- elif [[ -n "$ADO_LINK" ]]; then
94
- PROVIDER="ado"
95
- EXTERNAL_ID="$ADO_LINK"
96
- fi
97
-
98
- # No external link found - skip sync
99
- if [[ -z "$PROVIDER" ]]; then
100
- echo " â„šī¸ Spec not linked to external tool, skipping sync"
101
- echo " Hint: Use /specweave-github:sync-spec or /specweave-jira:sync-spec to link"
102
- exit 0
103
- fi
104
-
105
- echo " 🔗 Detected external link: $PROVIDER (ID: $EXTERNAL_ID)"
106
-
107
- # Sync to external tool based on provider
108
- case "$PROVIDER" in
109
- github)
110
- echo " 🔄 Syncing to GitHub Project..."
111
-
112
- # Check if GitHub CLI is available
113
- if ! command -v gh &> /dev/null; then
114
- echo " âš ī¸ GitHub CLI (gh) not found, skipping sync"
115
- exit 0
116
- fi
117
-
118
- # TODO: Call GitHub spec sync
119
- # For now, just log the action
120
- echo " ✅ GitHub sync queued (implementation pending)"
121
- ;;
122
-
123
- jira)
124
- echo " 🔄 Syncing to Jira Epic..."
125
-
126
- # Check if Jira config exists
127
- if [[ -z "${JIRA_DOMAIN:-}" ]]; then
128
- echo " âš ī¸ Jira not configured (.env), skipping sync"
129
- exit 0
130
- fi
131
-
132
- # TODO: Call Jira spec sync
133
- echo " ✅ Jira sync queued (implementation pending)"
134
- ;;
135
-
136
- ado)
137
- echo " 🔄 Syncing to Azure DevOps Feature..."
138
-
139
- # Check if ADO config exists
140
- if [[ -z "${ADO_ORGANIZATION:-}" ]]; then
141
- echo " âš ī¸ ADO not configured (.env), skipping sync"
142
- exit 0
143
- fi
144
-
145
- # TODO: Call ADO spec sync
146
- echo " ✅ ADO sync queued (implementation pending)"
147
- ;;
148
-
149
- *)
150
- echo " âš ī¸ Unknown provider: $PROVIDER"
151
- exit 0
152
- ;;
153
- esac
154
-
155
- echo " ✅ Post-spec-update hook complete"
156
- echo ""
157
-
158
- exit 0
@@ -1,158 +0,0 @@
1
- #!/bin/bash
2
-
3
- ###############################################################################
4
- # SpecWeave Post-Spec-Update Hook
5
- #
6
- # CRITICAL ARCHITECTURE:
7
- # - Fires when .specweave/docs/internal/specs/spec-*.md is updated
8
- # - Auto-syncs to linked external tool (GitHub Project/Jira Epic/ADO Feature)
9
- # - Replaces increment-based sync (which was wrong!)
10
- #
11
- # Trigger Points:
12
- # 1. After /specweave:sync-docs update (spec updated from increment)
13
- # 2. After manual spec.md edits (user updates living docs directly)
14
- # 3. After bidirectional sync from external tool
15
- #
16
- # What It Does:
17
- # - Detects which spec was updated
18
- # - Checks if spec is linked to external tool (frontmatter: externalLinks)
19
- # - Syncs changes to GitHub Project / Jira Epic / ADO Feature
20
- # - Updates user stories, acceptance criteria, progress
21
- #
22
- # Usage:
23
- # post-spec-update.sh <spec-file-path>
24
- #
25
- # Example:
26
- # post-spec-update.sh .specweave/docs/internal/specs/spec-001-core-framework.md
27
- #
28
- ###############################################################################
29
-
30
- set -euo pipefail
31
-
32
- # Arguments
33
- SPEC_FILE_PATH="${1:-}"
34
-
35
- # Validate arguments
36
- if [[ -z "$SPEC_FILE_PATH" ]]; then
37
- echo "❌ Error: Spec file path required"
38
- echo "Usage: post-spec-update.sh <spec-file-path>"
39
- exit 1
40
- fi
41
-
42
- # Check if spec file exists
43
- if [[ ! -f "$SPEC_FILE_PATH" ]]; then
44
- echo "❌ Error: Spec file not found: $SPEC_FILE_PATH"
45
- exit 1
46
- fi
47
-
48
- # Extract spec ID from file path
49
- # Example: .specweave/docs/internal/specs/spec-001-core-framework.md → spec-001
50
- SPEC_ID=$(basename "$SPEC_FILE_PATH" .md)
51
-
52
- echo ""
53
- echo "🔗 Post-Spec-Update Hook"
54
- echo " Spec: $SPEC_ID"
55
- echo " File: $SPEC_FILE_PATH"
56
-
57
- # Load config to check if auto-sync is enabled
58
- CONFIG_FILE=".specweave/config.json"
59
- if [[ ! -f "$CONFIG_FILE" ]]; then
60
- echo " â„šī¸ No config file found, skipping auto-sync"
61
- exit 0
62
- fi
63
-
64
- # Check if auto-sync is enabled
65
- AUTO_SYNC=$(jq -r '.hooks.post_spec_update.auto_sync // true' "$CONFIG_FILE")
66
-
67
- if [[ "$AUTO_SYNC" != "true" ]]; then
68
- echo " â„šī¸ Auto-sync disabled in config, skipping"
69
- exit 0
70
- fi
71
-
72
- # Parse spec frontmatter to detect external links
73
- # Use gray-matter or similar to extract YAML frontmatter
74
- # For now, use simple grep/sed approach
75
-
76
- # Check if GitHub link exists
77
- GITHUB_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE_PATH" | grep -A 5 "github:" | grep "projectId:" | sed 's/.*projectId: *//; s/ *$//' || echo "")
78
-
79
- # Check if Jira link exists
80
- JIRA_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE_PATH" | grep -A 5 "jira:" | grep "epicKey:" | sed 's/.*epicKey: *//; s/ *$//' || echo "")
81
-
82
- # Check if ADO link exists
83
- ADO_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE_PATH" | grep -A 5 "ado:" | grep "featureId:" | sed 's/.*featureId: *//; s/ *$//' || echo "")
84
-
85
- # Determine which provider to sync
86
- PROVIDER=""
87
- if [[ -n "$GITHUB_LINK" ]]; then
88
- PROVIDER="github"
89
- EXTERNAL_ID="$GITHUB_LINK"
90
- elif [[ -n "$JIRA_LINK" ]]; then
91
- PROVIDER="jira"
92
- EXTERNAL_ID="$JIRA_LINK"
93
- elif [[ -n "$ADO_LINK" ]]; then
94
- PROVIDER="ado"
95
- EXTERNAL_ID="$ADO_LINK"
96
- fi
97
-
98
- # No external link found - skip sync
99
- if [[ -z "$PROVIDER" ]]; then
100
- echo " â„šī¸ Spec not linked to external tool, skipping sync"
101
- echo " Hint: Use /specweave-github:sync-spec or /specweave-jira:sync-spec to link"
102
- exit 0
103
- fi
104
-
105
- echo " 🔗 Detected external link: $PROVIDER (ID: $EXTERNAL_ID)"
106
-
107
- # Sync to external tool based on provider
108
- case "$PROVIDER" in
109
- github)
110
- echo " 🔄 Syncing to GitHub Project..."
111
-
112
- # Check if GitHub CLI is available
113
- if ! command -v gh &> /dev/null; then
114
- echo " âš ī¸ GitHub CLI (gh) not found, skipping sync"
115
- exit 0
116
- fi
117
-
118
- # TODO: Call GitHub spec sync
119
- # For now, just log the action
120
- echo " ✅ GitHub sync queued (implementation pending)"
121
- ;;
122
-
123
- jira)
124
- echo " 🔄 Syncing to Jira Epic..."
125
-
126
- # Check if Jira config exists
127
- if [[ -z "${JIRA_DOMAIN:-}" ]]; then
128
- echo " âš ī¸ Jira not configured (.env), skipping sync"
129
- exit 0
130
- fi
131
-
132
- # TODO: Call Jira spec sync
133
- echo " ✅ Jira sync queued (implementation pending)"
134
- ;;
135
-
136
- ado)
137
- echo " 🔄 Syncing to Azure DevOps Feature..."
138
-
139
- # Check if ADO config exists
140
- if [[ -z "${ADO_ORGANIZATION:-}" ]]; then
141
- echo " âš ī¸ ADO not configured (.env), skipping sync"
142
- exit 0
143
- fi
144
-
145
- # TODO: Call ADO spec sync
146
- echo " ✅ ADO sync queued (implementation pending)"
147
- ;;
148
-
149
- *)
150
- echo " âš ī¸ Unknown provider: $PROVIDER"
151
- exit 0
152
- ;;
153
- esac
154
-
155
- echo " ✅ Post-spec-update hook complete"
156
- echo ""
157
-
158
- exit 0
@@ -1,179 +0,0 @@
1
- #!/bin/bash
2
-
3
- ###############################################################################
4
- # SpecWeave Post-User-Story-Complete Hook
5
- #
6
- # CRITICAL ARCHITECTURE:
7
- # - Fires when user story marked complete in spec.md (AC checkbox checked)
8
- # - Updates external PM tool (GitHub Issue/Jira Story/ADO User Story)
9
- # - Moves GitHub card to "Done" / Closes Jira story / Completes ADO story
10
- #
11
- # Trigger Points:
12
- # 1. After user manually checks AC checkbox in spec.md
13
- # 2. After bidirectional sync updates AC status
14
- # 3. After increment completion syncs to spec
15
- #
16
- # What It Does:
17
- # - Detects which user story was completed (all AC checkboxes checked)
18
- # - Finds corresponding external item (GitHub Issue/Jira Story/ADO User Story)
19
- # - Updates item status to "Done" / "Closed"
20
- # - Adds completion comment with timestamp
21
- #
22
- # Usage:
23
- # post-user-story-complete.sh <spec-id> <user-story-id>
24
- #
25
- # Example:
26
- # post-user-story-complete.sh spec-001 US-001
27
- #
28
- ###############################################################################
29
-
30
- set -euo pipefail
31
-
32
- # Arguments
33
- SPEC_ID="${1:-}"
34
- USER_STORY_ID="${2:-}"
35
-
36
- # Validate arguments
37
- if [[ -z "$SPEC_ID" || -z "$USER_STORY_ID" ]]; then
38
- echo "❌ Error: Spec ID and User Story ID required"
39
- echo "Usage: post-user-story-complete.sh <spec-id> <user-story-id>"
40
- exit 1
41
- fi
42
-
43
- echo ""
44
- echo "🎉 Post-User-Story-Complete Hook"
45
- echo " Spec: $SPEC_ID"
46
- echo " User Story: $USER_STORY_ID"
47
-
48
- # Find spec file
49
- SPEC_FILE=""
50
- if [[ -f ".specweave/docs/internal/specs/$SPEC_ID.md" ]]; then
51
- SPEC_FILE=".specweave/docs/internal/specs/$SPEC_ID.md"
52
- elif [[ -f ".specweave/docs/internal/projects/default/specs/$SPEC_ID.md" ]]; then
53
- SPEC_FILE=".specweave/docs/internal/projects/default/specs/$SPEC_ID.md"
54
- else
55
- echo "❌ Error: Spec file not found for $SPEC_ID"
56
- exit 1
57
- fi
58
-
59
- # Load config to check if auto-sync is enabled
60
- CONFIG_FILE=".specweave/config.json"
61
- if [[ ! -f "$CONFIG_FILE" ]]; then
62
- echo " â„šī¸ No config file found, skipping auto-sync"
63
- exit 0
64
- fi
65
-
66
- # Check if auto-sync is enabled
67
- AUTO_SYNC=$(jq -r '.hooks.post_user_story_complete.auto_sync // true' "$CONFIG_FILE")
68
-
69
- if [[ "$AUTO_SYNC" != "true" ]]; then
70
- echo " â„šī¸ Auto-sync disabled in config, skipping"
71
- exit 0
72
- fi
73
-
74
- # Parse spec frontmatter to detect external links
75
- # Check if GitHub link exists
76
- GITHUB_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE" | grep -A 5 "github:" | grep "projectId:" | sed 's/.*projectId: *//; s/ *$//' || echo "")
77
-
78
- # Check if Jira link exists
79
- JIRA_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE" | grep -A 5 "jira:" | grep "epicKey:" | sed 's/.*epicKey: *//; s/ *$//' || echo "")
80
-
81
- # Check if ADO link exists
82
- ADO_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE" | grep -A 5 "ado:" | grep "featureId:" | sed 's/.*featureId: *//; s/ *$//' || echo "")
83
-
84
- # Determine which provider to sync
85
- PROVIDER=""
86
- if [[ -n "$GITHUB_LINK" ]]; then
87
- PROVIDER="github"
88
- EXTERNAL_ID="$GITHUB_LINK"
89
- elif [[ -n "$JIRA_LINK" ]]; then
90
- PROVIDER="jira"
91
- EXTERNAL_ID="$JIRA_LINK"
92
- elif [[ -n "$ADO_LINK" ]]; then
93
- PROVIDER="ado"
94
- EXTERNAL_ID="$ADO_LINK"
95
- fi
96
-
97
- # No external link found - skip sync
98
- if [[ -z "$PROVIDER" ]]; then
99
- echo " â„šī¸ Spec not linked to external tool, skipping sync"
100
- exit 0
101
- fi
102
-
103
- echo " 🔗 Detected external link: $PROVIDER"
104
-
105
- # Update external tool based on provider
106
- case "$PROVIDER" in
107
- github)
108
- echo " 🔄 Updating GitHub Issue for $USER_STORY_ID..."
109
-
110
- # Check if GitHub CLI is available
111
- if ! command -v gh &> /dev/null; then
112
- echo " âš ī¸ GitHub CLI (gh) not found, skipping sync"
113
- exit 0
114
- fi
115
-
116
- # Find GitHub Issue for this user story
117
- # Search for issue with title pattern "[USER_STORY_ID]"
118
- REPO=$(git remote get-url origin | sed -E 's/.*github\.com[:/]([^/]+\/[^/]+)(\.git)?$/\1/')
119
-
120
- # Search for issue
121
- ISSUE_NUMBER=$(gh issue list --repo "$REPO" --search "\"[$USER_STORY_ID]\" in:title" --json number --jq '.[0].number' 2>/dev/null || echo "")
122
-
123
- if [[ -z "$ISSUE_NUMBER" ]]; then
124
- echo " âš ī¸ GitHub Issue not found for $USER_STORY_ID"
125
- exit 0
126
- fi
127
-
128
- echo " 📝 Found GitHub Issue #$ISSUE_NUMBER"
129
-
130
- # Close issue
131
- gh issue close "$ISSUE_NUMBER" --repo "$REPO" --comment "✅ User story completed
132
-
133
- 🤖 Auto-closed by SpecWeave hook
134
- Completed at: $(date -u +%Y-%m-%dT%H:%M:%SZ)" 2>/dev/null || {
135
- echo " âš ī¸ Failed to close issue"
136
- exit 0
137
- }
138
-
139
- echo " ✅ GitHub Issue #$ISSUE_NUMBER closed"
140
- ;;
141
-
142
- jira)
143
- echo " 🔄 Updating Jira Story for $USER_STORY_ID..."
144
-
145
- # Check if Jira config exists
146
- if [[ -z "${JIRA_DOMAIN:-}" ]]; then
147
- echo " âš ī¸ Jira not configured (.env), skipping sync"
148
- exit 0
149
- fi
150
-
151
- # TODO: Find Jira Story by title pattern
152
- # TODO: Transition story to "Done" status
153
- echo " ✅ Jira story transition queued (implementation pending)"
154
- ;;
155
-
156
- ado)
157
- echo " 🔄 Updating ADO User Story for $USER_STORY_ID..."
158
-
159
- # Check if ADO config exists
160
- if [[ -z "${ADO_ORGANIZATION:-}" ]]; then
161
- echo " âš ī¸ ADO not configured (.env), skipping sync"
162
- exit 0
163
- fi
164
-
165
- # TODO: Find ADO User Story by title pattern
166
- # TODO: Update state to "Closed"
167
- echo " ✅ ADO user story update queued (implementation pending)"
168
- ;;
169
-
170
- *)
171
- echo " âš ī¸ Unknown provider: $PROVIDER"
172
- exit 0
173
- ;;
174
- esac
175
-
176
- echo " ✅ Post-user-story-complete hook complete"
177
- echo ""
178
-
179
- exit 0