specweave 0.33.5 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (683) hide show
  1. package/.claude-plugin/README.md +13 -13
  2. package/.claude-plugin/marketplace.json +26 -37
  3. package/CLAUDE.md +427 -70
  4. package/README.md +34 -31
  5. package/bin/fix-marketplace-errors.sh +1 -1
  6. package/bin/install-commands.sh +2 -2
  7. package/bin/specweave.js +58 -1
  8. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +5 -0
  9. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +1 -1
  10. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +14 -4
  11. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -1
  12. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +1 -0
  13. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -1
  14. package/dist/plugins/specweave-github/lib/completion-calculator.js +2 -0
  15. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -1
  16. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts.map +1 -1
  17. package/dist/plugins/specweave-github/lib/duplicate-detector.js +20 -6
  18. package/dist/plugins/specweave-github/lib/duplicate-detector.js.map +1 -1
  19. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +9 -0
  20. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  21. package/dist/plugins/specweave-github/lib/github-client-v2.js +31 -18
  22. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  23. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +7 -0
  24. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
  25. package/dist/plugins/specweave-github/lib/github-feature-sync.js +47 -11
  26. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
  27. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +39 -13
  28. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +1 -1
  29. package/dist/plugins/specweave-github/lib/github-issue-updater.d.ts.map +1 -1
  30. package/dist/plugins/specweave-github/lib/github-issue-updater.js +15 -3
  31. package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +1 -1
  32. package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts +7 -0
  33. package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts.map +1 -1
  34. package/dist/plugins/specweave-github/lib/github-spec-sync.js +17 -4
  35. package/dist/plugins/specweave-github/lib/github-spec-sync.js.map +1 -1
  36. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.d.ts.map +1 -1
  37. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +13 -3
  38. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
  39. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.d.ts.map +1 -1
  40. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +14 -4
  41. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +1 -1
  42. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +1 -1
  43. package/dist/plugins/specweave-github/lib/increment-issue-builder.js +24 -8
  44. package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +1 -1
  45. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -1
  46. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +21 -18
  47. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -1
  48. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +3 -0
  49. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  50. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +20 -19
  51. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  52. package/dist/src/cli/cleanup-zombies.js +34 -18
  53. package/dist/src/cli/cleanup-zombies.js.map +1 -1
  54. package/dist/src/cli/commands/discrepancies.js +6 -6
  55. package/dist/src/cli/commands/discrepancies.js.map +1 -1
  56. package/dist/src/cli/commands/docs.js +1 -1
  57. package/dist/src/cli/commands/docs.js.map +1 -1
  58. package/dist/src/cli/commands/import-docs.d.ts +1 -1
  59. package/dist/src/cli/commands/import-docs.js +2 -2
  60. package/dist/src/cli/commands/import-docs.js.map +1 -1
  61. package/dist/src/cli/commands/import-external.d.ts +1 -1
  62. package/dist/src/cli/commands/import-external.js +1 -1
  63. package/dist/src/cli/commands/init-multiproject.d.ts +1 -1
  64. package/dist/src/cli/commands/init-multiproject.js +3 -3
  65. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  66. package/dist/src/cli/commands/init.js +2 -2
  67. package/dist/src/cli/commands/init.js.map +1 -1
  68. package/dist/src/cli/commands/living-docs.d.ts +1 -0
  69. package/dist/src/cli/commands/living-docs.d.ts.map +1 -1
  70. package/dist/src/cli/commands/living-docs.js +18 -2
  71. package/dist/src/cli/commands/living-docs.js.map +1 -1
  72. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  73. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  74. package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
  75. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  76. package/dist/src/cli/commands/next-command.d.ts +1 -1
  77. package/dist/src/cli/commands/next-command.js +9 -9
  78. package/dist/src/cli/commands/next-command.js.map +1 -1
  79. package/dist/src/cli/commands/notifications.js +3 -3
  80. package/dist/src/cli/commands/notifications.js.map +1 -1
  81. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  82. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  83. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +2 -2
  84. package/dist/src/cli/commands/plan/plan-orchestrator.js +2 -2
  85. package/dist/src/cli/commands/plan/plan-validator.js +2 -2
  86. package/dist/src/cli/commands/plan/plan-validator.js.map +1 -1
  87. package/dist/src/cli/commands/plan/types.d.ts +1 -1
  88. package/dist/src/cli/commands/plan/types.js +1 -1
  89. package/dist/src/cli/commands/plan-command.d.ts +3 -3
  90. package/dist/src/cli/commands/plan-command.js +12 -12
  91. package/dist/src/cli/commands/plan-command.js.map +1 -1
  92. package/dist/src/cli/commands/project.d.ts +77 -0
  93. package/dist/src/cli/commands/project.d.ts.map +1 -0
  94. package/dist/src/cli/commands/project.js +526 -0
  95. package/dist/src/cli/commands/project.js.map +1 -0
  96. package/dist/src/cli/commands/save.d.ts +49 -0
  97. package/dist/src/cli/commands/save.d.ts.map +1 -0
  98. package/dist/src/cli/commands/save.js +583 -0
  99. package/dist/src/cli/commands/save.js.map +1 -0
  100. package/dist/src/cli/commands/sync-spec-commits.js +15 -6
  101. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  102. package/dist/src/cli/commands/sync-spec-content.js +15 -6
  103. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  104. package/dist/src/cli/helpers/init/ado-repo-cloning.js +2 -2
  105. package/dist/src/cli/helpers/init/ado-repo-cloning.js.map +1 -1
  106. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.d.ts +1 -1
  107. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js +3 -3
  108. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js.map +1 -1
  109. package/dist/src/cli/helpers/init/brownfield-analysis.js +18 -18
  110. package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -1
  111. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
  112. package/dist/src/cli/helpers/init/directory-structure.js +3 -0
  113. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
  114. package/dist/src/cli/helpers/init/external-import.js +18 -18
  115. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  116. package/dist/src/cli/helpers/init/github-repo-cloning.d.ts +1 -1
  117. package/dist/src/cli/helpers/init/github-repo-cloning.js +3 -3
  118. package/dist/src/cli/helpers/init/github-repo-cloning.js.map +1 -1
  119. package/dist/src/cli/helpers/init/initial-increment-generator.js +12 -12
  120. package/dist/src/cli/helpers/init/living-docs-preflight.js +5 -5
  121. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  122. package/dist/src/cli/helpers/init/next-steps.js +9 -9
  123. package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
  124. package/dist/src/cli/helpers/init/plugin-installer.js +3 -3
  125. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
  126. package/dist/src/cli/helpers/init/translation-config.js +9 -9
  127. package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
  128. package/dist/src/cli/helpers/init/types.d.ts +1 -1
  129. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  130. package/dist/src/cli/helpers/issue-tracker/ado.js +1 -1
  131. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  132. package/dist/src/cli/helpers/issue-tracker/github.js +1 -1
  133. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  134. package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
  135. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  136. package/dist/src/cli/helpers/issue-tracker/jira.js +1 -1
  137. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  138. package/dist/src/cli/update-status-line.js +1 -1
  139. package/dist/src/cli/update-status-line.js.map +1 -1
  140. package/dist/src/cli/workers/brownfield-worker.js +1 -1
  141. package/dist/src/cli/workers/brownfield-worker.js.map +1 -1
  142. package/dist/src/cli/workers/import-worker.js +1 -1
  143. package/dist/src/cli/workers/import-worker.js.map +1 -1
  144. package/dist/src/core/background/brownfield-launcher.js +4 -4
  145. package/dist/src/core/background/brownfield-launcher.js.map +1 -1
  146. package/dist/src/core/background/index.d.ts +3 -3
  147. package/dist/src/core/background/index.js +3 -3
  148. package/dist/src/core/background/job-launcher.d.ts +1 -1
  149. package/dist/src/core/background/job-launcher.js +3 -3
  150. package/dist/src/core/background/job-launcher.js.map +1 -1
  151. package/dist/src/core/brownfield/importer.js +1 -1
  152. package/dist/src/core/brownfield/importer.js.map +1 -1
  153. package/dist/src/core/config/config-manager.d.ts +7 -1
  154. package/dist/src/core/config/config-manager.d.ts.map +1 -1
  155. package/dist/src/core/config/config-manager.js +24 -2
  156. package/dist/src/core/config/config-manager.js.map +1 -1
  157. package/dist/src/core/config/single-project-migrator.d.ts +110 -0
  158. package/dist/src/core/config/single-project-migrator.d.ts.map +1 -0
  159. package/dist/src/core/config/single-project-migrator.js +179 -0
  160. package/dist/src/core/config/single-project-migrator.js.map +1 -0
  161. package/dist/src/core/config/types.d.ts +3 -3
  162. package/dist/src/core/credentials/credentials-manager.d.ts +25 -4
  163. package/dist/src/core/credentials/credentials-manager.d.ts.map +1 -1
  164. package/dist/src/core/credentials/credentials-manager.js +54 -15
  165. package/dist/src/core/credentials/credentials-manager.js.map +1 -1
  166. package/dist/src/core/deduplication/command-deduplicator.d.ts +4 -4
  167. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -1
  168. package/dist/src/core/deduplication/command-deduplicator.js +3 -3
  169. package/dist/src/core/external-tools/external-items-counter.d.ts +4 -4
  170. package/dist/src/core/external-tools/external-items-counter.js +4 -4
  171. package/dist/src/core/external-tools/external-items-display.js +4 -4
  172. package/dist/src/core/external-tools/external-items-display.js.map +1 -1
  173. package/dist/src/core/increment/completion-validator.js +3 -3
  174. package/dist/src/core/increment/completion-validator.js.map +1 -1
  175. package/dist/src/core/increment/conflict-resolver.js +2 -2
  176. package/dist/src/core/increment/conflict-resolver.js.map +1 -1
  177. package/dist/src/core/increment/desync-detector.d.ts +1 -1
  178. package/dist/src/core/increment/desync-detector.js +3 -3
  179. package/dist/src/core/increment/desync-detector.js.map +1 -1
  180. package/dist/src/core/increment/discipline-checker.js +2 -2
  181. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  182. package/dist/src/core/increment/increment-archiver.js +4 -4
  183. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  184. package/dist/src/core/increment/increment-utils.d.ts +53 -2
  185. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  186. package/dist/src/core/increment/increment-utils.js +78 -7
  187. package/dist/src/core/increment/increment-utils.js.map +1 -1
  188. package/dist/src/core/increment/metadata-manager.js +6 -6
  189. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  190. package/dist/src/core/increment/metadata-validator.js +1 -1
  191. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  192. package/dist/src/core/increment/recent-work-scanner.js +2 -2
  193. package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
  194. package/dist/src/core/increment/spec-sync-manager.js +1 -1
  195. package/dist/src/core/increment/spec-sync-manager.js.map +1 -1
  196. package/dist/src/core/increment/status-auto-transition.d.ts +68 -1
  197. package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -1
  198. package/dist/src/core/increment/status-auto-transition.js +141 -1
  199. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  200. package/dist/src/core/increment/status-change-sync-trigger.d.ts +1 -1
  201. package/dist/src/core/increment/status-change-sync-trigger.js +3 -3
  202. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  203. package/dist/src/core/living-docs/cross-project-sync.d.ts +12 -0
  204. package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
  205. package/dist/src/core/living-docs/cross-project-sync.js +33 -0
  206. package/dist/src/core/living-docs/cross-project-sync.js.map +1 -1
  207. package/dist/src/core/living-docs/feature-archiver.d.ts +3 -3
  208. package/dist/src/core/living-docs/feature-archiver.js +3 -3
  209. package/dist/src/core/living-docs/feature-consistency-validator.js +1 -1
  210. package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
  211. package/dist/src/core/living-docs/feature-id-manager.d.ts +5 -0
  212. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  213. package/dist/src/core/living-docs/feature-id-manager.js +19 -1
  214. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  215. package/dist/src/core/living-docs/governance/standards-generator.js +1 -1
  216. package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -1
  217. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +5 -0
  218. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  219. package/dist/src/core/living-docs/hierarchy-mapper.js +22 -2
  220. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  221. package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -0
  222. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  223. package/dist/src/core/living-docs/living-docs-sync.js +77 -8
  224. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  225. package/dist/src/core/living-docs/project-detector.d.ts +9 -0
  226. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  227. package/dist/src/core/living-docs/project-detector.js +38 -3
  228. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  229. package/dist/src/core/living-docs/suggestions-generator.js +1 -1
  230. package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
  231. package/dist/src/core/notifications/command-integration.js +1 -1
  232. package/dist/src/core/notifications/command-integration.js.map +1 -1
  233. package/dist/src/core/project/adapters/ado-project-adapter.d.ts +73 -0
  234. package/dist/src/core/project/adapters/ado-project-adapter.d.ts.map +1 -0
  235. package/dist/src/core/project/adapters/ado-project-adapter.js +304 -0
  236. package/dist/src/core/project/adapters/ado-project-adapter.js.map +1 -0
  237. package/dist/src/core/project/adapters/github-project-adapter.d.ts +76 -0
  238. package/dist/src/core/project/adapters/github-project-adapter.d.ts.map +1 -0
  239. package/dist/src/core/project/adapters/github-project-adapter.js +315 -0
  240. package/dist/src/core/project/adapters/github-project-adapter.js.map +1 -0
  241. package/dist/src/core/project/adapters/jira-project-adapter.d.ts +69 -0
  242. package/dist/src/core/project/adapters/jira-project-adapter.d.ts.map +1 -0
  243. package/dist/src/core/project/adapters/jira-project-adapter.js +241 -0
  244. package/dist/src/core/project/adapters/jira-project-adapter.js.map +1 -0
  245. package/dist/src/core/project/project-event-bus.d.ts +72 -0
  246. package/dist/src/core/project/project-event-bus.d.ts.map +1 -0
  247. package/dist/src/core/project/project-event-bus.js +150 -0
  248. package/dist/src/core/project/project-event-bus.js.map +1 -0
  249. package/dist/src/core/project/project-manager.d.ts +0 -22
  250. package/dist/src/core/project/project-manager.d.ts.map +1 -1
  251. package/dist/src/core/project/project-manager.js +5 -275
  252. package/dist/src/core/project/project-manager.js.map +1 -1
  253. package/dist/src/core/project/project-registry.d.ts +93 -0
  254. package/dist/src/core/project/project-registry.d.ts.map +1 -0
  255. package/dist/src/core/project/project-registry.js +448 -0
  256. package/dist/src/core/project/project-registry.js.map +1 -0
  257. package/dist/src/core/project/project-resolution.d.ts +229 -0
  258. package/dist/src/core/project/project-resolution.d.ts.map +1 -0
  259. package/dist/src/core/project/project-resolution.js +633 -0
  260. package/dist/src/core/project/project-resolution.js.map +1 -0
  261. package/dist/src/core/project/types/project-types.d.ts +214 -0
  262. package/dist/src/core/project/types/project-types.d.ts.map +1 -0
  263. package/dist/src/core/project/types/project-types.js +9 -0
  264. package/dist/src/core/project/types/project-types.js.map +1 -0
  265. package/dist/src/core/repo-structure/setup-summary.js +2 -2
  266. package/dist/src/core/repo-structure/setup-summary.js.map +1 -1
  267. package/dist/src/core/specs/spec-identifier-detector.d.ts.map +1 -1
  268. package/dist/src/core/specs/spec-identifier-detector.js +8 -5
  269. package/dist/src/core/specs/spec-identifier-detector.js.map +1 -1
  270. package/dist/src/core/status-line/status-line-updater.js +1 -1
  271. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  272. package/dist/src/core/types/increment-metadata.d.ts +3 -3
  273. package/dist/src/core/types/increment-metadata.js +3 -3
  274. package/dist/src/core/types/increment-metadata.js.map +1 -1
  275. package/dist/src/core/types/sync-profile.d.ts +1 -0
  276. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  277. package/dist/src/core/types/sync-profile.js.map +1 -1
  278. package/dist/src/core/validators/ac-presence-validator.d.ts +4 -4
  279. package/dist/src/core/validators/ac-presence-validator.js +3 -3
  280. package/dist/src/core/validators/ac-presence-validator.js.map +1 -1
  281. package/dist/src/core/workflow/backlog-scanner.d.ts +5 -0
  282. package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -1
  283. package/dist/src/core/workflow/backlog-scanner.js +14 -2
  284. package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
  285. package/dist/src/core/workflow/phase-detector.js +17 -17
  286. package/dist/src/core/workflow/phase-detector.js.map +1 -1
  287. package/dist/src/core/workflow/types.d.ts +1 -1
  288. package/dist/src/core/workflow/types.d.ts.map +1 -1
  289. package/dist/src/core/workflow/workflow-orchestrator.d.ts +1 -1
  290. package/dist/src/core/workflow/workflow-orchestrator.js +9 -9
  291. package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -1
  292. package/dist/src/hooks/scheduler-startup.js +1 -1
  293. package/dist/src/hooks/scheduler-startup.js.map +1 -1
  294. package/dist/src/importers/item-converter.js +1 -1
  295. package/dist/src/importers/item-converter.js.map +1 -1
  296. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +17 -1
  297. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  298. package/dist/src/integrations/jira/jira-incremental-mapper.js +20 -12
  299. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  300. package/dist/src/integrations/jira/jira-mapper.d.ts +17 -1
  301. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  302. package/dist/src/integrations/jira/jira-mapper.js +13 -5
  303. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  304. package/dist/src/living-docs/enterprise-analyzer.js +1 -1
  305. package/dist/src/living-docs/enterprise-analyzer.js.map +1 -1
  306. package/dist/src/sync/ado-reconciler.d.ts +5 -0
  307. package/dist/src/sync/ado-reconciler.d.ts.map +1 -1
  308. package/dist/src/sync/ado-reconciler.js +16 -4
  309. package/dist/src/sync/ado-reconciler.js.map +1 -1
  310. package/dist/src/sync/jira-reconciler.d.ts +3 -0
  311. package/dist/src/sync/jira-reconciler.d.ts.map +1 -1
  312. package/dist/src/sync/jira-reconciler.js +12 -5
  313. package/dist/src/sync/jira-reconciler.js.map +1 -1
  314. package/dist/src/types/dashboard-cache.d.ts +4 -2
  315. package/dist/src/types/dashboard-cache.d.ts.map +1 -1
  316. package/dist/src/types/dashboard-cache.js +1 -1
  317. package/dist/src/types/dashboard-cache.js.map +1 -1
  318. package/dist/src/utils/ac-embedder.d.ts +1 -1
  319. package/dist/src/utils/docs-preview/docusaurus-setup.js +2 -2
  320. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  321. package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
  322. package/dist/src/utils/env-multi-project-parser.d.ts +17 -0
  323. package/dist/src/utils/env-multi-project-parser.d.ts.map +1 -1
  324. package/dist/src/utils/env-multi-project-parser.js +26 -1
  325. package/dist/src/utils/env-multi-project-parser.js.map +1 -1
  326. package/dist/src/utils/external-tool-drift-detector.d.ts +2 -2
  327. package/dist/src/utils/external-tool-drift-detector.js +6 -6
  328. package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
  329. package/dist/src/utils/notification-constants.js +2 -2
  330. package/dist/src/utils/notification-constants.js.map +1 -1
  331. package/dist/src/utils/notification-manager.d.ts +12 -3
  332. package/dist/src/utils/notification-manager.d.ts.map +1 -1
  333. package/dist/src/utils/notification-manager.js +51 -49
  334. package/dist/src/utils/notification-manager.js.map +1 -1
  335. package/dist/src/utils/platform-utils.d.ts +12 -3
  336. package/dist/src/utils/platform-utils.d.ts.map +1 -1
  337. package/dist/src/utils/platform-utils.js +35 -16
  338. package/dist/src/utils/platform-utils.js.map +1 -1
  339. package/dist/src/utils/plugin-validator.js +11 -11
  340. package/dist/src/utils/plugin-validator.js.map +1 -1
  341. package/dist/src/validators/ac-coverage-validator.d.ts +1 -1
  342. package/dist/src/validators/ac-coverage-validator.js +1 -1
  343. package/package.json +3 -1
  344. package/plugins/PLUGINS-INDEX.md +1 -2
  345. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  346. package/plugins/specweave/COMMANDS.md +49 -49
  347. package/plugins/specweave/agents/pm/AGENT.md +18 -18
  348. package/plugins/specweave/agents/test-aware-planner/AGENT.md +7 -7
  349. package/plugins/specweave/agents/translator/AGENT.md +2 -2
  350. package/plugins/specweave/commands/{specweave-abandon.md → abandon.md} +20 -20
  351. package/plugins/specweave/commands/{specweave-analyze-standards.sh → analyze-standards.sh} +4 -4
  352. package/plugins/specweave/commands/{specweave-archive-features.md → archive-features.md} +7 -7
  353. package/plugins/specweave/commands/{specweave-archive.md → archive.md} +36 -36
  354. package/plugins/specweave/commands/{specweave-backlog.md → backlog.md} +24 -24
  355. package/plugins/specweave/commands/{specweave-check-hooks.md → check-hooks.md} +10 -10
  356. package/plugins/specweave/commands/{specweave-check-tests.md → check-tests.md} +14 -14
  357. package/plugins/specweave/commands/{specweave-costs.md → costs.md} +8 -8
  358. package/plugins/specweave/commands/{specweave-discrepancies.md → discrepancies.md} +15 -15
  359. package/plugins/specweave/commands/{specweave-discrepancy-to-increment.md → discrepancy-to-increment.md} +10 -10
  360. package/plugins/specweave/commands/{specweave-do.md → do.md} +37 -39
  361. package/plugins/specweave/commands/{specweave-done.md → done.md} +23 -23
  362. package/plugins/specweave/commands/{specweave-embed-acs.md → embed-acs.md} +21 -21
  363. package/plugins/specweave/commands/{specweave-external.md → external.md} +11 -11
  364. package/plugins/specweave/commands/{specweave-fix-duplicates.md → fix-duplicates.md} +16 -16
  365. package/plugins/specweave/commands/{specweave-import-docs.md → import-docs.md} +7 -7
  366. package/plugins/specweave/commands/{specweave-import-external.md → import-external.md} +9 -9
  367. package/plugins/specweave/commands/{specweave-increment.md → increment.md} +17 -17
  368. package/plugins/specweave/commands/{specweave-jobs.md → jobs.md} +28 -28
  369. package/plugins/specweave/commands/{specweave-judge-llm.md → judge-llm.md} +19 -19
  370. package/plugins/specweave/commands/{specweave-living-docs.md → living-docs.md} +72 -29
  371. package/plugins/specweave/commands/migrate-config.md +2 -2
  372. package/plugins/specweave/commands/{specweave-next.md → next.md} +20 -20
  373. package/plugins/specweave/commands/{specweave-notifications.md → notifications.md} +11 -11
  374. package/plugins/specweave/commands/{specweave-organize-docs.md → organize-docs.md} +9 -9
  375. package/plugins/specweave/commands/{specweave-pause.md → pause.md} +19 -19
  376. package/plugins/specweave/commands/{specweave-plan.md → plan.md} +19 -19
  377. package/plugins/specweave/commands/{specweave-progress.md → progress.md} +6 -6
  378. package/plugins/specweave/commands/{specweave-qa.md → qa.md} +15 -15
  379. package/plugins/specweave/commands/{specweave-reopen.md → reopen.md} +41 -41
  380. package/plugins/specweave/commands/{specweave-restore-feature.md → restore-feature.md} +6 -6
  381. package/plugins/specweave/commands/{specweave-restore.md → restore.md} +26 -26
  382. package/plugins/specweave/commands/{specweave-resume.md → resume.md} +33 -33
  383. package/plugins/specweave/commands/revert-wip-limit.md +4 -4
  384. package/plugins/specweave/commands/{specweave-save.md → save.md} +34 -34
  385. package/plugins/specweave/commands/{specweave-status.md → status.md} +29 -29
  386. package/plugins/specweave/commands/{specweave.md → sw.md} +28 -28
  387. package/plugins/specweave/commands/{specweave-sync-acs.md → sync-acs.md} +12 -12
  388. package/plugins/specweave/commands/sync-diagnostics.md +5 -5
  389. package/plugins/specweave/commands/{specweave-sync-docs.md → sync-docs.md} +7 -7
  390. package/plugins/specweave/commands/{specweave-sync-logs.md → sync-logs.md} +14 -14
  391. package/plugins/specweave/commands/{specweave-sync-monitor.md → sync-monitor.md} +5 -5
  392. package/plugins/specweave/commands/{specweave-sync-progress.md → sync-progress.md} +38 -38
  393. package/plugins/specweave/commands/{specweave-sync-specs.md → sync-specs.md} +17 -17
  394. package/plugins/specweave/commands/{specweave-sync-status.md → sync-status.md} +16 -16
  395. package/plugins/specweave/commands/{specweave-sync-tasks.md → sync-tasks.md} +13 -13
  396. package/plugins/specweave/commands/{specweave-tdd-cycle.md → tdd-cycle.md} +1 -1
  397. package/plugins/specweave/commands/{specweave-tdd-green.md → tdd-green.md} +1 -1
  398. package/plugins/specweave/commands/{specweave-tdd-red.md → tdd-red.md} +1 -1
  399. package/plugins/specweave/commands/{specweave-tdd-refactor.md → tdd-refactor.md} +1 -1
  400. package/plugins/specweave/commands/{specweave-translate.md → translate.md} +17 -17
  401. package/plugins/specweave/commands/{specweave-update-scope.md → update-scope.md} +8 -8
  402. package/plugins/specweave/commands/{specweave-update-status.md → update-status.md} +6 -6
  403. package/plugins/specweave/commands/{specweave-validate-features.md → validate-features.md} +8 -8
  404. package/plugins/specweave/commands/{specweave-validate.md → validate.md} +20 -20
  405. package/plugins/specweave/commands/{specweave-workflow.md → workflow.md} +40 -40
  406. package/plugins/specweave/hooks/README.md +5 -5
  407. package/plugins/specweave/hooks/config-env-separator.sh +99 -0
  408. package/plugins/specweave/hooks/github-metadata-guard.sh +73 -0
  409. package/plugins/specweave/hooks/hooks.json +32 -2
  410. package/plugins/specweave/hooks/post-first-increment.sh +2 -2
  411. package/plugins/specweave/hooks/post-increment-completion.sh +7 -7
  412. package/plugins/specweave/hooks/post-increment-planning.sh +11 -11
  413. package/plugins/specweave/hooks/post-increment-status-change.sh +1 -1
  414. package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
  415. package/plugins/specweave/hooks/post-spec-update.sh +2 -2
  416. package/plugins/specweave/hooks/post-task-completion.sh +2 -2
  417. package/plugins/specweave/hooks/pre-increment-start.sh +7 -7
  418. package/plugins/specweave/hooks/project-folder-guard.sh +272 -0
  419. package/plugins/specweave/hooks/spec-project-validator.sh +68 -47
  420. package/plugins/specweave/hooks/user-prompt-submit.sh +27 -27
  421. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +2 -2
  422. package/plugins/specweave/hooks/v2/guards/metadata-json-guard.sh +1 -1
  423. package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +1 -1
  424. package/plugins/specweave/lib/hooks/consolidated-sync.js +35 -5
  425. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +2 -2
  426. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +2 -2
  427. package/plugins/specweave/lib/hooks/prepare-reflection-context.js +1 -1
  428. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +1 -1
  429. package/plugins/specweave/lib/hooks/sync-living-docs.js +5 -5
  430. package/plugins/specweave/lib/hooks/translate-file.d.ts +1 -1
  431. package/plugins/specweave/lib/hooks/translate-file.js +2 -2
  432. package/plugins/specweave/lib/hooks/translate-file.ts +3 -3
  433. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +1 -1
  434. package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +2 -2
  435. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +6 -6
  436. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  437. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.d.ts +113 -0
  438. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js +318 -0
  439. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js.map +1 -0
  440. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +3 -3
  441. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js +3 -3
  442. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js.map +1 -1
  443. package/plugins/specweave/scripts/README.md +9 -9
  444. package/plugins/specweave/scripts/cleanup-state.sh +1 -1
  445. package/plugins/specweave/scripts/jobs.js +2 -2
  446. package/plugins/specweave/scripts/progress.js +6 -6
  447. package/plugins/specweave/scripts/read-costs.sh +3 -3
  448. package/plugins/specweave/scripts/read-jobs.sh +8 -8
  449. package/plugins/specweave/scripts/read-progress.sh +17 -10
  450. package/plugins/specweave/scripts/read-status.sh +7 -7
  451. package/plugins/specweave/scripts/read-workflow.sh +18 -18
  452. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +6 -5
  453. package/plugins/specweave/scripts/session-watchdog.sh +4 -4
  454. package/plugins/specweave/scripts/status.js +7 -7
  455. package/plugins/specweave/scripts/update-dashboard-cache.sh +28 -10
  456. package/plugins/specweave/skills/SKILLS-INDEX.md +4 -4
  457. package/plugins/specweave/skills/archive-increments/SKILL.md +15 -15
  458. package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +5 -5
  459. package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +4 -4
  460. package/plugins/specweave/skills/context-loader/SKILL.md +1 -1
  461. package/plugins/specweave/skills/{specweave-detector → detector}/SKILL.md +5 -5
  462. package/plugins/specweave/skills/discrepancy-viewer.md +4 -4
  463. package/plugins/specweave/skills/external-sync-wizard/SKILL.md +24 -24
  464. package/plugins/specweave/skills/{specweave-framework → framework}/SKILL.md +33 -33
  465. package/plugins/specweave/skills/increment-planner/SKILL.md +25 -24
  466. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +6 -16
  467. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -12
  468. package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +6 -6
  469. package/plugins/specweave/skills/increment-work-router/SKILL.md +23 -23
  470. package/plugins/specweave/skills/instant-status/SKILL.md +7 -7
  471. package/plugins/specweave/skills/plugin-validator/SKILL.md +9 -9
  472. package/plugins/specweave/skills/pm-closure-validation/SKILL.md +4 -4
  473. package/plugins/specweave/skills/progress-sync/SKILL.md +51 -51
  474. package/plugins/specweave/skills/project-kickstarter/SKILL.md +11 -11
  475. package/plugins/specweave/skills/role-orchestrator/README.md +1 -1
  476. package/plugins/specweave/skills/role-orchestrator/SKILL.md +4 -4
  477. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +17 -17
  478. package/plugins/specweave/skills/spec-generator/SKILL.md +6 -6
  479. package/plugins/specweave/skills/tdd-workflow/SKILL.md +21 -21
  480. package/plugins/specweave/skills/translator/SKILL.md +4 -4
  481. package/plugins/specweave/skills/umbrella-repo-detector/SKILL.md +5 -5
  482. package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
  483. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +4 -4
  484. package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +4 -4
  485. package/plugins/specweave-ado/commands/cleanup-duplicates.md +9 -9
  486. package/plugins/specweave-ado/commands/clone.md +17 -17
  487. package/plugins/specweave-ado/commands/close.md +10 -10
  488. package/plugins/specweave-ado/commands/create.md +8 -8
  489. package/plugins/specweave-ado/commands/import-areas.md +15 -15
  490. package/plugins/specweave-ado/commands/import-projects.md +12 -12
  491. package/plugins/specweave-ado/commands/pull.md +25 -25
  492. package/plugins/specweave-ado/commands/push.md +20 -20
  493. package/plugins/specweave-ado/commands/reconcile.md +7 -7
  494. package/plugins/specweave-ado/commands/status.md +7 -7
  495. package/plugins/specweave-ado/commands/sync.md +17 -17
  496. package/plugins/specweave-ado/hooks/post-living-docs-update.sh +2 -2
  497. package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
  498. package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
  499. package/plugins/specweave-ado/skills/{specweave-ado-mapper → ado-mapper}/SKILL.md +2 -2
  500. package/plugins/specweave-ado/skills/ado-multi-project/SKILL.md +6 -6
  501. package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +5 -5
  502. package/plugins/specweave-ado/skills/ado-sync/SKILL.md +19 -19
  503. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +1 -1
  504. package/plugins/specweave-alternatives/commands/alternatives-analyze.md +14 -14
  505. package/plugins/specweave-backend/.claude-plugin/plugin.json +1 -1
  506. package/plugins/specweave-confluent/.claude-plugin/plugin.json +1 -1
  507. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +1 -1
  508. package/plugins/specweave-cost-optimizer/commands/cost-analyze.md +1 -1
  509. package/plugins/specweave-cost-optimizer/commands/cost-optimize.md +1 -1
  510. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
  511. package/plugins/specweave-diagrams/commands/diagrams-generate.md +1 -1
  512. package/plugins/specweave-docs/.claude-plugin/plugin.json +1 -1
  513. package/plugins/specweave-docs/commands/build.md +8 -8
  514. package/plugins/specweave-docs/commands/generate.md +22 -22
  515. package/plugins/specweave-docs/commands/health.md +10 -10
  516. package/plugins/specweave-docs/commands/init.md +9 -9
  517. package/plugins/specweave-docs/commands/organize.md +10 -10
  518. package/plugins/specweave-docs/commands/validate.md +9 -9
  519. package/plugins/specweave-docs/commands/view.md +14 -14
  520. package/plugins/specweave-docs/skills/preview/SKILL.md +11 -11
  521. package/plugins/specweave-figma/.claude-plugin/plugin.json +1 -1
  522. package/plugins/specweave-figma/commands/figma-import.md +1 -1
  523. package/plugins/specweave-figma/commands/figma-to-react.md +1 -1
  524. package/plugins/specweave-figma/commands/figma-tokens.md +1 -1
  525. package/plugins/specweave-frontend/.claude-plugin/plugin.json +1 -1
  526. package/plugins/specweave-frontend/agents/frontend-architect/README.md +5 -5
  527. package/plugins/specweave-frontend/commands/component-generate.md +1 -1
  528. package/plugins/specweave-frontend/commands/design-system-init.md +1 -1
  529. package/plugins/specweave-frontend/commands/frontend-scaffold.md +1 -1
  530. package/plugins/specweave-frontend/commands/nextjs-setup.md +1 -1
  531. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
  532. package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +4 -4
  533. package/plugins/specweave-github/SYNC-ARCHITECTURE-FIX-SUMMARY.md +18 -18
  534. package/plugins/specweave-github/agents/github-manager/AGENT.md +8 -8
  535. package/plugins/specweave-github/commands/cleanup-duplicates.md +8 -8
  536. package/plugins/specweave-github/commands/close.md +25 -25
  537. package/plugins/specweave-github/commands/create.md +17 -17
  538. package/plugins/specweave-github/commands/pull.md +12 -12
  539. package/plugins/specweave-github/commands/push.md +12 -12
  540. package/plugins/specweave-github/commands/reconcile.md +7 -7
  541. package/plugins/specweave-github/commands/status.md +24 -24
  542. package/plugins/specweave-github/commands/sync.md +34 -34
  543. package/plugins/specweave-github/commands/update-user-story.md +6 -6
  544. package/plugins/specweave-github/hooks/README.md +8 -8
  545. package/plugins/specweave-github/hooks/post-task-completion.sh +2 -2
  546. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +12 -4
  547. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +16 -4
  548. package/plugins/specweave-github/lib/completion-calculator.js +3 -1
  549. package/plugins/specweave-github/lib/completion-calculator.ts +6 -0
  550. package/plugins/specweave-github/lib/duplicate-detector.js +12 -6
  551. package/plugins/specweave-github/lib/duplicate-detector.ts +22 -6
  552. package/plugins/specweave-github/lib/github-board-resolver.js +7 -2
  553. package/plugins/specweave-github/lib/github-board-resolver.ts +13 -2
  554. package/plugins/specweave-github/lib/github-client-v2.js +29 -18
  555. package/plugins/specweave-github/lib/github-client-v2.ts +33 -18
  556. package/plugins/specweave-github/lib/github-feature-sync.js +41 -11
  557. package/plugins/specweave-github/lib/github-feature-sync.ts +52 -11
  558. package/plugins/specweave-github/lib/github-hierarchical-sync.js +6 -1
  559. package/plugins/specweave-github/lib/github-hierarchical-sync.ts +12 -1
  560. package/plugins/specweave-github/lib/github-increment-sync-cli.js +35 -17
  561. package/plugins/specweave-github/lib/github-increment-sync-cli.ts +44 -16
  562. package/plugins/specweave-github/lib/github-issue-updater.js +8 -3
  563. package/plugins/specweave-github/lib/github-issue-updater.ts +16 -3
  564. package/plugins/specweave-github/lib/github-spec-sync.js +14 -4
  565. package/plugins/specweave-github/lib/github-spec-sync.ts +19 -4
  566. package/plugins/specweave-github/lib/github-sync-bidirectional.js +8 -3
  567. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +14 -3
  568. package/plugins/specweave-github/lib/github-sync-increment-changes.js +9 -4
  569. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +15 -4
  570. package/plugins/specweave-github/lib/increment-issue-builder.js +23 -10
  571. package/plugins/specweave-github/lib/increment-issue-builder.ts +29 -11
  572. package/plugins/specweave-github/lib/user-story-content-builder.js +19 -16
  573. package/plugins/specweave-github/lib/user-story-content-builder.ts +24 -19
  574. package/plugins/specweave-github/lib/user-story-issue-builder.js +10 -13
  575. package/plugins/specweave-github/lib/user-story-issue-builder.ts +20 -19
  576. package/plugins/specweave-github/reference/github-specweave-mapping.md +1 -1
  577. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +3 -3
  578. package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +8 -8
  579. package/plugins/specweave-github/skills/github-sync/SKILL.md +14 -14
  580. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
  581. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-monitor-setup.md → monitor-setup.md} +1 -1
  582. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-slo-implement.md → slo-implement.md} +1 -1
  583. package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
  584. package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +3 -3
  585. package/plugins/specweave-jira/commands/cleanup-duplicates.md +9 -9
  586. package/plugins/specweave-jira/commands/close.md +13 -13
  587. package/plugins/specweave-jira/commands/create.md +8 -8
  588. package/plugins/specweave-jira/commands/import-boards.md +15 -15
  589. package/plugins/specweave-jira/commands/import-projects-full.md +15 -15
  590. package/plugins/specweave-jira/commands/import-projects.md +10 -10
  591. package/plugins/specweave-jira/commands/pull.md +10 -10
  592. package/plugins/specweave-jira/commands/push.md +11 -11
  593. package/plugins/specweave-jira/commands/reconcile.md +7 -7
  594. package/plugins/specweave-jira/commands/status.md +16 -16
  595. package/plugins/specweave-jira/commands/sync.md +27 -27
  596. package/plugins/specweave-jira/skills/{specweave-jira-mapper → jira-mapper}/SKILL.md +2 -2
  597. package/plugins/specweave-jira/skills/jira-resource-validator/SKILL.md +4 -4
  598. package/plugins/specweave-jira/skills/jira-sync/SKILL.md +5 -5
  599. package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
  600. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +10 -10
  601. package/plugins/specweave-kafka/README.md +12 -12
  602. package/plugins/specweave-kafka/commands/deploy.md +5 -5
  603. package/plugins/specweave-kafka/commands/dev-env.md +2 -2
  604. package/plugins/specweave-kafka/commands/mcp-configure.md +3 -3
  605. package/plugins/specweave-kafka/commands/monitor-setup.md +3 -3
  606. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +4 -4
  607. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +5 -5
  608. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +6 -6
  609. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
  610. package/plugins/specweave-kafka-streams/commands/topology.md +4 -4
  611. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +1 -1
  612. package/plugins/specweave-ml/.claude-plugin/plugin.json +1 -1
  613. package/plugins/specweave-ml/README.md +9 -9
  614. package/plugins/specweave-ml/commands/{specweave-ml-deploy.md → deploy.md} +1 -1
  615. package/plugins/specweave-ml/commands/{specweave-ml-evaluate.md → evaluate.md} +1 -1
  616. package/plugins/specweave-ml/commands/{specweave-ml-explain.md → explain.md} +1 -1
  617. package/plugins/specweave-ml/commands/{specweave-ml-pipeline.md → pipeline.md} +1 -1
  618. package/plugins/specweave-ml/skills/automl-optimizer/SKILL.md +1 -1
  619. package/plugins/specweave-ml/skills/data-visualizer/SKILL.md +1 -1
  620. package/plugins/specweave-ml/skills/experiment-tracker/SKILL.md +4 -4
  621. package/plugins/specweave-ml/skills/feature-engineer/SKILL.md +1 -1
  622. package/plugins/specweave-ml/skills/ml-deployment-helper/SKILL.md +2 -2
  623. package/plugins/specweave-ml/skills/ml-pipeline-orchestrator/SKILL.md +10 -10
  624. package/plugins/specweave-ml/skills/model-registry/SKILL.md +1 -1
  625. package/plugins/specweave-ml/skills/time-series-forecaster/SKILL.md +1 -1
  626. package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -1
  627. package/plugins/specweave-mobile/README.md +2 -2
  628. package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +2 -2
  629. package/plugins/specweave-mobile/skills/react-native-setup/SKILL.md +1 -1
  630. package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
  631. package/plugins/specweave-n8n/commands/workflow-template.md +4 -4
  632. package/plugins/specweave-payments/.claude-plugin/plugin.json +1 -1
  633. package/plugins/specweave-payments/commands/stripe-setup.md +1 -1
  634. package/plugins/specweave-payments/commands/subscription-flow.md +1 -1
  635. package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +1 -1
  636. package/plugins/specweave-plugin-dev/commands/plugin-create.md +1 -1
  637. package/plugins/specweave-plugin-dev/commands/plugin-publish.md +1 -1
  638. package/plugins/specweave-plugin-dev/commands/plugin-test.md +1 -1
  639. package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
  640. package/plugins/specweave-release/IMPLEMENTATION.md +14 -14
  641. package/plugins/specweave-release/README.md +33 -33
  642. package/plugins/specweave-release/agents/release-manager/AGENT.md +18 -18
  643. package/plugins/specweave-release/commands/{specweave-release-align.md → align.md} +19 -19
  644. package/plugins/specweave-release/commands/{specweave-release-init.md → init.md} +19 -19
  645. package/plugins/specweave-release/commands/{specweave-release-npm.md → npm.md} +14 -14
  646. package/plugins/specweave-release/commands/{specweave-release-platform.md → platform.md} +17 -17
  647. package/plugins/specweave-release/commands/{specweave-release-rc.md → rc.md} +37 -37
  648. package/plugins/specweave-release/hooks/post-task-completion.sh +1 -1
  649. package/plugins/specweave-release/skills/rc-manager/SKILL.md +12 -12
  650. package/plugins/specweave-release/skills/release-coordinator/SKILL.md +11 -11
  651. package/plugins/specweave-release/skills/release-strategy-advisor/SKILL.md +4 -4
  652. package/plugins/specweave-release/skills/version-aligner/SKILL.md +7 -7
  653. package/plugins/specweave-testing/.claude-plugin/plugin.json +1 -1
  654. package/plugins/specweave-testing/agents/qa-engineer/README.md +5 -5
  655. package/plugins/specweave-testing/commands/e2e-setup.md +1 -1
  656. package/plugins/specweave-testing/commands/test-coverage.md +1 -1
  657. package/plugins/specweave-testing/commands/test-generate.md +1 -1
  658. package/plugins/specweave-testing/commands/test-init.md +1 -1
  659. package/plugins/specweave-tooling/.claude-plugin/plugin.json +1 -1
  660. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-create.md → skill-create.md} +1 -1
  661. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-package.md → skill-package.md} +1 -1
  662. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-validate.md → skill-validate.md} +1 -1
  663. package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
  664. package/plugins/specweave-ui/commands/ui-automate.md +9 -9
  665. package/plugins/specweave-ui/commands/ui-inspect.md +6 -6
  666. package/src/templates/AGENTS.md.template +49 -49
  667. package/src/templates/CLAUDE.md.template +11 -11
  668. package/dist/src/cli/commands/switch-project.d.ts +0 -13
  669. package/dist/src/cli/commands/switch-project.d.ts.map +0 -1
  670. package/dist/src/cli/commands/switch-project.js +0 -78
  671. package/dist/src/cli/commands/switch-project.js.map +0 -1
  672. package/plugins/specweave/commands/specweave-init-multiproject.md +0 -146
  673. package/plugins/specweave-core/.claude-plugin/plugin.json +0 -21
  674. package/plugins/specweave-core/commands/architecture-review.md +0 -288
  675. package/plugins/specweave-core/commands/code-review.md +0 -213
  676. package/plugins/specweave-core/commands/refactor-plan.md +0 -249
  677. package/plugins/specweave-core/skills/code-quality/SKILL.md +0 -158
  678. package/plugins/specweave-core/skills/design-patterns/SKILL.md +0 -245
  679. package/plugins/specweave-core/skills/software-architecture/SKILL.md +0 -84
  680. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-1-increment-naming.yaml +0 -0
  681. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-2-source-of-truth.yaml +0 -0
  682. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-3-increment-discipline.yaml +0 -0
  683. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-4-file-placement.yaml +0 -0
