@paths.design/caws-cli 10.2.0 → 11.0.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 (421) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +43 -785
  3. package/dist/shell/binding/resolve-binding.d.ts +4 -0
  4. package/dist/shell/binding/resolve-binding.d.ts.map +1 -0
  5. package/dist/shell/binding/resolve-binding.js +228 -0
  6. package/dist/shell/binding/resolve-binding.js.map +1 -0
  7. package/dist/shell/binding/types.d.ts +42 -0
  8. package/dist/shell/binding/types.d.ts.map +1 -0
  9. package/dist/shell/binding/types.js +21 -0
  10. package/dist/shell/binding/types.js.map +1 -0
  11. package/dist/shell/commands/claim.d.ts +14 -0
  12. package/dist/shell/commands/claim.d.ts.map +1 -0
  13. package/dist/shell/commands/claim.js +197 -0
  14. package/dist/shell/commands/claim.js.map +1 -0
  15. package/dist/shell/commands/doctor.d.ts +13 -0
  16. package/dist/shell/commands/doctor.d.ts.map +1 -0
  17. package/dist/shell/commands/doctor.js +97 -0
  18. package/dist/shell/commands/doctor.js.map +1 -0
  19. package/dist/shell/commands/evidence.d.ts +28 -0
  20. package/dist/shell/commands/evidence.d.ts.map +1 -0
  21. package/dist/shell/commands/evidence.js +166 -0
  22. package/dist/shell/commands/evidence.js.map +1 -0
  23. package/dist/shell/commands/gates.d.ts +19 -0
  24. package/dist/shell/commands/gates.d.ts.map +1 -0
  25. package/dist/shell/commands/gates.js +181 -0
  26. package/dist/shell/commands/gates.js.map +1 -0
  27. package/dist/shell/commands/init.d.ts +8 -0
  28. package/dist/shell/commands/init.d.ts.map +1 -0
  29. package/dist/shell/commands/init.js +64 -0
  30. package/dist/shell/commands/init.js.map +1 -0
  31. package/dist/shell/commands/scope.d.ts +11 -0
  32. package/dist/shell/commands/scope.d.ts.map +1 -0
  33. package/dist/shell/commands/scope.js +92 -0
  34. package/dist/shell/commands/scope.js.map +1 -0
  35. package/dist/shell/commands/status.d.ts +15 -0
  36. package/dist/shell/commands/status.d.ts.map +1 -0
  37. package/dist/shell/commands/status.js +106 -0
  38. package/dist/shell/commands/status.js.map +1 -0
  39. package/dist/shell/commands/waiver.d.ts +38 -0
  40. package/dist/shell/commands/waiver.d.ts.map +1 -0
  41. package/dist/shell/commands/waiver.js +240 -0
  42. package/dist/shell/commands/waiver.js.map +1 -0
  43. package/dist/shell/gates/disposition.d.ts +23 -0
  44. package/dist/shell/gates/disposition.d.ts.map +1 -0
  45. package/dist/shell/gates/disposition.js +87 -0
  46. package/dist/shell/gates/disposition.js.map +1 -0
  47. package/dist/shell/gates/gate-result-contract.d.ts +39 -0
  48. package/dist/shell/gates/gate-result-contract.d.ts.map +1 -0
  49. package/dist/shell/gates/gate-result-contract.js +150 -0
  50. package/dist/shell/gates/gate-result-contract.js.map +1 -0
  51. package/dist/shell/gates/quality-gates-adapter.d.ts +55 -0
  52. package/dist/shell/gates/quality-gates-adapter.d.ts.map +1 -0
  53. package/dist/shell/gates/quality-gates-adapter.js +161 -0
  54. package/dist/shell/gates/quality-gates-adapter.js.map +1 -0
  55. package/dist/shell/gates/waiver-filter.d.ts +58 -0
  56. package/dist/shell/gates/waiver-filter.d.ts.map +1 -0
  57. package/dist/shell/gates/waiver-filter.js +119 -0
  58. package/dist/shell/gates/waiver-filter.js.map +1 -0
  59. package/dist/shell/index.d.ts +50 -0
  60. package/dist/shell/index.d.ts.map +1 -0
  61. package/dist/shell/index.js +73 -0
  62. package/dist/shell/index.js.map +1 -0
  63. package/dist/shell/register.d.ts +11 -0
  64. package/dist/shell/register.d.ts.map +1 -0
  65. package/dist/shell/register.js +274 -0
  66. package/dist/shell/register.js.map +1 -0
  67. package/dist/shell/render/claim.d.ts +22 -0
  68. package/dist/shell/render/claim.d.ts.map +1 -0
  69. package/dist/shell/render/claim.js +75 -0
  70. package/dist/shell/render/claim.js.map +1 -0
  71. package/dist/shell/render/decision.d.ts +15 -0
  72. package/dist/shell/render/decision.d.ts.map +1 -0
  73. package/dist/shell/render/decision.js +66 -0
  74. package/dist/shell/render/decision.js.map +1 -0
  75. package/dist/shell/render/diagnostic.d.ts +19 -0
  76. package/dist/shell/render/diagnostic.d.ts.map +1 -0
  77. package/dist/shell/render/diagnostic.js +76 -0
  78. package/dist/shell/render/diagnostic.js.map +1 -0
  79. package/dist/shell/render/finding.d.ts +15 -0
  80. package/dist/shell/render/finding.d.ts.map +1 -0
  81. package/dist/shell/render/finding.js +57 -0
  82. package/dist/shell/render/finding.js.map +1 -0
  83. package/dist/shell/render/gates.d.ts +3 -0
  84. package/dist/shell/render/gates.d.ts.map +1 -0
  85. package/dist/shell/render/gates.js +56 -0
  86. package/dist/shell/render/gates.js.map +1 -0
  87. package/dist/shell/render/init.d.ts +11 -0
  88. package/dist/shell/render/init.d.ts.map +1 -0
  89. package/dist/shell/render/init.js +32 -0
  90. package/dist/shell/render/init.js.map +1 -0
  91. package/dist/shell/render/status.d.ts +26 -0
  92. package/dist/shell/render/status.d.ts.map +1 -0
  93. package/dist/shell/render/status.js +143 -0
  94. package/dist/shell/render/status.js.map +1 -0
  95. package/dist/shell/render/waiver.d.ts +21 -0
  96. package/dist/shell/render/waiver.d.ts.map +1 -0
  97. package/dist/shell/render/waiver.js +94 -0
  98. package/dist/shell/render/waiver.js.map +1 -0
  99. package/dist/shell/rules.d.ts +37 -0
  100. package/dist/shell/rules.d.ts.map +1 -0
  101. package/dist/shell/rules.js +51 -0
  102. package/dist/shell/rules.js.map +1 -0
  103. package/dist/shell/session/actor.d.ts +14 -0
  104. package/dist/shell/session/actor.d.ts.map +1 -0
  105. package/dist/shell/session/actor.js +34 -0
  106. package/dist/shell/session/actor.js.map +1 -0
  107. package/dist/shell/session/resolve-session.d.ts +5 -0
  108. package/dist/shell/session/resolve-session.d.ts.map +1 -0
  109. package/dist/shell/session/resolve-session.js +239 -0
  110. package/dist/shell/session/resolve-session.js.map +1 -0
  111. package/dist/shell/session/types.d.ts +56 -0
  112. package/dist/shell/session/types.d.ts.map +1 -0
  113. package/dist/shell/session/types.js +15 -0
  114. package/dist/shell/session/types.js.map +1 -0
  115. package/dist/store/agents-store.d.ts +3 -0
  116. package/dist/store/agents-store.d.ts.map +1 -0
  117. package/dist/store/agents-store.js +63 -0
  118. package/dist/store/agents-store.js.map +1 -0
  119. package/dist/store/apply-patch.d.ts +16 -0
  120. package/dist/store/apply-patch.d.ts.map +1 -0
  121. package/dist/store/apply-patch.js +191 -0
  122. package/dist/store/apply-patch.js.map +1 -0
  123. package/dist/store/atomic-write.d.ts +16 -0
  124. package/dist/store/atomic-write.d.ts.map +1 -0
  125. package/dist/store/atomic-write.js +132 -0
  126. package/dist/store/atomic-write.js.map +1 -0
  127. package/dist/store/doctor-snapshot.d.ts +20 -0
  128. package/dist/store/doctor-snapshot.d.ts.map +1 -0
  129. package/dist/store/doctor-snapshot.js +176 -0
  130. package/dist/store/doctor-snapshot.js.map +1 -0
  131. package/dist/store/events-store.d.ts +33 -0
  132. package/dist/store/events-store.d.ts.map +1 -0
  133. package/dist/store/events-store.js +297 -0
  134. package/dist/store/events-store.js.map +1 -0
  135. package/dist/store/index.d.ts +21 -0
  136. package/dist/store/index.d.ts.map +1 -0
  137. package/dist/store/index.js +47 -0
  138. package/dist/store/index.js.map +1 -0
  139. package/dist/store/init-store.d.ts +21 -0
  140. package/dist/store/init-store.d.ts.map +1 -0
  141. package/dist/store/init-store.js +295 -0
  142. package/dist/store/init-store.js.map +1 -0
  143. package/dist/store/json-store.d.ts +3 -0
  144. package/dist/store/json-store.d.ts.map +1 -0
  145. package/dist/store/json-store.js +65 -0
  146. package/dist/store/json-store.js.map +1 -0
  147. package/dist/store/policy-store.d.ts +3 -0
  148. package/dist/store/policy-store.d.ts.map +1 -0
  149. package/dist/store/policy-store.js +65 -0
  150. package/dist/store/policy-store.js.map +1 -0
  151. package/dist/store/repo-root.d.ts +46 -0
  152. package/dist/store/repo-root.d.ts.map +1 -0
  153. package/dist/store/repo-root.js +145 -0
  154. package/dist/store/repo-root.js.map +1 -0
  155. package/dist/store/rules.d.ts +53 -0
  156. package/dist/store/rules.d.ts.map +1 -0
  157. package/dist/store/rules.js +78 -0
  158. package/dist/store/rules.js.map +1 -0
  159. package/dist/store/specs-store.d.ts +3 -0
  160. package/dist/store/specs-store.d.ts.map +1 -0
  161. package/dist/store/specs-store.js +131 -0
  162. package/dist/store/specs-store.js.map +1 -0
  163. package/dist/store/types.d.ts +84 -0
  164. package/dist/store/types.d.ts.map +1 -0
  165. package/dist/store/types.js +14 -0
  166. package/dist/store/types.js.map +1 -0
  167. package/dist/store/waivers-store.d.ts +25 -0
  168. package/dist/store/waivers-store.d.ts.map +1 -0
  169. package/dist/store/waivers-store.js +232 -0
  170. package/dist/store/waivers-store.js.map +1 -0
  171. package/dist/store/worktrees-store.d.ts +3 -0
  172. package/dist/store/worktrees-store.d.ts.map +1 -0
  173. package/dist/store/worktrees-store.js +62 -0
  174. package/dist/store/worktrees-store.js.map +1 -0
  175. package/dist/store/yaml-store.d.ts +9 -0
  176. package/dist/store/yaml-store.d.ts.map +1 -0
  177. package/dist/store/yaml-store.js +121 -0
  178. package/dist/store/yaml-store.js.map +1 -0
  179. package/package.json +15 -13
  180. package/dist/budget-derivation.js +0 -751
  181. package/dist/cicd-optimizer.js +0 -504
  182. package/dist/commands/agents.js +0 -124
  183. package/dist/commands/archive.js +0 -500
  184. package/dist/commands/burnup.js +0 -198
  185. package/dist/commands/diagnose.js +0 -525
  186. package/dist/commands/evaluate.js +0 -314
  187. package/dist/commands/gates.js +0 -149
  188. package/dist/commands/init.js +0 -857
  189. package/dist/commands/iterate.js +0 -417
  190. package/dist/commands/mode.js +0 -269
  191. package/dist/commands/parallel.js +0 -242
  192. package/dist/commands/plan.js +0 -438
  193. package/dist/commands/provenance.js +0 -1143
  194. package/dist/commands/quality-monitor.js +0 -284
  195. package/dist/commands/scope.js +0 -264
  196. package/dist/commands/session.js +0 -312
  197. package/dist/commands/sidecar.js +0 -74
  198. package/dist/commands/specs.js +0 -1656
  199. package/dist/commands/status.js +0 -1172
  200. package/dist/commands/templates.js +0 -237
  201. package/dist/commands/tool.js +0 -136
  202. package/dist/commands/tutorial.js +0 -480
  203. package/dist/commands/validate.js +0 -357
  204. package/dist/commands/verify-acs.js +0 -443
  205. package/dist/commands/waivers.js +0 -599
  206. package/dist/commands/workflow.js +0 -243
  207. package/dist/commands/worktree.js +0 -502
  208. package/dist/config/lite-scope.js +0 -158
  209. package/dist/config/modes.js +0 -347
  210. package/dist/constants/spec-types.js +0 -65
  211. package/dist/gates/budget-limit.js +0 -121
  212. package/dist/gates/feedback.js +0 -260
  213. package/dist/gates/format.js +0 -179
  214. package/dist/gates/god-object.js +0 -117
  215. package/dist/gates/pipeline.js +0 -167
  216. package/dist/gates/scope-boundary.js +0 -112
  217. package/dist/gates/spec-completeness.js +0 -109
  218. package/dist/gates/todo-detection.js +0 -205
  219. package/dist/generators/jest-config-generator.js +0 -242
  220. package/dist/generators/working-spec.js +0 -237
  221. package/dist/minimal-cli.js +0 -88
  222. package/dist/parallel/parallel-manager.js +0 -433
  223. package/dist/policy/PolicyManager.js +0 -470
  224. package/dist/scaffold/claude-hooks.js +0 -443
  225. package/dist/scaffold/cursor-hooks.js +0 -177
  226. package/dist/scaffold/git-hooks.js +0 -928
  227. package/dist/scaffold/index.js +0 -794
  228. package/dist/session/session-manager.js +0 -653
  229. package/dist/sidecars/index.js +0 -33
  230. package/dist/sidecars/listeners.js +0 -40
  231. package/dist/sidecars/provenance-summary.js +0 -238
  232. package/dist/sidecars/quality-gaps.js +0 -258
  233. package/dist/sidecars/schema.js +0 -149
  234. package/dist/sidecars/spec-drift.js +0 -151
  235. package/dist/sidecars/waiver-draft.js +0 -176
  236. package/dist/spec/SpecFileManager.js +0 -419
  237. package/dist/templates/.caws/schemas/policy.schema.json +0 -117
  238. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  239. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  240. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  241. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  242. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  243. package/dist/templates/.caws/tools/README.md +0 -18
  244. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  245. package/dist/templates/.caws/tools-allow.json +0 -331
  246. package/dist/templates/.caws/waivers.yml +0 -19
  247. package/dist/templates/.claude/README.md +0 -190
  248. package/dist/templates/.claude/hooks/audit.sh +0 -121
  249. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  250. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  251. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  252. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  253. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  254. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  255. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  256. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  257. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  258. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  259. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  260. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  261. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  262. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  263. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  264. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  265. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  266. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  267. package/dist/templates/.claude/rules/git-safety.md +0 -26
  268. package/dist/templates/.claude/rules/worktree-isolation.md +0 -101
  269. package/dist/templates/.claude/settings.json +0 -141
  270. package/dist/templates/.cursor/README.md +0 -299
  271. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  272. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  273. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  274. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  275. package/dist/templates/.cursor/hooks/format.sh +0 -38
  276. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  277. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  278. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  279. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  280. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  281. package/dist/templates/.cursor/hooks.json +0 -76
  282. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  283. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  284. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  285. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  286. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  287. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  288. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  289. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  290. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  291. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  292. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  293. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  294. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  295. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  296. package/dist/templates/.cursor/rules/README.md +0 -148
  297. package/dist/templates/.github/copilot-instructions.md +0 -82
  298. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  299. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  300. package/dist/templates/.junie/guidelines.md +0 -73
  301. package/dist/templates/.vscode/launch.json +0 -17
  302. package/dist/templates/.vscode/settings.json +0 -95
  303. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  304. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  305. package/dist/templates/CLAUDE.md +0 -196
  306. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  307. package/dist/templates/OIDC_SETUP.md +0 -300
  308. package/dist/templates/agents.md +0 -171
  309. package/dist/templates/codemod/README.md +0 -1
  310. package/dist/templates/codemod/test.js +0 -93
  311. package/dist/templates/docs/README.md +0 -151
  312. package/dist/templates/scripts/new_feature.sh +0 -80
  313. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  314. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  315. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  316. package/dist/test-analysis.js +0 -786
  317. package/dist/tool-interface.js +0 -314
  318. package/dist/tool-loader.js +0 -303
  319. package/dist/tool-validator.js +0 -393
  320. package/dist/utils/agent-display.js +0 -210
  321. package/dist/utils/agent-session.js +0 -344
  322. package/dist/utils/async-utils.js +0 -188
  323. package/dist/utils/command-wrapper.js +0 -200
  324. package/dist/utils/event-log.js +0 -584
  325. package/dist/utils/event-renderer.js +0 -521
  326. package/dist/utils/finalization.js +0 -230
  327. package/dist/utils/git-lock.js +0 -119
  328. package/dist/utils/gitignore-updater.js +0 -158
  329. package/dist/utils/ide-detection.js +0 -133
  330. package/dist/utils/lifecycle-events.js +0 -94
  331. package/dist/utils/project-analysis.js +0 -367
  332. package/dist/utils/promise-utils.js +0 -72
  333. package/dist/utils/quality-gates-errors.js +0 -520
  334. package/dist/utils/quality-gates-utils.js +0 -387
  335. package/dist/utils/schema-validator.js +0 -50
  336. package/dist/utils/spec-resolver.js +0 -711
  337. package/dist/utils/typescript-detector.js +0 -369
  338. package/dist/utils/working-state.js +0 -530
  339. package/dist/utils/yaml-validation.js +0 -156
  340. package/dist/validation/spec-validation.js +0 -924
  341. package/dist/waivers-manager.js +0 -732
  342. package/dist/worktree/worktree-manager.js +0 -1735
  343. package/templates/.caws/schemas/policy.schema.json +0 -117
  344. package/templates/.caws/schemas/scope.schema.json +0 -52
  345. package/templates/.caws/schemas/waivers.schema.json +0 -106
  346. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  347. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  348. package/templates/.caws/templates/working-spec.template.yml +0 -80
  349. package/templates/.caws/tools/README.md +0 -18
  350. package/templates/.caws/tools/scope-guard.js +0 -203
  351. package/templates/.caws/tools-allow.json +0 -331
  352. package/templates/.caws/waivers.yml +0 -19
  353. package/templates/.claude/README.md +0 -190
  354. package/templates/.claude/hooks/audit.sh +0 -121
  355. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  356. package/templates/.claude/hooks/classify_command.py +0 -592
  357. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  358. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  359. package/templates/.claude/hooks/naming-check.sh +0 -100
  360. package/templates/.claude/hooks/protected-paths.sh +0 -39
  361. package/templates/.claude/hooks/quality-check.sh +0 -81
  362. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  363. package/templates/.claude/hooks/scope-guard.sh +0 -381
  364. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  365. package/templates/.claude/hooks/session-log.sh +0 -634
  366. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  367. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  368. package/templates/.claude/hooks/test_classify_command.py +0 -370
  369. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  370. package/templates/.claude/hooks/validate-spec.sh +0 -76
  371. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  372. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  373. package/templates/.claude/rules/git-safety.md +0 -26
  374. package/templates/.claude/rules/worktree-isolation.md +0 -101
  375. package/templates/.claude/settings.json +0 -141
  376. package/templates/.cursor/README.md +0 -299
  377. package/templates/.cursor/hooks/audit.sh +0 -55
  378. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  379. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  380. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  381. package/templates/.cursor/hooks/format.sh +0 -38
  382. package/templates/.cursor/hooks/naming-check.sh +0 -64
  383. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  384. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  385. package/templates/.cursor/hooks/session-log.sh +0 -924
  386. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  387. package/templates/.cursor/hooks.json +0 -76
  388. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  389. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  390. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  391. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  392. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  393. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  394. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  395. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  396. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  397. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  398. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  399. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  400. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  401. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  402. package/templates/.cursor/rules/README.md +0 -148
  403. package/templates/.github/copilot-instructions.md +0 -82
  404. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  405. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  406. package/templates/.junie/guidelines.md +0 -73
  407. package/templates/.vscode/launch.json +0 -17
  408. package/templates/.vscode/settings.json +0 -95
  409. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  410. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  411. package/templates/CLAUDE.md +0 -196
  412. package/templates/COMMIT_CONVENTIONS.md +0 -86
  413. package/templates/OIDC_SETUP.md +0 -300
  414. package/templates/agents.md +0 -171
  415. package/templates/codemod/README.md +0 -1
  416. package/templates/codemod/test.js +0 -93
  417. package/templates/docs/README.md +0 -151
  418. package/templates/scripts/new_feature.sh +0 -80
  419. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  420. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  421. package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ // `caws doctor` — composition command.
