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
@@ -11,6 +11,17 @@ class GitHubClientV2 {
11
11
  this.owner = config.owner;
12
12
  this.repo = config.repo;
13
13
  this.fullRepo = `${this.owner}/${this.repo}`;
14
+ this.token = config.token;
15
+ }
16
+ /**
17
+ * Get environment object with GH_TOKEN for gh CLI commands.
18
+ * This ensures the token from .env is passed to all gh operations,
19
+ * regardless of `gh auth` status.
20
+ *
21
+ * @returns Environment object with GH_TOKEN set if token available
22
+ */
23
+ getGhEnv() {
24
+ return this.token ? { ...process.env, GH_TOKEN: this.token } : process.env;
14
25
  }
15
26
  /**
16
27
  * Create client from owner/repo directly
@@ -110,7 +121,7 @@ class GitHubClientV2 {
110
121
  if (description) {
111
122
  args.splice(4, 0, "-f", `description=${description}`);
112
123
  }
113
- const result = await execFileNoThrow("gh", args);
124
+ const result = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
114
125
  if (result.exitCode !== 0) {
115
126
  throw new Error(`Failed to create milestone: ${result.stderr || result.stdout}`);
116
127
  }
@@ -125,7 +136,7 @@ class GitHubClientV2 {
125
136
  `repos/${this.fullRepo}/milestones`,
126
137
  "--jq",
127
138
  `.[] | select(.title=="${title}") | {number: .number, title: .title, description: .description, state: .state}`
128
- ]);
139
+ ], { env: this.getGhEnv() });
129
140
  if (result.exitCode !== 0 || !result.stdout.trim()) {
130
141
  return null;
131
142
  }
@@ -160,7 +171,7 @@ GitHub issues MUST use living docs format:
160
171
  WHY: Correct data flow is: Increment \u2192 Living Docs \u2192 GitHub
161
172
  Living docs are the source of truth for GitHub sync.
162
173
 
163
- FIX: Use /specweave:sync-docs to generate living docs, then sync to GitHub.`
174
+ FIX: Use /sw:sync-docs to generate living docs, then sync to GitHub.`
164
175
  );
165
176
  }
166
177
  const typePrefixPattern = /^\[(BUG|HOTFIX|FEATURE|DOCS|REFACTOR|CHORE|EXPERIMENT|Bug|Hotfix|Feature|Docs|Refactor|Chore|Experiment)\]/i;
@@ -232,7 +243,7 @@ FIX:
232
243
  `repos/${this.fullRepo}/milestones/${milestone}`,
233
244
  "--jq",
234
245
  ".title"
235
- ]);
246
+ ], { env: this.getGhEnv() });
236
247
  if (msResult.exitCode === 0 && msResult.stdout.trim()) {
237
248
  args.push("--milestone", msResult.stdout.trim());
238
249
  }
@@ -240,7 +251,7 @@ FIX:
240
251
  args.push("--milestone", milestone);
241
252
  }
242
253
  }
243
- const createResult = await execFileNoThrow("gh", args);
254
+ const createResult = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
244
255
  if (createResult.exitCode !== 0) {
245
256
  throw new Error(
246
257
  `Failed to create epic issue: ${createResult.stderr || createResult.stdout}`
@@ -274,7 +285,7 @@ ${body}`;
274
285
  this.fullRepo,
275
286
  "--json",
276
287
  "number,title,body,state,url,labels,milestone"
277
- ]);
288
+ ], { env: this.getGhEnv() });
278
289
  if (result.exitCode !== 0) {
279
290
  throw new Error(
280
291
  `Failed to get issue #${issueNumber}: ${result.stderr || result.stdout}`
@@ -313,7 +324,7 @@ ${body}`;
313
324
  if (includeClosedIssues) {
314
325
  args.push("--state", "all");
315
326
  }
316
- const result = await execFileNoThrow("gh", args);
327
+ const result = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
317
328
  if (result.exitCode !== 0) {
318
329
  return null;
319
330
  }
@@ -344,7 +355,7 @@ ${body}`;
344
355
  this.fullRepo,
345
356
  "--body",
346
357
  newBody
347
- ]);
358
+ ], { env: this.getGhEnv() });
348
359
  if (result.exitCode !== 0) {
349
360
  throw new Error(
350
361
  `Failed to update issue #${issueNumber}: ${result.stderr || result.stdout}`
@@ -364,7 +375,7 @@ ${body}`;
364
375
  String(issueNumber),
365
376
  "--repo",
366
377
  this.fullRepo
367
- ]);
378
+ ], { env: this.getGhEnv() });
368
379
  if (result.exitCode !== 0) {
369
380
  throw new Error(
370
381
  `Failed to close issue #${issueNumber}: ${result.stderr || result.stdout}`
@@ -387,7 +398,7 @@ ${body}`;
387
398
  String(issueNumber),
388
399
  "--repo",
389
400
  this.fullRepo
390
- ]);
401
+ ], { env: this.getGhEnv() });
391
402
  if (result.exitCode !== 0) {
392
403
  throw new Error(
393
404
  `Failed to reopen issue #${issueNumber}: ${result.stderr || result.stdout}`
@@ -406,7 +417,7 @@ ${body}`;
406
417
  this.fullRepo,
407
418
  "--body",
408
419
  comment
409
- ]);
420
+ ], { env: this.getGhEnv() });
410
421
  if (result.exitCode !== 0) {
411
422
  throw new Error(
412
423
  `Failed to add comment to issue #${issueNumber}: ${result.stderr || result.stdout}`
@@ -425,7 +436,7 @@ ${body}`;
425
436
  "--jq",
426
437
  ".[-1] | {body: .body, author: .user.login}"
427
438
  // Get last comment only
428
- ]);
439
+ ], { env: this.getGhEnv() });
429
440
  if (result.exitCode !== 0) {
430
441
  return null;
431
442
  }
@@ -453,7 +464,7 @@ ${body}`;
453
464
  for (const label of labels) {
454
465
  args.push("--add-label", label);
455
466
  }
456
- const result = await execFileNoThrow("gh", args);
467
+ const result = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
457
468
  if (result.exitCode !== 0) {
458
469
  throw new Error(
459
470
  `Failed to add labels to issue #${issueNumber}: ${result.stderr || result.stdout}`
@@ -482,7 +493,7 @@ ${body}`;
482
493
  // Include both open and closed
483
494
  "--limit",
484
495
  "100"
485
- ]);
496
+ ], { env: this.getGhEnv() });
486
497
  if (result.exitCode !== 0 || !result.stdout) {
487
498
  return [];
488
499
  }
@@ -510,7 +521,7 @@ ${body}`;
510
521
  "--limit",
511
522
  "1000"
512
523
  // Max results
513
- ]);
524
+ ], { env: this.getGhEnv() });
514
525
  if (result.exitCode !== 0) {
515
526
  throw new Error(
516
527
  `Failed to list issues: ${result.stderr || result.stdout}`
@@ -578,7 +589,7 @@ ${body}`;
578
589
  "rate_limit",
579
590
  "--jq",
580
591
  ".rate | {remaining: .remaining, limit: .limit, reset: .reset}"
581
- ]);
592
+ ], { env: this.getGhEnv() });
582
593
  if (result.exitCode !== 0) {
583
594
  throw new Error(
584
595
  `Failed to check rate limit: ${result.stderr || result.stdout}`
@@ -669,7 +680,7 @@ ${body}`;
669
680
  "per_page=100",
670
681
  "--jq",
671
682
  jqFilter
672
- ]);
683
+ ], { env: this.getGhEnv() });
673
684
  if (result.exitCode !== 0) {
674
685
  throw new Error(
675
686
  `Failed to fetch recent changes: ${result.stderr || result.stdout}`
@@ -717,7 +728,7 @@ ${body}`;
717
728
  `per_page=${perPage}`,
718
729
  "--jq",
719
730
  ".[].{event, created_at, actor: .actor.login}"
720
- ]);
731
+ ], { env: this.getGhEnv() });
721
732
  if (result.exitCode !== 0) {
722
733
  throw new Error(
723
734
  `Failed to get issue events: ${result.stderr || result.stdout}`
@@ -16,6 +16,7 @@ export class GitHubClientV2 {
16
16
  private owner: string;
17
17
  private repo: string;
18
18
  private fullRepo: string;
19
+ private token?: string;
19
20
 
20
21
  /**
21
22
  * Create GitHub client from sync profile
@@ -29,6 +30,20 @@ export class GitHubClientV2 {
29
30
  this.owner = config.owner;
30
31
  this.repo = config.repo;
31
32
  this.fullRepo = `${this.owner}/${this.repo}`;
33
+ this.token = config.token;
34
+ }
35
+
36
+ /**
37
+ * Get environment object with GH_TOKEN for gh CLI commands.
38
+ * This ensures the token from .env is passed to all gh operations,
39
+ * regardless of `gh auth` status.
40
+ *
41
+ * @returns Environment object with GH_TOKEN set if token available
42
+ */
43
+ private getGhEnv(): NodeJS.ProcessEnv {
44
+ return this.token
45
+ ? { ...process.env, GH_TOKEN: this.token }
46
+ : process.env;
32
47
  }