@@ -4,6 +4,11 @@ import {
4
4
  isCustomStrategy
5
5
  } from "../../../src/core/types/sync-profile.js";
6
6
  import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
7
+ import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
8
+ function getGhEnv() {
9
+ const { token } = getGitHubAuthFromProject(process.cwd());
10
+ return token ? { ...process.env, GH_TOKEN: token } : process.env;
11
+ }
7
12
  async function buildHierarchicalSearchQuery(containers) {
8
13
  const parts = [];
9
14
  for (const container of containers) {
@@ -150,7 +155,7 @@ async function executeSearch(query) {
150
155
  "--limit",
151
156
  "1000"
152
157
  // Max results
153
- ]);
158
+ ], { env: getGhEnv() });
154
159
  if (result.status !== 0) {
155
160
  throw new Error(`Failed to search issues: ${result.stderr || result.stdout}`);
156
161
  }
@@ -19,6 +19,17 @@ import {
19
19
  import { GitHubIssue } from './types.js';
20
20
  import { getBoardNumbers } from './github-board-resolver.js';
21
21
  import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
22
+ import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
23
+
24
+ /**
25
+ * Get environment object with GH_TOKEN for gh CLI commands.
26
+ */
27
+ function getGhEnv(): NodeJS.ProcessEnv {
28
+ const { token } = getGitHubAuthFromProject(process.cwd());
29
+ return token
30
+ ? { ...process.env, GH_TOKEN: token }
31
+ : process.env;
32
+ }
22
33
 
23
34
  /**
24
35
  * Build hierarchical GitHub search query from containers
@@ -304,7 +315,7 @@ async function executeSearch(query: string): Promise<GitHubIssue[]> {
304
315
  'number,title,body,state,url,labels,milestone,repository',
305
316
  '--limit',
306
317
  '1000', // Max results
307
- ]);
318
+ ], { env: getGhEnv() });
308
319
 
309
320
  if (result.status !== 0) {
310
321
  throw new Error(`Failed to search issues: ${result.stderr || result.stdout}`);
@@ -4,6 +4,11 @@ import * as fs from "fs/promises";
4
4
  import * as path from "path";
5
5
  import { IncrementIssueBuilder } from "./increment-issue-builder.js";
6
6
  import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
7
+ import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
8
+ function getGhEnv() {
9
+ const { token } = getGitHubAuthFromProject(process.cwd());
10
+ return token ? { ...process.env, GH_TOKEN: token } : process.env;
11
+ }
7
12
  async function loadGitHubConfig() {
8
13
  const projectRoot = process.cwd();
9
14
  const configPath = path.join(projectRoot, ".specweave/config.json");
@@ -117,7 +122,7 @@ async function createOrGetMilestone(owner, repo, featureId, title, existingMiles
117
122
  `repos/${owner}/${repo}/milestones/${existingMilestone}`,
118
123
  "--jq",
119
124
  ".number"
120
- ]);
125
+ ], { env: getGhEnv() });
121
126
  if (verifyResult.exitCode === 0) {
122
127
  return {
123
128
  number: existingMilestone,
@@ -130,7 +135,7 @@ async function createOrGetMilestone(owner, repo, featureId, title, existingMiles
130
135
  `repos/${owner}/${repo}/milestones`,
131
136
  "--jq",
132
137
  `.[] | select(.title | contains("${featureId}")) | .number`
133
- ]);
138
+ ], { env: getGhEnv() });
134
139
  if (searchResult.exitCode === 0 && searchResult.stdout.trim()) {
135
140
  const milestoneNumber2 = parseInt(searchResult.stdout.trim().split("\n")[0], 10);
136
141
  return {
@@ -150,7 +155,7 @@ async function createOrGetMilestone(owner, repo, featureId, title, existingMiles
150
155
  `description=Feature milestone for ${featureId}`,
151
156
  "--jq",
152
157
  ".number"
153
- ]);
158
+ ], { env: getGhEnv() });
154
159
  if (createResult.exitCode !== 0) {
155
160
  throw new Error(`Failed to create milestone: ${createResult.stderr || createResult.stdout}`);
156
161
  }
@@ -163,14 +168,30 @@ async function createOrGetMilestone(owner, repo, featureId, title, existingMiles
163
168
  function buildUserStoryIssueBody(story, tasks, incrementData, githubRepo) {
164
169
  const incrementId = incrementData.frontmatter.increment;
165
170
  let body = "";
166
- body += `**Feature**: ${incrementData.frontmatter.feature_id || "N/A"}
171
+ const completedACs = story.acceptanceCriteria.filter((ac) => ac.completed).length;
172
+ const totalACs = story.acceptanceCriteria.length;
173
+ const storyTasks = tasks.filter(
174
+ (t) => t.userStories.includes(story.id) || t.userStories.some((us) => us.includes(story.id.replace("US-", "")))
175
+ );
176
+ const completedTasks = storyTasks.filter((t) => t.completed).length;
177
+ const totalTasks = storyTasks.length;
178
+ const overallPercentage = totalACs + totalTasks > 0 ? Math.round((completedACs + completedTasks) / (totalACs + totalTasks) * 100) : 0;
179
+ body += `## Progress
180
+
181
+ `;
182
+ body += `**Acceptance Criteria**: ${completedACs}/${totalACs} (${totalACs > 0 ? Math.round(completedACs / totalACs * 100) : 0}%)
167
183
  `;
168
- body += `**Status**: ${story.acceptanceCriteria.every((ac) => ac.completed) ? "complete" : "in-progress"}
184
+ body += `**Tasks**: ${completedTasks}/${totalTasks} (${totalTasks > 0 ? Math.round(completedTasks / totalTasks * 100) : 0}%)
169
185
  `;
170
- body += `**Priority**: ${story.priority || incrementData.frontmatter.priority || "P2"}
186
+ body += `**Overall**: ${overallPercentage}%
187
+
171
188
  `;
172
- body += `
173
- ---
189
+ const filledBlocks = Math.floor(overallPercentage / 5);
190
+ const emptyBlocks = 20 - filledBlocks;
191
+ body += `${"\u2588".repeat(filledBlocks)}${"\u2591".repeat(emptyBlocks)} ${overallPercentage}%
192
+
193
+ `;
194
+ body += `---
174
195
 
175
196
  `;
176
197
  body += `## User Story
@@ -216,17 +237,14 @@ function buildUserStoryIssueBody(story, tasks, incrementData, githubRepo) {
216
237
  body += `---
217
238
 
218
239
  `;
219
- const storyTasks = tasks.filter(
220
- (t) => t.userStories.includes(story.id) || t.userStories.some((us) => us.includes(story.id.replace("US-", "")))
221
- );
222
240
  if (storyTasks.length > 0) {
223
241
  body += `## Implementation Tasks
224
242
 
225
243
  `;
226
- const completedTasks = storyTasks.filter((t) => t.completed).length;
227
- const totalTasks = storyTasks.length;
228
- const taskPercentage = totalTasks > 0 ? Math.round(completedTasks / totalTasks * 100) : 0;
229
- body += `Progress: ${completedTasks}/${totalTasks} tasks (${taskPercentage}%)
244
+ const completedTasks2 = storyTasks.filter((t) => t.completed).length;
245
+ const totalTasks2 = storyTasks.length;
246
+ const taskPercentage = totalTasks2 > 0 ? Math.round(completedTasks2 / totalTasks2 * 100) : 0;
247
+ body += `Progress: ${completedTasks2}/${totalTasks2} tasks (${taskPercentage}%)
230
248
 
231
249
  `;
232
250
  for (const task of storyTasks) {
@@ -268,7 +286,7 @@ async function syncUserStoryIssue(owner, repo, featureId, story, tasks, incremen
268
286
  title,
269
287
  "--body",
270
288
  body
271
- ]);
289
+ ], { env: getGhEnv() });
272
290
  if (updateResult.exitCode !== 0) {
273
291
  throw new Error(`Failed to update issue #${existingIssueNumber}: ${updateResult.stderr}`);
274
292
  }
@@ -292,7 +310,7 @@ async function syncUserStoryIssue(owner, repo, featureId, story, tasks, incremen
292
310
  if (labels.length > 0) {
293
311
  createArgs.push("--label", labels.join(","));
294
312
  }
295
- const createResult = await execFileNoThrow("gh", createArgs);
313
+ const createResult = await execFileNoThrow("gh", createArgs, { env: getGhEnv() });
296
314
  if (createResult.exitCode !== 0) {
297
315
  throw new Error(`Failed to create issue: ${createResult.stderr || createResult.stdout}`);
298
316
  }
@@ -23,6 +23,17 @@ import * as fs from 'fs/promises';
23
23
  import * as path from 'path';
24
24
  import { IncrementIssueBuilder, UserStory, Task, IncrementData } from './increment-issue-builder.js';
25
25
  import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
26
+ import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
27
+
28
+ /**
29
+ * Get environment object with GH_TOKEN for gh CLI commands.
30
+ */
31
+ function getGhEnv(): NodeJS.ProcessEnv {
32
+ const { token } = getGitHubAuthFromProject(process.cwd());
33
+ return token
34
+ ? { ...process.env, GH_TOKEN: token }
35
+ : process.env;
36
+ }
26
37
 
27
38
  interface GitHubConfig {
28
39
  owner: string;
@@ -213,7 +224,7 @@ async function createOrGetMilestone(
213
224
  const verifyResult = await execFileNoThrow('gh', [
214
225
  'api', `repos/${owner}/${repo}/milestones/${existingMilestone}`,
215
226
  '--jq', '.number'
216
- ]);
227
+ ], { env: getGhEnv() });
217
228
  if (verifyResult.exitCode === 0) {
218
229
  return {
219
230
  number: existingMilestone,
@@ -226,7 +237,7 @@ async function createOrGetMilestone(
226
237
  const searchResult = await execFileNoThrow('gh', [
227
238
  'api', `repos/${owner}/${repo}/milestones`,
228
239
  '--jq', `.[] | select(.title | contains("${featureId}")) | .number`
229
- ]);
240
+ ], { env: getGhEnv() });
230
241
 
231
242
  if (searchResult.exitCode === 0 && searchResult.stdout.trim()) {
232
243
  const milestoneNumber = parseInt(searchResult.stdout.trim().split('\n')[0], 10);
@@ -244,7 +255,7 @@ async function createOrGetMilestone(
244
255
  '-f', `title=${milestoneTitle}`,
245
256
  '-f', `description=Feature milestone for ${featureId}`,
246
257
  '--jq', '.number'
247
- ]);
258
+ ], { env: getGhEnv() });
248
259
 
