specweave 0.24.11 → 0.26.2

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 (411) hide show
  1. package/CLAUDE.md +742 -26
  2. package/bin/specweave.js +14 -0
  3. package/dist/plugins/specweave-github/lib/CodeValidator.js +2 -2
  4. package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -1
  5. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
  6. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -1
  7. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +28 -0
  8. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  9. package/dist/plugins/specweave-github/lib/github-client-v2.js +64 -1
  10. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  11. package/dist/plugins/specweave-github/lib/github-issue-updater.js +1 -1
  12. package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +1 -1
  13. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
  14. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
  15. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
  16. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +1 -1
  17. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  18. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +7 -6
  19. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  20. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
  21. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js.map +1 -1
  22. package/dist/src/adapters/adapter-base.js +1 -1
  23. package/dist/src/adapters/adapter-base.js.map +1 -1
  24. package/dist/src/adapters/adapter-loader.js +1 -1
  25. package/dist/src/adapters/adapter-loader.js.map +1 -1
  26. package/dist/src/adapters/agents-md-generator.js +1 -1
  27. package/dist/src/adapters/agents-md-generator.js.map +1 -1
  28. package/dist/src/adapters/claude/adapter.js +1 -1
  29. package/dist/src/adapters/claude/adapter.js.map +1 -1
  30. package/dist/src/adapters/claude-md-generator.js +1 -1
  31. package/dist/src/adapters/claude-md-generator.js.map +1 -1
  32. package/dist/src/adapters/codex/adapter.js +1 -1
  33. package/dist/src/adapters/codex/adapter.js.map +1 -1
  34. package/dist/src/adapters/cursor/adapter.js +1 -1
  35. package/dist/src/adapters/cursor/adapter.js.map +1 -1
  36. package/dist/src/adapters/doc-generator.js +1 -1
  37. package/dist/src/adapters/doc-generator.js.map +1 -1
  38. package/dist/src/adapters/gemini/adapter.js +1 -1
  39. package/dist/src/adapters/gemini/adapter.js.map +1 -1
  40. package/dist/src/adapters/generic/adapter.js +1 -1
  41. package/dist/src/adapters/generic/adapter.js.map +1 -1
  42. package/dist/src/cli/commands/cicd-monitor.js +1 -1
  43. package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
  44. package/dist/src/cli/commands/delete-feature.d.ts +14 -0
  45. package/dist/src/cli/commands/delete-feature.d.ts.map +1 -0
  46. package/dist/src/cli/commands/delete-feature.js +87 -0
  47. package/dist/src/cli/commands/delete-feature.js.map +1 -0
  48. package/dist/src/cli/commands/detect-specs.js +1 -1
  49. package/dist/src/cli/commands/detect-specs.js.map +1 -1
  50. package/dist/src/cli/commands/import-external.js +1 -1
  51. package/dist/src/cli/commands/import-external.js.map +1 -1
  52. package/dist/src/cli/commands/init.d.ts.map +1 -1
  53. package/dist/src/cli/commands/init.js +45 -47
  54. package/dist/src/cli/commands/init.js.map +1 -1
  55. package/dist/src/cli/commands/install.js +1 -1
  56. package/dist/src/cli/commands/install.js.map +1 -1
  57. package/dist/src/cli/commands/list.js +1 -1
  58. package/dist/src/cli/commands/list.js.map +1 -1
  59. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  60. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  61. package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
  62. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  63. package/dist/src/cli/commands/plan/agent-invoker.js +1 -1
  64. package/dist/src/cli/commands/repair-status-desync.js +1 -1
  65. package/dist/src/cli/commands/repair-status-desync.js.map +1 -1
  66. package/dist/src/cli/commands/revert-wip-limit.js +1 -1
  67. package/dist/src/cli/commands/revert-wip-limit.js.map +1 -1
  68. package/dist/src/cli/commands/sync-specs.js +1 -1
  69. package/dist/src/cli/commands/sync-specs.js.map +1 -1
  70. package/dist/src/cli/helpers/init/initial-increment-generator.js +1 -1
  71. package/dist/src/cli/helpers/init/initial-increment-generator.js.map +1 -1
  72. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  73. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +15 -36
  74. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  75. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  76. package/dist/src/cli/helpers/issue-tracker/index.js +12 -31
  77. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  78. package/dist/src/cli/helpers/issue-tracker/types.d.ts +6 -1
  79. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  80. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  81. package/dist/src/config/import-config.js +1 -1
  82. package/dist/src/config/import-config.js.map +1 -1
  83. package/dist/src/config/types.d.ts +203 -1208
  84. package/dist/src/config/types.d.ts.map +1 -1
  85. package/dist/src/core/ac-test-validator-cli.js +1 -1
  86. package/dist/src/core/ac-test-validator-cli.js.map +1 -1
  87. package/dist/src/core/ac-test-validator.js +1 -1
  88. package/dist/src/core/ac-test-validator.js.map +1 -1
  89. package/dist/src/core/brownfield/analyzer.js +1 -1
  90. package/dist/src/core/brownfield/analyzer.js.map +1 -1
  91. package/dist/src/core/brownfield/importer.js +1 -1
  92. package/dist/src/core/brownfield/importer.js.map +1 -1
  93. package/dist/src/core/cicd/config-loader.js +1 -1
  94. package/dist/src/core/cicd/config-loader.js.map +1 -1
  95. package/dist/src/core/cicd/notifier.js +1 -1
  96. package/dist/src/core/cicd/notifier.js.map +1 -1
  97. package/dist/src/core/cicd/parent-repo-validator.js +1 -1
  98. package/dist/src/core/cicd/parent-repo-validator.js.map +1 -1
  99. package/dist/src/core/cicd/state-manager.js +1 -1
  100. package/dist/src/core/cicd/state-manager.js.map +1 -1
  101. package/dist/src/core/config/types.d.ts +46 -12
  102. package/dist/src/core/config/types.d.ts.map +1 -1
  103. package/dist/src/core/config/types.js +0 -5
  104. package/dist/src/core/config/types.js.map +1 -1
  105. package/dist/src/core/config-manager.js +1 -1
  106. package/dist/src/core/config-manager.js.map +1 -1
  107. package/dist/src/core/cost-tracker.js +1 -1
  108. package/dist/src/core/cost-tracker.js.map +1 -1
  109. package/dist/src/core/deduplication/command-deduplicator.js +1 -1
  110. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -1
  111. package/dist/src/core/feature-deleter/audit-logger.d.ts +30 -0
  112. package/dist/src/core/feature-deleter/audit-logger.d.ts.map +1 -0
  113. package/dist/src/core/feature-deleter/audit-logger.js +77 -0
  114. package/dist/src/core/feature-deleter/audit-logger.js.map +1 -0
  115. package/dist/src/core/feature-deleter/confirmation-manager.d.ts +39 -0
  116. package/dist/src/core/feature-deleter/confirmation-manager.d.ts.map +1 -0
  117. package/dist/src/core/feature-deleter/confirmation-manager.js +89 -0
  118. package/dist/src/core/feature-deleter/confirmation-manager.js.map +1 -0
  119. package/dist/src/core/feature-deleter/deletion-transaction.d.ts +51 -0
  120. package/dist/src/core/feature-deleter/deletion-transaction.d.ts.map +1 -0
  121. package/dist/src/core/feature-deleter/deletion-transaction.js +185 -0
  122. package/dist/src/core/feature-deleter/deletion-transaction.js.map +1 -0
  123. package/dist/src/core/feature-deleter/git-service.d.ts +43 -0
  124. package/dist/src/core/feature-deleter/git-service.d.ts.map +1 -0
  125. package/dist/src/core/feature-deleter/git-service.js +127 -0
  126. package/dist/src/core/feature-deleter/git-service.js.map +1 -0
  127. package/dist/src/core/feature-deleter/github-service.d.ts +36 -0
  128. package/dist/src/core/feature-deleter/github-service.d.ts.map +1 -0
  129. package/dist/src/core/feature-deleter/github-service.js +102 -0
  130. package/dist/src/core/feature-deleter/github-service.js.map +1 -0
  131. package/dist/src/core/feature-deleter/index.d.ts +35 -0
  132. package/dist/src/core/feature-deleter/index.d.ts.map +1 -0
  133. package/dist/src/core/feature-deleter/index.js +199 -0
  134. package/dist/src/core/feature-deleter/index.js.map +1 -0
  135. package/dist/src/core/feature-deleter/types.d.ts +179 -0
  136. package/dist/src/core/feature-deleter/types.d.ts.map +1 -0
  137. package/dist/src/core/feature-deleter/types.js +7 -0
  138. package/dist/src/core/feature-deleter/types.js.map +1 -0
  139. package/dist/src/core/feature-deleter/validator.d.ts +46 -0
  140. package/dist/src/core/feature-deleter/validator.d.ts.map +1 -0
  141. package/dist/src/core/feature-deleter/validator.js +231 -0
  142. package/dist/src/core/feature-deleter/validator.js.map +1 -0
  143. package/dist/src/core/hooks/HealthReporter.js +1 -1
  144. package/dist/src/core/hooks/HealthReporter.js.map +1 -1
  145. package/dist/src/core/hooks/HookAutoFixer.js +1 -1
  146. package/dist/src/core/hooks/HookAutoFixer.js.map +1 -1
  147. package/dist/src/core/hooks/HookScanner.js +1 -1
  148. package/dist/src/core/hooks/HookScanner.js.map +1 -1
  149. package/dist/src/core/i18n/language-manager.js +1 -1
  150. package/dist/src/core/i18n/language-manager.js.map +1 -1
  151. package/dist/src/core/i18n/locale-manager.js +1 -1
  152. package/dist/src/core/i18n/locale-manager.js.map +1 -1
  153. package/dist/src/core/i18n/system-prompt-injector.js +1 -1
  154. package/dist/src/core/i18n/system-prompt-injector.js.map +1 -1
  155. package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -1
  156. package/dist/src/core/increment/ac-status-manager.js +18 -4
  157. package/dist/src/core/increment/ac-status-manager.js.map +1 -1
  158. package/dist/src/core/increment/active-increment-manager.js +1 -1
  159. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  160. package/dist/src/core/increment/completion-validator.js +1 -1
  161. package/dist/src/core/increment/completion-validator.js.map +1 -1
  162. package/dist/src/core/increment/conflict-resolver.js +1 -1
  163. package/dist/src/core/increment/conflict-resolver.js.map +1 -1
  164. package/dist/src/core/increment/desync-detector.js +1 -1
  165. package/dist/src/core/increment/desync-detector.js.map +1 -1
  166. package/dist/src/core/increment/discipline-checker.js +1 -1
  167. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  168. package/dist/src/core/increment/duplicate-detector.js +1 -1
  169. package/dist/src/core/increment/duplicate-detector.js.map +1 -1
  170. package/dist/src/core/increment/increment-archiver.js +1 -1
  171. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  172. package/dist/src/core/increment/increment-reopener.js +1 -1
  173. package/dist/src/core/increment/increment-reopener.js.map +1 -1
  174. package/dist/src/core/increment/metadata-manager.js +1 -1
  175. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  176. package/dist/src/core/increment/metadata-validator.js +1 -1
  177. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  178. package/dist/src/core/increment/recent-work-scanner.js +1 -1
  179. package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
  180. package/dist/src/core/increment/spec-frontmatter-updater.js +1 -1
  181. package/dist/src/core/increment/spec-frontmatter-updater.js.map +1 -1
  182. package/dist/src/core/increment/status-auto-transition.js +1 -1
  183. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  184. package/dist/src/core/increment-status.js +1 -1
  185. package/dist/src/core/increment-status.js.map +1 -1
  186. package/dist/src/core/living-docs/content-distributor.js +1 -1
  187. package/dist/src/core/living-docs/content-distributor.js.map +1 -1
  188. package/dist/src/core/living-docs/cross-linker.js +1 -1
  189. package/dist/src/core/living-docs/cross-linker.js.map +1 -1
  190. package/dist/src/core/living-docs/feature-archiver.js +1 -1
  191. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  192. package/dist/src/core/living-docs/feature-id-manager.js +1 -1
  193. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  194. package/dist/src/core/living-docs/hierarchy-mapper.js +1 -1
  195. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  196. package/dist/src/core/living-docs/living-docs-sync.d.ts +14 -0
  197. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  198. package/dist/src/core/living-docs/living-docs-sync.js +72 -13
  199. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  200. package/dist/src/core/living-docs/project-detector.js +1 -1
  201. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  202. package/dist/src/core/living-docs/task-project-specific-generator.js +1 -1
  203. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -1
  204. package/dist/src/core/logging/prompt-logger.js +1 -1
  205. package/dist/src/core/logging/prompt-logger.js.map +1 -1
  206. package/dist/src/core/plugin-loader.js +1 -1
  207. package/dist/src/core/plugin-loader.js.map +1 -1
  208. package/dist/src/core/project-manager.js +1 -1
  209. package/dist/src/core/project-manager.js.map +1 -1
  210. package/dist/src/core/qa/qa-runner.js +1 -1
  211. package/dist/src/core/qa/qa-runner.js.map +1 -1
  212. package/dist/src/core/repo-structure/folder-detector.js +1 -1
  213. package/dist/src/core/repo-structure/folder-detector.js.map +1 -1
  214. package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
  215. package/dist/src/core/repo-structure/repo-bulk-discovery.js +20 -5
  216. package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
  217. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  218. package/dist/src/core/repo-structure/repo-structure-manager.js +29 -14
  219. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  220. package/dist/src/core/repo-structure/setup-state-manager.js +1 -1
  221. package/dist/src/core/repo-structure/setup-state-manager.js.map +1 -1
  222. package/dist/src/core/spec-detector.js +1 -1
  223. package/dist/src/core/spec-detector.js.map +1 -1
  224. package/dist/src/core/specs/spec-metadata-manager.js +1 -1
  225. package/dist/src/core/specs/spec-metadata-manager.js.map +1 -1
  226. package/dist/src/core/status-line/status-line-updater.js +1 -1
  227. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  228. package/dist/src/core/status-line-validator.js +1 -1
  229. package/dist/src/core/status-line-validator.js.map +1 -1
  230. package/dist/src/core/sync/bidirectional-engine.js +1 -1
  231. package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
  232. package/dist/src/core/sync/profile-manager.js +1 -1
  233. package/dist/src/core/sync/profile-manager.js.map +1 -1
  234. package/dist/src/core/sync/project-context.js +1 -1
  235. package/dist/src/core/sync/project-context.js.map +1 -1
  236. package/dist/src/core/sync/sync-event-logger.js +1 -1
  237. package/dist/src/core/sync/sync-event-logger.js.map +1 -1
  238. package/dist/src/core/types/config.js +1 -1
  239. package/dist/src/core/types/config.js.map +1 -1
  240. package/dist/src/core/us-completion-detector.d.ts +124 -0
  241. package/dist/src/core/us-completion-detector.d.ts.map +1 -0
  242. package/dist/src/core/us-completion-detector.js +270 -0
  243. package/dist/src/core/us-completion-detector.js.map +1 -0
  244. package/dist/src/core/utils/permission-checker.js +1 -1
  245. package/dist/src/core/utils/permission-checker.js.map +1 -1
  246. package/dist/src/core/workflow/autonomous-executor.js +1 -1
  247. package/dist/src/core/workflow/autonomous-executor.js.map +1 -1
  248. package/dist/src/core/workflow/backlog-scanner.js +1 -1
  249. package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
  250. package/dist/src/core/workflow/cost-estimator.js +1 -1
  251. package/dist/src/core/workflow/cost-estimator.js.map +1 -1
  252. package/dist/src/core/workflow/state-manager.js +1 -1
  253. package/dist/src/core/workflow/state-manager.js.map +1 -1
  254. package/dist/src/importers/duplicate-detector.js +1 -1
  255. package/dist/src/importers/duplicate-detector.js.map +1 -1
  256. package/dist/src/importers/item-converter.js +1 -1
  257. package/dist/src/importers/item-converter.js.map +1 -1
  258. package/dist/src/init/architecture/types.d.ts +33 -140
  259. package/dist/src/init/architecture/types.d.ts.map +1 -1
  260. package/dist/src/init/compliance/types.d.ts +30 -27
  261. package/dist/src/init/compliance/types.d.ts.map +1 -1
  262. package/dist/src/init/repo/types.d.ts +11 -34
  263. package/dist/src/init/repo/types.d.ts.map +1 -1
  264. package/dist/src/init/research/src/config/types.d.ts +15 -82
  265. package/dist/src/init/research/src/config/types.d.ts.map +1 -1
  266. package/dist/src/init/research/types.d.ts +38 -93
  267. package/dist/src/init/research/types.d.ts.map +1 -1
  268. package/dist/src/init/team/types.d.ts +4 -42
  269. package/dist/src/init/team/types.d.ts.map +1 -1
  270. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +1 -1
  271. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  272. package/dist/src/integrations/jira/jira-incremental-mapper.js +3 -3
  273. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  274. package/dist/src/living-docs/fs-id-allocator.js +1 -1
  275. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  276. package/dist/src/living-docs/id-registry.js +1 -1
  277. package/dist/src/living-docs/id-registry.js.map +1 -1
  278. package/dist/src/sync/external-item-sync-service.js +1 -1
  279. package/dist/src/sync/external-item-sync-service.js.map +1 -1
  280. package/dist/src/sync/format-preservation-sync.d.ts.map +1 -1
  281. package/dist/src/sync/format-preservation-sync.js +23 -5
  282. package/dist/src/sync/format-preservation-sync.js.map +1 -1
  283. package/dist/src/sync/frontmatter-updater.d.ts +57 -0
  284. package/dist/src/sync/frontmatter-updater.d.ts.map +1 -0
  285. package/dist/src/sync/frontmatter-updater.js +147 -0
  286. package/dist/src/sync/frontmatter-updater.js.map +1 -0
  287. package/dist/src/sync/sync-coordinator.d.ts +22 -1
  288. package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
  289. package/dist/src/sync/sync-coordinator.js +268 -21
  290. package/dist/src/sync/sync-coordinator.js.map +1 -1
  291. package/dist/src/sync/sync-metadata.js +1 -1
  292. package/dist/src/sync/sync-metadata.js.map +1 -1
  293. package/dist/src/types/living-docs-us-file.d.ts +18 -0
  294. package/dist/src/types/living-docs-us-file.d.ts.map +1 -1
  295. package/dist/src/types/living-docs-us-file.js.map +1 -1
  296. package/dist/src/utils/agents-md-compiler.js +1 -1
  297. package/dist/src/utils/agents-md-compiler.js.map +1 -1
  298. package/dist/src/utils/auto-install.js +1 -1
  299. package/dist/src/utils/auto-install.js.map +1 -1
  300. package/dist/src/utils/cost-reporter.js +1 -1
  301. package/dist/src/utils/cost-reporter.js.map +1 -1
  302. package/dist/src/utils/docs-preview/config-generator.js +1 -1
  303. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  304. package/dist/src/utils/docs-preview/docusaurus-setup.js +1 -1
  305. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  306. package/dist/src/utils/docs-preview/package-installer.js +1 -1
  307. package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
  308. package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
  309. package/dist/src/utils/docs-preview/sidebar-builder.js.map +1 -1
  310. package/dist/src/utils/env-file-generator.js +1 -1
  311. package/dist/src/utils/env-file-generator.js.map +1 -1
  312. package/dist/src/utils/external-resource-validator.js +1 -1
  313. package/dist/src/utils/external-resource-validator.js.map +1 -1
  314. package/dist/src/utils/fs-native.d.ts +51 -5
  315. package/dist/src/utils/fs-native.d.ts.map +1 -1
  316. package/dist/src/utils/fs-native.js +100 -5
  317. package/dist/src/utils/fs-native.js.map +1 -1
  318. package/dist/src/utils/plugin-validator.js +1 -1
  319. package/dist/src/utils/plugin-validator.js.map +1 -1
  320. package/dist/src/utils/project-detection.js +1 -1
  321. package/dist/src/utils/project-detection.js.map +1 -1
  322. package/dist/src/utils/project-validator.js +1 -1
  323. package/dist/src/utils/project-validator.js.map +1 -1
  324. package/dist/src/utils/spec-parser.js +1 -1
  325. package/dist/src/utils/spec-parser.js.map +1 -1
  326. package/dist/src/utils/spec-splitter.js +1 -1
  327. package/dist/src/utils/spec-splitter.js.map +1 -1
  328. package/dist/src/validators/ac-coverage-validator.js +1 -1
  329. package/dist/src/validators/ac-coverage-validator.js.map +1 -1
  330. package/package.json +5 -6
  331. package/plugins/specweave/.claude-plugin/plugin.json +17 -11
  332. package/plugins/specweave/agents/architect/AGENT.md +115 -45
  333. package/plugins/specweave/agents/code-standards-detective/AGENT.md +47 -0
  334. package/plugins/specweave/agents/docs-writer/AGENT.md +134 -1
  335. package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +1 -0
  336. package/plugins/specweave/agents/infrastructure/AGENT.md +48 -1
  337. package/plugins/specweave/agents/performance/AGENT.md +46 -0
  338. package/plugins/specweave/agents/pm/AGENT.md +115 -3
  339. package/plugins/specweave/agents/qa-lead/AGENT.md +40 -1
  340. package/plugins/specweave/agents/reflective-reviewer/AGENT.md +5 -0
  341. package/plugins/specweave/agents/security/AGENT.md +45 -0
  342. package/plugins/specweave/agents/tdd-orchestrator/AGENT.md +128 -1
  343. package/plugins/specweave/agents/tech-lead/AGENT.md +138 -1
  344. package/plugins/specweave/agents/test-aware-planner/AGENT.md +76 -6
  345. package/plugins/specweave/agents/translator/AGENT.md +132 -0
  346. package/plugins/specweave/commands/specweave-sync-progress.md +616 -0
  347. package/plugins/specweave/hooks/hooks.json +0 -9
  348. package/plugins/specweave/hooks/lib/update-status-line.sh +19 -0
  349. package/plugins/specweave/hooks/post-edit-write-consolidated.sh +335 -0
  350. package/plugins/specweave/hooks/post-increment-completion.sh +133 -0
  351. package/plugins/specweave/hooks/post-metadata-change.sh +58 -19
  352. package/plugins/specweave/hooks/post-task-completion.sh +100 -9
  353. package/plugins/specweave/hooks/pre-edit-spec.sh +0 -11
  354. package/plugins/specweave/hooks/pre-edit-write-consolidated.sh +225 -0
  355. package/plugins/specweave/hooks/pre-task-completion.sh +11 -0
  356. package/plugins/specweave/hooks/pre-write-spec.sh +0 -11
  357. package/plugins/specweave/hooks/shared/bulk-operation-detector.sh +167 -0
  358. package/plugins/specweave/lib/hooks/consolidated-sync.js +78 -3
  359. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +135 -0
  360. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +18 -4
  361. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -1
  362. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js +1 -1
  363. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js.map +1 -1
  364. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +1 -1
  365. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
  366. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +1 -1
  367. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  368. package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
  369. package/plugins/specweave/skills/progress-sync/SKILL.md +405 -0
  370. package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
  371. package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
  372. package/plugins/specweave-ado/lib/conflict-resolver.js +1 -1
  373. package/plugins/specweave-ado/lib/conflict-resolver.ts +1 -1
  374. package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +1 -1
  375. package/plugins/specweave-frontend/agents/frontend-architect/AGENT.md +5 -0
  376. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -15
  377. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +480 -0
  378. package/plugins/specweave-github/hooks/README.md +34 -25
  379. package/plugins/specweave-github/lib/CodeValidator.js +1 -1
  380. package/plugins/specweave-github/lib/CodeValidator.ts +2 -2
  381. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
  382. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +1 -1
  383. package/plugins/specweave-github/lib/github-client-v2.js +59 -1
  384. package/plugins/specweave-github/lib/github-client-v2.ts +82 -1
  385. package/plugins/specweave-github/lib/github-issue-updater.js +1 -1
  386. package/plugins/specweave-github/lib/github-issue-updater.ts +1 -1
  387. package/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
  388. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +1 -1
  389. package/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
  390. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +1 -1
  391. package/plugins/specweave-github/lib/user-story-issue-builder.js +4 -4
  392. package/plugins/specweave-github/lib/user-story-issue-builder.ts +7 -6
  393. package/plugins/specweave-infrastructure/agents/devops/AGENT.md +48 -1
  394. package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +6 -1
  395. package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +6 -1
  396. package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +6 -1
  397. package/plugins/specweave-infrastructure/agents/sre/AGENT.md +5 -0
  398. package/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
  399. package/plugins/specweave-jira/lib/jira-epic-sync.ts +1 -1
  400. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +5 -0
  401. package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +47 -2
  402. package/plugins/specweave-ml/agents/data-scientist/AGENT.md +1 -1
  403. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +5 -0
  404. package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +6 -1
  405. package/plugins/specweave-payments/agents/payment-integration/AGENT.md +1 -1
  406. package/plugins/specweave-release/commands/specweave-release-npm.md +130 -2
  407. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +198 -0
  408. package/plugins/specweave-ado/hooks/hooks.json +0 -15
  409. package/plugins/specweave-github/hooks/hooks.json +0 -15
  410. package/plugins/specweave-jira/hooks/hooks.json +0 -15
  411. package/plugins/specweave-release/hooks/hooks.json +0 -15
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Git Service for Safe Feature Deletion
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-018, T-019, T-020, T-021, T-022, T-023
5
+ */
6
+ import { consoleLogger } from '../../utils/logger.js';
7
+ import { execFileNoThrow } from '../../utils/execFileNoThrow.js';
8
+ import fs from 'fs/promises';
9
+ import path from 'path';
10
+ /**
11
+ * Feature Deletion Git Service
12
+ * Handles git operations for feature deletion
13
+ */
14
+ export class FeatureDeletionGitService {
15
+ constructor(options) {
16
+ this.projectRoot = options.projectRoot;
17
+ this.logger = options.logger || consoleLogger;
18
+ }
19
+ /**
20
+ * T-018, T-023: Stage git deletions (git rm for tracked, fs.unlink for untracked)
21
+ */
22
+ async stageGitDeletions(files) {
23
+ let tracked = 0;
24
+ let untracked = 0;
25
+ // Check if git repo exists
26
+ const isGitRepo = await this.detectGitRepository();
27
+ if (!isGitRepo) {
28
+ throw new Error('Not a git repository. Use --no-git to skip git operations.');
29
+ }
30
+ for (const file of files) {
31
+ const isTracked = await this.isFileTracked(file);
32
+ if (isTracked) {
33
+ // Use git rm for tracked files
34
+ await execFileNoThrow('git', ['rm', file], { cwd: this.projectRoot });
35
+ tracked++;
36
+ }
37
+ else {
38
+ // Use fs.unlink for untracked files
39
+ await fs.unlink(file);
40
+ untracked++;
41
+ }
42
+ }
43
+ this.logger.log(`Staged ${tracked} tracked files (git rm), ${untracked} untracked files (unlink)`);
44
+ return { tracked, untracked };
45
+ }
46
+ /**
47
+ * T-019: Create git commit with descriptive message
48
+ */
49
+ async commitDeletion(featureId, validation) {
50
+ // Get user from git config
51
+ const user = await this.getGitUser();
52
+ const timestamp = new Date().toISOString();
53
+ const mode = validation.mode;
54
+ // Format commit message
55
+ const message = [
56
+ `feat: delete feature ${featureId}`,
57
+ '',
58
+ `- Deleted ${validation.files.length} files`,
59
+ `- Living docs: ${validation.livingDocsFiles.length}`,
60
+ `- User stories: ${validation.userStoryFiles.length}`,
61
+ validation.orphanedIncrements.length > 0 ? `- Orphaned increments: ${validation.orphanedIncrements.join(', ')} (force mode)` : '',
62
+ '',
63
+ `Deleted by: ${user}`,
64
+ `Timestamp: ${timestamp}`,
65
+ `Mode: ${mode}`
66
+ ].filter(Boolean).join('\n');
67
+ // Create commit
68
+ await execFileNoThrow('git', ['commit', '-m', message], { cwd: this.projectRoot });
69
+ // Get commit SHA
70
+ const result = await execFileNoThrow('git', ['rev-parse', 'HEAD'], { cwd: this.projectRoot });
71
+ const sha = result.stdout.trim();
72
+ this.logger.log(`Created commit ${sha.substring(0, 7)}`);
73
+ return sha;
74
+ }
75
+ /**
76
+ * T-021: Unstage git deletions (rollback)
77
+ */
78
+ async unstageGitDeletions(files) {
79
+ for (const file of files) {
80
+ try {
81
+ await execFileNoThrow('git', ['reset', 'HEAD', '--', file], { cwd: this.projectRoot });
82
+ }
83
+ catch (error) {
84
+ this.logger.warn(`Failed to unstage ${file}: ${error}`);
85
+ }
86
+ }
87
+ this.logger.log(`Unstaged ${files.length} files`);
88
+ }
89
+ /**
90
+ * T-023: Detect git repository
91
+ */
92
+ async detectGitRepository() {
93
+ try {
94
+ const gitDir = path.join(this.projectRoot, '.git');
95
+ await fs.access(gitDir);
96
+ return true;
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ /**
103
+ * Check if file is tracked by git
104
+ */
105
+ async isFileTracked(file) {
106
+ try {
107
+ await execFileNoThrow('git', ['ls-files', '--error-unmatch', file], { cwd: this.projectRoot });
108
+ return true;
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ }
114
+ /**
115
+ * Get git user name
116
+ */
117
+ async getGitUser() {
118
+ try {
119
+ const result = await execFileNoThrow('git', ['config', 'user.name'], { cwd: this.projectRoot });
120
+ return result.stdout.trim();
121
+ }
122
+ catch {
123
+ return process.env.USER || 'unknown';
124
+ }
125
+ }
126
+ }
127
+ //# sourceMappingURL=git-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-service.js","sourceRoot":"","sources":["../../../../src/core/feature-deleter/git-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * GitHub Service for Feature Deletion
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-024, T-025, T-026, T-027, T-028, T-029
5
+ */
6
+ import { GitHubServiceOptions, GitHubIssue } from './types.js';
7
+ /**
8
+ * Feature Deletion GitHub Service
9
+ * Handles GitHub issue cleanup via gh CLI
10
+ */
11
+ export declare class FeatureDeletionGitHubService {
12
+ private owner;
13
+ private repo;
14
+ private logger;
15
+ constructor(options: GitHubServiceOptions);
16
+ /**
17
+ * T-024: Find all GitHub issues matching feature pattern
18
+ */
19
+ findFeatureIssues(featureId: string): Promise<GitHubIssue[]>;
20
+ /**
21
+ * T-025, T-028, T-029: Close GitHub issues with retry logic
22
+ */
23
+ deleteIssues(issues: GitHubIssue[]): Promise<{
24
+ closed: number;
25
+ failed: number;
26
+ }>;
27
+ /**
28
+ * T-029: Close single issue with exponential backoff retry
29
+ */
30
+ private closeIssueWithRetry;
31
+ /**
32
+ * Sleep helper for retry delay
33
+ */
34
+ private sleep;
35
+ }
36
+ //# sourceMappingURL=github-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-service.d.ts","sourceRoot":"","sources":["../../../../src/core/feature-deleter/github-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/D;;;GAGG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,oBAAoB;IAMzC;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA+BlE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBtF;;OAEG;YACW,mBAAmB;IA6BjC;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * GitHub Service for Feature Deletion
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-024, T-025, T-026, T-027, T-028, T-029
5
+ */
6
+ import { consoleLogger } from '../../utils/logger.js';
7
+ import { execFileNoThrow } from '../../utils/execFileNoThrow.js';
8
+ /**
9
+ * Feature Deletion GitHub Service
10
+ * Handles GitHub issue cleanup via gh CLI
11
+ */
12
+ export class FeatureDeletionGitHubService {
13
+ constructor(options) {
14
+ this.owner = options.owner;
15
+ this.repo = options.repo;
16
+ this.logger = options.logger || consoleLogger;
17
+ }
18
+ /**
19
+ * T-024: Find all GitHub issues matching feature pattern
20
+ */
21
+ async findFeatureIssues(featureId) {
22
+ try {
23
+ // Search for issues with [FS-XXX] in title
24
+ const query = `repo:${this.owner}/${this.repo} is:issue "[${featureId}]" in:title`;
25
+ const result = await execFileNoThrow('gh', [
26
+ 'issue',
27
+ 'list',
28
+ '--search', query,
29
+ '--json', 'number,title,url',
30
+ '--limit', '50'
31
+ ]);
32
+ const issues = JSON.parse(result.stdout);
33
+ // Filter to exact pattern: [FS-XXX][US-YYY]
34
+ const pattern = new RegExp(`\\[${featureId}\\]\\[US-\\d{3}\\]`);
35
+ const filteredIssues = issues.filter((issue) => pattern.test(issue.title));
36
+ this.logger.log(`Found ${filteredIssues.length} GitHub issues for ${featureId}`);
37
+ return filteredIssues.map((issue) => ({
38
+ number: issue.number,
39
+ title: issue.title,
40
+ url: issue.url
41
+ }));
42
+ }
43
+ catch (error) {
44
+ this.logger.warn(`GitHub issue search failed: ${error}`);
45
+ return [];
46
+ }
47
+ }
48
+ /**
49
+ * T-025, T-028, T-029: Close GitHub issues with retry logic
50
+ */
51
+ async deleteIssues(issues) {
52
+ let closed = 0;
53
+ let failed = 0;
54
+ for (const issue of issues) {
55
+ const success = await this.closeIssueWithRetry(issue);
56
+ if (success) {
57
+ closed++;
58
+ }
59
+ else {
60
+ failed++;
61
+ }
62
+ }
63
+ this.logger.log(`GitHub cleanup: ${closed} closed, ${failed} failed`);
64
+ return { closed, failed };
65
+ }
66
+ /**
67
+ * T-029: Close single issue with exponential backoff retry
68
+ */
69
+ async closeIssueWithRetry(issue, attempt = 1) {
70
+ try {
71
+ await execFileNoThrow('gh', [
72
+ 'issue',
73
+ 'close',
74
+ issue.number.toString(),
75
+ '--comment',
76
+ 'Closed by feature deletion automation'
77
+ ]);
78
+ this.logger.log(`Closed issue #${issue.number}: ${issue.title}`);
79
+ return true;
80
+ }
81
+ catch (error) {
82
+ const errorMsg = error.toString();
83
+ // T-028: Handle rate limit with retry
84
+ if (errorMsg.includes('rate limit') && attempt <= 3) {
85
+ const delay = Math.pow(2, attempt) * 1000; // 2s, 4s, 8s
86
+ this.logger.warn(`Rate limit hit, retrying in ${delay}ms (attempt ${attempt}/3)`);
87
+ await this.sleep(delay);
88
+ return this.closeIssueWithRetry(issue, attempt + 1);
89
+ }
90
+ // T-028: Handle other errors (non-blocking)
91
+ this.logger.warn(`Failed to close issue #${issue.number}: ${error}`);
92
+ return false;
93
+ }
94
+ }
95
+ /**
96
+ * Sleep helper for retry delay
97
+ */
98
+ sleep(ms) {
99
+ return new Promise(resolve => setTimeout(resolve, ms));
100
+ }
101
+ }
102
+ //# sourceMappingURL=github-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-service.js","sourceRoot":"","sources":["../../../../src/core/feature-deleter/github-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Feature Deleter - Main Orchestrator
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-012, T-013, T-014, T-015, T-016, T-017, T-036
5
+ */
6
+ import { FeatureDeleterOptions, DeletionOptions, DeletionResult } from './types.js';
7
+ /**
8
+ * Feature Deleter - Orchestrates safe feature deletion workflow
9
+ * Steps: Validate → Confirm → Execute Transaction → Audit
10
+ */
11
+ export declare class FeatureDeleter {
12
+ private projectRoot;
13
+ private logger;
14
+ private validator;
15
+ private confirmationManager;
16
+ private auditLogger;
17
+ constructor(options?: FeatureDeleterOptions);
18
+ /**
19
+ * T-036: Execute feature deletion workflow
20
+ */
21
+ execute(featureId: string, options: DeletionOptions): Promise<DeletionResult>;
22
+ /**
23
+ * T-012, T-013, T-014, T-015: Handle dry-run mode
24
+ */
25
+ private handleDryRun;
26
+ /**
27
+ * Handle GitHub issue cleanup
28
+ */
29
+ private handleGitHubCleanup;
30
+ /**
31
+ * Extract GitHub owner and repo from git remote URL
32
+ */
33
+ private getGitHubOwnerRepo;
34
+ }
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/feature-deleter/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOpF;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,WAAW,CAA6B;gBAEpC,OAAO,GAAE,qBAA0B;IAa/C;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAsFnF;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,mBAAmB;IAwCjC;;OAEG;YACW,kBAAkB;CAgCjC"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Feature Deleter - Main Orchestrator
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-012, T-013, T-014, T-015, T-016, T-017, T-036
5
+ */
6
+ import { consoleLogger } from '../../utils/logger.js';
7
+ import { FeatureValidator } from './validator.js';
8
+ import { ConfirmationManager } from './confirmation-manager.js';
9
+ import { DeletionTransaction } from './deletion-transaction.js';
10
+ import { FeatureDeletionGitHubService } from './github-service.js';
11
+ import { FeatureDeletionAuditLogger } from './audit-logger.js';
12
+ /**
13
+ * Feature Deleter - Orchestrates safe feature deletion workflow
14
+ * Steps: Validate → Confirm → Execute Transaction → Audit
15
+ */
16
+ export class FeatureDeleter {
17
+ constructor(options = {}) {
18
+ this.projectRoot = options.projectRoot || process.cwd();
19
+ this.logger = options.logger || consoleLogger;
20
+ this.validator = new FeatureValidator({
21
+ projectRoot: this.projectRoot,
22
+ logger: this.logger
23
+ });
24
+ this.confirmationManager = new ConfirmationManager(this.logger);
25
+ this.auditLogger = new FeatureDeletionAuditLogger(this.projectRoot, this.logger);
26
+ }
27
+ /**
28
+ * T-036: Execute feature deletion workflow
29
+ */
30
+ async execute(featureId, options) {
31
+ try {
32
+ // Step 1: Validate
33
+ const validation = await this.validator.validate(featureId, options);
34
+ // T-013, T-014, T-015: Show dry-run report
35
+ if (options.dryRun) {
36
+ return this.handleDryRun(validation, options);
37
+ }
38
+ // T-003: Display validation report
39
+ const report = this.validator.formatValidationReport(validation);
40
+ console.log('\n' + report + '\n');
41
+ // Check validation errors
42
+ if (!validation.valid) {
43
+ await this.auditLogger.logDeletion({
44
+ featureId,
45
+ mode: validation.mode,
46
+ filesDeleted: 0,
47
+ status: 'failed',
48
+ errors: validation.errors
49
+ });
50
+ return {
51
+ success: false,
52
+ featureId,
53
+ filesDeleted: 0,
54
+ errors: validation.errors,
55
+ warnings: validation.warnings
56
+ };
57
+ }
58
+ // Step 2: Confirm
59
+ const confirmed = await this.confirmationManager.confirm(validation, options);
60
+ if (!confirmed) {
61
+ console.log('\nDeletion cancelled by user.');
62
+ return {
63
+ success: false,
64
+ featureId,
65
+ filesDeleted: 0,
66
+ errors: ['Cancelled by user']
67
+ };
68
+ }
69
+ // Step 3: Execute transaction
70
+ const transaction = new DeletionTransaction({
71
+ projectRoot: this.projectRoot,
72
+ logger: this.logger
73
+ });
74
+ const result = await transaction.execute(validation, options);
75
+ // Step 4: GitHub cleanup (optional)
76
+ let githubIssuesClosed = 0;
77
+ if (!options.noGithub) {
78
+ githubIssuesClosed = await this.handleGitHubCleanup(validation, options);
79
+ result.githubIssuesClosed = githubIssuesClosed;
80
+ }
81
+ // Step 5: Audit log
82
+ await this.auditLogger.logDeletion({
83
+ featureId,
84
+ mode: validation.mode,
85
+ filesDeleted: result.filesDeleted,
86
+ commitSha: result.commitSha,
87
+ orphanedIncrements: result.orphanedIncrements,
88
+ githubIssuesClosed,
89
+ status: 'success'
90
+ });
91
+ return result;
92
+ }
93
+ catch (error) {
94
+ // Log failure
95
+ await this.auditLogger.logDeletion({
96
+ featureId,
97
+ mode: options.force ? 'force' : 'safe',
98
+ filesDeleted: 0,
99
+ status: 'failed',
100
+ errors: [error.message || error.toString()]
101
+ });
102
+ throw error;
103
+ }
104
+ }
105
+ /**
106
+ * T-012, T-013, T-014, T-015: Handle dry-run mode
107
+ */
108
+ async handleDryRun(validation, options) {
109
+ console.log('\n[DRY-RUN] Deletion Plan:\n');
110
+ console.log(this.validator.formatValidationReport(validation));
111
+ console.log('\nFiles to delete:');
112
+ validation.files.forEach((f) => console.log(` ${f}`));
113
+ console.log('\nGit operations:');
114
+ console.log(` - git rm (tracked files)`);
115
+ console.log(` - rm (untracked files)`);
116
+ console.log(` - git commit -m "feat: delete feature ${validation.featureId}"`);
117
+ if (!options.noGithub && validation.githubIssues?.length > 0) {
118
+ console.log('\nGitHub operations:');
119
+ validation.githubIssues.forEach((issue) => {
120
+ console.log(` - Close issue #${issue.number}: ${issue.title}`);
121
+ });
122
+ }
123
+ console.log('\n✓ Dry-run complete (no changes made)\n');
124
+ return {
125
+ success: true,
126
+ featureId: validation.featureId,
127
+ filesDeleted: 0,
128
+ warnings: ['Dry-run mode - no changes made']
129
+ };
130
+ }
131
+ /**
132
+ * Handle GitHub issue cleanup
133
+ */
134
+ async handleGitHubCleanup(validation, options) {
135
+ try {
136
+ // Extract owner/repo from git remote
137
+ const { owner, repo } = await this.getGitHubOwnerRepo();
138
+ if (!owner || !repo) {
139
+ this.logger.warn('GitHub cleanup skipped: Unable to detect owner/repo from git remote');
140
+ return 0;
141
+ }
142
+ // Find GitHub issues
143
+ const githubService = new FeatureDeletionGitHubService({
144
+ owner,
145
+ repo,
146
+ logger: this.logger
147
+ });
148
+ const issues = await githubService.findFeatureIssues(validation.featureId);
149
+ if (issues.length === 0) {
150
+ return 0;
151
+ }
152
+ // T-026: Confirm GitHub cleanup
153
+ const confirmed = await this.confirmationManager.confirmGitHub(issues.length, options);
154
+ if (!confirmed) {
155
+ console.log('GitHub cleanup skipped.');
156
+ return 0;
157
+ }
158
+ // Close issues
159
+ const { closed } = await githubService.deleteIssues(issues);
160
+ return closed;
161
+ }
162
+ catch (error) {
163
+ this.logger.warn(`GitHub cleanup failed (non-critical): ${error}`);
164
+ return 0;
165
+ }
166
+ }
167
+ /**
168
+ * Extract GitHub owner and repo from git remote URL
169
+ */
170
+ async getGitHubOwnerRepo() {
171
+ try {
172
+ const { execFileNoThrow } = await import('../../utils/execFileNoThrow.js');
173
+ const result = await execFileNoThrow('git', ['remote', 'get-url', 'origin'], {
174
+ cwd: this.projectRoot
175
+ });
176
+ if (!result.success) {
177
+ return { owner: '', repo: '' };
178
+ }
179
+ const remoteUrl = result.stdout.trim();
180
+ // Parse GitHub URL patterns:
181
+ // - https://github.com/owner/repo.git
182
+ // - git@github.com:owner/repo.git
183
+ // - https://github.com/owner/repo
184
+ const httpsMatch = remoteUrl.match(/github\.com[/:]([\w-]+)\/([\w-]+?)(\.git)?$/);
185
+ if (httpsMatch) {
186
+ return {
187
+ owner: httpsMatch[1],
188
+ repo: httpsMatch[2]
189
+ };
190
+ }
191
+ return { owner: '', repo: '' };
192
+ }
193
+ catch (error) {
194
+ this.logger.warn(`Failed to extract GitHub owner/repo: ${error}`);
195
+ return { owner: '', repo: '' };
196
+ }
197
+ }
198
+ }
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/feature-deleter/index.ts"],"names":[],"mappings":"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"}