33
48
 
34
49
  /**
@@ -159,7 +174,7 @@ export class GitHubClientV2 {
159
174
  args.splice(4, 0, '-f', `description=${description}`);
160
175
  }
161
176
 
162
- const result = await execFileNoThrow('gh', args);
177
+ const result = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
163
178
 
164
179
  if (result.exitCode !== 0) {
165
180
  throw new Error(`Failed to create milestone: ${result.stderr || result.stdout}`);
@@ -179,7 +194,7 @@ export class GitHubClientV2 {
179
194
  `repos/${this.fullRepo}/milestones`,
180
195
  '--jq',
181
196
  `.[] | select(.title=="${title}") | {number: .number, title: .title, description: .description, state: .state}`,
182
- ]);
197
+ ], { env: this.getGhEnv() });
183
198
 
184
199
  if (result.exitCode !== 0 || !result.stdout.trim()) {
185
200
  return null;
@@ -216,7 +231,7 @@ export class GitHubClientV2 {
216
231
  ` ❌ WRONG: "[Increment XXXX] Title" (old format)\n\n` +
217
232
  `WHY: Correct data flow is: Increment → Living Docs → GitHub\n` +
218
233
  ` Living docs are the source of truth for GitHub sync.\n\n` +
219
- `FIX: Use /specweave:sync-docs to generate living docs, then sync to GitHub.`
234
+ `FIX: Use /sw:sync-docs to generate living docs, then sync to GitHub.`
220
235
  );
221
236
  }
222
237
 
@@ -313,7 +328,7 @@ export class GitHubClientV2 {
313
328
  `repos/${this.fullRepo}/milestones/${milestone}`,
314
329
  '--jq',
315
330
  '.title'
316
- ]);
331
+ ], { env: this.getGhEnv() });
317
332
 
318
333
  if (msResult.exitCode === 0 && msResult.stdout.trim()) {
319
334
  args.push('--milestone', msResult.stdout.trim());
@@ -325,7 +340,7 @@ export class GitHubClientV2 {
325
340
  }
326
341
 
327
342
  // Create issue (returns URL)
328
- const createResult = await execFileNoThrow('gh', args);
343
+ const createResult = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
329
344
 
330
345
  if (createResult.exitCode !== 0) {
331
346
  throw new Error(
@@ -372,7 +387,7 @@ export class GitHubClientV2 {
372
387
  this.fullRepo,
373
388
  '--json',
374
389
  'number,title,body,state,url,labels,milestone',
375
- ]);
390
+ ], { env: this.getGhEnv() });
376
391
 
377
392
  if (result.exitCode !== 0) {
378
393
  throw new Error(
@@ -420,7 +435,7 @@ export class GitHubClientV2 {
420
435
  args.push('--state', 'all');
421
436
  }
422
437
 
423
- const result = await execFileNoThrow('gh', args);
438
+ const result = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
424
439
 
425
440
  if (result.exitCode !== 0) {
426
441
  // Search failed, return null (treat as not found)
@@ -457,7 +472,7 @@ export class GitHubClientV2 {
457
472
  this.fullRepo,
458
473
  '--body',
459
474
  newBody,
460
- ]);
475
+ ], { env: this.getGhEnv() });
461
476
 
462
477
  if (result.exitCode !== 0) {
463
478
  throw new Error(
@@ -480,7 +495,7 @@ export class GitHubClientV2 {
480
495
  String(issueNumber),
481
496
  '--repo',
482
497
  this.fullRepo,
483
- ]);
498
+ ], { env: this.getGhEnv() });
484
499
 
485
500
  if (result.exitCode !== 0) {
486
501
  throw new Error(
@@ -506,7 +521,7 @@ export class GitHubClientV2 {
506
521
  String(issueNumber),
507
522
  '--repo',
508
523
  this.fullRepo,
509
- ]);
524
+ ], { env: this.getGhEnv() });
510
525
 
511
526
  if (result.exitCode !== 0) {
512
527
  throw new Error(
@@ -527,7 +542,7 @@ export class GitHubClientV2 {
527
542
  this.fullRepo,
528
543
  '--body',
529
544
  comment,
530
- ]);
545
+ ], { env: this.getGhEnv() });
531
546
 
532
547
  if (result.exitCode !== 0) {
533
548
  throw new Error(
@@ -548,7 +563,7 @@ export class GitHubClientV2 {
548
563
  `repos/${this.fullRepo}/issues/${issueNumber}/comments`,
549
564
  '--jq',
550
565
  '.[-1] | {body: .body, author: .user.login}', // Get last comment only
551
- ]);
566
+ ], { env: this.getGhEnv() });
552
567
 
553
568
  if (result.exitCode !== 0) {
554
569
  // If error, return null (no comments or API error)
@@ -585,7 +600,7 @@ export class GitHubClientV2 {
585
600
  args.push('--add-label', label);
586
601
  }
587
602
 
588
- const result = await execFileNoThrow('gh', args);
603
+ const result = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
589
604
 
590
605
  if (result.exitCode !== 0) {
591
606
  throw new Error(
@@ -623,7 +638,7 @@ export class GitHubClientV2 {
623
638
  'all', // Include both open and closed
624
639
  '--limit',
625
640
  '100',
626
- ]);
641
+ ], { env: this.getGhEnv() });
627
642
 
628
643
  if (result.exitCode !== 0 || !result.stdout) {
629
644
  return [];
@@ -661,7 +676,7 @@ export class GitHubClientV2 {
661
676
  'number,title,body,state,url,labels,milestone',
662
677
  '--limit',
663
678
  '1000', // Max results
664
- ]);
679
+ ], { env: this.getGhEnv() });
665
680
 
666
681
  if (result.exitCode !== 0) {
667
682
  throw new Error(
@@ -747,7 +762,7 @@ export class GitHubClientV2 {
747
762
  'rate_limit',
748
763
  '--jq',
749
764
  '.rate | {remaining: .remaining, limit: .limit, reset: .reset}',
750
- ]);
765
+ ], { env: this.getGhEnv() });
751
766
 
752
767
  if (result.exitCode !== 0) {
753
768
  throw new Error(
@@ -862,7 +877,7 @@ export class GitHubClientV2 {
862
877
  '-f', 'direction=desc',
863
878
  '-f', 'per_page=100',
864
879
  '--jq', jqFilter,
865
- ]);
880
+ ], { env: this.getGhEnv() });
866
881
 
867
882
  if (result.exitCode !== 0) {
868
883
  throw new Error(
@@ -916,7 +931,7 @@ export class GitHubClientV2 {
916
931
  `repos/${this.fullRepo}/issues/${issueNumber}/events`,
917
932
  '-f', `per_page=${perPage}`,
918
933
  '--jq', '.[].{event, created_at, actor: .actor.login}',
919
- ]);
934
+ ], { env: this.getGhEnv() });
920
935
 
921
936
  if (result.exitCode !== 0) {
922
937
  throw new Error(
@@ -6,6 +6,7 @@ import { UserStoryIssueBuilder } from "./user-story-issue-builder.js";
6
6
  import { CompletionCalculator } from "./completion-calculator.js";
7
7
  import { DuplicateDetector } from "./duplicate-detector.js";
8
8
  import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
9
+ import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
9
10
  const _GitHubFeatureSync = class _GitHubFeatureSync {
10
11
  // 30 seconds
11
12
  constructor(client, specsDir, projectRoot) {
@@ -13,6 +14,15 @@ const _GitHubFeatureSync = class _GitHubFeatureSync {
13
14
  this.specsDir = specsDir;
14
15
  this.projectRoot = projectRoot;
15
16
  this.calculator = new CompletionCalculator(projectRoot);
17
+ this.token = getGitHubAuthFromProject(projectRoot).token;
18
+ }
19
+ /**
20
+ * Get environment object with GH_TOKEN for gh CLI commands.
21
+ * This ensures the token from .env is passed to all gh operations,
22
+ * regardless of `gh auth` status.
23
+ */
24
+ getGhEnv() {
25
+ return this.token ? { ...process.env, GH_TOKEN: this.token } : process.env;
16
26
  }