249
260
  if (createResult.exitCode !== 0) {
250
261
  throw new Error(`Failed to create milestone: ${createResult.stderr || createResult.stdout}`);
@@ -269,12 +280,34 @@ function buildUserStoryIssueBody(
269
280
  const incrementId = incrementData.frontmatter.increment;
270
281
  let body = '';
271
282
 
272
- // Header with metadata
273
- body += `**Feature**: ${incrementData.frontmatter.feature_id || 'N/A'}\n`;
274
- body += `**Status**: ${story.acceptanceCriteria.every(ac => ac.completed) ? 'complete' : 'in-progress'}\n`;
275
- body += `**Priority**: ${story.priority || incrementData.frontmatter.priority || 'P2'}\n`;
283
+ // REMOVED: Metadata header (Feature, Status, Priority)
284
+ // WHY: GitHub has NATIVE fields for this (labels, milestones)
285
+ // Body should contain ONLY actual work content (ACs, tasks, user story)
286
+ // See: .specweave/docs/internal/troubleshooting/CRITICAL-remove-metadata-header-from-github-issues.md
276
287
 
277
- body += `\n---\n\n`;
288
+ // Progress section (consistency with user-story-issue-builder.ts)
289
+ const completedACs = story.acceptanceCriteria.filter(ac => ac.completed).length;
290
+ const totalACs = story.acceptanceCriteria.length;
291
+ const storyTasks = tasks.filter(t =>
292
+ t.userStories.includes(story.id) ||
293
+ t.userStories.some(us => us.includes(story.id.replace('US-', '')))
294
+ );
295
+ const completedTasks = storyTasks.filter(t => t.completed).length;
296
+ const totalTasks = storyTasks.length;
297
+ const overallPercentage = (totalACs + totalTasks) > 0
298
+ ? Math.round(((completedACs + completedTasks) / (totalACs + totalTasks)) * 100)
299
+ : 0;
300
+
301
+ body += `## Progress\n\n`;
302
+ body += `**Acceptance Criteria**: ${completedACs}/${totalACs} (${totalACs > 0 ? Math.round((completedACs / totalACs) * 100) : 0}%)\n`;
303
+ body += `**Tasks**: ${completedTasks}/${totalTasks} (${totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0}%)\n`;
304
+ body += `**Overall**: ${overallPercentage}%\n\n`;
305
+
306
+ // Progress bar
307
+ const filledBlocks = Math.floor(overallPercentage / 5);
308
+ const emptyBlocks = 20 - filledBlocks;
309
+ body += `${'█'.repeat(filledBlocks)}${'░'.repeat(emptyBlocks)} ${overallPercentage}%\n\n`;
310
+ body += `---\n\n`;
278
311
 
279
312
  // User Story description
280
313
  body += `## User Story\n\n`;
@@ -307,12 +340,7 @@ function buildUserStoryIssueBody(
307
340
 
308
341
  body += `---\n\n`;
309
342
 
310
- // Tasks for this user story
311
- const storyTasks = tasks.filter(t =>
312
- t.userStories.includes(story.id) ||
313
- t.userStories.some(us => us.includes(story.id.replace('US-', '')))
314
- );
315
-
343
+ // Tasks for this user story (already calculated above for Progress section)
316
344
  if (storyTasks.length > 0) {
317
345
  body += `## Implementation Tasks\n\n`;
318
346
  const completedTasks = storyTasks.filter(t => t.completed).length;
@@ -369,7 +397,7 @@ async function syncUserStoryIssue(
369
397
  '--repo', `${owner}/${repo}`,
370
398
  '--title', title,
371
399
  '--body', body
372
- ]);
400
+ ], { env: getGhEnv() });
373
401
 
374
402
  if (updateResult.exitCode !== 0) {
375
403
  throw new Error(`Failed to update issue #${existingIssueNumber}: ${updateResult.stderr}`);
@@ -394,7 +422,7 @@ async function syncUserStoryIssue(
394
422
  createArgs.push('--label', labels.join(','));
395
423
  }
396
424
 
397
- const createResult = await execFileNoThrow('gh', createArgs);
425
+ const createResult = await execFileNoThrow('gh', createArgs, { env: getGhEnv() });
398
426
 
399
427
  if (createResult.exitCode !== 0) {
400
428
  throw new Error(`Failed to create issue: ${createResult.stderr || createResult.stdout}`);
@@ -1,6 +1,11 @@
1
1
  import * as fs from "../../../src/utils/fs-native.js";
2
2
  import path from "path";
3
3
  import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
4
+ import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
5
+ function getGhEnv() {
6
+ const { token } = getGitHubAuthFromProject(process.cwd());
7
+ return token ? { ...process.env, GH_TOKEN: token } : process.env;
8
+ }
4
9
  async function updateIssueLivingDocs(issueNumber, livingDocs, owner, repo) {
5
10
  console.log(`\u{1F4DD} Updating GitHub issue #${issueNumber} with living docs...`);
6
11
  const currentBody = await getIssueBody(issueNumber, owner, repo);
@@ -166,7 +171,7 @@ async function getIssueBody(issueNumber, owner, repo) {
166
171
  "body",
167
172
  "-q",
168
173
  ".body"
169
- ]);
174
+ ], { env: getGhEnv() });
170
175
  if (result.exitCode !== 0) {
171
176
  throw new Error(`Failed to get issue body: ${result.stderr}`);
172
177
  }
@@ -181,7 +186,7 @@ async function updateIssueBody(issueNumber, body, owner, repo) {
181
186
  `${owner}/${repo}`,
182
187
  "--body",
183
188
  body
184
- ]);
189
+ ], { env: getGhEnv() });
185
190
  if (result.exitCode !== 0) {
186
191
  throw new Error(`Failed to update issue body: ${result.stderr}`);
187
192
  }
