@paths.design/caws-cli 10.1.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 (419) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +43 -756
  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/archive.js +0 -500
  183. package/dist/commands/burnup.js +0 -198
  184. package/dist/commands/diagnose.js +0 -525
  185. package/dist/commands/evaluate.js +0 -314
  186. package/dist/commands/gates.js +0 -149
  187. package/dist/commands/init.js +0 -857
  188. package/dist/commands/iterate.js +0 -417
  189. package/dist/commands/mode.js +0 -269
  190. package/dist/commands/parallel.js +0 -242
  191. package/dist/commands/plan.js +0 -438
  192. package/dist/commands/provenance.js +0 -1143
  193. package/dist/commands/quality-monitor.js +0 -284
  194. package/dist/commands/scope.js +0 -264
  195. package/dist/commands/session.js +0 -312
  196. package/dist/commands/sidecar.js +0 -74
  197. package/dist/commands/specs.js +0 -1448
  198. package/dist/commands/status.js +0 -1151
  199. package/dist/commands/templates.js +0 -237
  200. package/dist/commands/tool.js +0 -136
  201. package/dist/commands/tutorial.js +0 -480
  202. package/dist/commands/validate.js +0 -357
  203. package/dist/commands/verify-acs.js +0 -443
  204. package/dist/commands/waivers.js +0 -599
  205. package/dist/commands/workflow.js +0 -243
  206. package/dist/commands/worktree.js +0 -386
  207. package/dist/config/lite-scope.js +0 -158
  208. package/dist/config/modes.js +0 -347
  209. package/dist/constants/spec-types.js +0 -65
  210. package/dist/gates/budget-limit.js +0 -121
  211. package/dist/gates/feedback.js +0 -260
  212. package/dist/gates/format.js +0 -179
  213. package/dist/gates/god-object.js +0 -117
  214. package/dist/gates/pipeline.js +0 -167
  215. package/dist/gates/scope-boundary.js +0 -93
  216. package/dist/gates/spec-completeness.js +0 -109
  217. package/dist/gates/todo-detection.js +0 -205
  218. package/dist/generators/jest-config-generator.js +0 -242
  219. package/dist/generators/working-spec.js +0 -237
  220. package/dist/minimal-cli.js +0 -88
  221. package/dist/parallel/parallel-manager.js +0 -433
  222. package/dist/policy/PolicyManager.js +0 -465
  223. package/dist/scaffold/claude-hooks.js +0 -443
  224. package/dist/scaffold/cursor-hooks.js +0 -177
  225. package/dist/scaffold/git-hooks.js +0 -928
  226. package/dist/scaffold/index.js +0 -794
  227. package/dist/session/session-manager.js +0 -653
  228. package/dist/sidecars/index.js +0 -33
  229. package/dist/sidecars/listeners.js +0 -40
  230. package/dist/sidecars/provenance-summary.js +0 -238
  231. package/dist/sidecars/quality-gaps.js +0 -258
  232. package/dist/sidecars/schema.js +0 -149
  233. package/dist/sidecars/spec-drift.js +0 -151
  234. package/dist/sidecars/waiver-draft.js +0 -176
  235. package/dist/spec/SpecFileManager.js +0 -419
  236. package/dist/templates/.caws/schemas/policy.schema.json +0 -112
  237. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  238. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  239. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  240. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  241. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  242. package/dist/templates/.caws/tools/README.md +0 -18
  243. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  244. package/dist/templates/.caws/tools-allow.json +0 -331
  245. package/dist/templates/.caws/waivers.yml +0 -19
  246. package/dist/templates/.claude/README.md +0 -190
  247. package/dist/templates/.claude/hooks/audit.sh +0 -121
  248. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  249. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  250. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  251. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  252. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  253. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  254. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  255. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  256. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  257. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  258. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  259. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  260. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  261. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  262. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  263. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  264. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  265. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  266. package/dist/templates/.claude/rules/git-safety.md +0 -26
  267. package/dist/templates/.claude/rules/worktree-isolation.md +0 -83
  268. package/dist/templates/.claude/settings.json +0 -141
  269. package/dist/templates/.cursor/README.md +0 -299
  270. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  271. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  272. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  273. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  274. package/dist/templates/.cursor/hooks/format.sh +0 -38
  275. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  276. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  277. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  278. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  279. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  280. package/dist/templates/.cursor/hooks.json +0 -76
  281. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  282. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  283. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  284. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  285. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  286. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  287. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  288. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  289. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  290. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  291. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  292. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  293. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  294. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  295. package/dist/templates/.cursor/rules/README.md +0 -148
  296. package/dist/templates/.github/copilot-instructions.md +0 -82
  297. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  298. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  299. package/dist/templates/.junie/guidelines.md +0 -73
  300. package/dist/templates/.vscode/launch.json +0 -17
  301. package/dist/templates/.vscode/settings.json +0 -95
  302. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  303. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  304. package/dist/templates/CLAUDE.md +0 -174
  305. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  306. package/dist/templates/OIDC_SETUP.md +0 -300
  307. package/dist/templates/agents.md +0 -145
  308. package/dist/templates/codemod/README.md +0 -1
  309. package/dist/templates/codemod/test.js +0 -93
  310. package/dist/templates/docs/README.md +0 -151
  311. package/dist/templates/scripts/new_feature.sh +0 -80
  312. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  313. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  314. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  315. package/dist/test-analysis.js +0 -786
  316. package/dist/tool-interface.js +0 -314
  317. package/dist/tool-loader.js +0 -303
  318. package/dist/tool-validator.js +0 -393
  319. package/dist/utils/agent-session.js +0 -202
  320. package/dist/utils/async-utils.js +0 -188
  321. package/dist/utils/command-wrapper.js +0 -200
  322. package/dist/utils/event-log.js +0 -584
  323. package/dist/utils/event-renderer.js +0 -521
  324. package/dist/utils/finalization.js +0 -230
  325. package/dist/utils/git-lock.js +0 -119
  326. package/dist/utils/gitignore-updater.js +0 -158
  327. package/dist/utils/ide-detection.js +0 -133
  328. package/dist/utils/lifecycle-events.js +0 -94
  329. package/dist/utils/project-analysis.js +0 -367
  330. package/dist/utils/promise-utils.js +0 -72
  331. package/dist/utils/quality-gates-errors.js +0 -520
  332. package/dist/utils/quality-gates-utils.js +0 -387
  333. package/dist/utils/schema-validator.js +0 -50
  334. package/dist/utils/spec-resolver.js +0 -711
  335. package/dist/utils/typescript-detector.js +0 -369
  336. package/dist/utils/working-state.js +0 -530
  337. package/dist/utils/yaml-validation.js +0 -156
  338. package/dist/validation/spec-validation.js +0 -921
  339. package/dist/waivers-manager.js +0 -732
  340. package/dist/worktree/worktree-manager.js +0 -1374
  341. package/templates/.caws/schemas/policy.schema.json +0 -112
  342. package/templates/.caws/schemas/scope.schema.json +0 -52
  343. package/templates/.caws/schemas/waivers.schema.json +0 -106
  344. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  345. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  346. package/templates/.caws/templates/working-spec.template.yml +0 -80
  347. package/templates/.caws/tools/README.md +0 -18
  348. package/templates/.caws/tools/scope-guard.js +0 -203
  349. package/templates/.caws/tools-allow.json +0 -331
  350. package/templates/.caws/waivers.yml +0 -19
  351. package/templates/.claude/README.md +0 -190
  352. package/templates/.claude/hooks/audit.sh +0 -121
  353. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  354. package/templates/.claude/hooks/classify_command.py +0 -592
  355. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  356. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  357. package/templates/.claude/hooks/naming-check.sh +0 -100
  358. package/templates/.claude/hooks/protected-paths.sh +0 -39
  359. package/templates/.claude/hooks/quality-check.sh +0 -81
  360. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  361. package/templates/.claude/hooks/scope-guard.sh +0 -381
  362. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  363. package/templates/.claude/hooks/session-log.sh +0 -634
  364. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  365. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  366. package/templates/.claude/hooks/test_classify_command.py +0 -370
  367. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  368. package/templates/.claude/hooks/validate-spec.sh +0 -76
  369. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  370. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  371. package/templates/.claude/rules/git-safety.md +0 -26
  372. package/templates/.claude/rules/worktree-isolation.md +0 -83
  373. package/templates/.claude/settings.json +0 -141
  374. package/templates/.cursor/README.md +0 -299
  375. package/templates/.cursor/hooks/audit.sh +0 -55
  376. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  377. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  378. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  379. package/templates/.cursor/hooks/format.sh +0 -38
  380. package/templates/.cursor/hooks/naming-check.sh +0 -64
  381. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  382. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  383. package/templates/.cursor/hooks/session-log.sh +0 -924
  384. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  385. package/templates/.cursor/hooks.json +0 -76
  386. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  387. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  388. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  389. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  390. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  391. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  392. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  393. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  394. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  395. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  396. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  397. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  398. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  399. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  400. package/templates/.cursor/rules/README.md +0 -148
  401. package/templates/.github/copilot-instructions.md +0 -82
  402. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  403. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  404. package/templates/.junie/guidelines.md +0 -73
  405. package/templates/.vscode/launch.json +0 -17
  406. package/templates/.vscode/settings.json +0 -95
  407. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  408. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  409. package/templates/CLAUDE.md +0 -174
  410. package/templates/COMMIT_CONVENTIONS.md +0 -86
  411. package/templates/OIDC_SETUP.md +0 -300
  412. package/templates/agents.md +0 -145
  413. package/templates/codemod/README.md +0 -1
  414. package/templates/codemod/test.js +0 -93
  415. package/templates/docs/README.md +0 -151
  416. package/templates/scripts/new_feature.sh +0 -80
  417. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  418. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  419. 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