@paths.design/caws-cli 10.2.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +45 -787
  3. package/dist/init/harness-detect.d.ts +18 -0
  4. package/dist/init/harness-detect.d.ts.map +1 -0
  5. package/dist/init/harness-detect.js +90 -0
  6. package/dist/init/harness-detect.js.map +1 -0
  7. package/dist/init/hook-install.d.ts +53 -0
  8. package/dist/init/hook-install.d.ts.map +1 -0
  9. package/dist/init/hook-install.js +421 -0
  10. package/dist/init/hook-install.js.map +1 -0
  11. package/dist/init/hook-packs/manifest-claude-code.d.ts +4 -0
  12. package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -0
  13. package/dist/init/hook-packs/manifest-claude-code.js +190 -0
  14. package/dist/init/hook-packs/manifest-claude-code.js.map +1 -0
  15. package/dist/init/hook-packs/register.d.ts +19 -0
  16. package/dist/init/hook-packs/register.d.ts.map +1 -0
  17. package/dist/init/hook-packs/register.js +37 -0
  18. package/dist/init/hook-packs/register.js.map +1 -0
  19. package/dist/init/hook-packs/types.d.ts +123 -0
  20. package/dist/init/hook-packs/types.d.ts.map +1 -0
  21. package/dist/init/hook-packs/types.js +29 -0
  22. package/dist/init/hook-packs/types.js.map +1 -0
  23. package/dist/shell/binding/resolve-binding.d.ts +4 -0
  24. package/dist/shell/binding/resolve-binding.d.ts.map +1 -0
  25. package/dist/shell/binding/resolve-binding.js +228 -0
  26. package/dist/shell/binding/resolve-binding.js.map +1 -0
  27. package/dist/shell/binding/types.d.ts +42 -0
  28. package/dist/shell/binding/types.d.ts.map +1 -0
  29. package/dist/shell/binding/types.js +21 -0
  30. package/dist/shell/binding/types.js.map +1 -0
  31. package/dist/shell/commands/claim.d.ts +14 -0
  32. package/dist/shell/commands/claim.d.ts.map +1 -0
  33. package/dist/shell/commands/claim.js +197 -0
  34. package/dist/shell/commands/claim.js.map +1 -0
  35. package/dist/shell/commands/doctor.d.ts +13 -0
  36. package/dist/shell/commands/doctor.d.ts.map +1 -0
  37. package/dist/shell/commands/doctor.js +97 -0
  38. package/dist/shell/commands/doctor.js.map +1 -0
  39. package/dist/shell/commands/evidence.d.ts +28 -0
  40. package/dist/shell/commands/evidence.d.ts.map +1 -0
  41. package/dist/shell/commands/evidence.js +166 -0
  42. package/dist/shell/commands/evidence.js.map +1 -0
  43. package/dist/shell/commands/gates.d.ts +19 -0
  44. package/dist/shell/commands/gates.d.ts.map +1 -0
  45. package/dist/shell/commands/gates.js +208 -0
  46. package/dist/shell/commands/gates.js.map +1 -0
  47. package/dist/shell/commands/init.d.ts +17 -0
  48. package/dist/shell/commands/init.d.ts.map +1 -0
  49. package/dist/shell/commands/init.js +168 -0
  50. package/dist/shell/commands/init.js.map +1 -0
  51. package/dist/shell/commands/scope.d.ts +11 -0
  52. package/dist/shell/commands/scope.d.ts.map +1 -0
  53. package/dist/shell/commands/scope.js +92 -0
  54. package/dist/shell/commands/scope.js.map +1 -0
  55. package/dist/shell/commands/specs.d.ts +41 -0
  56. package/dist/shell/commands/specs.d.ts.map +1 -0
  57. package/dist/shell/commands/specs.js +264 -0
  58. package/dist/shell/commands/specs.js.map +1 -0
  59. package/dist/shell/commands/status.d.ts +15 -0
  60. package/dist/shell/commands/status.d.ts.map +1 -0
  61. package/dist/shell/commands/status.js +106 -0
  62. package/dist/shell/commands/status.js.map +1 -0
  63. package/dist/shell/commands/waiver.d.ts +38 -0
  64. package/dist/shell/commands/waiver.d.ts.map +1 -0
  65. package/dist/shell/commands/waiver.js +240 -0
  66. package/dist/shell/commands/waiver.js.map +1 -0
  67. package/dist/shell/commands/worktree.d.ts +38 -0
  68. package/dist/shell/commands/worktree.d.ts.map +1 -0
  69. package/dist/shell/commands/worktree.js +286 -0
  70. package/dist/shell/commands/worktree.js.map +1 -0
  71. package/dist/shell/gates/disposition.d.ts +23 -0
  72. package/dist/shell/gates/disposition.d.ts.map +1 -0
  73. package/dist/shell/gates/disposition.js +117 -0
  74. package/dist/shell/gates/disposition.js.map +1 -0
  75. package/dist/shell/gates/gate-result-contract.d.ts +39 -0
  76. package/dist/shell/gates/gate-result-contract.d.ts.map +1 -0
  77. package/dist/shell/gates/gate-result-contract.js +150 -0
  78. package/dist/shell/gates/gate-result-contract.js.map +1 -0
  79. package/dist/shell/gates/local-evaluators/budget-limit.d.ts +24 -0
  80. package/dist/shell/gates/local-evaluators/budget-limit.d.ts.map +1 -0
  81. package/dist/shell/gates/local-evaluators/budget-limit.js +67 -0
  82. package/dist/shell/gates/local-evaluators/budget-limit.js.map +1 -0
  83. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts +25 -0
  84. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts.map +1 -0
  85. package/dist/shell/gates/local-evaluators/diff-helpers.js +74 -0
  86. package/dist/shell/gates/local-evaluators/diff-helpers.js.map +1 -0
  87. package/dist/shell/gates/local-evaluators/index.d.ts +28 -0
  88. package/dist/shell/gates/local-evaluators/index.d.ts.map +1 -0
  89. package/dist/shell/gates/local-evaluators/index.js +67 -0
  90. package/dist/shell/gates/local-evaluators/index.js.map +1 -0
  91. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts +23 -0
  92. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts.map +1 -0
  93. package/dist/shell/gates/local-evaluators/scope-boundary.js +67 -0
  94. package/dist/shell/gates/local-evaluators/scope-boundary.js.map +1 -0
  95. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts +12 -0
  96. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts.map +1 -0
  97. package/dist/shell/gates/local-evaluators/spec-completeness.js +73 -0
  98. package/dist/shell/gates/local-evaluators/spec-completeness.js.map +1 -0
  99. package/dist/shell/gates/quality-gates-adapter.d.ts +55 -0
  100. package/dist/shell/gates/quality-gates-adapter.d.ts.map +1 -0
  101. package/dist/shell/gates/quality-gates-adapter.js +161 -0
  102. package/dist/shell/gates/quality-gates-adapter.js.map +1 -0
  103. package/dist/shell/gates/waiver-filter.d.ts +58 -0
  104. package/dist/shell/gates/waiver-filter.d.ts.map +1 -0
  105. package/dist/shell/gates/waiver-filter.js +119 -0
  106. package/dist/shell/gates/waiver-filter.js.map +1 -0
  107. package/dist/shell/index.d.ts +54 -0
  108. package/dist/shell/index.d.ts.map +1 -0
  109. package/dist/shell/index.js +85 -0
  110. package/dist/shell/index.js.map +1 -0
  111. package/dist/shell/register.d.ts +11 -0
  112. package/dist/shell/register.d.ts.map +1 -0
  113. package/dist/shell/register.js +464 -0
  114. package/dist/shell/register.js.map +1 -0
  115. package/dist/shell/render/claim.d.ts +22 -0
  116. package/dist/shell/render/claim.d.ts.map +1 -0
  117. package/dist/shell/render/claim.js +75 -0
  118. package/dist/shell/render/claim.js.map +1 -0
  119. package/dist/shell/render/decision.d.ts +15 -0
  120. package/dist/shell/render/decision.d.ts.map +1 -0
  121. package/dist/shell/render/decision.js +66 -0
  122. package/dist/shell/render/decision.js.map +1 -0
  123. package/dist/shell/render/diagnostic.d.ts +19 -0
  124. package/dist/shell/render/diagnostic.d.ts.map +1 -0
  125. package/dist/shell/render/diagnostic.js +76 -0
  126. package/dist/shell/render/diagnostic.js.map +1 -0
  127. package/dist/shell/render/finding.d.ts +15 -0
  128. package/dist/shell/render/finding.d.ts.map +1 -0
  129. package/dist/shell/render/finding.js +57 -0
  130. package/dist/shell/render/finding.js.map +1 -0
  131. package/dist/shell/render/gates.d.ts +3 -0
  132. package/dist/shell/render/gates.d.ts.map +1 -0
  133. package/dist/shell/render/gates.js +56 -0
  134. package/dist/shell/render/gates.js.map +1 -0
  135. package/dist/shell/render/init-hook-pack.d.ts +16 -0
  136. package/dist/shell/render/init-hook-pack.d.ts.map +1 -0
  137. package/dist/shell/render/init-hook-pack.js +206 -0
  138. package/dist/shell/render/init-hook-pack.js.map +1 -0
  139. package/dist/shell/render/init.d.ts +11 -0
  140. package/dist/shell/render/init.d.ts.map +1 -0
  141. package/dist/shell/render/init.js +32 -0
  142. package/dist/shell/render/init.js.map +1 -0
  143. package/dist/shell/render/status.d.ts +26 -0
  144. package/dist/shell/render/status.d.ts.map +1 -0
  145. package/dist/shell/render/status.js +143 -0
  146. package/dist/shell/render/status.js.map +1 -0
  147. package/dist/shell/render/waiver.d.ts +21 -0
  148. package/dist/shell/render/waiver.d.ts.map +1 -0
  149. package/dist/shell/render/waiver.js +94 -0
  150. package/dist/shell/render/waiver.js.map +1 -0
  151. package/dist/shell/rules.d.ts +37 -0
  152. package/dist/shell/rules.d.ts.map +1 -0
  153. package/dist/shell/rules.js +51 -0
  154. package/dist/shell/rules.js.map +1 -0
  155. package/dist/shell/session/actor.d.ts +14 -0
  156. package/dist/shell/session/actor.d.ts.map +1 -0
  157. package/dist/shell/session/actor.js +34 -0
  158. package/dist/shell/session/actor.js.map +1 -0
  159. package/dist/shell/session/resolve-session.d.ts +5 -0
  160. package/dist/shell/session/resolve-session.d.ts.map +1 -0
  161. package/dist/shell/session/resolve-session.js +239 -0
  162. package/dist/shell/session/resolve-session.js.map +1 -0
  163. package/dist/shell/session/types.d.ts +56 -0
  164. package/dist/shell/session/types.d.ts.map +1 -0
  165. package/dist/shell/session/types.js +15 -0
  166. package/dist/shell/session/types.js.map +1 -0
  167. package/dist/store/agents-store.d.ts +3 -0
  168. package/dist/store/agents-store.d.ts.map +1 -0
  169. package/dist/store/agents-store.js +63 -0
  170. package/dist/store/agents-store.js.map +1 -0
  171. package/dist/store/apply-patch.d.ts +16 -0
  172. package/dist/store/apply-patch.d.ts.map +1 -0
  173. package/dist/store/apply-patch.js +191 -0
  174. package/dist/store/apply-patch.js.map +1 -0
  175. package/dist/store/atomic-write.d.ts +34 -0
  176. package/dist/store/atomic-write.d.ts.map +1 -0
  177. package/dist/store/atomic-write.js +174 -0
  178. package/dist/store/atomic-write.js.map +1 -0
  179. package/dist/store/doctor-snapshot.d.ts +20 -0
  180. package/dist/store/doctor-snapshot.d.ts.map +1 -0
  181. package/dist/store/doctor-snapshot.js +176 -0
  182. package/dist/store/doctor-snapshot.js.map +1 -0
  183. package/dist/store/events-store.d.ts +33 -0
  184. package/dist/store/events-store.d.ts.map +1 -0
  185. package/dist/store/events-store.js +297 -0
  186. package/dist/store/events-store.js.map +1 -0
  187. package/dist/store/index.d.ts +21 -0
  188. package/dist/store/index.d.ts.map +1 -0
  189. package/dist/store/index.js +47 -0
  190. package/dist/store/index.js.map +1 -0
  191. package/dist/store/init-store.d.ts +21 -0
  192. package/dist/store/init-store.d.ts.map +1 -0
  193. package/dist/store/init-store.js +295 -0
  194. package/dist/store/init-store.js.map +1 -0
  195. package/dist/store/json-store.d.ts +3 -0
  196. package/dist/store/json-store.d.ts.map +1 -0
  197. package/dist/store/json-store.js +65 -0
  198. package/dist/store/json-store.js.map +1 -0
  199. package/dist/store/lifecycle-lock.d.ts +34 -0
  200. package/dist/store/lifecycle-lock.d.ts.map +1 -0
  201. package/dist/store/lifecycle-lock.js +168 -0
  202. package/dist/store/lifecycle-lock.js.map +1 -0
  203. package/dist/store/lifecycle-transaction.d.ts +79 -0
  204. package/dist/store/lifecycle-transaction.d.ts.map +1 -0
  205. package/dist/store/lifecycle-transaction.js +319 -0
  206. package/dist/store/lifecycle-transaction.js.map +1 -0
  207. package/dist/store/policy-store.d.ts +3 -0
  208. package/dist/store/policy-store.d.ts.map +1 -0
  209. package/dist/store/policy-store.js +65 -0
  210. package/dist/store/policy-store.js.map +1 -0
  211. package/dist/store/repo-root.d.ts +46 -0
  212. package/dist/store/repo-root.d.ts.map +1 -0
  213. package/dist/store/repo-root.js +145 -0
  214. package/dist/store/repo-root.js.map +1 -0
  215. package/dist/store/rules.d.ts +69 -0
  216. package/dist/store/rules.d.ts.map +1 -0
  217. package/dist/store/rules.js +95 -0
  218. package/dist/store/rules.js.map +1 -0
  219. package/dist/store/specs-store.d.ts +3 -0
  220. package/dist/store/specs-store.d.ts.map +1 -0
  221. package/dist/store/specs-store.js +131 -0
  222. package/dist/store/specs-store.js.map +1 -0
  223. package/dist/store/specs-writer.d.ts +61 -0
  224. package/dist/store/specs-writer.d.ts.map +1 -0
  225. package/dist/store/specs-writer.js +506 -0
  226. package/dist/store/specs-writer.js.map +1 -0
  227. package/dist/store/types.d.ts +84 -0
  228. package/dist/store/types.d.ts.map +1 -0
  229. package/dist/store/types.js +14 -0
  230. package/dist/store/types.js.map +1 -0
  231. package/dist/store/waivers-store.d.ts +25 -0
  232. package/dist/store/waivers-store.d.ts.map +1 -0
  233. package/dist/store/waivers-store.js +232 -0
  234. package/dist/store/waivers-store.js.map +1 -0
  235. package/dist/store/worktrees-store.d.ts +3 -0
  236. package/dist/store/worktrees-store.d.ts.map +1 -0
  237. package/dist/store/worktrees-store.js +62 -0
  238. package/dist/store/worktrees-store.js.map +1 -0
  239. package/dist/store/worktrees-writer.d.ts +77 -0
  240. package/dist/store/worktrees-writer.d.ts.map +1 -0
  241. package/dist/store/worktrees-writer.js +674 -0
  242. package/dist/store/worktrees-writer.js.map +1 -0
  243. package/dist/store/yaml-patch.d.ts +7 -0
  244. package/dist/store/yaml-patch.d.ts.map +1 -0
  245. package/dist/store/yaml-patch.js +250 -0
  246. package/dist/store/yaml-patch.js.map +1 -0
  247. package/dist/store/yaml-store.d.ts +9 -0
  248. package/dist/store/yaml-store.d.ts.map +1 -0
  249. package/dist/store/yaml-store.js +121 -0
  250. package/dist/store/yaml-store.js.map +1 -0
  251. package/package.json +15 -13
  252. package/dist/budget-derivation.js +0 -751
  253. package/dist/cicd-optimizer.js +0 -504
  254. package/dist/commands/agents.js +0 -124
  255. package/dist/commands/archive.js +0 -500
  256. package/dist/commands/burnup.js +0 -198
  257. package/dist/commands/diagnose.js +0 -525
  258. package/dist/commands/evaluate.js +0 -314
  259. package/dist/commands/gates.js +0 -149
  260. package/dist/commands/init.js +0 -857
  261. package/dist/commands/iterate.js +0 -417
  262. package/dist/commands/mode.js +0 -269
  263. package/dist/commands/parallel.js +0 -242
  264. package/dist/commands/plan.js +0 -438
  265. package/dist/commands/provenance.js +0 -1143
  266. package/dist/commands/quality-monitor.js +0 -284
  267. package/dist/commands/scope.js +0 -264
  268. package/dist/commands/session.js +0 -312
  269. package/dist/commands/sidecar.js +0 -74
  270. package/dist/commands/specs.js +0 -1656
  271. package/dist/commands/status.js +0 -1172
  272. package/dist/commands/templates.js +0 -237
  273. package/dist/commands/tool.js +0 -136
  274. package/dist/commands/tutorial.js +0 -480
  275. package/dist/commands/validate.js +0 -357
  276. package/dist/commands/verify-acs.js +0 -443
  277. package/dist/commands/waivers.js +0 -599
  278. package/dist/commands/workflow.js +0 -243
  279. package/dist/commands/worktree.js +0 -502
  280. package/dist/config/lite-scope.js +0 -158
  281. package/dist/config/modes.js +0 -347
  282. package/dist/constants/spec-types.js +0 -65
  283. package/dist/gates/budget-limit.js +0 -121
  284. package/dist/gates/feedback.js +0 -260
  285. package/dist/gates/format.js +0 -179
  286. package/dist/gates/god-object.js +0 -117
  287. package/dist/gates/pipeline.js +0 -167
  288. package/dist/gates/scope-boundary.js +0 -112
  289. package/dist/gates/spec-completeness.js +0 -109
  290. package/dist/gates/todo-detection.js +0 -205
  291. package/dist/generators/jest-config-generator.js +0 -242
  292. package/dist/generators/working-spec.js +0 -237
  293. package/dist/minimal-cli.js +0 -88
  294. package/dist/parallel/parallel-manager.js +0 -433
  295. package/dist/policy/PolicyManager.js +0 -470
  296. package/dist/scaffold/claude-hooks.js +0 -443
  297. package/dist/scaffold/cursor-hooks.js +0 -177
  298. package/dist/scaffold/git-hooks.js +0 -928
  299. package/dist/scaffold/index.js +0 -794
  300. package/dist/session/session-manager.js +0 -653
  301. package/dist/sidecars/index.js +0 -33
  302. package/dist/sidecars/listeners.js +0 -40
  303. package/dist/sidecars/provenance-summary.js +0 -238
  304. package/dist/sidecars/quality-gaps.js +0 -258
  305. package/dist/sidecars/schema.js +0 -149
  306. package/dist/sidecars/spec-drift.js +0 -151
  307. package/dist/sidecars/waiver-draft.js +0 -176
  308. package/dist/spec/SpecFileManager.js +0 -419
  309. package/dist/templates/.caws/schemas/policy.schema.json +0 -117
  310. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  311. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  312. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  313. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  314. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  315. package/dist/templates/.caws/tools/README.md +0 -18
  316. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  317. package/dist/templates/.caws/tools-allow.json +0 -331
  318. package/dist/templates/.caws/waivers.yml +0 -19
  319. package/dist/templates/.claude/README.md +0 -190
  320. package/dist/templates/.claude/hooks/audit.sh +0 -121
  321. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  322. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  323. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  324. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  325. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  326. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  327. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  328. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  329. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  330. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  331. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  332. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  333. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  334. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  335. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  336. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  337. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  338. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  339. package/dist/templates/.claude/rules/git-safety.md +0 -26
  340. package/dist/templates/.claude/rules/worktree-isolation.md +0 -101
  341. package/dist/templates/.claude/settings.json +0 -141
  342. package/dist/templates/.cursor/README.md +0 -299
  343. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  344. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  345. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  346. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  347. package/dist/templates/.cursor/hooks/format.sh +0 -38
  348. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  349. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  350. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  351. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  352. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  353. package/dist/templates/.cursor/hooks.json +0 -76
  354. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  355. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  356. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  357. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  358. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  359. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  360. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  361. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  362. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  363. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  364. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  365. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  366. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  367. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  368. package/dist/templates/.cursor/rules/README.md +0 -148
  369. package/dist/templates/.github/copilot-instructions.md +0 -82
  370. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  371. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  372. package/dist/templates/.junie/guidelines.md +0 -73
  373. package/dist/templates/.vscode/launch.json +0 -17
  374. package/dist/templates/.vscode/settings.json +0 -95
  375. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  376. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  377. package/dist/templates/CLAUDE.md +0 -196
  378. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  379. package/dist/templates/OIDC_SETUP.md +0 -300
  380. package/dist/templates/agents.md +0 -171
  381. package/dist/templates/codemod/README.md +0 -1
  382. package/dist/templates/codemod/test.js +0 -93
  383. package/dist/templates/docs/README.md +0 -151
  384. package/dist/templates/scripts/new_feature.sh +0 -80
  385. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  386. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  387. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  388. package/dist/test-analysis.js +0 -786
  389. package/dist/tool-interface.js +0 -314
  390. package/dist/tool-loader.js +0 -303
  391. package/dist/tool-validator.js +0 -393
  392. package/dist/utils/agent-display.js +0 -210
  393. package/dist/utils/agent-session.js +0 -344
  394. package/dist/utils/async-utils.js +0 -188
  395. package/dist/utils/command-wrapper.js +0 -200
  396. package/dist/utils/event-log.js +0 -584
  397. package/dist/utils/event-renderer.js +0 -521
  398. package/dist/utils/finalization.js +0 -230
  399. package/dist/utils/git-lock.js +0 -119
  400. package/dist/utils/gitignore-updater.js +0 -158
  401. package/dist/utils/ide-detection.js +0 -133
  402. package/dist/utils/lifecycle-events.js +0 -94
  403. package/dist/utils/project-analysis.js +0 -367
  404. package/dist/utils/promise-utils.js +0 -72
  405. package/dist/utils/quality-gates-errors.js +0 -520
  406. package/dist/utils/quality-gates-utils.js +0 -387
  407. package/dist/utils/schema-validator.js +0 -50
  408. package/dist/utils/spec-resolver.js +0 -711
  409. package/dist/utils/typescript-detector.js +0 -369
  410. package/dist/utils/working-state.js +0 -530
  411. package/dist/utils/yaml-validation.js +0 -156
  412. package/dist/validation/spec-validation.js +0 -924
  413. package/dist/waivers-manager.js +0 -732
  414. package/dist/worktree/worktree-manager.js +0 -1735
  415. package/templates/.caws/schemas/policy.schema.json +0 -117
  416. package/templates/.caws/schemas/scope.schema.json +0 -52
  417. package/templates/.caws/schemas/waivers.schema.json +0 -106
  418. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  419. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  420. package/templates/.caws/templates/working-spec.template.yml +0 -80
  421. package/templates/.caws/tools/README.md +0 -18
  422. package/templates/.caws/tools/scope-guard.js +0 -203
  423. package/templates/.caws/tools-allow.json +0 -331
  424. package/templates/.caws/waivers.yml +0 -19
  425. package/templates/.claude/README.md +0 -190
  426. package/templates/.claude/hooks/audit.sh +0 -121
  427. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  428. package/templates/.claude/hooks/classify_command.py +0 -592
  429. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  430. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  431. package/templates/.claude/hooks/naming-check.sh +0 -100
  432. package/templates/.claude/hooks/protected-paths.sh +0 -39
  433. package/templates/.claude/hooks/quality-check.sh +0 -81
  434. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  435. package/templates/.claude/hooks/scope-guard.sh +0 -381
  436. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  437. package/templates/.claude/hooks/session-log.sh +0 -634
  438. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  439. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  440. package/templates/.claude/hooks/test_classify_command.py +0 -370
  441. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  442. package/templates/.claude/hooks/validate-spec.sh +0 -76
  443. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  444. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  445. package/templates/.claude/rules/git-safety.md +0 -26
  446. package/templates/.claude/rules/worktree-isolation.md +0 -101
  447. package/templates/.claude/settings.json +0 -141
  448. package/templates/.cursor/README.md +0 -299
  449. package/templates/.cursor/hooks/audit.sh +0 -55
  450. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  451. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  452. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  453. package/templates/.cursor/hooks/format.sh +0 -38
  454. package/templates/.cursor/hooks/naming-check.sh +0 -64
  455. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  456. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  457. package/templates/.cursor/hooks/session-log.sh +0 -924
  458. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  459. package/templates/.cursor/hooks.json +0 -76
  460. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  461. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  462. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  463. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  464. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  465. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  466. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  467. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  468. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  469. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  470. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  471. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  472. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  473. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  474. package/templates/.cursor/rules/README.md +0 -148
  475. package/templates/.github/copilot-instructions.md +0 -82
  476. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  477. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  478. package/templates/.junie/guidelines.md +0 -73
  479. package/templates/.vscode/launch.json +0 -17
  480. package/templates/.vscode/settings.json +0 -95
  481. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  482. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  483. package/templates/CLAUDE.md +0 -196
  484. package/templates/COMMIT_CONVENTIONS.md +0 -86
  485. package/templates/OIDC_SETUP.md +0 -300
  486. package/templates/agents.md +0 -171
  487. package/templates/codemod/README.md +0 -1
  488. package/templates/codemod/test.js +0 -93
  489. package/templates/docs/README.md +0 -151
  490. package/templates/scripts/new_feature.sh +0 -80
  491. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  492. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  493. package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