@@ -195,7 +200,7 @@ async function postComment(issueNumber, comment, owner, repo) {
195
200
  `${owner}/${repo}`,
196
201
  "--body",
197
202
  comment
198
- ]);
203
+ ], { env: getGhEnv() });
199
204
  if (result.exitCode !== 0) {
200
205
  throw new Error(`Failed to post comment: ${result.stderr}`);
201
206
  }
@@ -10,6 +10,19 @@
10
10
  import * as fs from '../../../src/utils/fs-native.js';
11
11
  import path from 'path';
12
12
  import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
13
+ import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
14
+
15
+ /**
16
+ * Get environment object with GH_TOKEN for gh CLI commands.
17
+ * This ensures the token from .env is passed to all gh operations,
18
+ * regardless of `gh auth` status.
19
+ */
20
+ function getGhEnv(): NodeJS.ProcessEnv {
21
+ const { token } = getGitHubAuthFromProject(process.cwd());
22
+ return token
23
+ ? { ...process.env, GH_TOKEN: token }
24
+ : process.env;
25
+ }
13
26
 
14
27
  export interface LivingDocsSection {
15
28
  specs: string[];
@@ -296,7 +309,7 @@ async function getIssueBody(
296
309
  'body',
297
310
  '-q',
298
311
  '.body'
299
- ]);
312
+ ], { env: getGhEnv() });
300
313
 