17
27
  /**
18
28
  * Sync Feature folder to GitHub (Milestone + User Story Issues)
@@ -236,7 +246,7 @@ const _GitHubFeatureSync = class _GitHubFeatureSync {
236
246
  "repos/:owner/:repo/milestones",
237
247
  "--jq",
238
248
  `.[] | select(.title == "${title}") | {number, html_url}`
239
- ]);
249
+ ], { env: this.getGhEnv() });
240
250
  console.log(` \u{1F50D} Milestone detection: exitCode=${existingResult.exitCode}, stdout length=${existingResult.stdout.length}`);
241
251
  if (existingResult.exitCode !== 0) {
242
252
  console.log(` \u26A0\uFE0F Detection failed: ${existingResult.stderr}`);
@@ -265,7 +275,7 @@ Created: ${featureData.created}`;
265
275
  `description=${description}`,
266
276
  "-f",
267
277
  "state=open"
268
- ]);
278
+ ], { env: this.getGhEnv() });
269
279
  if (result.exitCode !== 0) {
270
280
  throw new Error(`Failed to create Milestone: ${result.stderr || result.stdout}`);
271
281
  }
@@ -293,7 +303,7 @@ Created: ${featureData.created}`;
293
303
  "--milestone",
294
304
  milestoneTitle,
295
305
  ...issueContent.labels.flatMap((label) => ["--label", label])
296
- ]);
306
+ ], { env: this.getGhEnv() });
297
307
  if (result.exitCode !== 0) {
298
308
  throw new Error(`Failed to create GitHub Issue: ${result.stderr || result.stdout}`);
299
309
  }
@@ -310,7 +320,7 @@ Created: ${featureData.created}`;
310
320
  issueNumber.toString(),
311
321
  "--comment",
312
322
  this.calculator.buildCompletionComment(completion)
313
- ]);
323
+ ], { env: this.getGhEnv() });
314
324
  console.log(
315
325
  ` \u2705 Created and verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
316
326
  );
@@ -337,7 +347,7 @@ Created: ${featureData.created}`;
337
347
  issueContent.title,
338
348
  "--body",
339
349
  issueContent.body
340
- ]);
350
+ ], { env: this.getGhEnv() });
341
351
  const completion = await this.calculator.calculateCompletion(userStoryPath);
342
352
  const issueData = await this.client.getIssue(issueNumber);
343
353
  const currentlyClosed = issueData.state === "closed";
@@ -349,7 +359,7 @@ Created: ${featureData.created}`;
349
359
  issueNumber.toString(),
350
360
  "--comment",
351
361
  this.calculator.buildCompletionComment(completion)
352
- ]);
362
+ ], { env: this.getGhEnv() });
353
363
  console.log(
354
364
  ` \u2705 Verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
355
365
  );
@@ -362,7 +372,7 @@ Created: ${featureData.created}`;
362
372
  issueNumber.toString(),
363
373
  "--comment",
364
374
  this.calculator.buildReopenComment(completion, "Work verification failed")
365
- ]);
375
+ ], { env: this.getGhEnv() });
366
376
  console.log(
367
377
  ` \u26A0\uFE0F Reopened: ${completion.blockingAcs.length + completion.blockingTasks.length} items incomplete`
368
378
  );
@@ -391,6 +401,26 @@ Created: ${featureData.created}`;
391
401
  newStatusLabel = "status:complete";
392
402
  } else if (completion.acsPercentage > 0 || completion.tasksPercentage > 0) {
393
403
  newStatusLabel = "status:active";
404
+ } else if (
405
+ // v0.35.1 FIX: For external-origin USs without ACs/tasks, use frontmatter status
406
+ // This fixes issue #889 where external USs always showed "not_started"
407
+ (completion.acsTotal === 0 || completion.acsTotal === void 0) && (completion.tasksTotal === 0 || completion.tasksTotal === void 0) && completion.frontmatterStatus
408
+ ) {
409
+ switch (completion.frontmatterStatus) {
410
+ case "complete":
411
+ case "completed":
412
+ newStatusLabel = "status:complete";
413
+ break;
414
+ case "active":
415
+ case "in-progress":
416
+ newStatusLabel = "status:active";
417
+ break;
418
+ case "planning":
419
+ case "not-started":
420
+ default:
421
+ newStatusLabel = "status:not_started";
422
+ }
423
+ console.log(` \u2139\uFE0F Using frontmatter status (no ACs/tasks): ${completion.frontmatterStatus} \u2192 ${newStatusLabel}`);
394
424
  } else {
395
425
  newStatusLabel = "status:not_started";
396
426
  }
@@ -405,7 +435,7 @@ Created: ${featureData.created}`;
405
435
  issueNumber.toString(),
406
436
  "--remove-label",
407
437
  ...statusLabels
408
- ]);
438
+ ], { env: this.getGhEnv() });
409
439
  }
410
440
  const result = await execFileNoThrow("gh", [
411
441
  "issue",
@@ -413,7 +443,7 @@ Created: ${featureData.created}`;
413
443
  issueNumber.toString(),
414
444
  "--add-label",
415
445
  newStatusLabel
416
- ]);
446
+ ], { env: this.getGhEnv() });
417
447
  if (result.exitCode === 0) {
418
448
  console.log(` \u{1F3F7}\uFE0F Updated label: ${newStatusLabel}`);
419
449
  } else {
@@ -446,7 +476,7 @@ Created: ${featureData.created}`;
446
476
  "--jq",
447
477
  ".[-1] | {body: .body, created_at: .created_at}"
448
478
  // Get last comment only
449
- ]);
479
+ ], { env: this.getGhEnv() });
450
480
  let lastCommentBody = "";
451
481
  if (commentsResult.exitCode === 0 && commentsResult.stdout.trim()) {
452
482
  try {
@@ -473,7 +503,7 @@ Created: ${featureData.created}`;
473
503
  issueNumber.toString(),
474
504
  "--body",
475
505
  newCommentBody
476
- ]);
506
+ ], { env: this.getGhEnv() });
477
507
  console.log(
478
508
  ` \u{1F4CA} Progress: ${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks (updated)`
479
509
  );
@@ -19,6 +19,7 @@ import { UserStoryIssueBuilder } from './user-story-issue-builder.js';
19
19
  import { CompletionCalculator } from './completion-calculator.js';
20
20
  import { DuplicateDetector } from './duplicate-detector.js';
21
21
  import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
22
+ import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
22
23
 
23
24
  interface FeatureFrontmatter {
24
25
  id: string;
@@ -51,6 +52,7 @@ export class GitHubFeatureSync {
51
52
  private specsDir: string;
52
53
  private projectRoot: string;
53
54
  private calculator: CompletionCalculator;
55
+ private token?: string;
54
56
 
55
57
  // SYNC LOCK: Prevent concurrent syncs of the same feature
56
58
  // Maps featureId → last sync timestamp
@@ -62,6 +64,19 @@ export class GitHubFeatureSync {
62
64
  this.specsDir = specsDir;
63
65
  this.projectRoot = projectRoot;
64
66
  this.calculator = new CompletionCalculator(projectRoot);
67
+ // Get token from .env for gh CLI passthrough
68
+ this.token = getGitHubAuthFromProject(projectRoot).token;
69
+ }
70
+
71
+ /**
72
+ * Get environment object with GH_TOKEN for gh CLI commands.
73
+ * This ensures the token from .env is passed to all gh operations,
74
+ * regardless of `gh auth` status.
75
+ */
76
+ private getGhEnv(): NodeJS.ProcessEnv {
77
+ return this.token
78
+ ? { ...process.env, GH_TOKEN: this.token }
79
+ : process.env;
65
80
  }
