specweave 0.24.13 → 0.26.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/CLAUDE.md +586 -18
  2. package/bin/specweave.js +14 -0
  3. package/dist/plugins/specweave-github/lib/CodeValidator.js +2 -2
  4. package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -1
  5. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
  6. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -1
  7. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  8. package/dist/plugins/specweave-github/lib/github-client-v2.js +17 -1
  9. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  10. package/dist/plugins/specweave-github/lib/github-issue-updater.js +1 -1
  11. package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +1 -1
  12. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
  13. package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
  14. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
  15. package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +1 -1
  16. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  17. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +7 -6
  18. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  19. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
  20. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js.map +1 -1
  21. package/dist/src/adapters/adapter-base.js +1 -1
  22. package/dist/src/adapters/adapter-base.js.map +1 -1
  23. package/dist/src/adapters/adapter-loader.js +1 -1
  24. package/dist/src/adapters/adapter-loader.js.map +1 -1
  25. package/dist/src/adapters/agents-md-generator.js +1 -1
  26. package/dist/src/adapters/agents-md-generator.js.map +1 -1
  27. package/dist/src/adapters/claude/adapter.js +1 -1
  28. package/dist/src/adapters/claude/adapter.js.map +1 -1
  29. package/dist/src/adapters/claude-md-generator.js +1 -1
  30. package/dist/src/adapters/claude-md-generator.js.map +1 -1
  31. package/dist/src/adapters/codex/adapter.js +1 -1
  32. package/dist/src/adapters/codex/adapter.js.map +1 -1
  33. package/dist/src/adapters/cursor/adapter.js +1 -1
  34. package/dist/src/adapters/cursor/adapter.js.map +1 -1
  35. package/dist/src/adapters/doc-generator.js +1 -1
  36. package/dist/src/adapters/doc-generator.js.map +1 -1
  37. package/dist/src/adapters/gemini/adapter.js +1 -1
  38. package/dist/src/adapters/gemini/adapter.js.map +1 -1
  39. package/dist/src/adapters/generic/adapter.js +1 -1
  40. package/dist/src/adapters/generic/adapter.js.map +1 -1
  41. package/dist/src/cli/commands/cicd-monitor.js +1 -1
  42. package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
  43. package/dist/src/cli/commands/delete-feature.d.ts +14 -0
  44. package/dist/src/cli/commands/delete-feature.d.ts.map +1 -0
  45. package/dist/src/cli/commands/delete-feature.js +87 -0
  46. package/dist/src/cli/commands/delete-feature.js.map +1 -0
  47. package/dist/src/cli/commands/detect-specs.js +1 -1
  48. package/dist/src/cli/commands/detect-specs.js.map +1 -1
  49. package/dist/src/cli/commands/import-external.js +1 -1
  50. package/dist/src/cli/commands/import-external.js.map +1 -1
  51. package/dist/src/cli/commands/init.d.ts.map +1 -1
  52. package/dist/src/cli/commands/init.js +39 -49
  53. package/dist/src/cli/commands/init.js.map +1 -1
  54. package/dist/src/cli/commands/install.js +1 -1
  55. package/dist/src/cli/commands/install.js.map +1 -1
  56. package/dist/src/cli/commands/list.js +1 -1
  57. package/dist/src/cli/commands/list.js.map +1 -1
  58. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  59. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  60. package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
  61. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  62. package/dist/src/cli/commands/plan/agent-invoker.js +1 -1
  63. package/dist/src/cli/commands/repair-status-desync.js +1 -1
  64. package/dist/src/cli/commands/repair-status-desync.js.map +1 -1
  65. package/dist/src/cli/commands/revert-wip-limit.js +1 -1
  66. package/dist/src/cli/commands/revert-wip-limit.js.map +1 -1
  67. package/dist/src/cli/commands/sync-specs.js +1 -1
  68. package/dist/src/cli/commands/sync-specs.js.map +1 -1
  69. package/dist/src/cli/helpers/init/initial-increment-generator.js +1 -1
  70. package/dist/src/cli/helpers/init/initial-increment-generator.js.map +1 -1
  71. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  72. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +13 -46
  73. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  74. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  75. package/dist/src/cli/helpers/issue-tracker/index.js +12 -31
  76. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  77. package/dist/src/cli/helpers/issue-tracker/types.d.ts +6 -1
  78. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  79. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  80. package/dist/src/config/import-config.js +1 -1
  81. package/dist/src/config/import-config.js.map +1 -1
  82. package/dist/src/core/ac-test-validator-cli.js +1 -1
  83. package/dist/src/core/ac-test-validator-cli.js.map +1 -1
  84. package/dist/src/core/ac-test-validator.js +1 -1
  85. package/dist/src/core/ac-test-validator.js.map +1 -1
  86. package/dist/src/core/brownfield/analyzer.js +1 -1
  87. package/dist/src/core/brownfield/analyzer.js.map +1 -1
  88. package/dist/src/core/brownfield/importer.js +1 -1
  89. package/dist/src/core/brownfield/importer.js.map +1 -1
  90. package/dist/src/core/cicd/config-loader.js +1 -1
  91. package/dist/src/core/cicd/config-loader.js.map +1 -1
  92. package/dist/src/core/cicd/notifier.js +1 -1
  93. package/dist/src/core/cicd/notifier.js.map +1 -1
  94. package/dist/src/core/cicd/parent-repo-validator.js +1 -1
  95. package/dist/src/core/cicd/parent-repo-validator.js.map +1 -1
  96. package/dist/src/core/cicd/state-manager.js +1 -1
  97. package/dist/src/core/cicd/state-manager.js.map +1 -1
  98. package/dist/src/core/config-manager.js +1 -1
  99. package/dist/src/core/config-manager.js.map +1 -1
  100. package/dist/src/core/cost-tracker.js +1 -1
  101. package/dist/src/core/cost-tracker.js.map +1 -1
  102. package/dist/src/core/deduplication/command-deduplicator.js +1 -1
  103. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -1
  104. package/dist/src/core/feature-deleter/audit-logger.d.ts +30 -0
  105. package/dist/src/core/feature-deleter/audit-logger.d.ts.map +1 -0
  106. package/dist/src/core/feature-deleter/audit-logger.js +77 -0
  107. package/dist/src/core/feature-deleter/audit-logger.js.map +1 -0
  108. package/dist/src/core/feature-deleter/confirmation-manager.d.ts +39 -0
  109. package/dist/src/core/feature-deleter/confirmation-manager.d.ts.map +1 -0
  110. package/dist/src/core/feature-deleter/confirmation-manager.js +89 -0
  111. package/dist/src/core/feature-deleter/confirmation-manager.js.map +1 -0
  112. package/dist/src/core/feature-deleter/deletion-transaction.d.ts +51 -0
  113. package/dist/src/core/feature-deleter/deletion-transaction.d.ts.map +1 -0
  114. package/dist/src/core/feature-deleter/deletion-transaction.js +185 -0
  115. package/dist/src/core/feature-deleter/deletion-transaction.js.map +1 -0
  116. package/dist/src/core/feature-deleter/git-service.d.ts +43 -0
  117. package/dist/src/core/feature-deleter/git-service.d.ts.map +1 -0
  118. package/dist/src/core/feature-deleter/git-service.js +127 -0
  119. package/dist/src/core/feature-deleter/git-service.js.map +1 -0
  120. package/dist/src/core/feature-deleter/github-service.d.ts +36 -0
  121. package/dist/src/core/feature-deleter/github-service.d.ts.map +1 -0
  122. package/dist/src/core/feature-deleter/github-service.js +102 -0
  123. package/dist/src/core/feature-deleter/github-service.js.map +1 -0
  124. package/dist/src/core/feature-deleter/index.d.ts +35 -0
  125. package/dist/src/core/feature-deleter/index.d.ts.map +1 -0
  126. package/dist/src/core/feature-deleter/index.js +199 -0
  127. package/dist/src/core/feature-deleter/index.js.map +1 -0
  128. package/dist/src/core/feature-deleter/types.d.ts +179 -0
  129. package/dist/src/core/feature-deleter/types.d.ts.map +1 -0
  130. package/dist/src/core/feature-deleter/types.js +7 -0
  131. package/dist/src/core/feature-deleter/types.js.map +1 -0
  132. package/dist/src/core/feature-deleter/validator.d.ts +46 -0
  133. package/dist/src/core/feature-deleter/validator.d.ts.map +1 -0
  134. package/dist/src/core/feature-deleter/validator.js +231 -0
  135. package/dist/src/core/feature-deleter/validator.js.map +1 -0
  136. package/dist/src/core/hooks/HealthReporter.js +1 -1
  137. package/dist/src/core/hooks/HealthReporter.js.map +1 -1
  138. package/dist/src/core/hooks/HookAutoFixer.js +1 -1
  139. package/dist/src/core/hooks/HookAutoFixer.js.map +1 -1
  140. package/dist/src/core/hooks/HookScanner.js +1 -1
  141. package/dist/src/core/hooks/HookScanner.js.map +1 -1
  142. package/dist/src/core/i18n/language-manager.js +1 -1
  143. package/dist/src/core/i18n/language-manager.js.map +1 -1
  144. package/dist/src/core/i18n/locale-manager.js +1 -1
  145. package/dist/src/core/i18n/locale-manager.js.map +1 -1
  146. package/dist/src/core/i18n/system-prompt-injector.js +1 -1
  147. package/dist/src/core/i18n/system-prompt-injector.js.map +1 -1
  148. package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -1
  149. package/dist/src/core/increment/ac-status-manager.js +18 -4
  150. package/dist/src/core/increment/ac-status-manager.js.map +1 -1
  151. package/dist/src/core/increment/active-increment-manager.js +1 -1
  152. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  153. package/dist/src/core/increment/completion-validator.js +1 -1
  154. package/dist/src/core/increment/completion-validator.js.map +1 -1
  155. package/dist/src/core/increment/conflict-resolver.js +1 -1
  156. package/dist/src/core/increment/conflict-resolver.js.map +1 -1
  157. package/dist/src/core/increment/desync-detector.js +1 -1
  158. package/dist/src/core/increment/desync-detector.js.map +1 -1
  159. package/dist/src/core/increment/discipline-checker.js +1 -1
  160. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  161. package/dist/src/core/increment/duplicate-detector.js +1 -1
  162. package/dist/src/core/increment/duplicate-detector.js.map +1 -1
  163. package/dist/src/core/increment/increment-archiver.js +1 -1
  164. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  165. package/dist/src/core/increment/increment-reopener.js +1 -1
  166. package/dist/src/core/increment/increment-reopener.js.map +1 -1
  167. package/dist/src/core/increment/metadata-manager.js +1 -1
  168. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  169. package/dist/src/core/increment/metadata-validator.js +1 -1
  170. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  171. package/dist/src/core/increment/recent-work-scanner.js +1 -1
  172. package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
  173. package/dist/src/core/increment/spec-frontmatter-updater.js +1 -1
  174. package/dist/src/core/increment/spec-frontmatter-updater.js.map +1 -1
  175. package/dist/src/core/increment/status-auto-transition.js +1 -1
  176. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  177. package/dist/src/core/increment-status.js +1 -1
  178. package/dist/src/core/increment-status.js.map +1 -1
  179. package/dist/src/core/living-docs/content-distributor.js +1 -1
  180. package/dist/src/core/living-docs/content-distributor.js.map +1 -1
  181. package/dist/src/core/living-docs/cross-linker.js +1 -1
  182. package/dist/src/core/living-docs/cross-linker.js.map +1 -1
  183. package/dist/src/core/living-docs/feature-archiver.js +1 -1
  184. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  185. package/dist/src/core/living-docs/feature-id-manager.js +1 -1
  186. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  187. package/dist/src/core/living-docs/hierarchy-mapper.js +1 -1
  188. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  189. package/dist/src/core/living-docs/living-docs-sync.d.ts +14 -0
  190. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  191. package/dist/src/core/living-docs/living-docs-sync.js +72 -13
  192. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  193. package/dist/src/core/living-docs/project-detector.js +1 -1
  194. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  195. package/dist/src/core/living-docs/task-project-specific-generator.js +1 -1
  196. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -1
  197. package/dist/src/core/logging/prompt-logger.js +1 -1
  198. package/dist/src/core/logging/prompt-logger.js.map +1 -1
  199. package/dist/src/core/plugin-loader.js +1 -1
  200. package/dist/src/core/plugin-loader.js.map +1 -1
  201. package/dist/src/core/project-manager.js +1 -1
  202. package/dist/src/core/project-manager.js.map +1 -1
  203. package/dist/src/core/qa/qa-runner.js +1 -1
  204. package/dist/src/core/qa/qa-runner.js.map +1 -1
  205. package/dist/src/core/repo-structure/folder-detector.js +1 -1
  206. package/dist/src/core/repo-structure/folder-detector.js.map +1 -1
  207. package/dist/src/core/repo-structure/setup-state-manager.js +1 -1
  208. package/dist/src/core/repo-structure/setup-state-manager.js.map +1 -1
  209. package/dist/src/core/spec-detector.js +1 -1
  210. package/dist/src/core/spec-detector.js.map +1 -1
  211. package/dist/src/core/specs/spec-metadata-manager.js +1 -1
  212. package/dist/src/core/specs/spec-metadata-manager.js.map +1 -1
  213. package/dist/src/core/status-line/status-line-updater.js +1 -1
  214. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  215. package/dist/src/core/status-line-validator.js +1 -1
  216. package/dist/src/core/status-line-validator.js.map +1 -1
  217. package/dist/src/core/sync/bidirectional-engine.js +1 -1
  218. package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
  219. package/dist/src/core/sync/profile-manager.js +1 -1
  220. package/dist/src/core/sync/profile-manager.js.map +1 -1
  221. package/dist/src/core/sync/project-context.js +1 -1
  222. package/dist/src/core/sync/project-context.js.map +1 -1
  223. package/dist/src/core/sync/sync-event-logger.js +1 -1
  224. package/dist/src/core/sync/sync-event-logger.js.map +1 -1
  225. package/dist/src/core/types/config.js +1 -1
  226. package/dist/src/core/types/config.js.map +1 -1
  227. package/dist/src/core/us-completion-detector.d.ts +124 -0
  228. package/dist/src/core/us-completion-detector.d.ts.map +1 -0
  229. package/dist/src/core/us-completion-detector.js +270 -0
  230. package/dist/src/core/us-completion-detector.js.map +1 -0
  231. package/dist/src/core/utils/permission-checker.js +1 -1
  232. package/dist/src/core/utils/permission-checker.js.map +1 -1
  233. package/dist/src/core/workflow/autonomous-executor.js +1 -1
  234. package/dist/src/core/workflow/autonomous-executor.js.map +1 -1
  235. package/dist/src/core/workflow/backlog-scanner.js +1 -1
  236. package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
  237. package/dist/src/core/workflow/cost-estimator.js +1 -1
  238. package/dist/src/core/workflow/cost-estimator.js.map +1 -1
  239. package/dist/src/core/workflow/state-manager.js +1 -1
  240. package/dist/src/core/workflow/state-manager.js.map +1 -1
  241. package/dist/src/importers/duplicate-detector.js +1 -1
  242. package/dist/src/importers/duplicate-detector.js.map +1 -1
  243. package/dist/src/importers/item-converter.js +1 -1
  244. package/dist/src/importers/item-converter.js.map +1 -1
  245. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +1 -1
  246. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  247. package/dist/src/integrations/jira/jira-incremental-mapper.js +3 -3
  248. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  249. package/dist/src/living-docs/fs-id-allocator.js +1 -1
  250. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  251. package/dist/src/living-docs/id-registry.js +1 -1
  252. package/dist/src/living-docs/id-registry.js.map +1 -1
  253. package/dist/src/sync/external-item-sync-service.js +1 -1
  254. package/dist/src/sync/external-item-sync-service.js.map +1 -1
  255. package/dist/src/sync/sync-metadata.js +1 -1
  256. package/dist/src/sync/sync-metadata.js.map +1 -1
  257. package/dist/src/utils/agents-md-compiler.js +1 -1
  258. package/dist/src/utils/agents-md-compiler.js.map +1 -1
  259. package/dist/src/utils/auto-install.js +1 -1
  260. package/dist/src/utils/auto-install.js.map +1 -1
  261. package/dist/src/utils/cost-reporter.js +1 -1
  262. package/dist/src/utils/cost-reporter.js.map +1 -1
  263. package/dist/src/utils/docs-preview/config-generator.js +1 -1
  264. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  265. package/dist/src/utils/docs-preview/docusaurus-setup.js +1 -1
  266. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  267. package/dist/src/utils/docs-preview/package-installer.js +1 -1
  268. package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
  269. package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
  270. package/dist/src/utils/docs-preview/sidebar-builder.js.map +1 -1
  271. package/dist/src/utils/env-file-generator.js +1 -1
  272. package/dist/src/utils/env-file-generator.js.map +1 -1
  273. package/dist/src/utils/external-resource-validator.js +1 -1
  274. package/dist/src/utils/external-resource-validator.js.map +1 -1
  275. package/dist/src/utils/fs-native.d.ts +51 -5
  276. package/dist/src/utils/fs-native.d.ts.map +1 -1
  277. package/dist/src/utils/fs-native.js +100 -5
  278. package/dist/src/utils/fs-native.js.map +1 -1
  279. package/dist/src/utils/plugin-validator.js +1 -1
  280. package/dist/src/utils/plugin-validator.js.map +1 -1
  281. package/dist/src/utils/project-detection.js +1 -1
  282. package/dist/src/utils/project-detection.js.map +1 -1
  283. package/dist/src/utils/project-validator.js +1 -1
  284. package/dist/src/utils/project-validator.js.map +1 -1
  285. package/dist/src/utils/spec-parser.js +1 -1
  286. package/dist/src/utils/spec-parser.js.map +1 -1
  287. package/dist/src/utils/spec-splitter.js +1 -1
  288. package/dist/src/utils/spec-splitter.js.map +1 -1
  289. package/dist/src/validators/ac-coverage-validator.js +1 -1
  290. package/dist/src/validators/ac-coverage-validator.js.map +1 -1
  291. package/package.json +5 -6
  292. package/plugins/specweave/agents/code-standards-detective/AGENT.md +47 -0
  293. package/plugins/specweave/agents/docs-writer/AGENT.md +134 -1
  294. package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +1 -0
  295. package/plugins/specweave/agents/infrastructure/AGENT.md +48 -1
  296. package/plugins/specweave/agents/performance/AGENT.md +46 -0
  297. package/plugins/specweave/agents/pm/AGENT.md +115 -3
  298. package/plugins/specweave/agents/qa-lead/AGENT.md +40 -1
  299. package/plugins/specweave/agents/reflective-reviewer/AGENT.md +5 -0
  300. package/plugins/specweave/agents/security/AGENT.md +45 -0
  301. package/plugins/specweave/agents/tdd-orchestrator/AGENT.md +128 -1
  302. package/plugins/specweave/agents/tech-lead/AGENT.md +138 -1
  303. package/plugins/specweave/agents/translator/AGENT.md +132 -0
  304. package/plugins/specweave/commands/specweave-sync-progress.md +616 -0
  305. package/plugins/specweave/hooks/hooks.json +0 -9
  306. package/plugins/specweave/hooks/post-increment-completion.sh +133 -0
  307. package/plugins/specweave/hooks/post-metadata-change.sh +28 -23
  308. package/plugins/specweave/hooks/post-task-completion.sh +7 -0
  309. package/plugins/specweave/hooks/pre-edit-write-consolidated.sh +44 -7
  310. package/plugins/specweave/hooks/shared/bulk-operation-detector.sh +167 -0
  311. package/plugins/specweave/lib/hooks/consolidated-sync.js +19 -2
  312. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +135 -0
  313. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +18 -4
  314. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -1
  315. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js +1 -1
  316. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js.map +1 -1
  317. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +1 -1
  318. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
  319. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +1 -1
  320. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  321. package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
  322. package/plugins/specweave/skills/progress-sync/SKILL.md +405 -0
  323. package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
  324. package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
  325. package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
  326. package/plugins/specweave-ado/lib/conflict-resolver.js +1 -1
  327. package/plugins/specweave-ado/lib/conflict-resolver.ts +1 -1
  328. package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +1 -1
  329. package/plugins/specweave-frontend/agents/frontend-architect/AGENT.md +5 -0
  330. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -15
  331. package/plugins/specweave-github/hooks/README.md +34 -25
  332. package/plugins/specweave-github/lib/CodeValidator.js +1 -1
  333. package/plugins/specweave-github/lib/CodeValidator.ts +2 -2
  334. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
  335. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +1 -1
  336. package/plugins/specweave-github/lib/github-client-v2.js +13 -1
  337. package/plugins/specweave-github/lib/github-client-v2.ts +17 -1
  338. package/plugins/specweave-github/lib/github-issue-updater.js +1 -1
  339. package/plugins/specweave-github/lib/github-issue-updater.ts +1 -1
  340. package/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
  341. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +1 -1
  342. package/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
  343. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +1 -1
  344. package/plugins/specweave-github/lib/user-story-issue-builder.js +4 -4
  345. package/plugins/specweave-github/lib/user-story-issue-builder.ts +7 -6
  346. package/plugins/specweave-infrastructure/agents/devops/AGENT.md +48 -1
  347. package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +6 -1
  348. package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +6 -1
  349. package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +6 -1
  350. package/plugins/specweave-infrastructure/agents/sre/AGENT.md +5 -0
  351. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  352. package/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
  353. package/plugins/specweave-jira/lib/jira-epic-sync.ts +1 -1
  354. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +5 -0
  355. package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +47 -2
  356. package/plugins/specweave-ml/agents/data-scientist/AGENT.md +1 -1
  357. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +5 -0
  358. package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +6 -1
  359. package/plugins/specweave-payments/agents/payment-integration/AGENT.md +1 -1
  360. package/plugins/specweave/agents/pm/AGENT.md.bak +0 -1893
  361. package/plugins/specweave/hooks/docs-changed.sh.backup +0 -79
  362. package/plugins/specweave/hooks/human-input-required.sh.backup +0 -75
  363. package/plugins/specweave/hooks/lib/migrate-increment-work.sh.bak +0 -245
  364. package/plugins/specweave/hooks/lib/sync-spec-content.sh.bak +0 -149
  365. package/plugins/specweave/hooks/lib/validate-spec-status.sh.bak +0 -163
  366. package/plugins/specweave/hooks/post-first-increment.sh.backup +0 -61
  367. package/plugins/specweave/hooks/post-first-increment.sh.bak +0 -61
  368. package/plugins/specweave/hooks/post-increment-change.sh.backup +0 -98
  369. package/plugins/specweave/hooks/post-increment-completion.sh.backup +0 -231
  370. package/plugins/specweave/hooks/post-increment-planning.sh.backup +0 -1048
  371. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +0 -147
  372. package/plugins/specweave/hooks/post-spec-update.sh.backup +0 -158
  373. package/plugins/specweave/hooks/post-spec-update.sh.bak +0 -158
  374. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +0 -179
  375. package/plugins/specweave/hooks/post-user-story-complete.sh.bak +0 -179
  376. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +0 -83
  377. package/plugins/specweave/hooks/pre-command-deduplication.sh.bak +0 -83
  378. package/plugins/specweave/hooks/pre-implementation.sh.backup +0 -67
  379. package/plugins/specweave/hooks/pre-task-completion.sh.backup +0 -194
  380. package/plugins/specweave/hooks/pre-tool-use.sh.backup +0 -133
  381. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +0 -386
  382. package/plugins/specweave/hooks/user-prompt-submit.sh.bak +0 -386
  383. package/plugins/specweave/lib/hooks/auto-transition.js.bak +0 -50
  384. package/plugins/specweave/lib/hooks/auto-transition.ts.bak +0 -84
  385. package/plugins/specweave/lib/hooks/git-diff-analyzer.d.js.bak +0 -0
  386. package/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.bak +0 -89
  387. package/plugins/specweave/lib/hooks/git-diff-analyzer.js.bak +0 -142
  388. package/plugins/specweave/lib/hooks/git-diff-analyzer.ts.bak +0 -269
  389. package/plugins/specweave/lib/hooks/invoke-translator-skill.d.js.bak +0 -0
  390. package/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.bak +0 -60
  391. package/plugins/specweave/lib/hooks/invoke-translator-skill.js.bak +0 -155
  392. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts.bak +0 -264
  393. package/plugins/specweave/lib/hooks/prepare-reflection-context.d.js.bak +0 -0
  394. package/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.bak +0 -42
  395. package/plugins/specweave/lib/hooks/prepare-reflection-context.js.bak +0 -110
  396. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts.bak +0 -178
  397. package/plugins/specweave/lib/hooks/reflection-config-loader.d.js.bak +0 -0
  398. package/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.bak +0 -45
  399. package/plugins/specweave/lib/hooks/reflection-config-loader.js.bak +0 -92
  400. package/plugins/specweave/lib/hooks/reflection-config-loader.ts.bak +0 -156
  401. package/plugins/specweave/lib/hooks/reflection-parser.d.js.bak +0 -0
  402. package/plugins/specweave/lib/hooks/reflection-parser.d.ts.bak +0 -33
  403. package/plugins/specweave/lib/hooks/reflection-parser.js.bak +0 -301
  404. package/plugins/specweave/lib/hooks/reflection-parser.ts.bak +0 -484
  405. package/plugins/specweave/lib/hooks/reflection-prompt-builder.d.js.bak +0 -0
  406. package/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.bak +0 -56
  407. package/plugins/specweave/lib/hooks/reflection-prompt-builder.js.bak +0 -182
  408. package/plugins/specweave/lib/hooks/reflection-prompt-builder.ts.bak +0 -306
  409. package/plugins/specweave/lib/hooks/reflection-storage.d.js.bak +0 -0
  410. package/plugins/specweave/lib/hooks/reflection-storage.d.ts.bak +0 -64
  411. package/plugins/specweave/lib/hooks/reflection-storage.js.bak +0 -231
  412. package/plugins/specweave/lib/hooks/reflection-storage.ts.bak +0 -369
  413. package/plugins/specweave/lib/hooks/run-self-reflection.d.js.bak +0 -0
  414. package/plugins/specweave/lib/hooks/run-self-reflection.d.ts.bak +0 -43
  415. package/plugins/specweave/lib/hooks/run-self-reflection.js.bak +0 -132
  416. package/plugins/specweave/lib/hooks/run-self-reflection.ts.bak +0 -258
  417. package/plugins/specweave/lib/hooks/sync-cache.js.bak +0 -294
  418. package/plugins/specweave/lib/hooks/sync-living-docs.d.js.bak +0 -1
  419. package/plugins/specweave/lib/hooks/sync-living-docs.d.ts.bak +0 -27
  420. package/plugins/specweave/lib/hooks/sync-living-docs.js.bak +0 -339
  421. package/plugins/specweave/lib/hooks/sync-us-tasks.js.bak +0 -476
  422. package/plugins/specweave/lib/hooks/translate-file.d.js.bak +0 -0
  423. package/plugins/specweave/lib/hooks/translate-file.d.ts.bak +0 -59
  424. package/plugins/specweave/lib/hooks/translate-file.js.bak +0 -289
  425. package/plugins/specweave/lib/hooks/translate-file.ts.bak +0 -428
  426. package/plugins/specweave/lib/hooks/translate-living-docs.d.js.bak +0 -0
  427. package/plugins/specweave/lib/hooks/translate-living-docs.d.ts.bak +0 -13
  428. package/plugins/specweave/lib/hooks/translate-living-docs.js.bak +0 -119
  429. package/plugins/specweave/lib/hooks/translate-living-docs.ts.bak +0 -224
  430. package/plugins/specweave/lib/hooks/update-ac-status.js.bak +0 -51
  431. package/plugins/specweave/lib/hooks/update-ac-status.ts.bak +0 -103
  432. package/plugins/specweave/lib/hooks/update-tasks-md.d.js.bak +0 -1
  433. package/plugins/specweave/lib/hooks/update-tasks-md.d.ts.bak +0 -29
  434. package/plugins/specweave/lib/hooks/update-tasks-md.js.bak +0 -296
  435. package/plugins/specweave/lib/hooks/update-tasks-md.ts.bak +0 -489
  436. package/plugins/specweave-ado/hooks/hooks.json +0 -15
  437. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +0 -353
  438. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +0 -172
  439. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -170
  440. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +0 -718
  441. package/plugins/specweave-github/hooks/hooks.json +0 -15
  442. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +0 -258
  443. package/plugins/specweave-jira/hooks/hooks.json +0 -15
  444. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +0 -172
  445. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +0 -600
  446. package/plugins/specweave-release/hooks/hooks.json +0 -15
  447. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +0 -110
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Confirmation Manager - Multi-gate confirmation UX
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-004, T-015, T-017, T-018, T-026
5
+ */
6
+ import { consoleLogger } from '../../utils/logger.js';
7
+ import * as readline from 'readline';
8
+ /**
9
+ * Confirmation Manager - 4-tier safety gates
10
+ * Tier 1: Validation Report (auto-show)
11
+ * Tier 2: Primary Confirmation (y/N)
12
+ * Tier 3: Elevated Confirmation (type "delete" - force mode only)
13
+ * Tier 4: GitHub Confirmation (y/N - if GitHub cleanup needed)
14
+ */
15
+ export class ConfirmationManager {
16
+ constructor(logger) {
17
+ this.logger = logger || consoleLogger;
18
+ }
19
+ /**
20
+ * T-004, T-015: Get confirmation from user (multi-gate pattern)
21
+ */
22
+ async confirm(validation, options) {
23
+ // Tier 1: Validation Report (already shown by validator)
24
+ // Tier 2: Primary Confirmation
25
+ if (!options.yes && !options.dryRun) {
26
+ const primaryConfirmed = await this.primaryConfirmation(validation);
27
+ if (!primaryConfirmed) {
28
+ return false;
29
+ }
30
+ }
31
+ // Tier 3: Elevated Confirmation (force mode only)
32
+ if (options.force && !options.dryRun) {
33
+ const elevatedConfirmed = await this.elevatedConfirmation(validation);
34
+ if (!elevatedConfirmed) {
35
+ return false;
36
+ }
37
+ }
38
+ return true;
39
+ }
40
+ /**
41
+ * T-026: GitHub confirmation (separate gate)
42
+ */
43
+ async confirmGitHub(issueCount, options) {
44
+ if (options.noGithub || options.dryRun) {
45
+ return false;
46
+ }
47
+ if (options.yes) {
48
+ return true;
49
+ }
50
+ const answer = await this.prompt(`Close ${issueCount} GitHub issue(s)? (y/N): `);
51
+ return answer.toLowerCase() === 'y';
52
+ }
53
+ /**
54
+ * T-004: Primary confirmation (y/N)
55
+ */
56
+ async primaryConfirmation(validation) {
57
+ const filesCount = validation.files.length;
58
+ const answer = await this.prompt(`Delete feature ${validation.featureId} (${filesCount} files)? (y/N): `);
59
+ return answer.toLowerCase() === 'y';
60
+ }
61
+ /**
62
+ * T-017: Elevated confirmation (type "delete" - force mode)
63
+ */
64
+ async elevatedConfirmation(validation) {
65
+ console.log('');
66
+ console.log('⚠️ WARNING: Force deletion will orphan active increments!');
67
+ console.log(` Affected increments: ${validation.orphanedIncrements.join(', ')}`);
68
+ console.log(` Their metadata will be updated (feature_id removed).`);
69
+ console.log('');
70
+ const answer = await this.prompt('Type "delete" to confirm force deletion: ');
71
+ return answer === 'delete'; // Exact match, case-sensitive
72
+ }
73
+ /**
74
+ * Prompt user for input
75
+ */
76
+ prompt(question) {
77
+ const rl = readline.createInterface({
78
+ input: process.stdin,
79
+ output: process.stdout
80
+ });
81
+ return new Promise((resolve) => {
82
+ rl.question(question, (answer) => {
83
+ rl.close();
84
+ resolve(answer.trim());
85
+ });
86
+ });
87
+ }
88
+ }
89
+ //# sourceMappingURL=confirmation-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation-manager.js","sourceRoot":"","sources":["../../../../src/core/feature-deleter/confirmation-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Deletion Transaction with 3-Phase Commit
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-007, T-008, T-009, T-010, T-011
5
+ */
6
+ import { DeletionTransactionOptions, DeletionOptions, DeletionResult, ValidationResult } from './types.js';
7
+ /**
8
+ * Deletion Transaction - Atomic deletion with rollback
9
+ * Implements 3-phase commit: Validation → Staging → Commit
10
+ */
11
+ export declare class DeletionTransaction {
12
+ private projectRoot;
13
+ private logger;
14
+ private gitService;
15
+ private backupDir;
16
+ private checkpointFile;
17
+ constructor(options: DeletionTransactionOptions);
18
+ /**
19
+ * T-010: Execute transaction (3-phase commit)
20
+ */
21
+ execute(validation: ValidationResult, options: DeletionOptions): Promise<DeletionResult>;
22
+ /**
23
+ * T-008, T-010: Phase 2 - Staging (reversible)
24
+ */
25
+ private stagingPhase;
26
+ /**
27
+ * T-010: Phase 3 - Commit (irreversible)
28
+ */
29
+ private commitPhase;
30
+ /**
31
+ * T-011: Rollback (restore from backup)
32
+ */
33
+ private rollback;
34
+ /**
35
+ * T-008: Create backup of files
36
+ */
37
+ private createBackup;
38
+ /**
39
+ * T-008: Create checkpoint file
40
+ */
41
+ private createCheckpoint;
42
+ /**
43
+ * T-009: Update orphaned increment metadata (remove feature_id)
44
+ */
45
+ private updateOrphanedMetadata;
46
+ /**
47
+ * Cleanup backup and checkpoint after successful commit
48
+ */
49
+ private cleanup;
50
+ }
51
+ //# sourceMappingURL=deletion-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletion-transaction.d.ts","sourceRoot":"","sources":["../../../../src/core/feature-deleter/deletion-transaction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK3G;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,EAAE,0BAA0B;IAa/C;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAwB9F;;OAEG;YACW,YAAY;IAsB1B;;OAEG;YACW,WAAW;IA2BzB;;OAEG;YACW,QAAQ;IAyBtB;;OAEG;YACW,YAAY;IAe1B;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,sBAAsB;IAqBpC;;OAEG;YACW,OAAO;CAatB"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Deletion Transaction with 3-Phase Commit
3
+ * Increment: 0053-safe-feature-deletion
4
+ * Tasks: T-007, T-008, T-009, T-010, T-011
5
+ */
6
+ import { consoleLogger } from '../../utils/logger.js';
7
+ import { FeatureDeletionGitService } from './git-service.js';
8
+ import fs from 'fs/promises';
9
+ import path from 'path';
10
+ /**
11
+ * Deletion Transaction - Atomic deletion with rollback
12
+ * Implements 3-phase commit: Validation → Staging → Commit
13
+ */
14
+ export class DeletionTransaction {
15
+ constructor(options) {
16
+ this.projectRoot = options.projectRoot;
17
+ this.logger = options.logger || consoleLogger;
18
+ this.gitService = new FeatureDeletionGitService({
19
+ projectRoot: this.projectRoot,
20
+ logger: this.logger
21
+ });
22
+ const timestamp = Date.now();
23
+ this.backupDir = path.join(this.projectRoot, '.specweave/state/deletion-backup', `${timestamp}`);
24
+ this.checkpointFile = path.join(this.projectRoot, '.specweave/state/deletion-checkpoint.json');
25
+ }
26
+ /**
27
+ * T-010: Execute transaction (3-phase commit)
28
+ */
29
+ async execute(validation, options) {
30
+ this.logger.log('Starting deletion transaction (3-phase commit)');
31
+ try {
32
+ // Phase 1: Validation (already done, passed in)
33
+ this.logger.log('Phase 1: Validation - PASSED');
34
+ // Phase 2: Staging (reversible)
35
+ await this.stagingPhase(validation, options);
36
+ // Phase 3: Commit (irreversible)
37
+ const result = await this.commitPhase(validation, options);
38
+ // Cleanup
39
+ await this.cleanup();
40
+ return result;
41
+ }
42
+ catch (error) {
43
+ this.logger.error(`Transaction failed: ${error}`);
44
+ await this.rollback(validation.files);
45
+ throw error;
46
+ }
47
+ }
48
+ /**
49
+ * T-008, T-010: Phase 2 - Staging (reversible)
50
+ */
51
+ async stagingPhase(validation, options) {
52
+ this.logger.log('Phase 2: Staging - Creating backup and staging deletions');
53
+ // T-008: Create backup
54
+ await this.createBackup(validation.files);
55
+ // T-008: Create checkpoint
56
+ await this.createCheckpoint(validation);
57
+ // T-018: Stage git deletions
58
+ if (!options.noGit) {
59
+ await this.gitService.stageGitDeletions(validation.files);
60
+ }
61
+ else {
62
+ // No git - just delete files
63
+ for (const file of validation.files) {
64
+ await fs.unlink(file);
65
+ }
66
+ }
67
+ this.logger.log('Phase 2: Staging - COMPLETE');
68
+ }
69
+ /**
70
+ * T-010: Phase 3 - Commit (irreversible)
71
+ */
72
+ async commitPhase(validation, options) {
73
+ this.logger.log('Phase 3: Commit - Finalizing deletion');
74
+ let commitSha;
75
+ // T-019: Create git commit
76
+ if (!options.noGit) {
77
+ commitSha = await this.gitService.commitDeletion(validation.featureId, validation);
78
+ }
79
+ // T-009: Update orphaned metadata (if force mode)
80
+ if (options.force && validation.orphanedIncrements.length > 0) {
81
+ await this.updateOrphanedMetadata(validation.orphanedIncrements);
82
+ }
83
+ this.logger.log('Phase 3: Commit - COMPLETE');
84
+ return {
85
+ success: true,
86
+ featureId: validation.featureId,
87
+ filesDeleted: validation.files.length,
88
+ commitSha,
89
+ orphanedIncrements: validation.orphanedIncrements,
90
+ warnings: validation.warnings
91
+ };
92
+ }
93
+ /**
94
+ * T-011: Rollback (restore from backup)
95
+ */
96
+ async rollback(files) {
97
+ this.logger.warn('Rolling back transaction...');
98
+ try {
99
+ // Restore files from backup
100
+ for (const file of files) {
101
+ const backupPath = path.join(this.backupDir, path.relative(this.projectRoot, file));
102
+ try {
103
+ await fs.copyFile(backupPath, file);
104
+ }
105
+ catch (error) {
106
+ this.logger.warn(`Failed to restore ${file}: ${error}`);
107
+ }
108
+ }
109
+ // Unstage git deletions
110
+ await this.gitService.unstageGitDeletions(files);
111
+ this.logger.log('Rollback complete. Files restored from backup.');
112
+ }
113
+ catch (error) {
114
+ this.logger.error(`Rollback failed: ${error}`);
115
+ this.logger.error('Backup preserved at: ' + this.backupDir);
116
+ throw error;
117
+ }
118
+ }
119
+ /**
120
+ * T-008: Create backup of files
121
+ */
122
+ async createBackup(files) {
123
+ this.logger.log(`Creating backup at ${this.backupDir}`);
124
+ for (const file of files) {
125
+ const relativePath = path.relative(this.projectRoot, file);
126
+ const backupPath = path.join(this.backupDir, relativePath);
127
+ const backupDirPath = path.dirname(backupPath);
128
+ await fs.mkdir(backupDirPath, { recursive: true });
129
+ await fs.copyFile(file, backupPath);
130
+ }
131
+ this.logger.log(`Backed up ${files.length} files`);
132
+ }
133
+ /**
134
+ * T-008: Create checkpoint file
135
+ */
136
+ async createCheckpoint(validation) {
137
+ const checkpoint = {
138
+ timestamp: new Date().toISOString(),
139
+ featureId: validation.featureId,
140
+ filesCount: validation.files.length,
141
+ backupDir: this.backupDir,
142
+ phase: 'staging'
143
+ };
144
+ const checkpointDir = path.dirname(this.checkpointFile);
145
+ await fs.mkdir(checkpointDir, { recursive: true });
146
+ await fs.writeFile(this.checkpointFile, JSON.stringify(checkpoint, null, 2));
147
+ this.logger.log('Checkpoint created');
148
+ }
149
+ /**
150
+ * T-009: Update orphaned increment metadata (remove feature_id)
151
+ */
152
+ async updateOrphanedMetadata(orphanedIncrements) {
153
+ this.logger.log(`Updating ${orphanedIncrements.length} orphaned increment(s) metadata`);
154
+ for (const incrementId of orphanedIncrements) {
155
+ const metadataPath = path.join(this.projectRoot, '.specweave/increments', incrementId, 'metadata.json');
156
+ try {
157
+ const content = await fs.readFile(metadataPath, 'utf-8');
158
+ const metadata = JSON.parse(content);
159
+ // Remove feature_id field
160
+ delete metadata.feature_id;
161
+ await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2));
162
+ this.logger.log(`Updated metadata for ${incrementId}`);
163
+ }
164
+ catch (error) {
165
+ this.logger.warn(`Failed to update metadata for ${incrementId}: ${error}`);
166
+ }
167
+ }
168
+ }
169
+ /**
170
+ * Cleanup backup and checkpoint after successful commit
171
+ */
172
+ async cleanup() {
173
+ try {
174
+ // Remove backup directory
175
+ await fs.rm(this.backupDir, { recursive: true, force: true });
176
+ // Remove checkpoint file
177
+ await fs.unlink(this.checkpointFile);
178
+ this.logger.log('Cleanup complete');
179
+ }
180
+ catch (error) {
181
+ this.logger.warn(`Cleanup failed: ${error}`);
182
+ }
183
+ }
184
+ }
185
+ //# sourceMappingURL=deletion-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletion-transaction.js","sourceRoot":"","sources":["../../../../src/core/feature-deleter/deletion-transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
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 { GitServiceOptions, ValidationResult } from './types.js';
7
+ /**
8
+ * Feature Deletion Git Service
9
+ * Handles git operations for feature deletion
10
+ */
11
+ export declare class FeatureDeletionGitService {
12
+ private projectRoot;
13
+ private logger;
14
+ constructor(options: GitServiceOptions);
15
+ /**
16
+ * T-018, T-023: Stage git deletions (git rm for tracked, fs.unlink for untracked)
17
+ */
18
+ stageGitDeletions(files: string[]): Promise<{
19
+ tracked: number;
20
+ untracked: number;
21
+ }>;
22
+ /**
23
+ * T-019: Create git commit with descriptive message
24
+ */
25
+ commitDeletion(featureId: string, validation: ValidationResult): Promise<string>;
26
+ /**
27
+ * T-021: Unstage git deletions (rollback)
28
+ */
29
+ unstageGitDeletions(files: string[]): Promise<void>;
30
+ /**
31
+ * T-023: Detect git repository
32
+ */
33
+ detectGitRepository(): Promise<boolean>;
34
+ /**
35
+ * Check if file is tracked by git
36
+ */
37
+ private isFileTracked;
38
+ /**
39
+ * Get git user name
40
+ */
41
+ private getGitUser;
42
+ }
43
+ //# sourceMappingURL=git-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-service.d.ts","sourceRoot":"","sources":["../../../../src/core/feature-deleter/git-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKjE;;;GAGG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,iBAAiB;IAKtC;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IA4BzF;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BtF;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAU7C;;OAEG;YACW,aAAa;IAS3B;;OAEG;YACW,UAAU;CAQzB"}
@@ -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"}