301
314
  if (result.exitCode !== 0) {
302
315
  throw new Error(`Failed to get issue body: ${result.stderr}`);
@@ -322,7 +335,7 @@ async function updateIssueBody(
322
335
  `${owner}/${repo}`,
323
336
  '--body',
324
337
  body
325
- ]);
338
+ ], { env: getGhEnv() });
326
339
 
327
340
  if (result.exitCode !== 0) {
328
341
  throw new Error(`Failed to update issue body: ${result.stderr}`);
@@ -346,7 +359,7 @@ async function postComment(
346
359
  `${owner}/${repo}`,
347
360
  '--body',
348
361
  comment
349
- ]);
362
+ ], { env: getGhEnv() });
350
363
 
351
364
  if (result.exitCode !== 0) {
352
365
  throw new Error(`Failed to post comment: ${result.stderr}`);
@@ -2,11 +2,21 @@ import { SpecMetadataManager } from "../../../src/core/specs/spec-metadata-manag
2
2
  import { SpecParser } from "../../../src/core/specs/spec-parser.js";
3
3
  import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
4
4
  import { ProjectContextManager } from "../../../src/core/sync/project-context.js";
5
+ import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
5
6
  class GitHubSpecSync {
6
7
  constructor(projectRoot = process.cwd()) {
7
8
  this.projectRoot = projectRoot;
8
9
  this.specManager = new SpecMetadataManager(projectRoot);
9
10
  this.projectContextManager = new ProjectContextManager(projectRoot);
11
+ this.token = getGitHubAuthFromProject(projectRoot).token;
12
+ }
13
+ /**
14
+ * Get environment object with GH_TOKEN for gh CLI commands.
15
+ * This ensures the token from .env is passed to all gh operations,
16
+ * regardless of `gh auth` status.
17
+ */
18
+ getGhEnv() {
19
+ return this.token ? { ...process.env, GH_TOKEN: this.token } : process.env;
10
20
  }
11
21
  /**
12
22
  * Detect project from spec file path
@@ -408,7 +418,7 @@ ${acList}
408
418
  "-f",
409
419
  `query=${query}`,
410
420
  ...Object.entries(variables).flatMap(([key, value]) => ["-F", `${key}=${value}`])
411
- ]);
421
+ ], { env: this.getGhEnv() });
412
422
  if (result.error) {
413
423
  throw new Error(`GraphQL query failed: ${result.error}`);
414
424
  }
@@ -457,7 +467,7 @@ ${acList}
457
467
  "number,title,body,state,labels",
458
468
  "--limit",
459
469
  "1"
460
- ]);
470
+ ], { env: this.getGhEnv() });
461
471
  if (result.error || !result.stdout) {
462
472
  return null;
463
473
  }
@@ -481,7 +491,7 @@ ${acList}
481
491
  issue.labels.join(","),
482
492
  "--json",
483
493
  "number,title,body,state"
484
- ]);
494
+ ], { env: this.getGhEnv() });
485
495
  if (result.error) {
486
496
  throw new Error(`Failed to create issue: ${result.error}`);
487
497
  }
@@ -503,7 +513,7 @@ ${acList}
503
513
  } else if (updates.state === "open") {
504
514
  args.push("--state", "open");
505
515
  }
506
- const result = await execFileNoThrow("gh", args);
516
+ const result = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
507
517
  if (result.error) {
508
518
  throw new Error(`Failed to update issue #${issueNumber}: ${result.error}`);
509
519
  }
@@ -37,6 +37,7 @@ import {
37
37
  import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
38
38
  import { ProjectContextManager } from '../../../src/core/sync/project-context.js';
39
39
  import { SyncProfile, GitHubConfig } from '../../../src/core/types/sync-profile.js';
40
+ import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
40
41
 
41
42
  export interface GitHubProject {
42
43
  id: number;
@@ -89,11 +90,25 @@ export class GitHubSpecSync {
89
90
  private specManager: SpecMetadataManager;
90
91
  private projectContextManager: ProjectContextManager;
91
92
  private projectRoot: string;
93
+ private token?: string;
92
94
 
93
95
  constructor(projectRoot: string = process.cwd()) {
94
96
  this.projectRoot = projectRoot;
95
97
  this.specManager = new SpecMetadataManager(projectRoot);
96
98
  this.projectContextManager = new ProjectContextManager(projectRoot);
99
+ // Get token from .env for gh CLI passthrough
100
+ this.token = getGitHubAuthFromProject(projectRoot).token;
101
+ }
102
+
103
+ /**
104
+ * Get environment object with GH_TOKEN for gh CLI commands.
105
+ * This ensures the token from .env is passed to all gh operations,
106
+ * regardless of `gh auth` status.
107
+ */
108
+ private getGhEnv(): NodeJS.ProcessEnv {
109
+ return this.token
110
+ ? { ...process.env, GH_TOKEN: this.token }
111
+ : process.env;
97
112
  }
98
113
 
99
114
  /**
@@ -618,7 +633,7 @@ ${acList}
618
633
  '-f',
619
634
  `query=${query}`,
620
635
  ...Object.entries(variables).flatMap(([key, value]) => ['-F', `${key}=${value}`])
621
- ]);
636
+ ], { env: this.getGhEnv() });
622
637
 
623
638
  if (result.error) {
624
639
  throw new Error(`GraphQL query failed: ${result.error}`);
@@ -682,7 +697,7 @@ ${acList}
682
697
  'number,title,body,state,labels',
683
698
  '--limit',
684
699
  '1'
685
- ]);
700
+ ], { env: this.getGhEnv() });
686
701
 
687
702
  if (result.error || !result.stdout) {
688
703
  return null;
@@ -713,7 +728,7 @@ ${acList}
713
728
  issue.labels.join(','),
714
729
  '--json',
715
730
  'number,title,body,state'
716
- ]);
731
+ ], { env: this.getGhEnv() });
717
732
 
718
733
  if (result.error) {
719
734
  throw new Error(`Failed to create issue: ${result.error}`);
@@ -747,7 +762,7 @@ ${acList}
747
762
  args.push('--state', 'open');
748
763
  }
749
764
 
750
- const result = await execFileNoThrow('gh', args);
765
+ const result = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
751
766
 
752
767
  if (result.error) {
753
768
  throw new Error(`Failed to update issue #${issueNumber}: ${result.error}`);
@@ -5,6 +5,11 @@ import {
5
5
  loadIncrementMetadata,
6
6
  detectRepo
7
7
  } from "./github-issue-updater.js";
8
+ import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
9
+ function getGhEnv() {
10
+ const { token } = getGitHubAuthFromProject(process.cwd());
11
+ return token ? { ...process.env, GH_TOKEN: token } : process.env;
12
+ }
8
13
  async function syncFromGitHub(incrementId) {
9
14
  console.log(`
10
15
  \u{1F504} Syncing from GitHub for increment: ${incrementId}`);
@@ -47,7 +52,7 @@ async function fetchGitHubIssueState(issueNumber, owner, repo) {
47
52
  `${owner}/${repo}`,
48
53
  "--json",
49
54
  "number,title,body,state,labels,assignees,milestone,updatedAt"
50
- ]);
55
+ ], { env: getGhEnv() });
51
56
  if (issueResult.exitCode !== 0) {
52
57
  throw new Error(`Failed to fetch issue: ${issueResult.stderr}`);
53
58
  }
@@ -57,7 +62,7 @@ async function fetchGitHubIssueState(issueNumber, owner, repo) {
57
62
  `repos/${owner}/${repo}/issues/${issueNumber}/comments`,
58
63
  "--jq",
59
64
  ".[] | {id: .id, author: .user.login, body: .body, created_at: .created_at}"
60
- ]);
65
+ ], { env: getGhEnv() });
61
66
  let comments = [];
62
67
  if (commentsResult.exitCode === 0 && commentsResult.stdout.trim()) {
63
68
  const commentLines = commentsResult.stdout.trim().split("\n");
@@ -108,7 +113,7 @@ async function resolveStatusConflict(incrementId, metadata, githubState) {
108
113
  if (githubStatus === "closed" && specweaveStatus === "active") {
109
114
  console.log(`
110
115
  \u26A0\uFE0F **CONFLICT**: GitHub issue closed but SpecWeave increment still active!`);
111
- console.log(` Recommendation: Run /specweave:done ${incrementId} to close increment`);
116
+ console.log(` Recommendation: Run /sw:done ${incrementId} to close increment`);
112
117
  console.log(` Or reopen issue on GitHub if work is not complete`);
113
118
  }
114
119
  if (githubStatus === "open" && specweaveStatus === "completed") {
@@ -24,6 +24,17 @@ import {
24
24
  IncrementMetadata,
25
25
  detectRepo
26
26
  } from './github-issue-updater.js';
27
+ import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
28
+
29
+ /**
30
+ * Get environment object with GH_TOKEN for gh CLI commands.
31
+ */
32
+ function getGhEnv(): NodeJS.ProcessEnv {
33
+ const { token } = getGitHubAuthFromProject(process.cwd());
34
+ return token
35
+ ? { ...process.env, GH_TOKEN: token }
36
+ : process.env;
37
+ }
27
38
 
28
39
  export interface GitHubIssueState {
29
40
  number: number;
@@ -124,7 +135,7 @@ async function fetchGitHubIssueState(
124
135
  `${owner}/${repo}`,
125
136
  '--json',
126
137
  'number,title,body,state,labels,assignees,milestone,updatedAt'
127
- ]);
138
+ ], { env: getGhEnv() });
128
139
 
