specweave 0.33.4 → 0.33.6

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 (719) hide show
  1. package/.claude-plugin/README.md +13 -13
  2. package/.claude-plugin/marketplace.json +26 -37
  3. package/CLAUDE.md +445 -80
  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/jobs.js +19 -2
  69. package/dist/src/cli/commands/jobs.js.map +1 -1
  70. package/dist/src/cli/commands/living-docs.d.ts +1 -0
  71. package/dist/src/cli/commands/living-docs.d.ts.map +1 -1
  72. package/dist/src/cli/commands/living-docs.js +19 -3
  73. package/dist/src/cli/commands/living-docs.js.map +1 -1
  74. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  75. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  76. package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
  77. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  78. package/dist/src/cli/commands/next-command.d.ts +1 -1
  79. package/dist/src/cli/commands/next-command.js +9 -9
  80. package/dist/src/cli/commands/next-command.js.map +1 -1
  81. package/dist/src/cli/commands/notifications.js +3 -3
  82. package/dist/src/cli/commands/notifications.js.map +1 -1
  83. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  84. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  85. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +2 -2
  86. package/dist/src/cli/commands/plan/plan-orchestrator.js +2 -2
  87. package/dist/src/cli/commands/plan/plan-validator.js +2 -2
  88. package/dist/src/cli/commands/plan/plan-validator.js.map +1 -1
  89. package/dist/src/cli/commands/plan/types.d.ts +1 -1
  90. package/dist/src/cli/commands/plan/types.js +1 -1
  91. package/dist/src/cli/commands/plan-command.d.ts +3 -3
  92. package/dist/src/cli/commands/plan-command.js +12 -12
  93. package/dist/src/cli/commands/plan-command.js.map +1 -1
  94. package/dist/src/cli/commands/project.d.ts +77 -0
  95. package/dist/src/cli/commands/project.d.ts.map +1 -0
  96. package/dist/src/cli/commands/project.js +526 -0
  97. package/dist/src/cli/commands/project.js.map +1 -0
  98. package/dist/src/cli/commands/save.d.ts +49 -0
  99. package/dist/src/cli/commands/save.d.ts.map +1 -0
  100. package/dist/src/cli/commands/save.js +583 -0
  101. package/dist/src/cli/commands/save.js.map +1 -0
  102. package/dist/src/cli/commands/sync-spec-commits.js +15 -6
  103. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  104. package/dist/src/cli/commands/sync-spec-content.js +15 -6
  105. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  106. package/dist/src/cli/helpers/init/ado-repo-cloning.js +2 -2
  107. package/dist/src/cli/helpers/init/ado-repo-cloning.js.map +1 -1
  108. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.d.ts +1 -1
  109. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js +3 -3
  110. package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js.map +1 -1
  111. package/dist/src/cli/helpers/init/brownfield-analysis.js +18 -18
  112. package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -1
  113. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
  114. package/dist/src/cli/helpers/init/directory-structure.js +3 -0
  115. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
  116. package/dist/src/cli/helpers/init/external-import-grouping.d.ts.map +1 -1
  117. package/dist/src/cli/helpers/init/external-import-grouping.js +11 -7
  118. package/dist/src/cli/helpers/init/external-import-grouping.js.map +1 -1
  119. package/dist/src/cli/helpers/init/external-import.js +18 -18
  120. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  121. package/dist/src/cli/helpers/init/github-repo-cloning.d.ts +1 -1
  122. package/dist/src/cli/helpers/init/github-repo-cloning.js +3 -3
  123. package/dist/src/cli/helpers/init/github-repo-cloning.js.map +1 -1
  124. package/dist/src/cli/helpers/init/initial-increment-generator.js +12 -12
  125. package/dist/src/cli/helpers/init/living-docs-preflight.js +5 -5
  126. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  127. package/dist/src/cli/helpers/init/next-steps.js +9 -9
  128. package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
  129. package/dist/src/cli/helpers/init/plugin-installer.js +3 -3
  130. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
  131. package/dist/src/cli/helpers/init/translation-config.js +9 -9
  132. package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
  133. package/dist/src/cli/helpers/init/types.d.ts +1 -1
  134. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  135. package/dist/src/cli/helpers/issue-tracker/ado.js +1 -1
  136. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  137. package/dist/src/cli/helpers/issue-tracker/github.js +1 -1
  138. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  139. package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
  140. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  141. package/dist/src/cli/helpers/issue-tracker/jira.js +1 -1
  142. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  143. package/dist/src/cli/update-status-line.js +1 -1
  144. package/dist/src/cli/update-status-line.js.map +1 -1
  145. package/dist/src/cli/workers/brownfield-worker.js +1 -1
  146. package/dist/src/cli/workers/brownfield-worker.js.map +1 -1
  147. package/dist/src/cli/workers/clone-worker.js +22 -5
  148. package/dist/src/cli/workers/clone-worker.js.map +1 -1
  149. package/dist/src/cli/workers/import-worker.js +1 -1
  150. package/dist/src/cli/workers/import-worker.js.map +1 -1
  151. package/dist/src/core/background/brownfield-launcher.js +4 -4
  152. package/dist/src/core/background/brownfield-launcher.js.map +1 -1
  153. package/dist/src/core/background/index.d.ts +3 -3
  154. package/dist/src/core/background/index.js +3 -3
  155. package/dist/src/core/background/job-dependency.d.ts.map +1 -1
  156. package/dist/src/core/background/job-dependency.js +1 -0
  157. package/dist/src/core/background/job-dependency.js.map +1 -1
  158. package/dist/src/core/background/job-launcher.d.ts +1 -1
  159. package/dist/src/core/background/job-launcher.js +5 -5
  160. package/dist/src/core/background/job-launcher.js.map +1 -1
  161. package/dist/src/core/background/job-manager.d.ts +8 -0
  162. package/dist/src/core/background/job-manager.d.ts.map +1 -1
  163. package/dist/src/core/background/job-manager.js +19 -1
  164. package/dist/src/core/background/job-manager.js.map +1 -1
  165. package/dist/src/core/background/types.d.ts +9 -1
  166. package/dist/src/core/background/types.d.ts.map +1 -1
  167. package/dist/src/core/background/types.js +8 -1
  168. package/dist/src/core/background/types.js.map +1 -1
  169. package/dist/src/core/brownfield/importer.js +1 -1
  170. package/dist/src/core/brownfield/importer.js.map +1 -1
  171. package/dist/src/core/config/config-manager.d.ts +7 -1
  172. package/dist/src/core/config/config-manager.d.ts.map +1 -1
  173. package/dist/src/core/config/config-manager.js +24 -2
  174. package/dist/src/core/config/config-manager.js.map +1 -1
  175. package/dist/src/core/config/single-project-migrator.d.ts +110 -0
  176. package/dist/src/core/config/single-project-migrator.d.ts.map +1 -0
  177. package/dist/src/core/config/single-project-migrator.js +179 -0
  178. package/dist/src/core/config/single-project-migrator.js.map +1 -0
  179. package/dist/src/core/config/types.d.ts +3 -3
  180. package/dist/src/core/credentials/credentials-manager.d.ts +25 -4
  181. package/dist/src/core/credentials/credentials-manager.d.ts.map +1 -1
  182. package/dist/src/core/credentials/credentials-manager.js +54 -15
  183. package/dist/src/core/credentials/credentials-manager.js.map +1 -1
  184. package/dist/src/core/deduplication/command-deduplicator.d.ts +4 -4
  185. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -1
  186. package/dist/src/core/deduplication/command-deduplicator.js +3 -3
  187. package/dist/src/core/external-tools/external-items-counter.d.ts +4 -4
  188. package/dist/src/core/external-tools/external-items-counter.js +4 -4
  189. package/dist/src/core/external-tools/external-items-display.js +4 -4
  190. package/dist/src/core/external-tools/external-items-display.js.map +1 -1
  191. package/dist/src/core/increment/completion-validator.js +3 -3
  192. package/dist/src/core/increment/completion-validator.js.map +1 -1
  193. package/dist/src/core/increment/conflict-resolver.js +2 -2
  194. package/dist/src/core/increment/conflict-resolver.js.map +1 -1
  195. package/dist/src/core/increment/desync-detector.d.ts +1 -1
  196. package/dist/src/core/increment/desync-detector.js +3 -3
  197. package/dist/src/core/increment/desync-detector.js.map +1 -1
  198. package/dist/src/core/increment/discipline-checker.js +2 -2
  199. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  200. package/dist/src/core/increment/increment-archiver.js +4 -4
  201. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  202. package/dist/src/core/increment/increment-utils.d.ts +53 -2
  203. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  204. package/dist/src/core/increment/increment-utils.js +78 -7
  205. package/dist/src/core/increment/increment-utils.js.map +1 -1
  206. package/dist/src/core/increment/metadata-manager.js +6 -6
  207. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  208. package/dist/src/core/increment/metadata-validator.js +1 -1
  209. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  210. package/dist/src/core/increment/recent-work-scanner.js +2 -2
  211. package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
  212. package/dist/src/core/increment/spec-sync-manager.js +1 -1
  213. package/dist/src/core/increment/spec-sync-manager.js.map +1 -1
  214. package/dist/src/core/increment/status-auto-transition.d.ts +68 -1
  215. package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -1
  216. package/dist/src/core/increment/status-auto-transition.js +141 -1
  217. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  218. package/dist/src/core/increment/status-change-sync-trigger.d.ts +1 -1
  219. package/dist/src/core/increment/status-change-sync-trigger.js +3 -3
  220. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  221. package/dist/src/core/living-docs/cross-project-sync.d.ts +12 -0
  222. package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
  223. package/dist/src/core/living-docs/cross-project-sync.js +33 -0
  224. package/dist/src/core/living-docs/cross-project-sync.js.map +1 -1
  225. package/dist/src/core/living-docs/feature-archiver.d.ts +3 -3
  226. package/dist/src/core/living-docs/feature-archiver.js +3 -3
  227. package/dist/src/core/living-docs/feature-consistency-validator.js +1 -1
  228. package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
  229. package/dist/src/core/living-docs/feature-id-manager.d.ts +5 -0
  230. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  231. package/dist/src/core/living-docs/feature-id-manager.js +19 -1
  232. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  233. package/dist/src/core/living-docs/governance/standards-generator.js +1 -1
  234. package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -1
  235. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +5 -0
  236. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  237. package/dist/src/core/living-docs/hierarchy-mapper.js +22 -2
  238. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  239. package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -0
  240. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  241. package/dist/src/core/living-docs/living-docs-sync.js +77 -8
  242. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  243. package/dist/src/core/living-docs/project-detector.d.ts +9 -0
  244. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  245. package/dist/src/core/living-docs/project-detector.js +38 -3
  246. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  247. package/dist/src/core/living-docs/suggestions-generator.js +1 -1
  248. package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
  249. package/dist/src/core/notifications/command-integration.js +1 -1
  250. package/dist/src/core/notifications/command-integration.js.map +1 -1
  251. package/dist/src/core/project/adapters/ado-project-adapter.d.ts +73 -0
  252. package/dist/src/core/project/adapters/ado-project-adapter.d.ts.map +1 -0
  253. package/dist/src/core/project/adapters/ado-project-adapter.js +304 -0
  254. package/dist/src/core/project/adapters/ado-project-adapter.js.map +1 -0
  255. package/dist/src/core/project/adapters/github-project-adapter.d.ts +76 -0
  256. package/dist/src/core/project/adapters/github-project-adapter.d.ts.map +1 -0
  257. package/dist/src/core/project/adapters/github-project-adapter.js +315 -0
  258. package/dist/src/core/project/adapters/github-project-adapter.js.map +1 -0
  259. package/dist/src/core/project/adapters/jira-project-adapter.d.ts +69 -0
  260. package/dist/src/core/project/adapters/jira-project-adapter.d.ts.map +1 -0
  261. package/dist/src/core/project/adapters/jira-project-adapter.js +241 -0
  262. package/dist/src/core/project/adapters/jira-project-adapter.js.map +1 -0
  263. package/dist/src/core/project/project-event-bus.d.ts +72 -0
  264. package/dist/src/core/project/project-event-bus.d.ts.map +1 -0
  265. package/dist/src/core/project/project-event-bus.js +150 -0
  266. package/dist/src/core/project/project-event-bus.js.map +1 -0
  267. package/dist/src/core/project/project-manager.d.ts +0 -22
  268. package/dist/src/core/project/project-manager.d.ts.map +1 -1
  269. package/dist/src/core/project/project-manager.js +5 -275
  270. package/dist/src/core/project/project-manager.js.map +1 -1
  271. package/dist/src/core/project/project-registry.d.ts +93 -0
  272. package/dist/src/core/project/project-registry.d.ts.map +1 -0
  273. package/dist/src/core/project/project-registry.js +448 -0
  274. package/dist/src/core/project/project-registry.js.map +1 -0
  275. package/dist/src/core/project/project-resolution.d.ts +229 -0
  276. package/dist/src/core/project/project-resolution.d.ts.map +1 -0
  277. package/dist/src/core/project/project-resolution.js +633 -0
  278. package/dist/src/core/project/project-resolution.js.map +1 -0
  279. package/dist/src/core/project/types/project-types.d.ts +214 -0
  280. package/dist/src/core/project/types/project-types.d.ts.map +1 -0
  281. package/dist/src/core/project/types/project-types.js +9 -0
  282. package/dist/src/core/project/types/project-types.js.map +1 -0
  283. package/dist/src/core/repo-structure/setup-summary.js +2 -2
  284. package/dist/src/core/repo-structure/setup-summary.js.map +1 -1
  285. package/dist/src/core/specs/spec-identifier-detector.d.ts.map +1 -1
  286. package/dist/src/core/specs/spec-identifier-detector.js +8 -5
  287. package/dist/src/core/specs/spec-identifier-detector.js.map +1 -1
  288. package/dist/src/core/status-line/status-line-updater.js +1 -1
  289. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  290. package/dist/src/core/types/increment-metadata.d.ts +3 -3
  291. package/dist/src/core/types/increment-metadata.js +3 -3
  292. package/dist/src/core/types/increment-metadata.js.map +1 -1
  293. package/dist/src/core/types/sync-profile.d.ts +1 -0
  294. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  295. package/dist/src/core/types/sync-profile.js.map +1 -1
  296. package/dist/src/core/validators/ac-presence-validator.d.ts +4 -4
  297. package/dist/src/core/validators/ac-presence-validator.js +3 -3
  298. package/dist/src/core/validators/ac-presence-validator.js.map +1 -1
  299. package/dist/src/core/workflow/backlog-scanner.d.ts +5 -0
  300. package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -1
  301. package/dist/src/core/workflow/backlog-scanner.js +14 -2
  302. package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
  303. package/dist/src/core/workflow/phase-detector.js +17 -17
  304. package/dist/src/core/workflow/phase-detector.js.map +1 -1
  305. package/dist/src/core/workflow/types.d.ts +1 -1
  306. package/dist/src/core/workflow/types.d.ts.map +1 -1
  307. package/dist/src/core/workflow/workflow-orchestrator.d.ts +1 -1
  308. package/dist/src/core/workflow/workflow-orchestrator.js +9 -9
  309. package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -1
  310. package/dist/src/hooks/scheduler-startup.js +1 -1
  311. package/dist/src/hooks/scheduler-startup.js.map +1 -1
  312. package/dist/src/importers/external-importer.d.ts +26 -5
  313. package/dist/src/importers/external-importer.d.ts.map +1 -1
  314. package/dist/src/importers/item-converter.d.ts.map +1 -1
  315. package/dist/src/importers/item-converter.js +19 -2
  316. package/dist/src/importers/item-converter.js.map +1 -1
  317. package/dist/src/importers/jira-importer.d.ts.map +1 -1
  318. package/dist/src/importers/jira-importer.js +15 -1
  319. package/dist/src/importers/jira-importer.js.map +1 -1
  320. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +17 -1
  321. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  322. package/dist/src/integrations/jira/jira-incremental-mapper.js +20 -12
  323. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  324. package/dist/src/integrations/jira/jira-mapper.d.ts +17 -1
  325. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  326. package/dist/src/integrations/jira/jira-mapper.js +13 -5
  327. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  328. package/dist/src/living-docs/enterprise-analyzer.js +1 -1
  329. package/dist/src/living-docs/enterprise-analyzer.js.map +1 -1
  330. package/dist/src/living-docs/smart-doc-organizer.js +1 -1
  331. package/dist/src/living-docs/smart-doc-organizer.js.map +1 -1
  332. package/dist/src/sync/ado-reconciler.d.ts +5 -0
  333. package/dist/src/sync/ado-reconciler.d.ts.map +1 -1
  334. package/dist/src/sync/ado-reconciler.js +16 -4
  335. package/dist/src/sync/ado-reconciler.js.map +1 -1
  336. package/dist/src/sync/jira-reconciler.d.ts +3 -0
  337. package/dist/src/sync/jira-reconciler.d.ts.map +1 -1
  338. package/dist/src/sync/jira-reconciler.js +12 -5
  339. package/dist/src/sync/jira-reconciler.js.map +1 -1
  340. package/dist/src/types/dashboard-cache.d.ts +4 -2
  341. package/dist/src/types/dashboard-cache.d.ts.map +1 -1
  342. package/dist/src/types/dashboard-cache.js +1 -1
  343. package/dist/src/types/dashboard-cache.js.map +1 -1
  344. package/dist/src/utils/ac-embedder.d.ts +1 -1
  345. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  346. package/dist/src/utils/docs-preview/config-generator.js +4 -0
  347. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  348. package/dist/src/utils/docs-preview/docusaurus-setup.js +2 -2
  349. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  350. package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
  351. package/dist/src/utils/env-multi-project-parser.d.ts +17 -0
  352. package/dist/src/utils/env-multi-project-parser.d.ts.map +1 -1
  353. package/dist/src/utils/env-multi-project-parser.js +26 -1
  354. package/dist/src/utils/env-multi-project-parser.js.map +1 -1
  355. package/dist/src/utils/external-tool-drift-detector.d.ts +2 -2
  356. package/dist/src/utils/external-tool-drift-detector.js +6 -6
  357. package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
  358. package/dist/src/utils/notification-constants.d.ts +8 -6
  359. package/dist/src/utils/notification-constants.d.ts.map +1 -1
  360. package/dist/src/utils/notification-constants.js +10 -8
  361. package/dist/src/utils/notification-constants.js.map +1 -1
  362. package/dist/src/utils/notification-manager.d.ts +36 -3
  363. package/dist/src/utils/notification-manager.d.ts.map +1 -1
  364. package/dist/src/utils/notification-manager.js +80 -49
  365. package/dist/src/utils/notification-manager.js.map +1 -1
  366. package/dist/src/utils/platform-utils.d.ts +12 -3
  367. package/dist/src/utils/platform-utils.d.ts.map +1 -1
  368. package/dist/src/utils/platform-utils.js +35 -16
  369. package/dist/src/utils/platform-utils.js.map +1 -1
  370. package/dist/src/utils/plugin-validator.js +11 -11
  371. package/dist/src/utils/plugin-validator.js.map +1 -1
  372. package/dist/src/validators/ac-coverage-validator.d.ts +1 -1
  373. package/dist/src/validators/ac-coverage-validator.js +1 -1
  374. package/package.json +3 -1
  375. package/plugins/PLUGINS-INDEX.md +1 -2
  376. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  377. package/plugins/specweave/COMMANDS.md +49 -49
  378. package/plugins/specweave/agents/pm/AGENT.md +18 -18
  379. package/plugins/specweave/agents/test-aware-planner/AGENT.md +7 -7
  380. package/plugins/specweave/agents/translator/AGENT.md +2 -2
  381. package/plugins/specweave/commands/{specweave-abandon.md → abandon.md} +20 -20
  382. package/plugins/specweave/commands/{specweave-analyze-standards.sh → analyze-standards.sh} +4 -4
  383. package/plugins/specweave/commands/{specweave-archive-features.md → archive-features.md} +7 -7
  384. package/plugins/specweave/commands/{specweave-archive.md → archive.md} +36 -36
  385. package/plugins/specweave/commands/{specweave-backlog.md → backlog.md} +24 -24
  386. package/plugins/specweave/commands/{specweave-check-hooks.md → check-hooks.md} +10 -10
  387. package/plugins/specweave/commands/{specweave-check-tests.md → check-tests.md} +14 -14
  388. package/plugins/specweave/commands/{specweave-costs.md → costs.md} +8 -8
  389. package/plugins/specweave/commands/{specweave-discrepancies.md → discrepancies.md} +15 -15
  390. package/plugins/specweave/commands/{specweave-discrepancy-to-increment.md → discrepancy-to-increment.md} +10 -10
  391. package/plugins/specweave/commands/{specweave-do.md → do.md} +37 -39
  392. package/plugins/specweave/commands/{specweave-done.md → done.md} +23 -23
  393. package/plugins/specweave/commands/{specweave-embed-acs.md → embed-acs.md} +21 -21
  394. package/plugins/specweave/commands/{specweave-external.md → external.md} +11 -11
  395. package/plugins/specweave/commands/{specweave-fix-duplicates.md → fix-duplicates.md} +16 -16
  396. package/plugins/specweave/commands/{specweave-import-docs.md → import-docs.md} +7 -7
  397. package/plugins/specweave/commands/{specweave-import-external.md → import-external.md} +9 -9
  398. package/plugins/specweave/commands/{specweave-increment.md → increment.md} +17 -17
  399. package/plugins/specweave/commands/{specweave-jobs.md → jobs.md} +28 -28
  400. package/plugins/specweave/commands/judge-llm.md +296 -0
  401. package/plugins/specweave/commands/{specweave-living-docs.md → living-docs.md} +72 -29
  402. package/plugins/specweave/commands/migrate-config.md +2 -2
  403. package/plugins/specweave/commands/{specweave-next.md → next.md} +20 -20
  404. package/plugins/specweave/commands/{specweave-notifications.md → notifications.md} +11 -11
  405. package/plugins/specweave/commands/{specweave-organize-docs.md → organize-docs.md} +9 -9
  406. package/plugins/specweave/commands/{specweave-pause.md → pause.md} +19 -19
  407. package/plugins/specweave/commands/{specweave-plan.md → plan.md} +19 -19
  408. package/plugins/specweave/commands/{specweave-progress.md → progress.md} +6 -6
  409. package/plugins/specweave/commands/{specweave-qa.md → qa.md} +15 -15
  410. package/plugins/specweave/commands/{specweave-reopen.md → reopen.md} +41 -41
  411. package/plugins/specweave/commands/{specweave-restore-feature.md → restore-feature.md} +6 -6
  412. package/plugins/specweave/commands/{specweave-restore.md → restore.md} +26 -26
  413. package/plugins/specweave/commands/{specweave-resume.md → resume.md} +33 -33
  414. package/plugins/specweave/commands/revert-wip-limit.md +4 -4
  415. package/plugins/specweave/commands/{specweave-save.md → save.md} +34 -34
  416. package/plugins/specweave/commands/{specweave-status.md → status.md} +29 -29
  417. package/plugins/specweave/commands/{specweave.md → sw.md} +28 -28
  418. package/plugins/specweave/commands/{specweave-sync-acs.md → sync-acs.md} +12 -12
  419. package/plugins/specweave/commands/sync-diagnostics.md +5 -5
  420. package/plugins/specweave/commands/{specweave-sync-docs.md → sync-docs.md} +7 -7
  421. package/plugins/specweave/commands/{specweave-sync-logs.md → sync-logs.md} +14 -14
  422. package/plugins/specweave/commands/{specweave-sync-monitor.md → sync-monitor.md} +5 -5
  423. package/plugins/specweave/commands/{specweave-sync-progress.md → sync-progress.md} +38 -38
  424. package/plugins/specweave/commands/{specweave-sync-specs.md → sync-specs.md} +17 -17
  425. package/plugins/specweave/commands/{specweave-sync-status.md → sync-status.md} +16 -16
  426. package/plugins/specweave/commands/{specweave-sync-tasks.md → sync-tasks.md} +13 -13
  427. package/plugins/specweave/commands/{specweave-tdd-cycle.md → tdd-cycle.md} +1 -1
  428. package/plugins/specweave/commands/{specweave-tdd-green.md → tdd-green.md} +1 -1
  429. package/plugins/specweave/commands/{specweave-tdd-red.md → tdd-red.md} +1 -1
  430. package/plugins/specweave/commands/{specweave-tdd-refactor.md → tdd-refactor.md} +1 -1
  431. package/plugins/specweave/commands/{specweave-translate.md → translate.md} +17 -17
  432. package/plugins/specweave/commands/{specweave-update-scope.md → update-scope.md} +8 -8
  433. package/plugins/specweave/commands/{specweave-update-status.md → update-status.md} +6 -6
  434. package/plugins/specweave/commands/{specweave-validate-features.md → validate-features.md} +8 -8
  435. package/plugins/specweave/commands/{specweave-validate.md → validate.md} +20 -20
  436. package/plugins/specweave/commands/{specweave-workflow.md → workflow.md} +40 -40
  437. package/plugins/specweave/hooks/README.md +5 -5
  438. package/plugins/specweave/hooks/config-env-separator.sh +99 -0
  439. package/plugins/specweave/hooks/github-metadata-guard.sh +73 -0
  440. package/plugins/specweave/hooks/hooks.json +41 -1
  441. package/plugins/specweave/hooks/post-first-increment.sh +2 -2
  442. package/plugins/specweave/hooks/post-increment-completion.sh +7 -7
  443. package/plugins/specweave/hooks/post-increment-planning.sh +11 -11
  444. package/plugins/specweave/hooks/post-increment-status-change.sh +1 -1
  445. package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
  446. package/plugins/specweave/hooks/post-spec-update.sh +2 -2
  447. package/plugins/specweave/hooks/post-task-completion.sh +2 -2
  448. package/plugins/specweave/hooks/pre-increment-start.sh +7 -7
  449. package/plugins/specweave/hooks/project-folder-guard.sh +272 -0
  450. package/plugins/specweave/hooks/spec-project-validator.sh +68 -47
  451. package/plugins/specweave/hooks/user-prompt-submit.sh +27 -27
  452. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +2 -2
  453. package/plugins/specweave/hooks/v2/guards/metadata-json-guard.sh +87 -0
  454. package/plugins/specweave/hooks/v2/guards/metadata-json-guard.test.sh +302 -0
  455. package/plugins/specweave/hooks/v2/guards/per-us-project-validator.sh +72 -18
  456. package/plugins/specweave/hooks/v2/guards/per-us-project-validator.test.sh +406 -0
  457. package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +1 -1
  458. package/plugins/specweave/lib/hooks/consolidated-sync.js +35 -5
  459. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +2 -2
  460. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +2 -2
  461. package/plugins/specweave/lib/hooks/prepare-reflection-context.js +1 -1
  462. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +1 -1
  463. package/plugins/specweave/lib/hooks/sync-living-docs.js +5 -5
  464. package/plugins/specweave/lib/hooks/translate-file.d.ts +1 -1
  465. package/plugins/specweave/lib/hooks/translate-file.js +2 -2
  466. package/plugins/specweave/lib/hooks/translate-file.ts +3 -3
  467. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +1 -1
  468. package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +2 -2
  469. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +6 -6
  470. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  471. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.d.ts +113 -0
  472. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js +318 -0
  473. package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js.map +1 -0
  474. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +3 -3
  475. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js +3 -3
  476. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js.map +1 -1
  477. package/plugins/specweave/scripts/README.md +9 -9
  478. package/plugins/specweave/scripts/cleanup-state.sh +1 -1
  479. package/plugins/specweave/scripts/jobs.js +2 -2
  480. package/plugins/specweave/scripts/progress.js +6 -6
  481. package/plugins/specweave/scripts/read-costs.sh +3 -3
  482. package/plugins/specweave/scripts/read-jobs.sh +8 -8
  483. package/plugins/specweave/scripts/read-progress.sh +17 -10
  484. package/plugins/specweave/scripts/read-status.sh +7 -7
  485. package/plugins/specweave/scripts/read-workflow.sh +18 -18
  486. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +6 -5
  487. package/plugins/specweave/scripts/session-watchdog.sh +14 -8
  488. package/plugins/specweave/scripts/status.js +7 -7
  489. package/plugins/specweave/scripts/update-dashboard-cache.sh +28 -10
  490. package/plugins/specweave/skills/SKILLS-INDEX.md +4 -4
  491. package/plugins/specweave/skills/archive-increments/SKILL.md +15 -15
  492. package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +5 -5
  493. package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +4 -4
  494. package/plugins/specweave/skills/context-loader/SKILL.md +1 -1
  495. package/plugins/specweave/skills/{specweave-detector → detector}/SKILL.md +5 -5
  496. package/plugins/specweave/skills/discrepancy-viewer.md +4 -4
  497. package/plugins/specweave/skills/external-sync-wizard/SKILL.md +24 -24
  498. package/plugins/specweave/skills/{specweave-framework → framework}/SKILL.md +33 -33
  499. package/plugins/specweave/skills/increment-planner/SKILL.md +25 -24
  500. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +6 -16
  501. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -12
  502. package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +6 -6
  503. package/plugins/specweave/skills/increment-work-router/SKILL.md +23 -23
  504. package/plugins/specweave/skills/instant-status/SKILL.md +7 -7
  505. package/plugins/specweave/skills/plugin-validator/SKILL.md +9 -9
  506. package/plugins/specweave/skills/pm-closure-validation/SKILL.md +4 -4
  507. package/plugins/specweave/skills/progress-sync/SKILL.md +51 -51
  508. package/plugins/specweave/skills/project-kickstarter/SKILL.md +11 -11
  509. package/plugins/specweave/skills/role-orchestrator/README.md +1 -1
  510. package/plugins/specweave/skills/role-orchestrator/SKILL.md +4 -4
  511. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +17 -17
  512. package/plugins/specweave/skills/spec-generator/SKILL.md +6 -6
  513. package/plugins/specweave/skills/tdd-workflow/SKILL.md +21 -21
  514. package/plugins/specweave/skills/translator/SKILL.md +4 -4
  515. package/plugins/specweave/skills/umbrella-repo-detector/SKILL.md +5 -5
  516. package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
  517. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +4 -4
  518. package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +4 -4
  519. package/plugins/specweave-ado/commands/cleanup-duplicates.md +9 -9
  520. package/plugins/specweave-ado/commands/clone.md +17 -17
  521. package/plugins/specweave-ado/commands/close.md +10 -10
  522. package/plugins/specweave-ado/commands/create.md +8 -8
  523. package/plugins/specweave-ado/commands/import-areas.md +15 -15
  524. package/plugins/specweave-ado/commands/import-projects.md +12 -12
  525. package/plugins/specweave-ado/commands/pull.md +25 -25
  526. package/plugins/specweave-ado/commands/push.md +20 -20
  527. package/plugins/specweave-ado/commands/reconcile.md +7 -7
  528. package/plugins/specweave-ado/commands/status.md +7 -7
  529. package/plugins/specweave-ado/commands/sync.md +17 -17
  530. package/plugins/specweave-ado/hooks/post-living-docs-update.sh +2 -2
  531. package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
  532. package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
  533. package/plugins/specweave-ado/skills/{specweave-ado-mapper → ado-mapper}/SKILL.md +2 -2
  534. package/plugins/specweave-ado/skills/ado-multi-project/SKILL.md +6 -6
  535. package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +5 -5
  536. package/plugins/specweave-ado/skills/ado-sync/SKILL.md +19 -19
  537. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +1 -1
  538. package/plugins/specweave-alternatives/commands/alternatives-analyze.md +14 -14
  539. package/plugins/specweave-backend/.claude-plugin/plugin.json +1 -1
  540. package/plugins/specweave-confluent/.claude-plugin/plugin.json +1 -1
  541. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +1 -1
  542. package/plugins/specweave-cost-optimizer/commands/cost-analyze.md +1 -1
  543. package/plugins/specweave-cost-optimizer/commands/cost-optimize.md +1 -1
  544. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
  545. package/plugins/specweave-diagrams/commands/diagrams-generate.md +1 -1
  546. package/plugins/specweave-docs/.claude-plugin/plugin.json +1 -1
  547. package/plugins/specweave-docs/commands/build.md +9 -9
  548. package/plugins/specweave-docs/commands/generate.md +22 -22
  549. package/plugins/specweave-docs/commands/health.md +10 -10
  550. package/plugins/specweave-docs/commands/init.md +9 -9
  551. package/plugins/specweave-docs/commands/organize.md +10 -10
  552. package/plugins/specweave-docs/commands/validate.md +9 -9
  553. package/plugins/specweave-docs/commands/view.md +391 -0
  554. package/plugins/specweave-docs/skills/preview/SKILL.md +60 -21
  555. package/plugins/specweave-figma/.claude-plugin/plugin.json +1 -1
  556. package/plugins/specweave-figma/commands/figma-import.md +1 -1
  557. package/plugins/specweave-figma/commands/figma-to-react.md +1 -1
  558. package/plugins/specweave-figma/commands/figma-tokens.md +1 -1
  559. package/plugins/specweave-frontend/.claude-plugin/plugin.json +1 -1
  560. package/plugins/specweave-frontend/agents/frontend-architect/README.md +5 -5
  561. package/plugins/specweave-frontend/commands/component-generate.md +1 -1
  562. package/plugins/specweave-frontend/commands/design-system-init.md +1 -1
  563. package/plugins/specweave-frontend/commands/frontend-scaffold.md +1 -1
  564. package/plugins/specweave-frontend/commands/nextjs-setup.md +1 -1
  565. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
  566. package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +4 -4
  567. package/plugins/specweave-github/SYNC-ARCHITECTURE-FIX-SUMMARY.md +18 -18
  568. package/plugins/specweave-github/agents/github-manager/AGENT.md +8 -8
  569. package/plugins/specweave-github/commands/cleanup-duplicates.md +8 -8
  570. package/plugins/specweave-github/commands/close.md +25 -25
  571. package/plugins/specweave-github/commands/create.md +17 -17
  572. package/plugins/specweave-github/commands/pull.md +12 -12
  573. package/plugins/specweave-github/commands/push.md +12 -12
  574. package/plugins/specweave-github/commands/reconcile.md +7 -7
  575. package/plugins/specweave-github/commands/status.md +24 -24
  576. package/plugins/specweave-github/commands/sync.md +34 -34
  577. package/plugins/specweave-github/commands/update-user-story.md +6 -6
  578. package/plugins/specweave-github/hooks/README.md +8 -8
  579. package/plugins/specweave-github/hooks/post-task-completion.sh +2 -2
  580. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +12 -4
  581. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +16 -4
  582. package/plugins/specweave-github/lib/completion-calculator.js +3 -1
  583. package/plugins/specweave-github/lib/completion-calculator.ts +6 -0
  584. package/plugins/specweave-github/lib/duplicate-detector.js +12 -6
  585. package/plugins/specweave-github/lib/duplicate-detector.ts +22 -6
  586. package/plugins/specweave-github/lib/github-board-resolver.js +7 -2
  587. package/plugins/specweave-github/lib/github-board-resolver.ts +13 -2
  588. package/plugins/specweave-github/lib/github-client-v2.js +29 -18
  589. package/plugins/specweave-github/lib/github-client-v2.ts +33 -18
  590. package/plugins/specweave-github/lib/github-feature-sync.js +41 -11
  591. package/plugins/specweave-github/lib/github-feature-sync.ts +52 -11
  592. package/plugins/specweave-github/lib/github-hierarchical-sync.js +6 -1
  593. package/plugins/specweave-github/lib/github-hierarchical-sync.ts +12 -1
  594. package/plugins/specweave-github/lib/github-increment-sync-cli.js +35 -17
  595. package/plugins/specweave-github/lib/github-increment-sync-cli.ts +44 -16
  596. package/plugins/specweave-github/lib/github-issue-updater.js +8 -3
  597. package/plugins/specweave-github/lib/github-issue-updater.ts +16 -3
  598. package/plugins/specweave-github/lib/github-spec-sync.js +14 -4
  599. package/plugins/specweave-github/lib/github-spec-sync.ts +19 -4
  600. package/plugins/specweave-github/lib/github-sync-bidirectional.js +8 -3
  601. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +14 -3
  602. package/plugins/specweave-github/lib/github-sync-increment-changes.js +9 -4
  603. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +15 -4
  604. package/plugins/specweave-github/lib/increment-issue-builder.js +23 -10
  605. package/plugins/specweave-github/lib/increment-issue-builder.ts +29 -11
  606. package/plugins/specweave-github/lib/user-story-content-builder.js +19 -16
  607. package/plugins/specweave-github/lib/user-story-content-builder.ts +24 -19
  608. package/plugins/specweave-github/lib/user-story-issue-builder.js +10 -13
  609. package/plugins/specweave-github/lib/user-story-issue-builder.ts +20 -19
  610. package/plugins/specweave-github/reference/github-specweave-mapping.md +1 -1
  611. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +3 -3
  612. package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +8 -8
  613. package/plugins/specweave-github/skills/github-sync/SKILL.md +14 -14
  614. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
  615. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-monitor-setup.md → monitor-setup.md} +1 -1
  616. package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-slo-implement.md → slo-implement.md} +1 -1
  617. package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
  618. package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +3 -3
  619. package/plugins/specweave-jira/commands/cleanup-duplicates.md +9 -9
  620. package/plugins/specweave-jira/commands/close.md +13 -13
  621. package/plugins/specweave-jira/commands/create.md +8 -8
  622. package/plugins/specweave-jira/commands/import-boards.md +15 -15
  623. package/plugins/specweave-jira/commands/import-projects-full.md +15 -15
  624. package/plugins/specweave-jira/commands/import-projects.md +10 -10
  625. package/plugins/specweave-jira/commands/pull.md +10 -10
  626. package/plugins/specweave-jira/commands/push.md +11 -11
  627. package/plugins/specweave-jira/commands/reconcile.md +7 -7
  628. package/plugins/specweave-jira/commands/status.md +16 -16
  629. package/plugins/specweave-jira/commands/sync.md +27 -27
  630. package/plugins/specweave-jira/skills/{specweave-jira-mapper → jira-mapper}/SKILL.md +2 -2
  631. package/plugins/specweave-jira/skills/jira-resource-validator/SKILL.md +4 -4
  632. package/plugins/specweave-jira/skills/jira-sync/SKILL.md +5 -5
  633. package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
  634. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +10 -10
  635. package/plugins/specweave-kafka/README.md +12 -12
  636. package/plugins/specweave-kafka/commands/deploy.md +5 -5
  637. package/plugins/specweave-kafka/commands/dev-env.md +2 -2
  638. package/plugins/specweave-kafka/commands/mcp-configure.md +3 -3
  639. package/plugins/specweave-kafka/commands/monitor-setup.md +3 -3
  640. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +4 -4
  641. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +5 -5
  642. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +6 -6
  643. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
  644. package/plugins/specweave-kafka-streams/commands/topology.md +4 -4
  645. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +1 -1
  646. package/plugins/specweave-ml/.claude-plugin/plugin.json +1 -1
  647. package/plugins/specweave-ml/README.md +9 -9
  648. package/plugins/specweave-ml/commands/{specweave-ml-deploy.md → deploy.md} +1 -1
  649. package/plugins/specweave-ml/commands/{specweave-ml-evaluate.md → evaluate.md} +1 -1
  650. package/plugins/specweave-ml/commands/{specweave-ml-explain.md → explain.md} +1 -1
  651. package/plugins/specweave-ml/commands/{specweave-ml-pipeline.md → pipeline.md} +1 -1
  652. package/plugins/specweave-ml/skills/automl-optimizer/SKILL.md +1 -1
  653. package/plugins/specweave-ml/skills/data-visualizer/SKILL.md +1 -1
  654. package/plugins/specweave-ml/skills/experiment-tracker/SKILL.md +4 -4
  655. package/plugins/specweave-ml/skills/feature-engineer/SKILL.md +1 -1
  656. package/plugins/specweave-ml/skills/ml-deployment-helper/SKILL.md +2 -2
  657. package/plugins/specweave-ml/skills/ml-pipeline-orchestrator/SKILL.md +10 -10
  658. package/plugins/specweave-ml/skills/model-registry/SKILL.md +1 -1
  659. package/plugins/specweave-ml/skills/time-series-forecaster/SKILL.md +1 -1
  660. package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -1
  661. package/plugins/specweave-mobile/README.md +2 -2
  662. package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +2 -2
  663. package/plugins/specweave-mobile/skills/react-native-setup/SKILL.md +1 -1
  664. package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
  665. package/plugins/specweave-n8n/commands/workflow-template.md +4 -4
  666. package/plugins/specweave-payments/.claude-plugin/plugin.json +1 -1
  667. package/plugins/specweave-payments/commands/stripe-setup.md +1 -1
  668. package/plugins/specweave-payments/commands/subscription-flow.md +1 -1
  669. package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +1 -1
  670. package/plugins/specweave-plugin-dev/commands/plugin-create.md +1 -1
  671. package/plugins/specweave-plugin-dev/commands/plugin-publish.md +1 -1
  672. package/plugins/specweave-plugin-dev/commands/plugin-test.md +1 -1
  673. package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
  674. package/plugins/specweave-release/IMPLEMENTATION.md +14 -14
  675. package/plugins/specweave-release/README.md +33 -33
  676. package/plugins/specweave-release/agents/release-manager/AGENT.md +18 -18
  677. package/plugins/specweave-release/commands/{specweave-release-align.md → align.md} +19 -19
  678. package/plugins/specweave-release/commands/{specweave-release-init.md → init.md} +19 -19
  679. package/plugins/specweave-release/commands/{specweave-release-npm.md → npm.md} +14 -14
  680. package/plugins/specweave-release/commands/{specweave-release-platform.md → platform.md} +17 -17
  681. package/plugins/specweave-release/commands/{specweave-release-rc.md → rc.md} +37 -37
  682. package/plugins/specweave-release/hooks/post-task-completion.sh +1 -1
  683. package/plugins/specweave-release/skills/rc-manager/SKILL.md +12 -12
  684. package/plugins/specweave-release/skills/release-coordinator/SKILL.md +11 -11
  685. package/plugins/specweave-release/skills/release-strategy-advisor/SKILL.md +4 -4
  686. package/plugins/specweave-release/skills/version-aligner/SKILL.md +7 -7
  687. package/plugins/specweave-testing/.claude-plugin/plugin.json +1 -1
  688. package/plugins/specweave-testing/agents/qa-engineer/README.md +5 -5
  689. package/plugins/specweave-testing/commands/e2e-setup.md +1 -1
  690. package/plugins/specweave-testing/commands/test-coverage.md +1 -1
  691. package/plugins/specweave-testing/commands/test-generate.md +1 -1
  692. package/plugins/specweave-testing/commands/test-init.md +1 -1
  693. package/plugins/specweave-tooling/.claude-plugin/plugin.json +1 -1
  694. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-create.md → skill-create.md} +1 -1
  695. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-package.md → skill-package.md} +1 -1
  696. package/plugins/specweave-tooling/commands/{specweave-tooling-skill-validate.md → skill-validate.md} +1 -1
  697. package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
  698. package/plugins/specweave-ui/commands/ui-automate.md +9 -9
  699. package/plugins/specweave-ui/commands/ui-inspect.md +6 -6
  700. package/src/templates/AGENTS.md.template +73 -77
  701. package/src/templates/CLAUDE.md.template +23 -19
  702. package/dist/src/cli/commands/switch-project.d.ts +0 -13
  703. package/dist/src/cli/commands/switch-project.d.ts.map +0 -1
  704. package/dist/src/cli/commands/switch-project.js +0 -78
  705. package/dist/src/cli/commands/switch-project.js.map +0 -1
  706. package/plugins/specweave/commands/specweave-init-multiproject.md +0 -146
  707. package/plugins/specweave/commands/specweave-judge.md +0 -276
  708. package/plugins/specweave-core/.claude-plugin/plugin.json +0 -21
  709. package/plugins/specweave-core/commands/architecture-review.md +0 -288
  710. package/plugins/specweave-core/commands/code-review.md +0 -213
  711. package/plugins/specweave-core/commands/refactor-plan.md +0 -249
  712. package/plugins/specweave-core/skills/code-quality/SKILL.md +0 -158
  713. package/plugins/specweave-core/skills/design-patterns/SKILL.md +0 -245
  714. package/plugins/specweave-core/skills/software-architecture/SKILL.md +0 -84
  715. package/plugins/specweave-docs/commands/preview.md +0 -274
  716. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-1-increment-naming.yaml +0 -0
  717. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-2-source-of-truth.yaml +0 -0
  718. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-3-increment-discipline.yaml +0 -0
  719. /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-4-file-placement.yaml +0 -0
@@ -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
  );
@@ -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}`);