66
81
 
67
82
  /**
@@ -393,7 +408,7 @@ export class GitHubFeatureSync {
393
408
  'repos/:owner/:repo/milestones',
394
409
  '--jq',
395
410
  `.[] | select(.title == "${title}") | {number, html_url}`,
396
- ]);
411
+ ], { env: this.getGhEnv() });
397
412
 
398
413
  // DEBUG: Log detection result
399
414
  console.log(` 🔍 Milestone detection: exitCode=${existingResult.exitCode}, stdout length=${existingResult.stdout.length}`);
@@ -426,7 +441,7 @@ export class GitHubFeatureSync {
426
441
  `description=${description}`,
427
442
  '-f',
428
443
  'state=open',
429
- ]);
444
+ ], { env: this.getGhEnv() });
430
445
 
431
446
  if (result.exitCode !== 0) {
432
447
  throw new Error(`Failed to create Milestone: ${result.stderr || result.stdout}`);
@@ -467,7 +482,7 @@ export class GitHubFeatureSync {
467
482
  '--milestone',
468
483
  milestoneTitle,
469
484
  ...issueContent.labels.flatMap((label) => ['--label', label]),
470
- ]);
485
+ ], { env: this.getGhEnv() });
471
486
 
472
487
  if (result.exitCode !== 0) {
473
488
  throw new Error(`Failed to create GitHub Issue: ${result.stderr || result.stdout}`);
@@ -493,7 +508,7 @@ export class GitHubFeatureSync {
493
508
  issueNumber.toString(),
494
509
  '--comment',
495
510
  this.calculator.buildCompletionComment(completion),
496
- ]);
511
+ ], { env: this.getGhEnv() });
497
512
  console.log(
498
513
  ` ✅ Created and verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
499
514
  );
@@ -535,7 +550,7 @@ export class GitHubFeatureSync {
535
550
  issueContent.title,
536
551
  '--body',
537
552
  issueContent.body,
538
- ]);
553
+ ], { env: this.getGhEnv() });
539
554
 
540
555
  // ✅ VERIFICATION GATE: Calculate ACTUAL completion from checkboxes
541
556
  const completion = await this.calculator.calculateCompletion(userStoryPath);
@@ -554,7 +569,7 @@ export class GitHubFeatureSync {
554
569
  issueNumber.toString(),
555
570
  '--comment',
556
571
  this.calculator.buildCompletionComment(completion),
557
- ]);
572
+ ], { env: this.getGhEnv() });
558
573
  console.log(
559
574
  ` ✅ Verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
560
575
  );
@@ -569,7 +584,7 @@ export class GitHubFeatureSync {
569
584
  issueNumber.toString(),
570
585
  '--comment',
571
586
  this.calculator.buildReopenComment(completion, 'Work verification failed'),
572
- ]);
587
+ ], { env: this.getGhEnv() });
573
588
  console.log(
574
589
  ` âš ī¸ Reopened: ${completion.blockingAcs.length + completion.blockingTasks.length} items incomplete`
575
590
  );
@@ -597,6 +612,9 @@ export class GitHubFeatureSync {
597
612
  overallComplete: boolean;
598
613
  acsPercentage: number;
599
614
  tasksPercentage: number;
615
+ acsTotal?: number;
616
+ tasksTotal?: number;
617
+ frontmatterStatus?: string;
600
618
  }
601
619
  ): Promise<void> {
602
620
  try {
@@ -615,6 +633,29 @@ export class GitHubFeatureSync {
615
633
  newStatusLabel = 'status:complete'; // Repository uses "complete" not "completed"
616
634
  } else if (completion.acsPercentage > 0 || completion.tasksPercentage > 0) {
617
635
  newStatusLabel = 'status:active'; // Repository uses "active" not "in-progress"
636
+ } else if (
637
+ // v0.35.1 FIX: For external-origin USs without ACs/tasks, use frontmatter status
638
+ // This fixes issue #889 where external USs always showed "not_started"
639
+ (completion.acsTotal === 0 || completion.acsTotal === undefined) &&
640
+ (completion.tasksTotal === 0 || completion.tasksTotal === undefined) &&
641
+ completion.frontmatterStatus
642
+ ) {
643
+ // Map frontmatter status to GitHub label
644
+ switch (completion.frontmatterStatus) {
645
+ case 'complete':
646
+ case 'completed':
647
+ newStatusLabel = 'status:complete';
648
+ break;
649
+ case 'active':
650
+ case 'in-progress':
651
+ newStatusLabel = 'status:active';
652
+ break;
653
+ case 'planning':
654
+ case 'not-started':
655
+ default:
656
+ newStatusLabel = 'status:not_started';
657
+ }
658
+ console.log(` â„šī¸ Using frontmatter status (no ACs/tasks): ${completion.frontmatterStatus} → ${newStatusLabel}`);
618
659
  } else {
619
660
  newStatusLabel = 'status:not_started';
620
661
  }
@@ -637,7 +678,7 @@ export class GitHubFeatureSync {
637
678
  issueNumber.toString(),
638
679
  '--remove-label',
639
680
  ...statusLabels,
640
- ]);
681
+ ], { env: this.getGhEnv() });
641
682
  }
642
683
 
643
684
  // Step 2: Add new status label
@@ -647,7 +688,7 @@ export class GitHubFeatureSync {
647
688
  issueNumber.toString(),
648
689
  '--add-label',
649
690
  newStatusLabel,
650
- ]);
691
+ ], { env: this.getGhEnv() });
651
692
 
652
693
  if (result.exitCode === 0) {
653
694
  console.log(` đŸˇī¸ Updated label: ${newStatusLabel}`);
@@ -686,7 +727,7 @@ export class GitHubFeatureSync {
686
727
  'repos/:owner/:repo/issues/' + issueNumber + '/comments',
687
728
  '--jq',
688
729
  '.[-1] | {body: .body, created_at: .created_at}', // Get last comment only
689
- ]);
730
+ ], { env: this.getGhEnv() });
690
731
 
691
732
  let lastCommentBody = '';
692
733
  if (commentsResult.exitCode === 0 && commentsResult.stdout.trim()) {
@@ -727,7 +768,7 @@ export class GitHubFeatureSync {
727
768
  issueNumber.toString(),
728
769
  '--body',
729
770
  newCommentBody,
730
- ]);
771
+ ], { env: this.getGhEnv() });
731
772
  console.log(
732
773
  ` 📊 Progress: ${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks (updated)`
733
774
  );