129
140
  if (issueResult.exitCode !== 0) {
130
141
  throw new Error(`Failed to fetch issue: ${issueResult.stderr}`);
@@ -138,7 +149,7 @@ async function fetchGitHubIssueState(
138
149
  `repos/${owner}/${repo}/issues/${issueNumber}/comments`,
139
150
  '--jq',
140
151
  '.[] | {id: .id, author: .user.login, body: .body, created_at: .created_at}'
141
- ]);
152
+ ], { env: getGhEnv() });
142
153
 
143
154
  let comments: GitHubComment[] = [];
144
155
  if (commentsResult.exitCode === 0 && commentsResult.stdout.trim()) {
@@ -222,7 +233,7 @@ async function resolveStatusConflict(
222
233
  // GitHub closed but SpecWeave active
223
234
  if (githubStatus === 'closed' && specweaveStatus === 'active') {
224
235
  console.log(`\n⚠️ **CONFLICT**: GitHub issue closed but SpecWeave increment still active!`);
225
- console.log(` Recommendation: Run /specweave:done ${incrementId} to close increment`);
236
+ console.log(` Recommendation: Run /sw:done ${incrementId} to close increment`);
226
237
  console.log(` Or reopen issue on GitHub if work is not complete`);
227
238
  }
228
239
 
@@ -7,6 +7,11 @@ import {
7
7
  postScopeChangeComment
8
8
  } from "./github-issue-updater.js";
9
9
  import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
10
+ import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
11
+ function getGhEnv() {
12
+ const { token } = getGitHubAuthFromProject(process.cwd());
13
+ return token ? { ...process.env, GH_TOKEN: token } : process.env;
14
+ }
10
15
  async function syncIncrementChanges(incrementId, changedFile) {
11
16
  console.log(`
12
17
  \u{1F504} Syncing ${changedFile} changes to GitHub...`);
@@ -181,7 +186,7 @@ async function updateIssueTitle(issueNumber, title, owner, repo) {
181
186
  `${owner}/${repo}`,
182
187
  "--title",
183
188
  title
184
- ]);
189
+ ], { env: getGhEnv() });
185
190
  if (result.exitCode !== 0) {
186
191
  console.warn(`\u26A0\uFE0F Could not update issue title: ${result.stderr}`);
187
192
  }