@@ -0,0 +1,506 @@
1
+ "use strict";
2
+ // Spec lifecycle writer.
3
+ //
4
+ // CLI-SPECS-001: store-layer mutations for spec lifecycle. Composes
5
+ // lifecycle-transaction + yaml-patch + appendEvent into typed lifecycle
6
+ // operations:
7
+ //
8
+ // createSpec — write a new .caws/specs/<id>.yaml (active) + spec_created
9
+ // closeSpec — raw-byte patch lifecycle_state/resolution/closure_notes
10
+ // /updated_at on existing spec + spec_closed
11
+ // archiveSpec — move .caws/specs/<id>.yaml → .caws/specs/.archive/<id>.yaml,
12
+ // patch lifecycle_state → archived + spec_archived
13
+ //
14
+ // Every operation:
15
+ // - acquires the lifecycle lock
16
+ // - validates plan via kernel (parseAndValidateSpec on planned bytes)
17
+ // - performs writes through atomicWrite with preserveMode
18
+ // - appends events through appendEvent (the SOLE v11 events writer)
19
+ // - rolls back on failure with typed partial-failure outcomes
20
+ //
21
+ // What this module does NOT do:
22
+ // - CLI argument parsing (that's in shell/commands/specs.ts)
23
+ // - Rendering (shell layer)
24
+ // - Concurrent worktree mutations (Slice 6 surface)
25
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ var desc = Object.getOwnPropertyDescriptor(m, k);
28
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
29
+ desc = { enumerable: true, get: function() { return m[k]; } };
30
+ }
31
+ Object.defineProperty(o, k2, desc);
32
+ }) : (function(o, m, k, k2) {
33
+ if (k2 === undefined) k2 = k;
34
+ o[k2] = m[k];
35
+ }));
36
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
37
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
38
+ }) : function(o, v) {
39
+ o["default"] = v;
40
+ });
41
+ var __importStar = (this && this.__importStar) || (function () {
42
+ var ownKeys = function(o) {
43
+ ownKeys = Object.getOwnPropertyNames || function (o) {
44
+ var ar = [];
45
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
46
+ return ar;
47
+ };
48
+ return ownKeys(o);
49
+ };
50
+ return function (mod) {
51
+ if (mod && mod.__esModule) return mod;
52
+ var result = {};
53
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
54
+ __setModuleDefault(result, mod);
55
+ return result;
56
+ };
57
+ })();
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.createSpec = createSpec;
60
+ exports.closeSpec = closeSpec;
61
+ exports.archiveSpec = archiveSpec;
62
+ exports.listSpecs = listSpecs;
63
+ exports.showSpec = showSpec;
64
+ const fs = __importStar(require("fs"));
65
+ const path = __importStar(require("path"));
66
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
67
+ const events_store_1 = require("./events-store");
68
+ const lifecycle_transaction_1 = require("./lifecycle-transaction");
69
+ const lifecycle_lock_1 = require("./lifecycle-lock");
70
+ const repo_root_1 = require("./repo-root");
71
+ const rules_1 = require("./rules");
72
+ const specs_store_1 = require("./specs-store");
73
+ const yaml_patch_1 = require("./yaml-patch");
74
+ const yaml_store_1 = require("./yaml-store");
75
+ // ─── Path helpers ────────────────────────────────────────────────────────
76
+ function specPath(cawsDir, id) {
77
+ return path.join(cawsDir, 'specs', `${id}.yaml`);
78
+ }
79
+ function archivedSpecPath(cawsDir, id) {
80
+ return path.join(cawsDir, 'specs', '.archive', `${id}.yaml`);
81
+ }
82
+ /** Find a spec on disk under either active or archived locations. */
83
+ function findSpecPath(cawsDir, id) {
84
+ const active = specPath(cawsDir, id);
85
+ if (fs.existsSync(active))
86
+ return active;
87
+ const archived = archivedSpecPath(cawsDir, id);
88
+ if (fs.existsSync(archived))
89
+ return archived;
90
+ return null;
91
+ }
92
+ // ─── ID validation (mirrors kernel regex) ────────────────────────────────
93
+ const SPEC_ID_PATTERN = /^[A-Z][A-Z0-9]*(-[A-Z0-9]+)*-\d+[a-z]*$/;
94
+ function validateSpecId(id) {
95
+ if (typeof id !== 'string' || id.length === 0) {
96
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, 'Spec id is required.', { subject: 'id' }));
97
+ }
98
+ if (!SPEC_ID_PATTERN.test(id)) {
99
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec id "${id}" does not match the v11 pattern (e.g., FEAT-001, CLI-SPECS-001).`, { subject: id, data: { pattern: SPEC_ID_PATTERN.source } }));
100
+ }
101
+ return (0, caws_kernel_1.ok)(true);
102
+ }
103
+ // ─── Spec rendering for create ───────────────────────────────────────────
104
+ function renderInitialSpecYaml(input) {
105
+ const now = (input.now ?? (() => new Date()))().toISOString();
106
+ const state = input.initialState ?? 'active';
107
+ // Render a minimum-viable v11 spec. Plain-string fields are
108
+ // single-quoted to be defensive against embedded colons. The body
109
+ // is intentionally minimal but satisfies the kernel's structural
110
+ // requirements (non-empty arrays where the schema demands them).
111
+ // The user fills in concrete values before iteration.
112
+ return [
113
+ `id: ${input.id}`,
114
+ `title: '${input.title.replace(/'/g, "''")}'`,
115
+ `risk_tier: ${input.riskTier}`,
116
+ `mode: ${input.mode}`,
117
+ `lifecycle_state: ${state}`,
118
+ `created_at: '${now}'`,
119
+ `updated_at: '${now}'`,
120
+ `blast_radius:`,
121
+ ` modules:`,
122
+ ` - 'TODO: list one or more modules this spec touches.'`,
123
+ ` data_migration: false`,
124
+ `operational_rollback_slo: 5m`,
125
+ `scope:`,
126
+ ` in:`,
127
+ ` - 'TODO: list the file(s) or directories this spec authorizes.'`,
128
+ ` out: []`,
129
+ `invariants:`,
130
+ ` - 'TODO: describe one invariant this spec guarantees.'`,
131
+ `acceptance:`,
132
+ ` - id: A1`,
133
+ ` given: 'TODO'`,
134
+ ` when: 'TODO'`,
135
+ ` then: 'TODO'`,
136
+ `non_functional: {}`,
137
+ `contracts: []`,
138
+ ``,
139
+ ].join('\n');
140
+ }
141
+ // ─── createSpec ──────────────────────────────────────────────────────────
142
+ function createSpec(cawsDir, input) {
143
+ const idValidation = validateSpecId(input.id);
144
+ if (!idValidation.ok)
145
+ return idValidation;
146
+ // Refuse duplicate ids (in either active or archived location).
147
+ const existing = findSpecPath(cawsDir, input.id);
148
+ if (existing !== null) {
149
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${input.id}" already exists at ${existing}.`, { subject: input.id, data: { existing_path: existing } }));
150
+ }
151
+ const targetPath = specPath(cawsDir, input.id);
152
+ const newBytes = renderInitialSpecYaml(input);
153
+ // Validate the planned YAML through the kernel BEFORE we write or
154
+ // append events.
155
+ const parsed = (0, caws_kernel_1.parseAndValidateSpec)(newBytes);
156
+ if (!(0, caws_kernel_1.isOk)(parsed)) {
157
+ return (0, caws_kernel_1.err)(parsed.errors.map((d) => (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, d.message, {
158
+ subject: d.subject ?? input.id,
159
+ data: { source_rule: d.rule },
160
+ })));
161
+ }
162
+ const now = (input.now ?? (() => new Date()))().toISOString();
163
+ const event = {
164
+ event: 'spec_created',
165
+ ts: now,
166
+ actor: input.actor,
167
+ spec_id: input.id,
168
+ data: {
169
+ title: input.title,
170
+ risk_tier: input.riskTier,
171
+ mode: input.mode,
172
+ lifecycle_state: input.initialState ?? 'active',
173
+ },
174
+ };
175
+ const txnResult = (0, lifecycle_lock_1.withLifecycleLock)(cawsDir, () => (0, lifecycle_transaction_1.runLifecycleTransaction)({
176
+ cawsDir,
177
+ plannedWrites: [{ path: targetPath, contents: newBytes }],
178
+ events: [event],
179
+ }));
180
+ if (!txnResult.ok) {
181
+ return (0, caws_kernel_1.err)(txnResult.errors);
182
+ }
183
+ return mapTxnToOutcome(txnResult.value, input.id, targetPath);
184
+ }
185
+ // ─── closeSpec ───────────────────────────────────────────────────────────
186
+ function closeSpec(cawsDir, input) {
187
+ const idValidation = validateSpecId(input.id);
188
+ if (!idValidation.ok)
189
+ return idValidation;
190
+ const targetPath = specPath(cawsDir, input.id);
191
+ if (!fs.existsSync(targetPath)) {
192
+ // Check archive too — if it's already archived, this is a different
193
+ // kind of error than "not found."
194
+ const archived = archivedSpecPath(cawsDir, input.id);
195
+ if (fs.existsSync(archived)) {
196
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${input.id}" is archived; cannot close (legal transitions: active → closed → archived).`, { subject: input.id }));
197
+ }
198
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${input.id}" not found at ${targetPath}.`, { subject: input.id }));
199
+ }
200
+ // Load and verify the current state.
201
+ const sourceResult = (0, yaml_store_1.readYamlSource)(targetPath);
202
+ if (!(0, caws_kernel_1.isOk)(sourceResult))
203
+ return (0, caws_kernel_1.err)(sourceResult.errors);
204
+ const originalBytes = sourceResult.value;
205
+ const parsed = (0, caws_kernel_1.parseAndValidateSpec)(originalBytes);
206
+ if (!(0, caws_kernel_1.isOk)(parsed)) {
207
+ return (0, caws_kernel_1.err)(parsed.errors.map((d) => (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, d.message, {
208
+ subject: d.subject ?? input.id,
209
+ data: { source_rule: d.rule },
210
+ })));
211
+ }
212
+ const spec = parsed.value;
213
+ if (spec.lifecycle_state !== 'active') {
214
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${input.id}" is in lifecycle_state "${spec.lifecycle_state}"; only active specs can be closed.`, { subject: input.id, data: { current_state: spec.lifecycle_state } }));
215
+ }
216
+ // Raw-byte patch sequence:
217
+ // 1. lifecycle_state → closed
218
+ // 2. insert resolution after lifecycle_state
219
+ // 3. if reason: insert closure_notes after resolution
220
+ // 4. updated_at → now
221
+ const now = (input.now ?? (() => new Date()))().toISOString();
222
+ let patched = originalBytes;
223
+ const step1 = (0, yaml_patch_1.setTopLevelScalar)(patched, 'lifecycle_state', 'closed');
224
+ if (!step1.ok)
225
+ return (0, caws_kernel_1.err)(step1.errors);
226
+ patched = step1.value;
227
+ // Insert resolution after lifecycle_state. If resolution already
228
+ // exists (e.g., from a prior failed transaction), update it instead.
229
+ const hasResolution = /^resolution:/m.test(patched);
230
+ if (hasResolution) {
231
+ const step2 = (0, yaml_patch_1.setTopLevelScalar)(patched, 'resolution', input.resolution);
232
+ if (!step2.ok)
233
+ return (0, caws_kernel_1.err)(step2.errors);
234
+ patched = step2.value;
235
+ }
236
+ else {
237
+ const step2 = (0, yaml_patch_1.insertTopLevelScalarAfter)(patched, 'lifecycle_state', 'resolution', input.resolution);
238
+ if (!step2.ok)
239
+ return (0, caws_kernel_1.err)(step2.errors);
240
+ patched = step2.value;
241
+ }
242
+ if (input.reason !== undefined && input.reason.length > 0) {
243
+ const escaped = `'${input.reason.replace(/'/g, "''")}'`;
244
+ const hasNotes = /^closure_notes:/m.test(patched);
245
+ if (hasNotes) {
246
+ const step3 = (0, yaml_patch_1.setTopLevelScalar)(patched, 'closure_notes', escaped);
247
+ if (!step3.ok)
248
+ return (0, caws_kernel_1.err)(step3.errors);
249
+ patched = step3.value;
250
+ }
251
+ else {
252
+ const step3 = (0, yaml_patch_1.insertTopLevelScalarAfter)(patched, 'resolution', 'closure_notes', escaped);
253
+ if (!step3.ok)
254
+ return (0, caws_kernel_1.err)(step3.errors);
255
+ patched = step3.value;
256
+ }
257
+ }
258
+ const step4 = (0, yaml_patch_1.setTopLevelScalar)(patched, 'updated_at', `'${now}'`);
259
+ if (!step4.ok)
260
+ return (0, caws_kernel_1.err)(step4.errors);
261
+ patched = step4.value;
262
+ // Validate the patched bytes through the kernel before write.
263
+ const reparsed = (0, caws_kernel_1.parseAndValidateSpec)(patched);
264
+ if (!(0, caws_kernel_1.isOk)(reparsed)) {
265
+ return (0, caws_kernel_1.err)(reparsed.errors.map((d) => (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, d.message, {
266
+ subject: d.subject ?? input.id,
267
+ data: { source_rule: d.rule, hint: 'planned-bytes validation failed' },
268
+ })));
269
+ }
270
+ const eventData = { resolution: input.resolution };
271
+ if (input.reason !== undefined && input.reason.length > 0) {
272
+ eventData.closure_notes = input.reason;
273
+ }
274
+ if (input.mergeCommit !== undefined)
275
+ eventData.merge_commit = input.mergeCommit;
276
+ if (input.supersededBy !== undefined)
277
+ eventData.superseded_by = input.supersededBy;
278
+ const event = {
279
+ event: 'spec_closed',
280
+ ts: now,
281
+ actor: input.actor,
282
+ spec_id: input.id,
283
+ data: eventData,
284
+ };
285
+ const txnResult = (0, lifecycle_lock_1.withLifecycleLock)(cawsDir, () => (0, lifecycle_transaction_1.runLifecycleTransaction)({
286
+ cawsDir,
287
+ plannedWrites: [{ path: targetPath, contents: patched }],
288
+ events: [event],
289
+ }));
290
+ if (!txnResult.ok) {
291
+ return (0, caws_kernel_1.err)(txnResult.errors);
292
+ }
293
+ return mapTxnToOutcome(txnResult.value, input.id, targetPath);
294
+ }
295
+ // ─── archiveSpec ─────────────────────────────────────────────────────────
296
+ function archiveSpec(cawsDir, input) {
297
+ const idValidation = validateSpecId(input.id);
298
+ if (!idValidation.ok)
299
+ return idValidation;
300
+ const fromPath = specPath(cawsDir, input.id);
301
+ if (!fs.existsSync(fromPath)) {
302
+ const archived = archivedSpecPath(cawsDir, input.id);
303
+ if (fs.existsSync(archived)) {
304
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${input.id}" is already archived at ${archived}.`, { subject: input.id }));
305
+ }
306
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${input.id}" not found at ${fromPath}.`, { subject: input.id }));
307
+ }
308
+ // Validate current state: must be closed.
309
+ const sourceResult = (0, yaml_store_1.readYamlSource)(fromPath);
310
+ if (!(0, caws_kernel_1.isOk)(sourceResult))
311
+ return (0, caws_kernel_1.err)(sourceResult.errors);
312
+ const originalBytes = sourceResult.value;
313
+ const parsed = (0, caws_kernel_1.parseAndValidateSpec)(originalBytes);
314
+ if (!(0, caws_kernel_1.isOk)(parsed)) {
315
+ return (0, caws_kernel_1.err)(parsed.errors.map((d) => (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, d.message, {
316
+ subject: d.subject ?? input.id,
317
+ data: { source_rule: d.rule },
318
+ })));
319
+ }
320
+ const spec = parsed.value;
321
+ if (spec.lifecycle_state !== 'closed') {
322
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${input.id}" is in lifecycle_state "${spec.lifecycle_state}"; only closed specs can be archived.`, { subject: input.id, data: { current_state: spec.lifecycle_state } }));
323
+ }
324
+ const now = (input.now ?? (() => new Date()))().toISOString();
325
+ const toPath = archivedSpecPath(cawsDir, input.id);
326
+ // Patch lifecycle_state → archived and bump updated_at on a copy.
327
+ let patched = originalBytes;
328
+ const s1 = (0, yaml_patch_1.setTopLevelScalar)(patched, 'lifecycle_state', 'archived');
329
+ if (!s1.ok)
330
+ return (0, caws_kernel_1.err)(s1.errors);
331
+ patched = s1.value;
332
+ const s2 = (0, yaml_patch_1.setTopLevelScalar)(patched, 'updated_at', `'${now}'`);
333
+ if (!s2.ok)
334
+ return (0, caws_kernel_1.err)(s2.errors);
335
+ patched = s2.value;
336
+ // Validate.
337
+ const reparsed = (0, caws_kernel_1.parseAndValidateSpec)(patched);
338
+ if (!(0, caws_kernel_1.isOk)(reparsed)) {
339
+ return (0, caws_kernel_1.err)(reparsed.errors.map((d) => (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, d.message, {
340
+ subject: d.subject ?? input.id,
341
+ data: { source_rule: d.rule, hint: 'planned-bytes validation failed' },
342
+ })));
343
+ }
344
+ // Ensure the archive dir exists. fs.renameSync requires it.
345
+ try {
346
+ fs.mkdirSync(path.dirname(toPath), { recursive: true });
347
+ }
348
+ catch (e) {
349
+ const cause = e;
350
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_WRITE_FAILED, `Failed to create archive directory: ${cause.message ?? 'unknown'}.`, { subject: path.dirname(toPath) }));
351
+ }
352
+ // Filesystem-move pattern: we write the patched bytes to the new
353
+ // path via the transaction, then delete the source. The transaction
354
+ // doesn't model moves natively, so we do this in two phases inside
355
+ // the same lock:
356
+ // 1. lifecycle-transaction: write toPath + append spec_archived
357
+ // 2. AFTER transaction success: unlink fromPath
358
+ //
359
+ // If step 2 fails, we surface the partial-failure but the audit log
360
+ // already records the move intent. The next doctor pass will see
361
+ // the spec in BOTH locations and surface that as a doctor finding.
362
+ const fromRel = path.relative(path.join(cawsDir, '..'), fromPath);
363
+ const toRel = path.relative(path.join(cawsDir, '..'), toPath);
364
+ const event = {
365
+ event: 'spec_archived',
366
+ ts: now,
367
+ actor: input.actor,
368
+ spec_id: input.id,
369
+ data: { from_path: fromRel, to_path: toRel },
370
+ };
371
+ // Capture original bytes so we can roll back the unlink in
372
+ // emergencies (rare but worth tracking).
373
+ let unlinkOk = false;
374
+ let unlinkError = null;
375
+ const txnResult = (0, lifecycle_lock_1.withLifecycleLock)(cawsDir, () => {
376
+ const r = (0, lifecycle_transaction_1.runLifecycleTransaction)({
377
+ cawsDir,
378
+ plannedWrites: [{ path: toPath, contents: patched }],
379
+ events: [event],
380
+ });
381
+ if (!r.ok)
382
+ return r;
383
+ if (r.value.kind !== 'success')
384
+ return r;
385
+ // Transaction wrote toPath + appended event. Now remove fromPath.
386
+ try {
387
+ fs.unlinkSync(fromPath);
388
+ unlinkOk = true;
389
+ }
390
+ catch (e) {
391
+ const cause = e;
392
+ unlinkError = cause.message ?? 'unknown unlink error';
393
+ }
394
+ return r;
395
+ });
396
+ // Reason flows into closure_notes ONLY if the user passed one; archive
397
+ // event schema does NOT take closure_notes, but we attach the reason
398
+ // to a follow-up evidence record path in future versions. For v11.1
399
+ // archive, we accept the --reason for parity with close but the
400
+ // schema does not carry it.
401
+ void input.reason;
402
+ if (!txnResult.ok) {
403
+ return (0, caws_kernel_1.err)(txnResult.errors);
404
+ }
405
+ if (txnResult.value.kind !== 'success') {
406
+ return (0, caws_kernel_1.ok)({
407
+ kind: 'partial_failure_recovered',
408
+ cause: txnResult.value.cause,
409
+ });
410
+ }
411
+ if (!unlinkOk) {
412
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PARTIAL_FAILURE_UNRECOVERED, `Archive write succeeded and spec_archived event appended, but original file unlink failed (${unlinkError}). Spec now exists in BOTH active and archived locations.`, {
413
+ subject: input.id,
414
+ data: {
415
+ from_path: fromPath,
416
+ to_path: toPath,
417
+ recovery_instruction: `Manually remove ${fromPath} once you've confirmed ${toPath} is intact.`,
418
+ },
419
+ }));
420
+ }
421
+ return (0, caws_kernel_1.ok)({ kind: 'success', id: input.id, path: toPath });
422
+ }
423
+ // ─── Outcome mapper ──────────────────────────────────────────────────────
424
+ function mapTxnToOutcome(result, id, targetPath) {
425
+ if (result.kind === 'success') {
426
+ return (0, caws_kernel_1.ok)({ kind: 'success', id, path: targetPath });
427
+ }
428
+ if (result.kind === 'partial_failure_recovered') {
429
+ return (0, caws_kernel_1.ok)({ kind: 'partial_failure_recovered', cause: result.cause });
430
+ }
431
+ // partial_failure_unrecovered: this should already have surfaced as
432
+ // an Err from runLifecycleTransaction, but we map defensively.
433
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PARTIAL_FAILURE_UNRECOVERED, `Spec "${id}" lifecycle transaction left partial state.`, {
434
+ subject: id,
435
+ data: {
436
+ writes_completed: result.writesCompleted,
437
+ rolled_back: result.rolledBack,
438
+ rollback_failed: result.rollbackFailed,
439
+ recovery_instruction: result.recoveryInstruction,
440
+ },
441
+ }));
442
+ }
443
+ /** List specs by lifecycle state, optionally including archived ones. */
444
+ function listSpecs(cawsDir, options = {}) {
445
+ const activeResult = (0, specs_store_1.loadSpecs)(cawsDir);
446
+ const active = activeResult.specs.map((spec) => ({
447
+ id: spec.id,
448
+ title: spec.title,
449
+ lifecycle_state: spec.lifecycle_state,
450
+ path: specPath(cawsDir, spec.id),
451
+ }));
452
+ const archived = [];
453
+ if (options.includeArchived === true) {
454
+ const archiveDir = path.join(cawsDir, 'specs', '.archive');
455
+ if (fs.existsSync(archiveDir)) {
456
+ try {
457
+ const entries = fs.readdirSync(archiveDir, { withFileTypes: true });
458
+ for (const entry of entries) {
459
+ if (!entry.isFile())
460
+ continue;
461
+ if (!entry.name.endsWith('.yaml') && !entry.name.endsWith('.yml'))
462
+ continue;
463
+ const fullPath = path.join(archiveDir, entry.name);
464
+ const src = (0, yaml_store_1.readYamlSource)(fullPath);
465
+ if (!(0, caws_kernel_1.isOk)(src))
466
+ continue;
467
+ const parsed = (0, caws_kernel_1.parseAndValidateSpec)(src.value);
468
+ if (!(0, caws_kernel_1.isOk)(parsed))
469
+ continue;
470
+ const spec = parsed.value;
471
+ archived.push({
472
+ id: spec.id,
473
+ title: spec.title,
474
+ lifecycle_state: spec.lifecycle_state,
475
+ path: fullPath,
476
+ });
477
+ }
478
+ }
479
+ catch {
480
+ // Best-effort archive listing.
481
+ }
482
+ }
483
+ }
484
+ return (0, caws_kernel_1.ok)({ active, archived });
485
+ }
486
+ /** Find a spec by id under active or archive locations. */
487
+ function showSpec(cawsDir, id) {
488
+ const idValidation = validateSpecId(id);
489
+ if (!idValidation.ok)
490
+ return idValidation;
491
+ const fullPath = findSpecPath(cawsDir, id);
492
+ if (fullPath === null) {
493
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, `Spec "${id}" not found in .caws/specs/ or .caws/specs/.archive/.`, { subject: id }));
494
+ }
495
+ const sourceResult = (0, yaml_store_1.readYamlSource)(fullPath);
496
+ if (!(0, caws_kernel_1.isOk)(sourceResult))
497
+ return (0, caws_kernel_1.err)(sourceResult.errors);
498
+ const parsed = (0, caws_kernel_1.parseAndValidateSpec)(sourceResult.value);
499
+ if (!(0, caws_kernel_1.isOk)(parsed))
500
+ return (0, caws_kernel_1.err)(parsed.errors);
501
+ return (0, caws_kernel_1.ok)({ spec: parsed.value, path: fullPath, source: sourceResult.value });
502
+ }
503
+ // Unused import elimination: surface appendEvent so future direct-event
504
+ // flows (if any) compile against the same surface as evidence/waiver.
505
+ void events_store_1.appendEvent;
506
+ //# sourceMappingURL=specs-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs-writer.js","sourceRoot":"","sources":["../../src/store/specs-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { AgentRegistry, ChainedEvent, Diagnostic, Policy, Spec, Waiver, WorktreeRegistry } from '@paths.design/caws-kernel';
2
+ export interface SpecsLoadResult {
3
+ /** Specs that parsed AND validated. Safe to hand to the kernel. */
4
+ readonly specs: readonly Spec[];
5
+ /**
6
+ * Per-file diagnostics from parse/validate. Includes:
7
+ * - kernel diagnostics for individual spec files that failed
8
+ * - store diagnostics for unreadable/skipped files
9
+ * - store diagnostics for duplicate spec ids
10
+ */
11
+ readonly diagnostics: readonly Diagnostic[];
12
+ }
13
+ export interface PolicyLoadResult {
14
+ /** Undefined when no policy.yaml exists or the file failed to parse. */
15
+ readonly policy?: Policy;
16
+ /** Non-fatal diagnostics from the kernel's policy semantics layer. */
17
+ readonly warnings: readonly Diagnostic[];
18
+ /** Fatal diagnostics — when present, `policy` is undefined. */
19
+ readonly errors: readonly Diagnostic[];
20
+ }
21
+ export interface EventsLoadResult {
22
+ /** Successfully parsed chained events. */
23
+ readonly events: readonly ChainedEvent[];
24
+ /**
25
+ * Non-fatal diagnostics. Only one kind is currently emitted here:
26
+ * `store.events.trailing_partial_line` when the last line was incomplete
27
+ * (crash-recovery tolerance).
28
+ */
29
+ readonly warnings: readonly Diagnostic[];
30
+ }
31
+ export interface StoreSnapshot {
32
+ readonly repoRoot: string;
33
+ readonly cawsDir: string;
34
+ /** Specs that parsed AND validated. */
35
+ readonly specs: readonly Spec[];
36
+ /** Per-file diagnostics from loadSpecs. */
37
+ readonly specDiagnostics: readonly Diagnostic[];
38
+ /** Parsed policy if present. */
39
+ readonly policy?: Policy;
40
+ /** Non-fatal diagnostics from the policy kernel. */
41
+ readonly policyWarnings: readonly Diagnostic[];
42
+ /** Fatal diagnostics that prevented policy loading. */
43
+ readonly policyErrors: readonly Diagnostic[];
44
+ readonly worktrees: WorktreeRegistry;
45
+ readonly agents: AgentRegistry;
46
+ readonly events: readonly ChainedEvent[];
47
+ readonly eventWarnings: readonly Diagnostic[];
48
+ /** Waivers that parsed AND validated (slice 7a.5). */
49
+ readonly waivers: readonly Waiver[];
50
+ /** Per-file load diagnostics from loadWaivers (slice 7a.5). */
51
+ readonly waiverDiagnostics: readonly Diagnostic[];
52
+ /**
53
+ * Presence of legacy single-spec / pre-vNext artifacts inside `.caws/`.
54
+ * Doctor surfaces these as errors — vNext init refuses to bootstrap
55
+ * over them, and live projects should retire them.
56
+ */
57
+ readonly initResidue: {
58
+ readonly workingSpecYaml: boolean;
59
+ readonly workingSpecSchemaJson: boolean;
60
+ };
61
+ /**
62
+ * Existence facts for each canonical vNext path. Doctor needs these
63
+ * to surface "canonical layout drift" (e.g. specs/ dir missing on a
64
+ * live project). `eventsJsonlExists` is reported but never required:
65
+ * the first append creates it under lock.
66
+ */
67
+ readonly filesystem: {
68
+ readonly cawsDirExists: boolean;
69
+ readonly specsDirExists: boolean;
70
+ readonly waiversDirExists: boolean;
71
+ readonly policyYamlExists: boolean;
72
+ readonly worktreesJsonExists: boolean;
73
+ readonly agentsJsonExists: boolean;
74
+ readonly eventsJsonlExists: boolean;
75
+ };
76
+ /**
77
+ * Diagnostics from worktrees.json / agents.json load failures that
78
+ * the previous shape silently swallowed (the snapshot fell back to
79
+ * `{}` on Err). Doctor needs to see these to flag "registry file is
80
+ * malformed" without treating registry absence as drift.
81
+ */
82
+ readonly registryDiagnostics: readonly Diagnostic[];
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACN,IAAI,EACJ,MAAM,EACN,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAMnC,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAMD,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CACxC;AAMD,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;CAC1C;AAWD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,eAAe,EAAE,SAAS,UAAU,EAAE,CAAC;IAChD,gCAAgC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,cAAc,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/C,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9C,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,+DAA+D;IAC/D,QAAQ,CAAC,iBAAiB,EAAE,SAAS,UAAU,EAAE,CAAC;IAUlD;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;QAClC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;KACzC,CAAC;IAEF;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;QAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;QACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;QACtC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;KACrC,CAAC;IAEF;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,EAAE,SAAS,UAAU,EAAE,CAAC;CACrD"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // Node-only store types.
3
+ //
4
+ // The store layer is the bridge between the filesystem and the pure
5
+ // kernel. It loads state, delegates validation to the kernel, and returns
6
+ // either parsed values or structured Diagnostics.
7
+ //
8
+ // Discipline:
9
+ // - The store never invents new validation rules. It parses and forwards.
10
+ // - The store distinguishes "missing file" (often a recoverable Ok) from
11
+ // "malformed file" (always Err).
12
+ // - Programmer errors throw; user/repo errors return Result.
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":";AAAA,yBAAyB;AACzB,EAAE;AACF,oEAAoE;AACpE,0EAA0E;AAC1E,kDAAkD;AAClD,EAAE;AACF,cAAc;AACd,4EAA4E;AAC5E,2EAA2E;AAC3E,qCAAqC;AACrC,+DAA+D"}