@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,92 @@
1
+ "use strict";
2
+ // `caws scope show <path>` and `caws scope check <path>` — share one
3
+ // decision path; differ only in exit-code policy.
4
+ //
5
+ // show: always exits 0 after rendering, even for reject / no_authority
6
+ // / invalid_path. It is explanatory.
7
+ // check: exits 0 only on `admit`. reject / no_authority / invalid_path
8
+ // exit 1. Used by hooks.
9
+ //
10
+ // Both:
11
+ // 1. resolveRepoRoot(cwd)
12
+ // 2. composeStoreSnapshot (we want load diagnostics if anything is
13
+ // malformed; we do NOT use composeDoctorSnapshot because we don't
14
+ // run the doctor here)
15
+ // 3. resolveBinding(cwd, registry, specs)
16
+ // 4. require a loaded policy. If absent, exit 2 with a clear message.
17
+ // 5. kernel evaluatePath(path, binding, policy)
18
+ // 6. renderDecision(decision, {boundContext})
19
+ // 7. exit per mode.
20
+ //
21
+ // The command does NOT compute its own scope rules. The kernel decides;
22
+ // the command only renders and picks the exit.
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.runScopeCommand = runScopeCommand;
25
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
26
+ const store_1 = require("../../store");
27
+ const resolve_binding_1 = require("../binding/resolve-binding");
28
+ const decision_1 = require("../render/decision");
29
+ const diagnostic_1 = require("../render/diagnostic");
30
+ function runScopeCommand(opts) {
31
+ const cwd = opts.cwd ?? process.cwd();
32
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
33
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
34
+ const showData = opts.showData === true;
35
+ const mode = opts.mode;
36
+ // 1. Repo root
37
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
38
+ if (!repoRootResult.ok) {
39
+ err(`caws scope ${mode}: failed to resolve repo root.`);
40
+ err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
41
+ return 2;
42
+ }
43
+ const { repoRoot, cawsDir } = repoRootResult.value;
44
+ // 2. Snapshot
45
+ let snapshot;
46
+ try {
47
+ snapshot = (0, store_1.composeStoreSnapshot)({ repoRoot, cawsDir });
48
+ }
49
+ catch (e) {
50
+ err(`caws scope ${mode}: store composition failed: ${e.message}`);
51
+ return 2;
52
+ }
53
+ // 3. Binding from cwd
54
+ const bound = (0, resolve_binding_1.resolveBinding)({
55
+ repoRoot,
56
+ cwd,
57
+ registry: snapshot.worktrees,
58
+ specs: snapshot.specs,
59
+ });
60
+ // 4. Require a loaded policy. Without it, the kernel can't evaluate
61
+ // non_governed_zones / root_passthrough / infra exemptions, and the
62
+ // rewrite plan requires policy.yaml for any vNext project. This is
63
+ // exit-2 (program/composition) territory, not no_authority.
64
+ const policy = snapshot.policy;
65
+ if (policy === undefined) {
66
+ err(`caws scope ${mode}: no policy.yaml loaded. Run \`caws doctor\` for details.`);
67
+ if (snapshot.policyErrors.length > 0) {
68
+ err((0, diagnostic_1.renderDiagnostics)(snapshot.policyErrors, { showData }));
69
+ }
70
+ return 2;
71
+ }
72
+ // 5. Kernel decision
73
+ let decision;
74
+ try {
75
+ decision = (0, caws_kernel_1.evaluatePath)(opts.path, bound.binding, policy);
76
+ }
77
+ catch (e) {
78
+ err(`caws scope ${mode}: kernel evaluation failed: ${e.message}`);
79
+ return 2;
80
+ }
81
+ // 6. Render — both modes use the same renderer with the same
82
+ // boundContext hint so the human-readable nuance for unbound is
83
+ // consistent.
84
+ out((0, decision_1.renderDecision)(decision, { boundContext: bound, showData }));
85
+ // 7. Exit per mode
86
+ if (mode === 'show') {
87
+ return 0;
88
+ }
89
+ // mode === 'check'
90
+ return decision.kind === 'admit' ? 0 : 1;
91
+ }
92
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../src/shell/commands/scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface StatusCommandOptions {
2
+ readonly cwd?: string;
3
+ readonly now?: () => Date;
4
+ readonly env?: NodeJS.ProcessEnv;
5
+ readonly out?: (line: string) => void;
6
+ readonly err?: (line: string) => void;
7
+ /** Stale heartbeat TTL in ms; display only. Default 24h. */
8
+ readonly staleTtlMs?: number;
9
+ /** Cap on rendered top findings. Default 5. */
10
+ readonly findingCap?: number;
11
+ /** Show structured data blocks on rendered diagnostics. */
12
+ readonly showData?: boolean;
13
+ }
14
+ export declare function runStatusCommand(opts?: StatusCommandOptions): number;
15
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/status.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,oBAAoB;IACnC,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,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,oBAAyB,GAAG,MAAM,CAoFxE"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ // `caws status` — vNext read-only dashboard.
3
+ //
4
+ // Hard constraint: status MUST NOT mutate anything. It loads state,
5
+ // runs the kernel diagnoser, and renders. It does NOT mint capsules,
6
+ // refresh heartbeats, write events, mutate worktrees.json, or alter
7
+ // agents.json. Ownership mutation belongs to `caws claim`; spec
8
+ // lifecycle belongs to `caws spec *`; event emission belongs to
9
+ // `caws evidence record`.
10
+ //
11
+ // Pipeline:
12
+ // 1. resolveRepoRoot(cwd)
13
+ // 2. composeDoctorSnapshot(...) → snapshot + doctorInput
14
+ // 3. inspectProjectState(doctorInput) → DoctorReport
15
+ // 4. resolveBinding(cwd, registry, specs)
16
+ // 5. resolveSession({ allowMint: false }) — read-only; never mints
17
+ // 6. renderStatus(...) → stdout
18
+ // 7. exit 0 (regardless of doctor findings) or 2 on composition error
19
+ //
20
+ // Doctor findings drive PROMINENT DISPLAY in the dashboard. They do
21
+ // NOT change the exit code. `caws doctor` is the diagnostic command
22
+ // with 0/1/2 semantics; status is observability.
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.runStatusCommand = runStatusCommand;
25
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
26
+ const store_1 = require("../../store");
27
+ const resolve_binding_1 = require("../binding/resolve-binding");
28
+ const diagnostic_1 = require("../render/diagnostic");
29
+ const status_1 = require("../render/status");
30
+ const resolve_session_1 = require("../session/resolve-session");
31
+ function runStatusCommand(opts = {}) {
32
+ const cwd = opts.cwd ?? process.cwd();
33
+ const nowFn = opts.now ?? (() => new Date());
34
+ const env = opts.env ?? process.env;
35
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
36
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
37
+ const showData = opts.showData === true;
38
+ // 1. Repo root
39
+ const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
40
+ if (!repoRootResult.ok) {
41
+ err('caws status: failed to resolve repo root.');
42
+ err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
43
+ return 2;
44
+ }
45
+ const { repoRoot, cawsDir } = repoRootResult.value;
46
+ const now = nowFn();
47
+ // 2. Snapshot + doctor input
48
+ let composition;
49
+ try {
50
+ composition = (0, store_1.composeDoctorSnapshot)({ repoRoot, cawsDir, now });
51
+ }
52
+ catch (e) {
53
+ err(`caws status: store composition failed: ${e.message}`);
54
+ return 2;
55
+ }
56
+ const { snapshot, doctorInput } = composition;
57
+ // 3. Run the kernel diagnoser
58
+ let report;
59
+ try {
60
+ report = (0, caws_kernel_1.inspectProjectState)(doctorInput);
61
+ }
62
+ catch (e) {
63
+ err(`caws status: kernel inspect failed: ${e.message}`);
64
+ return 2;
65
+ }
66
+ // 4. Binding from cwd
67
+ const binding = (0, resolve_binding_1.resolveBinding)({
68
+ repoRoot,
69
+ cwd,
70
+ registry: snapshot.worktrees,
71
+ specs: snapshot.specs,
72
+ });
73
+ // 5. Session — READ-ONLY. Never pass allowMint: true here.
74
+ const sessionResult = (0, resolve_session_1.resolveSession)({
75
+ cawsDir,
76
+ worktreeRoot: cwd,
77
+ env,
78
+ now: nowFn,
79
+ // allowMint: false — read-only; status MUST NOT mint capsules.
80
+ });
81
+ // 6. Render
82
+ // Event-chain validity is captured in the doctor findings (via
83
+ // doctor.event.chain_invalid); the status dashboard surfaces a
84
+ // chain-broken note only when the kernel actually emitted that finding.
85
+ const chainBroken = report.findings.some((f) => f.rule === 'doctor.event.chain_invalid' && f.severity === 'error');
86
+ out((0, status_1.renderStatus)({
87
+ repoRoot,
88
+ cawsDir,
89
+ policyLoaded: snapshot.policy !== undefined,
90
+ specs: snapshot.specs,
91
+ worktrees: snapshot.worktrees,
92
+ agents: snapshot.agents,
93
+ eventCount: snapshot.events.length,
94
+ // Only emit a chain-OK/broken label when there are events to chain.
95
+ ...(snapshot.events.length > 0 ? { eventChainOk: !chainBroken } : {}),
96
+ binding,
97
+ session: sessionResult.ok ? sessionResult.value : null,
98
+ doctorFindings: report.findings,
99
+ now,
100
+ ...(opts.staleTtlMs !== undefined ? { staleTtlMs: opts.staleTtlMs } : {}),
101
+ ...(opts.findingCap !== undefined ? { findingCap: opts.findingCap } : {}),
102
+ }));
103
+ // 7. Exit. Status is observability, never a gate.
104
+ return 0;
105
+ }
106
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/shell/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface WaiverCommandBase {
2
+ readonly cwd?: string;
3
+ readonly now?: () => Date;
4
+ readonly out?: (line: string) => void;
5
+ readonly err?: (line: string) => void;
6
+ readonly showData?: boolean;
7
+ }
8
+ export interface WaiverCreateOptions extends WaiverCommandBase {
9
+ readonly id: string;
10
+ readonly title: string;
11
+ readonly gates: readonly string[];
12
+ readonly reason: string;
13
+ readonly approvedBy: string;
14
+ readonly expiresAt: string;
15
+ /** Optional. When supplied, scopes the waiver to a single spec id. */
16
+ readonly specId?: string;
17
+ }
18
+ export declare function runWaiverCreateCommand(opts: WaiverCreateOptions): number;
19
+ export interface WaiverListOptions extends WaiverCommandBase {
20
+ /** Include waivers whose stored status is 'revoked'. Default false. */
21
+ readonly includeRevoked?: boolean;
22
+ /** Include waivers whose expires_at is in the past. Default false. */
23
+ readonly includeExpired?: boolean;
24
+ }
25
+ export declare function runWaiverListCommand(opts?: WaiverListOptions): number;
26
+ export interface WaiverShowOptions extends WaiverCommandBase {
27
+ readonly id: string;
28
+ }
29
+ export declare function runWaiverShowCommand(opts: WaiverShowOptions): number;
30
+ export interface WaiverRevokeOptions extends WaiverCommandBase {
31
+ readonly id: string;
32
+ /** Optional revoker identity recorded in revocation.revoked_by. */
33
+ readonly revokedBy?: string;
34
+ /** Optional reason recorded in revocation.reason. */
35
+ readonly reason?: string;
36
+ }
37
+ export declare function runWaiverRevokeCommand(opts: WaiverRevokeOptions): number;
38
+ //# sourceMappingURL=waiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waiver.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/waiver.ts"],"names":[],"mappings":"AA6DA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,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;AAiDD,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAuDxE;AAMD,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,uEAAuE;IACvE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAoDzE;AAMD,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAkCpE;AAMD,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA0CxE"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ // `caws waiver` — vNext singular command surface.
3
+ //
4
+ // Four subcommands, each a thin shell over the kernel + waivers-store:
5
+ //
6
+ // create — validateWaiver → writeWaiver (refuses duplicates).
7
+ // list — loadWaivers → render summaries; filters by effectiveness.
8
+ // show — loadWaivers → render detail; missing id is a domain error.
9
+ // revoke — markRevoked (refuses double-revoke and missing files).
10
+ //
11
+ // Discipline:
12
+ // - Explicit waiver id on `create` (no auto-generation in 7a). Auto-id
13
+ // would force naming and collision policy decisions that don't
14
+ // belong on the authority surface.
15
+ // - `status: active` is the only status `create` writes. Callers
16
+ // cannot manufacture `expired` (expiry is derived) or `revoked`
17
+ // (use `revoke` for that, which carries an audit record).
18
+ // - Effectiveness is computed by the kernel (`waiverEffectiveness`).
19
+ // The shell never re-derives it — that would risk diverging from
20
+ // gates filtering. `list` defaults to "effective only" so an
21
+ // operator surveying the waiver surface sees what actually applies
22
+ // to gates right now.
23
+ // - All writes go through `writeWaiver` / `markRevoked`. Those are
24
+ // atomic and refuse silent overwrite, so even concurrent invocations
25
+ // can't corrupt a waiver.
26
+ //
27
+ // Exit codes:
28
+ // 0 = command succeeds (including: list with zero results, show with
29
+ // a valid id, revoke that succeeds).
30
+ // 1 = validation/domain failure: duplicate id, missing waiver,
31
+ // invalid id/gate/expiry, already-revoked.
32
+ // 2 = repo-root or store composition failure.
33
+ //
34
+ // Event emission for waiver lifecycle is OUT OF SCOPE for 7a.4 — the
35
+ // existing `waiver_applied` event records *use*, not *creation*. A
36
+ // `waiver_created` / `waiver_revoked` event family belongs with 7b
37
+ // or later and is not gated by this slice.
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runWaiverCreateCommand = runWaiverCreateCommand;
40
+ exports.runWaiverListCommand = runWaiverListCommand;
41
+ exports.runWaiverShowCommand = runWaiverShowCommand;
42
+ exports.runWaiverRevokeCommand = runWaiverRevokeCommand;
43
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
44
+ const store_1 = require("../../store");
45
+ const diagnostic_1 = require("../render/diagnostic");
46
+ const waiver_1 = require("../render/waiver");
47
+ const rules_1 = require("../rules");
48
+ function shellDiag(rule, message, subject) {
49
+ // Shell-side ad-hoc diagnostics borrow the kernel/diagnostics authority
50
+ // — the kernel's Authority enum is closed, and the rule prefix
51
+ // `shell.*` is what distinguishes shell-owned diagnostics from kernel-
52
+ // owned ones. Existing shell modules (resolve-session, gates contract)
53
+ // follow the same convention.
54
+ return {
55
+ rule,
56
+ authority: 'kernel/diagnostics',
57
+ severity: 'error',
58
+ message,
59
+ ...(subject !== undefined ? { subject } : {}),
60
+ };
61
+ }
62
+ function setupIO(opts) {
63
+ const cwd = opts.cwd ?? process.cwd();
64
+ const nowFn = opts.now ?? (() => new Date());
65
+ const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
66
+ const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
67
+ const showData = opts.showData === true;
68
+ return { cwd, nowFn, out, err, showData };
69
+ }
70
+ function resolveCaws(cwd, err, showData, cmd) {
71
+ const r = (0, store_1.resolveRepoRoot)(cwd);
72
+ if (!r.ok) {
73
+ err(`caws ${cmd}: failed to resolve repo root.`);
74
+ err((0, diagnostic_1.renderDiagnostics)(r.errors, { showData }));
75
+ return null;
76
+ }
77
+ return { cawsDir: r.value.cawsDir };
78
+ }
79
+ function runWaiverCreateCommand(opts) {
80
+ const { cwd, nowFn, out, err, showData } = setupIO(opts);
81
+ const now = nowFn();
82
+ const ctx = resolveCaws(cwd, err, showData, 'waiver create');
83
+ if (ctx === null)
84
+ return 2;
85
+ // Build the candidate waiver document. Validation is delegated to the
86
+ // kernel — no parallel field-shape checks here.
87
+ const candidate = {
88
+ id: opts.id,
89
+ title: opts.title,
90
+ status: 'active',
91
+ gates: opts.gates,
92
+ reason: opts.reason,
93
+ approved_by: opts.approvedBy,
94
+ created_at: now.toISOString(),
95
+ expires_at: opts.expiresAt,
96
+ };
97
+ if (opts.specId !== undefined) {
98
+ candidate['scope'] = { spec_id: opts.specId };
99
+ }
100
+ const validated = (0, caws_kernel_1.validateWaiver)(candidate);
101
+ if (!(0, caws_kernel_1.isOk)(validated)) {
102
+ err('caws waiver create: invalid waiver shape.');
103
+ err((0, diagnostic_1.renderDiagnostics)(validated.errors, { showData }));
104
+ return 1;
105
+ }
106
+ const write = (0, store_1.writeWaiver)(ctx.cawsDir, validated.value);
107
+ if (!(0, caws_kernel_1.isOk)(write)) {
108
+ // The store distinguishes duplicate id (already_exists) from generic
109
+ // I/O failure (write_io_failed). Exit code reflects the difference:
110
+ // duplicate is a user-correctable domain error (1), I/O is a hard
111
+ // store failure (2).
112
+ const isDuplicate = write.errors.some((d) => d.rule === store_1.STORE_RULES.WAIVERS_ALREADY_EXISTS);
113
+ err(isDuplicate
114
+ ? `caws waiver create: waiver ${validated.value.id} already exists.`
115
+ : 'caws waiver create: failed to write waiver.');
116
+ err((0, diagnostic_1.renderDiagnostics)(write.errors, { showData }));
117
+ return isDuplicate ? 1 : 2;
118
+ }
119
+ out((0, waiver_1.renderWaiverDetail)({
120
+ waiver: validated.value,
121
+ effectiveness: (0, caws_kernel_1.waiverEffectiveness)(validated.value, now),
122
+ now,
123
+ }));
124
+ return 0;
125
+ }
126
+ function runWaiverListCommand(opts = {}) {
127
+ const { cwd, nowFn, out, err, showData } = setupIO(opts);
128
+ const ctx = resolveCaws(cwd, err, showData, 'waiver list');
129
+ if (ctx === null)
130
+ return 2;
131
+ const load = (0, store_1.loadWaivers)(ctx.cawsDir);
132
+ // Surface load diagnostics on stderr but do NOT discard valid waivers.
133
+ if (load.diagnostics.length > 0) {
134
+ err((0, diagnostic_1.renderDiagnostics)(load.diagnostics, { showData }));
135
+ }
136
+ const now = nowFn();
137
+ const includeRevoked = opts.includeRevoked === true;
138
+ const includeExpired = opts.includeExpired === true;
139
+ const rows = [];
140
+ for (const w of load.waivers) {
141
+ const eff = (0, caws_kernel_1.waiverEffectiveness)(w, now);
142
+ if (eff === 'revoked' && !includeRevoked)
143
+ continue;
144
+ if (eff === 'expired' && !includeExpired)
145
+ continue;
146
+ rows.push({ waiver: w, effectiveness: eff });
147
+ }
148
+ if (rows.length === 0) {
149
+ // Distinguish "no waivers at all" from "no waivers match the filter".
150
+ const msg = load.waivers.length === 0
151
+ ? 'No waivers in .caws/waivers/.'
152
+ : 'No waivers match the current filter (use --include-revoked / --include-expired to widen).';
153
+ out(msg);
154
+ return 0;
155
+ }
156
+ // Stable ordering: effective first, then revoked, then expired; within
157
+ // each group sort by id ascending. Predictable list output is much
158
+ // easier to scan and to assert against in tests.
159
+ const order = {
160
+ active: 0,
161
+ not_applicable: 1,
162
+ revoked: 2,
163
+ expired: 3,
164
+ };
165
+ rows.sort((a, b) => {
166
+ const o = order[a.effectiveness] - order[b.effectiveness];
167
+ if (o !== 0)
168
+ return o;
169
+ return a.waiver.id.localeCompare(b.waiver.id);
170
+ });
171
+ out(`Waivers (${rows.length} shown of ${load.waivers.length} total):`);
172
+ for (const r of rows)
173
+ out((0, waiver_1.renderWaiverSummary)(r));
174
+ return 0;
175
+ }
176
+ function runWaiverShowCommand(opts) {
177
+ const { cwd, nowFn, out, err, showData } = setupIO(opts);
178
+ const now = nowFn();
179
+ if (typeof opts.id !== 'string' || opts.id.length === 0) {
180
+ err('caws waiver show: id is required.');
181
+ err(`(rule: ${rules_1.SHELL_RULES.WAIVER_MISSING_ID})`);
182
+ return 1;
183
+ }
184
+ const ctx = resolveCaws(cwd, err, showData, 'waiver show');
185
+ if (ctx === null)
186
+ return 2;
187
+ const load = (0, store_1.loadWaivers)(ctx.cawsDir);
188
+ if (load.diagnostics.length > 0) {
189
+ err((0, diagnostic_1.renderDiagnostics)(load.diagnostics, { showData }));
190
+ }
191
+ const found = load.waivers.find((w) => w.id === opts.id);
192
+ if (found === undefined) {
193
+ err(`caws waiver show: waiver ${opts.id} not found.`);
194
+ err((0, diagnostic_1.renderDiagnostics)([shellDiag(rules_1.SHELL_RULES.WAIVER_NOT_FOUND, `Waiver ${opts.id} not found.`, opts.id)], { showData }));
195
+ return 1;
196
+ }
197
+ out((0, waiver_1.renderWaiverDetail)({
198
+ waiver: found,
199
+ effectiveness: (0, caws_kernel_1.waiverEffectiveness)(found, now),
200
+ now,
201
+ }));
202
+ return 0;
203
+ }
204
+ function runWaiverRevokeCommand(opts) {
205
+ const { cwd, nowFn, out, err, showData } = setupIO(opts);
206
+ const now = nowFn();
207
+ if (typeof opts.id !== 'string' || opts.id.length === 0) {
208
+ err('caws waiver revoke: id is required.');
209
+ err(`(rule: ${rules_1.SHELL_RULES.WAIVER_MISSING_ID})`);
210
+ return 1;
211
+ }
212
+ const ctx = resolveCaws(cwd, err, showData, 'waiver revoke');
213
+ if (ctx === null)
214
+ return 2;
215
+ const result = (0, store_1.markRevoked)(ctx.cawsDir, opts.id, {
216
+ now,
217
+ ...(opts.revokedBy !== undefined ? { revoked_by: opts.revokedBy } : {}),
218
+ ...(opts.reason !== undefined ? { reason: opts.reason } : {}),
219
+ });
220
+ if (!(0, caws_kernel_1.isOk)(result)) {
221
+ // markRevoked uses STORE_RULES.WAIVERS_NOT_FOUND for missing files and
222
+ // STORE_RULES.WAIVERS_ALREADY_EXISTS for "already revoked" (semantics
223
+ // overload acknowledged in the store comment). Both are domain
224
+ // errors → exit 1. Other failures (I/O, validation) are exit 2.
225
+ const isDomain = result.errors.some((d) => d.rule === store_1.STORE_RULES.WAIVERS_NOT_FOUND ||
226
+ d.rule === store_1.STORE_RULES.WAIVERS_ALREADY_EXISTS);
227
+ err(isDomain
228
+ ? `caws waiver revoke: cannot revoke ${opts.id}.`
229
+ : 'caws waiver revoke: failed to revoke waiver.');
230
+ err((0, diagnostic_1.renderDiagnostics)(result.errors, { showData }));
231
+ return isDomain ? 1 : 2;
232
+ }
233
+ out((0, waiver_1.renderWaiverDetail)({
234
+ waiver: result.value,
235
+ effectiveness: (0, caws_kernel_1.waiverEffectiveness)(result.value, now),
236
+ now,
237
+ }));
238
+ return 0;
239
+ }
240
+ //# sourceMappingURL=waiver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waiver.js","sourceRoot":"","sources":["../../../src/shell/commands/waiver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Policy } from '@paths.design/caws-kernel';
2
+ import type { GatesReport, GatesViolation } from './gate-result-contract';
3
+ export type GateMode = 'block' | 'warn' | 'skip';
4
+ export type GateOutcome = 'pass' | 'fail' | 'skipped';
5
+ export interface GateDisposition {
6
+ readonly gate_id: string;
7
+ readonly mode: GateMode;
8
+ readonly outcome: GateOutcome;
9
+ /** True iff this gate's outcome contributes to a final exit 1. */
10
+ readonly blocks: boolean;
11
+ /** Violations whose `gate` field equals `gate_id`. */
12
+ readonly violations: readonly GatesViolation[];
13
+ }
14
+ export interface DispositionResult {
15
+ /** One disposition per policy-declared gate. */
16
+ readonly dispositions: readonly GateDisposition[];
17
+ /** Violations from the subprocess whose gate name was NOT a policy gate. */
18
+ readonly unmatchedViolations: readonly GatesViolation[];
19
+ /** True iff any disposition blocks. */
20
+ readonly anyBlocks: boolean;
21
+ }
22
+ export declare function deriveDispositions(report: GatesReport, policy: Policy): DispositionResult;
23
+ //# sourceMappingURL=disposition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition.d.ts","sourceRoot":"","sources":["../../../src/shell/gates/disposition.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE1E,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACjD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,4EAA4E;IAC5E,QAAQ,CAAC,mBAAmB,EAAE,SAAS,cAAc,EAAE,CAAC;IACxD,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAmBD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAgDnB"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ // Policy-derived gate disposition.
3
+ //
4
+ // Given (parsed quality-gates report, parsed policy), produce one
5
+ // `GateDisposition` per policy-declared gate. This is the SOLE place
6
+ // where final block/warn/skip semantics are decided. The subprocess
7
+ // reports violations; this module decides what they mean.
8
+ //
9
+ // Rules:
10
+ //
11
+ // policy.gates[gate].mode === 'skip' → result: 'skipped', blocks=false
12
+ // policy.gates[gate].enabled === false → result: 'skipped', blocks=false
13
+ // any matched violation + mode==='block' → result: 'fail', blocks=true
14
+ // any matched violation + mode==='warn' → result: 'fail', blocks=false
15
+ // no matched violation → result: 'pass', blocks=false
16
+ //
17
+ // A violation is "matched" to a policy gate iff the violation's `gate`
18
+ // field equals the policy gate id. Violations targeting unknown gate
19
+ // names (subprocess-specific checks like 'naming') are surfaced
20
+ // separately as `unmatchedViolations` so the renderer can show them,
21
+ // but they do NOT drive policy disposition.
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.deriveDispositions = deriveDispositions;
24
+ const KNOWN_GATE_IDS = [
25
+ 'budget_limit',
26
+ 'spec_completeness',
27
+ 'scope_boundary',
28
+ 'god_object',
29
+ 'todo_detection',
30
+ ];
31
+ function gateConfigFor(policy, gateId) {
32
+ const cfg = policy.gates[gateId];
33
+ if (cfg === undefined)
34
+ return undefined;
35
+ return { enabled: cfg.enabled, mode: cfg.mode };
36
+ }
37
+ function deriveDispositions(report, policy) {
38
+ // Group violations by gate name.
39
+ const byGate = new Map();
40
+ for (const v of report.violations) {
41
+ const list = byGate.get(v.gate);
42
+ if (list === undefined)
43
+ byGate.set(v.gate, [v]);
44
+ else
45
+ list.push(v);
46
+ }
47
+ const dispositions = [];
48
+ for (const gateId of KNOWN_GATE_IDS) {
49
+ const cfg = gateConfigFor(policy, gateId);
50
+ if (cfg === undefined)
51
+ continue; // gate not declared in policy
52
+ const violations = byGate.get(gateId) ?? [];
53
+ byGate.delete(gateId);
54
+ let outcome;
55
+ let blocks;
56
+ if (cfg.enabled === false || cfg.mode === 'skip') {
57
+ outcome = 'skipped';
58
+ blocks = false;
59
+ }
60
+ else if (violations.length === 0) {
61
+ outcome = 'pass';
62
+ blocks = false;
63
+ }
64
+ else {
65
+ outcome = 'fail';
66
+ blocks = cfg.mode === 'block';
67
+ }
68
+ dispositions.push({
69
+ gate_id: gateId,
70
+ mode: cfg.mode,
71
+ outcome,
72
+ blocks,
73
+ violations,
74
+ });
75
+ }
76
+ // Whatever remains in byGate are unmatched violations (gates the
77
+ // subprocess reported but policy doesn't declare).
78
+ const unmatchedViolations = [];
79
+ for (const list of byGate.values())
80
+ unmatchedViolations.push(...list);
81
+ return {
82
+ dispositions,
83
+ unmatchedViolations,
84
+ anyBlocks: dispositions.some((d) => d.blocks),
85
+ };
86
+ }
87
+ //# sourceMappingURL=disposition.js.map