@@ -197,7 +202,7 @@ async function updateIssueTaskChecklist(issueNumber, tasks, owner, repo) {
197
202
  "body",
198
203
  "-q",
199
204
  ".body"
200
- ]);
205
+ ], { env: getGhEnv() });
201
206
  if (result.exitCode !== 0) {
202
207
  throw new Error(`Failed to get issue body: ${result.stderr}`);
203
208
  }
@@ -224,7 +229,7 @@ ${taskChecklist}
224
229
  `${owner}/${repo}`,
225
230
  "--body",
226
231
  updatedBody
227
- ]);
232
+ ], { env: getGhEnv() });
228
233
  if (updateResult.exitCode !== 0) {
229
234
  throw new Error(`Failed to update issue body: ${updateResult.stderr}`);
230
235
  }
@@ -238,7 +243,7 @@ async function postComment(issueNumber, comment, owner, repo) {
238
243
  `${owner}/${repo}`,
239
244
  "--body",
240
245
  comment
241
- ]);
246
+ ], { env: getGhEnv() });
242
247
  if (result.exitCode !== 0) {
243
248
  throw new Error(`Failed to post comment: ${result.stderr}`);
244
249
  }
@@ -16,6 +16,17 @@ import {
16
16
  postScopeChangeComment
17
17
  } from './github-issue-updater.js';