3
+ //
4
+ // Pipeline (no business logic in this file):
5
+ //
6
+ // 1. resolveRepoRoot(cwd) (store)
7
+ // 2. composeDoctorSnapshot(...) (store)
8
+ // 3. inspectProjectState(input) (kernel)
9
+ // 4. render store-load diagnostics (renderer)
10
+ // 5. render doctor findings (renderer)
11
+ // 6. choose exit code (this file)
12
+ //
13
+ // The command does NOT read .caws/ files directly, does NOT walk specs,
14
+ // does NOT invent repair rules, and does NOT re-validate state.
15
+ //
16
+ // Exit codes:
17
+ // 0 = no error-severity findings AND no error-severity store-load
18
+ // diagnostics
19
+ // 1 = any error-severity finding OR any error-severity store-load
20
+ // diagnostic. (Store-load errors count even when they were filtered
21
+ // out before reaching the kernel, because an invalid spec file is a
22
+ // project-health problem regardless.)
23
+ // 2 = repo-root resolution failed, or other hard composition failure.
24
+ //
25
+ // Testable without Commander: caller passes cwd / out / err / now and
26
+ // receives a number. `registerShellCommands(program)` (Slice 5c.9) is the
27
+ // only place that wires this to Commander.
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.runDoctorCommand = runDoctorCommand;
30
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
31
+ const store_1 = require("../../store");
32
+ const index_1 = require("../index");
33
+ function runDoctorCommand(opts = {}) {
34
+ const cwd = opts.cwd ?? process.cwd();
35
+ const now = opts.now ?? new Date();
36
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
37
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
38
+ const showData = opts.showData === true;
39
+ // 1. Repo root
40
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
41
+ if (!repoRootResult.ok) {
42
+ err('caws doctor: failed to resolve repo root.');
43
+ err((0, index_1.renderDiagnostics)(repoRootResult.errors, { showData }));
44
+ return 2;
45
+ }
46
+ const { repoRoot, cawsDir } = repoRootResult.value;
47
+ // 2 + 3. Compose snapshot, run kernel diagnoser
48
+ let composition;
49
+ try {
50
+ composition = (0, store_1.composeDoctorSnapshot)({ repoRoot, cawsDir, now });
51
+ }
52
+ catch (e) {
53
+ err(`caws doctor: store composition failed: ${e.message}`);
54
+ return 2;
55
+ }
56
+ const { snapshot, doctorInput } = composition;
57
+ let report;
58
+ try {
59
+ report = (0, caws_kernel_1.inspectProjectState)(doctorInput);
60
+ }
61
+ catch (e) {
62
+ err(`caws doctor: kernel inspect failed: ${e.message}`);
63
+ return 2;
64
+ }
65
+ // 4. Render store-load diagnostics — kept SEPARATE from doctor findings.
66
+ const loadDiagnostics = [
67
+ ...snapshot.specDiagnostics,
68
+ ...snapshot.policyErrors,
69
+ ...snapshot.policyWarnings,
70
+ ...snapshot.eventWarnings,
71
+ ];
72
+ out('Store load diagnostics:');
73
+ if (loadDiagnostics.length === 0) {
74
+ out(' (none)');
75
+ }
76
+ else {
77
+ out((0, index_1.renderDiagnostics)(loadDiagnostics, { showData }));
78
+ }
79
+ // 5. Render doctor findings — separate section.
80
+ out('');
81
+ out('Doctor findings:');
82
+ if (report.findings.length === 0) {
83
+ out(' (none)');
84
+ }
85
+ else {
86
+ out((0, index_1.renderFindings)(report.findings, { showData }));
87
+ }
88
+ // 6. Exit code
89
+ const loadCounts = (0, index_1.countSeverities)(loadDiagnostics);
90
+ const findingCounts = (0, index_1.countFindingSeverities)(report.findings);
91
+ const hasErrors = findingCounts.errors > 0 || loadCounts.errors > 0;
92
+ out('');
93
+ out(`Summary: findings ${findingCounts.errors}E/${findingCounts.warnings}W/${findingCounts.infos}I; ` +
94
+ `load ${loadCounts.errors}E/${loadCounts.warnings}W/${loadCounts.infos}I`);
95
+ return hasErrors ? 1 : 0;
96
+ }
97
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/shell/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type ActorKind } from '@paths.design/caws-kernel';
2
+ export type EvidenceKind = 'test' | 'gate' | 'ac';
3
+ export interface EvidenceRecordOptions {
4
+ /** Which evidence event to record. */
5
+ readonly kind: EvidenceKind;
6
+ /** Required: the spec id this evidence is about. */
7
+ readonly specId: string;
8
+ /** Required: the event payload — must match the kernel's event-type schema. */
9
+ readonly data: Record<string, unknown>;
10
+ /** Actor kind. Defaults to 'agent'. */
11
+ readonly actorKind?: ActorKind;
12
+ /** Optional actor id override. Defaults to session.identity.session_id. */
13
+ readonly actorId?: string;
14
+ /** Optional ISO-8601 ts. Defaults to now. */
15
+ readonly ts?: string;
16
+ /** Working directory. Defaults to process.cwd(). */
17
+ readonly cwd?: string;
18
+ /** Injected clock for tests. */
19
+ readonly now?: () => Date;
20
+ /** Injected env for tests. */
21
+ readonly env?: NodeJS.ProcessEnv;
22
+ readonly out?: (line: string) => void;
23
+ readonly err?: (line: string) => void;
24
+ /** Show optional `data` blocks on rendered errors. */
25
+ readonly showData?: boolean;
26
+ }
27
+ export declare function runEvidenceRecordCommand(opts: EvidenceRecordOptions): number;
28
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/evidence.ts"],"names":[],"mappings":"AAyBA,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,2BAA2B,CAAC;AAQnC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAQlD,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,uCAAuC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAeD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAqG5E"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ // `caws evidence record` — append one typed evidence event.
3
+ //
4
+ // Pipeline:
5
+ // 1. resolveRepoRoot(cwd)
6
+ // 2. resolveSession({ allowMint: true }) — this is a write op
7
+ // 3. buildActor({ session, kind })
8
+ // 4. construct EventBody from caller inputs — body-only; no seq/prev/hash
9
+ // 5. appendEvent(cawsDir, body) — store enforces lock,
10
+ // chain via kernel
11
+ // prepareAppend
12
+ // 6. print seq + event_hash AFTER success
13
+ //
14
+ // Exit codes:
15
+ // 0 = append succeeded
16
+ // 1 = validation rejected the body OR appendEvent returned Err
17
+ // 2 = repo-root / session resolution / composition failure
18
+ //
19
+ // CRITICAL: the API surface accepts EventBody-shaped inputs only. It does
20
+ // not accept `seq`, `prev_hash`, or `event_hash`. The CLI layer parsing
21
+ // (commander) MUST NOT add those fields. If a caller does pass them via
22
+ // the data object, kernel `validateEventBody` rejects them (additionalProperties:
23
+ // false on the per-event-type payload schemas).
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || (function () {
41
+ var ownKeys = function(o) {
42
+ ownKeys = Object.getOwnPropertyNames || function (o) {
43
+ var ar = [];
44
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
45
+ return ar;
46
+ };
47
+ return ownKeys(o);
48
+ };
49
+ return function (mod) {
50
+ if (mod && mod.__esModule) return mod;
51
+ var result = {};
52
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
53
+ __setModuleDefault(result, mod);
54
+ return result;
55
+ };
56
+ })();
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.runEvidenceRecordCommand = runEvidenceRecordCommand;
59
+ const path = __importStar(require("node:path"));
60
+ const store_1 = require("../../store");
61
+ const actor_1 = require("../session/actor");
62
+ const resolve_session_1 = require("../session/resolve-session");
63
+ const diagnostic_1 = require("../render/diagnostic");
64
+ const rules_1 = require("../rules");
65
+ const KIND_TO_EVENT_TYPE = {
66
+ test: 'test_recorded',
67
+ gate: 'gate_evaluated',
68
+ ac: 'ac_recorded',
69
+ };
70
+ function rejectPreChainedFields(data) {
71
+ for (const banned of ['seq', 'prev_hash', 'event_hash']) {
72
+ if (Object.prototype.hasOwnProperty.call(data, banned)) {
73
+ return banned;
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ function isEvidenceKind(value) {
79
+ return value === 'test' || value === 'gate' || value === 'ac';
80
+ }
81
+ function runEvidenceRecordCommand(opts) {
82
+ const cwd = opts.cwd ?? process.cwd();
83
+ const now = opts.now ?? (() => new Date());
84
+ const env = opts.env ?? process.env;
85
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
86
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
87
+ const showData = opts.showData === true;
88
+ // Validate the evidence kind up front (defensive — Commander should
89
+ // reject unknown values at the parser, but tests / programmatic callers
90
+ // may bypass that).
91
+ if (!isEvidenceKind(opts.kind)) {
92
+ err(`caws evidence record: invalid --type. Got ${JSON.stringify(opts.kind)}; expected test|gate|ac.`);
93
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_INVALID_EVIDENCE_TYPE})`);
94
+ return 1;
95
+ }
96
+ // Reject pre-chained fields in the payload BEFORE doing any I/O.
97
+ const banned = rejectPreChainedFields(opts.data);
98
+ if (banned !== null) {
99
+ err(`caws evidence record: payload must NOT include \`${banned}\`. Pre-chained events are not accepted by this command.`);
100
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_PRE_CHAINED_EVENT_REFUSED})`);
101
+ return 1;
102
+ }
103
+ // Require non-empty spec_id (also enforced by kernel REQUIRES_SPEC_ID
104
+ // fence, but we surface the shell-level error early).
105
+ if (typeof opts.specId !== 'string' || opts.specId.length === 0) {
106
+ err('caws evidence record: --spec is required.');
107
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_MISSING_SPEC_ID})`);
108
+ return 1;
109
+ }
110
+ // 1. Repo root.
111
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
112
+ if (!repoRootResult.ok) {
113
+ err('caws evidence record: failed to resolve repo root.');
114
+ err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
115
+ return 2;
116
+ }
117
+ const { repoRoot, cawsDir } = repoRootResult.value;
118
+ // 2. Session (write op → allowMint).
119
+ const sessionResult = (0, resolve_session_1.resolveSession)({
120
+ cawsDir,
121
+ worktreeRoot: cwd,
122
+ env,
123
+ now,
124
+ allowMint: true,
125
+ });
126
+ if (!sessionResult.ok) {
127
+ err('caws evidence record: failed to resolve session identity.');
128
+ err((0, diagnostic_1.renderDiagnostics)(sessionResult.errors, { showData }));
129
+ return 2;
130
+ }
131
+ // 3. Actor envelope.
132
+ const actor = (0, actor_1.buildActor)({
133
+ session: sessionResult.value,
134
+ kind: opts.actorKind ?? 'agent',
135
+ ...(opts.actorId !== undefined ? { id: opts.actorId } : {}),
136
+ });
137
+ // 4. Body.
138
+ const eventType = KIND_TO_EVENT_TYPE[opts.kind];
139
+ const ts = opts.ts ?? now().toISOString();
140
+ // `EventBody.data` is typed as `EventPayload` (a union of per-event
141
+ // payload shapes). The kernel will validate against the right schema
142
+ // at append time; we hand off the caller's already-parsed object.
143
+ const body = {
144
+ event: eventType,
145
+ ts,
146
+ actor,
147
+ spec_id: opts.specId,
148
+ data: opts.data,
149
+ };
150
+ // 5. Append. `appendEvent` calls `prepareAppend` which calls
151
+ // `validateEventBody` against the per-type schema.
152
+ const appendResult = (0, store_1.appendEvent)(cawsDir, body);
153
+ if (!appendResult.ok) {
154
+ err('caws evidence record: append rejected.');
155
+ err((0, diagnostic_1.renderDiagnostics)(appendResult.errors, { showData }));
156
+ return 1;
157
+ }
158
+ // 6. Print outcome AFTER success. Includes seq + event_hash so the
159
+ // caller (agent or human) gets a stable handle for the new event.
160
+ const ev = appendResult.value;
161
+ out(`recorded ${ev.event} seq=${ev.seq} hash=${ev.event_hash} spec=${ev.spec_id ?? '(none)'}`);
162
+ // Print the relative events file path for ergonomics.
163
+ out(` written to ${path.relative(repoRoot, path.join(cawsDir, 'events.jsonl'))}`);
164
+ return 0;
165
+ }
166
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../../src/shell/commands/evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type QualityGatesRunner } from '../gates/quality-gates-adapter';
2
+ export interface GatesRunCommandOptions {
3
+ readonly cwd?: string;
4
+ readonly now?: () => Date;
5
+ readonly env?: NodeJS.ProcessEnv;
6
+ readonly out?: (line: string) => void;
7
+ readonly err?: (line: string) => void;
8
+ /** Extra args to pass to the subprocess after --json. */
9
+ readonly subprocessArgs?: readonly string[];
10
+ /** Injected subprocess runner (tests). */
11
+ readonly runner?: QualityGatesRunner;
12
+ /** Show structured data on rendered diagnostics. */
13
+ readonly showData?: boolean;
14
+ }
15
+ export interface GatesRunCommandRequest {
16
+ readonly specId: string;
17
+ }
18
+ export declare function runGatesRunCommand(request: GatesRunCommandRequest, opts?: GatesRunCommandOptions): number;
19
+ //# sourceMappingURL=gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/gates.ts"],"names":[],"mappings":"AAyCA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,yDAAyD;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AA6CD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAgIR"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ // `caws gates run` — single policy-driven gate execution path.
3
+ //
4
+ // Pipeline:
5
+ // 1. resolveRepoRoot(cwd)
6
+ // 2. composeStoreSnapshot — we need the policy
7
+ // 3. policy presence check — gates cannot run without policy
8
+ // 4. resolveSession({ allowMint: true }) — we will append events
9
+ // 5. runQualityGates(adapter) — subprocess + JSON validation
10
+ // 6. deriveDispositions(report, policy) — policy decides block/warn/skip
11
+ // 7. For each disposition, appendEvent(`gate_evaluated`)
12
+ // 8. Render summary
13
+ // 9. Exit code:
14
+ // 0 if no disposition blocks
15
+ // 1 if any disposition blocks
16
+ // 2 on hard composition errors (no policy, subprocess contract failure,
17
+ // event append failure)
18
+ //
19
+ // The subprocess does NOT decide blocking. The policy does. The subprocess
20
+ // reports violations; this command groups them per policy-declared gate
21
+ // and applies policy.gates[gate].mode to compute outcome.
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.runGatesRunCommand = runGatesRunCommand;
24
+ const store_1 = require("../../store");
25
+ const diagnostic_1 = require("../render/diagnostic");
26
+ const gates_1 = require("../render/gates");
27
+ const resolve_session_1 = require("../session/resolve-session");
28
+ const actor_1 = require("../session/actor");
29
+ const rules_1 = require("../rules");
30
+ const disposition_1 = require("../gates/disposition");
31
+ const quality_gates_adapter_1 = require("../gates/quality-gates-adapter");
32
+ const waiver_filter_1 = require("../gates/waiver-filter");
33
+ const MAX_EVENT_VIOLATIONS = 100;
34
+ function dispositionToEventBody(args) {
35
+ const violations = args.disposition.violations
36
+ .slice(0, MAX_EVENT_VIOLATIONS)
37
+ .map((v) => ({
38
+ rule: typeof v.type === 'string' ? v.type : 'unknown',
39
+ subject: typeof v.file === 'string'
40
+ ? typeof v.line === 'number'
41
+ ? `${v.file}:${v.line}`
42
+ : v.file
43
+ : (v.gate ?? 'unknown'),
44
+ ...(v.message !== undefined ? { details: v.message } : {}),
45
+ }));
46
+ const ev = args.waiverEvidence;
47
+ const waivedCount = ev?.waived_count ?? 0;
48
+ return {
49
+ event: 'gate_evaluated',
50
+ ts: args.ts,
51
+ actor: args.actor,
52
+ spec_id: args.specId,
53
+ data: {
54
+ gate_id: args.disposition.gate_id,
55
+ mode: args.disposition.mode,
56
+ result: args.disposition.outcome === 'skipped' ? 'skipped' : args.disposition.outcome,
57
+ violations,
58
+ waived_count: waivedCount,
59
+ ...(ev !== undefined && ev.waiver_ids.length > 0
60
+ ? { waiver_ids: ev.waiver_ids.slice() }
61
+ : {}),
62
+ },
63
+ };
64
+ }
65
+ function runGatesRunCommand(request, opts = {}) {
66
+ const cwd = opts.cwd ?? process.cwd();
67
+ const nowFn = opts.now ?? (() => new Date());
68
+ const now = nowFn();
69
+ const env = opts.env ?? process.env;
70
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
71
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
72
+ const showData = opts.showData === true;
73
+ if (typeof request.specId !== 'string' || request.specId.length === 0) {
74
+ err('caws gates run: --spec is required.');
75
+ err(`(rule: ${rules_1.SHELL_RULES.COMMAND_MISSING_SPEC_ID})`);
76
+ return 1;
77
+ }
78
+ // 1. Repo root
79
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
80
+ if (!repoRootResult.ok) {
81
+ err('caws gates run: failed to resolve repo root.');
82
+ err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
83
+ return 2;
84
+ }
85
+ const { repoRoot, cawsDir } = repoRootResult.value;
86
+ // 2. Snapshot for policy
87
+ let snapshot;
88
+ try {
89
+ snapshot = (0, store_1.composeStoreSnapshot)({ repoRoot, cawsDir });
90
+ }
91
+ catch (e) {
92
+ err(`caws gates run: store composition failed: ${e.message}`);
93
+ return 2;
94
+ }
95
+ // 3. Policy required — gates cannot decide mode without it.
96
+ if (snapshot.policy === undefined) {
97
+ err(`caws gates run: no policy.yaml loaded — gates require policy to derive ` +
98
+ `block/warn/skip semantics. Run \`caws doctor\` for details.`);
99
+ err(`(rule: ${rules_1.SHELL_RULES.GATES_POLICY_REQUIRED})`);
100
+ if (snapshot.policyErrors.length > 0) {
101
+ err((0, diagnostic_1.renderDiagnostics)(snapshot.policyErrors, { showData }));
102
+ }
103
+ return 2;
104
+ }
105
+ const policy = snapshot.policy;
106
+ // 4. Session (write op — gates append events)
107
+ const sessionResult = (0, resolve_session_1.resolveSession)({
108
+ cawsDir,
109
+ worktreeRoot: cwd,
110
+ env,
111
+ now: nowFn,
112
+ allowMint: true,
113
+ });
114
+ if (!sessionResult.ok) {
115
+ err('caws gates run: failed to resolve session identity.');
116
+ err((0, diagnostic_1.renderDiagnostics)(sessionResult.errors, { showData }));
117
+ return 2;
118
+ }
119
+ const actor = (0, actor_1.buildActor)({
120
+ session: sessionResult.value,
121
+ kind: 'agent',
122
+ });
123
+ // 5. Subprocess + contract validation
124
+ const runOpts = {
125
+ cwd: repoRoot,
126
+ };
127
+ if (opts.runner !== undefined)
128
+ runOpts.runner = opts.runner;
129
+ if (opts.subprocessArgs !== undefined)
130
+ runOpts.args = opts.subprocessArgs;
131
+ const reportResult = (0, quality_gates_adapter_1.runQualityGates)(runOpts);
132
+ if (!reportResult.ok) {
133
+ err('caws gates run: quality-gates subprocess contract failure.');
134
+ err((0, diagnostic_1.renderDiagnostics)(reportResult.errors, { showData }));
135
+ return 2;
136
+ }
137
+ const report = reportResult.value;
138
+ // 6a. Load + apply waivers BEFORE disposition.
139
+ // Waivers do NOT mutate policy.gates[gate].mode. They remove
140
+ // authorized-exception violations from the report so blocking is
141
+ // computed only from unwaived violations. Malformed waiver files
142
+ // produce diagnostics but never discard valid waivers.
143
+ const waiversLoad = (0, store_1.loadWaivers)(cawsDir);
144
+ if (waiversLoad.diagnostics.length > 0) {
145
+ err((0, diagnostic_1.renderDiagnostics)(waiversLoad.diagnostics, { showData }));
146
+ }
147
+ const waiverFilter = (0, waiver_filter_1.filterWaivedViolations)({
148
+ report,
149
+ waivers: waiversLoad.waivers,
150
+ specId: request.specId,
151
+ now,
152
+ policyGateIds: Object.keys(policy.gates),
153
+ });
154
+ // 6b. Policy-driven disposition on UNWAIVED violations only.
155
+ const dispositionResult = (0, disposition_1.deriveDispositions)(waiverFilter.reportForDisposition, policy);
156
+ // 7. Append one gate_evaluated event per policy-declared gate.
157
+ // Failure to append is a hard error: evidence integrity matters.
158
+ const ts = now.toISOString();
159
+ for (const d of dispositionResult.dispositions) {
160
+ const body = dispositionToEventBody({
161
+ disposition: d,
162
+ ts,
163
+ actor,
164
+ specId: request.specId,
165
+ ...(waiverFilter.waivedByGate[d.gate_id] !== undefined
166
+ ? { waiverEvidence: waiverFilter.waivedByGate[d.gate_id] }
167
+ : {}),
168
+ });
169
+ const append = (0, store_1.appendEvent)(cawsDir, body);
170
+ if (!append.ok) {
171
+ err(`caws gates run: failed to append gate_evaluated event for ${d.gate_id}.`);
172
+ err((0, diagnostic_1.renderDiagnostics)(append.errors, { showData }));
173
+ return 2;
174
+ }
175
+ }
176
+ // 8. Render summary
177
+ out((0, gates_1.renderGatesRun)(dispositionResult));
178
+ // 9. Exit by policy disposition.
179
+ return dispositionResult.anyBlocks ? 1 : 0;
180
+ }
181
+ //# sourceMappingURL=gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.js","sourceRoot":"","sources":["../../../src/shell/commands/gates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface InitCommandOptions {
2
+ readonly cwd?: string;
3
+ readonly out?: (line: string) => void;
4
+ readonly err?: (line: string) => void;
5
+ readonly showData?: boolean;
6
+ }
7
+ export declare function runInitCommand(opts?: InitCommandOptions): number;
8
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/init.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,kBAAuB,GAAG,MAAM,CAsCpE"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // `caws init` — vNext bootstrap of the canonical .caws/ shape.
3
+ //
4
+ // Pipeline:
5
+ // 1. resolveRepoRoot(cwd) — needs git, NOT .caws/
6
+ // 2. initProject(repoRoot) — store-side adapter does the work
7
+ // 3. render result — short summary or "already initialized"
8
+ //
9
+ // Exit codes:
10
+ // 0 = canonical state established (created OR already_initialized)
11
+ // 1 = legacy residue refused (INIT_LEGACY_RESIDUE) — non-destructive,
12
+ // the user must clear the listed files manually
13
+ // 2 = repo-root resolution failed, write I/O failed, or the default
14
+ // policy itself failed kernel validation
15
+ // (INIT_DEFAULT_POLICY_INVALID — programmer error in our seed)
16
+ //
17
+ // Discipline:
18
+ // - No --force in 7b. Force modes turn into cleanup tools and cleanup
19
+ // belongs to a later doctor/repair surface.
20
+ // - The seeded policy MUST pass kernel validation BEFORE landing on
21
+ // disk. If our default is bad, that's a programmer error and exit 2
22
+ // is correct — we do NOT write a known-invalid policy just to keep
23
+ // `init` succeeding.
24
+ // - Init never overwrites existing canonical files. Idempotent rerun
25
+ // reports "already initialized"; partial state is filled in
26
+ // additively (a half-bootstrapped project becomes whole).
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.runInitCommand = runInitCommand;
29
+ const store_1 = require("../../store");
30
+ const diagnostic_1 = require("../render/diagnostic");
31
+ const init_1 = require("../render/init");
32
+ function runInitCommand(opts = {}) {
33
+ const cwd = opts.cwd ?? process.cwd();
34
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
35
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
36
+ const showData = opts.showData === true;
37
+ // 1. Resolve repo root. We do NOT pass requireCawsDir — the whole
38
+ // point of init is to create .caws/, so failing on its absence
39
+ // here would be self-contradictory.
40
+ const root = (0, store_1.resolveRepoRoot)(cwd);
41
+ if (!root.ok) {
42
+ err('caws init: failed to resolve repo root.');
43
+ err((0, diagnostic_1.renderDiagnostics)(root.errors, { showData }));
44
+ return 2;
45
+ }
46
+ const { repoRoot } = root.value;
47
+ // 2. Bootstrap.
48
+ const result = (0, store_1.initProject)(repoRoot);
49
+ if (!result.ok) {
50
+ // Decide exit code from the diagnostic rule. Legacy residue is a
51
+ // user-correctable domain error (1); everything else is a hard
52
+ // store/programmer failure (2).
53
+ const isLegacy = result.errors.some((d) => d.rule === 'store.init.legacy_residue');
54
+ err(isLegacy
55
+ ? 'caws init: refusing to overwrite legacy state.'
56
+ : 'caws init: failed to bootstrap project.');
57
+ err((0, diagnostic_1.renderDiagnostics)(result.errors, { showData }));
58
+ return isLegacy ? 1 : 2;
59
+ }
60
+ // 3. Render and exit.
61
+ out((0, init_1.renderInit)({ result: result.value, repoRoot }));
62
+ return 0;
63
+ }
64
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/shell/commands/init.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,EAAE;AACF,YAAY;AACZ,gEAAgE;AAChE,2EAA2E;AAC3E,iFAAiF;AACjF,EAAE;AACF,cAAc;AACd,qEAAqE;AACrE,wEAAwE;AACxE,sDAAsD;AACtD,sEAAsE;AACtE,+CAA+C;AAC/C,qEAAqE;AACrE,EAAE;AACF,cAAc;AACd,wEAAwE;AACxE,gDAAgD;AAChD,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,yBAAyB;AACzB,uEAAuE;AACvE,gEAAgE;AAChE,8DAA8D;;AAa9D,wCAsCC;AAjDD,uCAA2D;AAC3D,qDAAyD;AACzD,yCAA4C;AAS5C,SAAgB,cAAc,CAAC,OAA2B,EAAE;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IAExC,kEAAkE;IAClE,kEAAkE;IAClE,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAA,uBAAe,EAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAC/C,GAAG,CAAC,IAAA,8BAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;IAEhC,gBAAgB;IAChB,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,iEAAiE;QACjE,+DAA+D;QAC/D,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,2BAA2B,CAC9C,CAAC;QACF,GAAG,CACD,QAAQ;YACN,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,yCAAyC,CAC9C,CAAC;QACF,GAAG,CAAC,IAAA,8BAAiB,EAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,sBAAsB;IACtB,GAAG,CAAC,IAAA,iBAAU,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type ScopeMode = 'show' | 'check';
2
+ export interface ScopeCommandOptions {
3
+ readonly path: string;
4
+ readonly mode: ScopeMode;
5
+ readonly cwd?: string;
6
+ readonly out?: (line: string) => void;
7
+ readonly err?: (line: string) => void;
8
+ readonly showData?: boolean;
9
+ }
10
+ export declare function runScopeCommand(opts: ScopeCommandOptions): number;
11
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/scope.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAkEjE"}