18
18
  import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
19
+ import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
20
+
21
+ /**
22
+ * Get environment object with GH_TOKEN for gh CLI commands.
23
+ */
24
+ function getGhEnv(): NodeJS.ProcessEnv {
25
+ const { token } = getGitHubAuthFromProject(process.cwd());
26
+ return token
27
+ ? { ...process.env, GH_TOKEN: token }
28
+ : process.env;
29
+ }
19
30
 
20
31
  export interface SpecChanges {
21
32
  added: string[];
@@ -289,7 +300,7 @@ async function updateIssueTitle(
289
300
  `${owner}/${repo}`,
290
301
  '--title',
291
302
  title
292
- ]);
303
+ ], { env: getGhEnv() });
293
304
 
294
305
  if (result.exitCode !== 0) {
295
306
  console.warn(`⚠️ Could not update issue title: ${result.stderr}`);
@@ -316,7 +327,7 @@ async function updateIssueTaskChecklist(
316
327
  'body',
317
328
  '-q',
318
329
  '.body'
319
- ]);
330
+ ], { env: getGhEnv() });
320
331
 
321
332
  if (result.exitCode !== 0) {
322
333
  throw new Error(`Failed to get issue body: ${result.stderr}`);
@@ -348,7 +359,7 @@ async function updateIssueTaskChecklist(
348
359
  `${owner}/${repo}`,
349
360
  '--body',
350
361
  updatedBody
351
- ]);
362
+ ], { env: getGhEnv() });
352
363
 
353
364
  if (updateResult.exitCode !== 0) {
354
365
  throw new Error(`Failed to update issue body: ${updateResult.stderr}`);
@@ -372,7 +383,7 @@ async function postComment(
372
383
  `${owner}/${repo}`,
373
384
  '--body',
374
385
  comment
375
- ]);
386
+ ], { env: getGhEnv() });
376
387
 
377
388
  if (result.exitCode !== 0) {
378
389
  throw new Error(`Failed to post comment: ${result.stderr}`);