codictator 0.0.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (840) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +5 -0
  3. package/dist/builtin-packs/core/fixtures/agent-assets-present/passing/basic/case.json +10 -0
  4. package/dist/builtin-packs/core/fixtures/agent-assets-present/violating/basic/case.json +10 -0
  5. package/dist/builtin-packs/core/fixtures/arch-boundaries/passing/basic/case.json +10 -0
  6. package/dist/builtin-packs/core/fixtures/arch-boundaries/violating/basic/case.json +10 -0
  7. package/dist/builtin-packs/core/fixtures/arch-module-mapped/passing/basic/case.json +10 -0
  8. package/dist/builtin-packs/core/fixtures/arch-module-mapped/violating/basic/case.json +10 -0
  9. package/dist/builtin-packs/core/fixtures/arch-module-size/passing/basic/case.json +10 -0
  10. package/dist/builtin-packs/core/fixtures/arch-module-size/violating/basic/case.json +10 -0
  11. package/dist/builtin-packs/core/fixtures/arch-no-cycles/passing/basic/case.json +10 -0
  12. package/dist/builtin-packs/core/fixtures/arch-no-cycles/violating/basic/case.json +10 -0
  13. package/dist/builtin-packs/core/fixtures/arch-profile-declared/passing/basic/case.json +10 -0
  14. package/dist/builtin-packs/core/fixtures/arch-profile-declared/violating/basic/case.json +10 -0
  15. package/dist/builtin-packs/core/fixtures/arch-public-entry/passing/basic/case.json +10 -0
  16. package/dist/builtin-packs/core/fixtures/arch-public-entry/violating/basic/case.json +10 -0
  17. package/dist/builtin-packs/core/fixtures/branch-protection/passing/basic/case.json +10 -0
  18. package/dist/builtin-packs/core/fixtures/branch-protection/violating/basic/case.json +10 -0
  19. package/dist/builtin-packs/core/fixtures/bug-registry/passing/basic/case.json +10 -0
  20. package/dist/builtin-packs/core/fixtures/bug-registry/violating/basic/case.json +10 -0
  21. package/dist/builtin-packs/core/fixtures/bug-rows-immutable/passing/basic/case.json +10 -0
  22. package/dist/builtin-packs/core/fixtures/bug-rows-immutable/violating/basic/case.json +10 -0
  23. package/dist/builtin-packs/core/fixtures/ci-actions-pinned/passing/basic/case.json +10 -0
  24. package/dist/builtin-packs/core/fixtures/ci-actions-pinned/violating/basic/case.json +10 -0
  25. package/dist/builtin-packs/core/fixtures/ci-present/passing/basic/case.json +10 -0
  26. package/dist/builtin-packs/core/fixtures/ci-present/violating/basic/case.json +10 -0
  27. package/dist/builtin-packs/core/fixtures/ci-required-check/passing/basic/case.json +10 -0
  28. package/dist/builtin-packs/core/fixtures/ci-required-check/violating/basic/case.json +10 -0
  29. package/dist/builtin-packs/core/fixtures/compiler-strict/passing/basic/case.json +10 -0
  30. package/dist/builtin-packs/core/fixtures/compiler-strict/violating/basic/case.json +10 -0
  31. package/dist/builtin-packs/core/fixtures/complexity/passing/basic/case.json +10 -0
  32. package/dist/builtin-packs/core/fixtures/complexity/violating/basic/case.json +10 -0
  33. package/dist/builtin-packs/core/fixtures/context-hard-band/passing/basic/case.json +10 -0
  34. package/dist/builtin-packs/core/fixtures/context-hard-band/violating/basic/case.json +10 -0
  35. package/dist/builtin-packs/core/fixtures/context-soft-band/passing/basic/case.json +10 -0
  36. package/dist/builtin-packs/core/fixtures/context-soft-band/violating/basic/case.json +10 -0
  37. package/dist/builtin-packs/core/fixtures/conventional-commit/passing/basic/case.json +10 -0
  38. package/dist/builtin-packs/core/fixtures/conventional-commit/violating/basic/case.json +10 -0
  39. package/dist/builtin-packs/core/fixtures/coverage-floor/passing/basic/case.json +10 -0
  40. package/dist/builtin-packs/core/fixtures/coverage-floor/violating/basic/case.json +10 -0
  41. package/dist/builtin-packs/core/fixtures/custom-pack-selftest/passing/basic/case.json +10 -0
  42. package/dist/builtin-packs/core/fixtures/custom-pack-selftest/violating/basic/case.json +10 -0
  43. package/dist/builtin-packs/core/fixtures/dangerous-shell/passing/basic/case.json +10 -0
  44. package/dist/builtin-packs/core/fixtures/dangerous-shell/violating/basic/case.json +10 -0
  45. package/dist/builtin-packs/core/fixtures/dead-code/passing/basic/case.json +10 -0
  46. package/dist/builtin-packs/core/fixtures/dead-code/violating/basic/case.json +10 -0
  47. package/dist/builtin-packs/core/fixtures/dep-exact-pin/passing/basic/case.json +10 -0
  48. package/dist/builtin-packs/core/fixtures/dep-exact-pin/violating/basic/case.json +10 -0
  49. package/dist/builtin-packs/core/fixtures/dep-latest-stable/passing/basic/case.json +10 -0
  50. package/dist/builtin-packs/core/fixtures/dep-latest-stable/violating/basic/case.json +10 -0
  51. package/dist/builtin-packs/core/fixtures/dep-license/passing/basic/case.json +10 -0
  52. package/dist/builtin-packs/core/fixtures/dep-license/violating/basic/case.json +10 -0
  53. package/dist/builtin-packs/core/fixtures/dep-lockfile/passing/basic/case.json +10 -0
  54. package/dist/builtin-packs/core/fixtures/dep-lockfile/violating/basic/case.json +10 -0
  55. package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/passing/basic/case.json +10 -0
  56. package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/violating/basic/case.json +10 -0
  57. package/dist/builtin-packs/core/fixtures/dep-no-deprecated/passing/basic/case.json +10 -0
  58. package/dist/builtin-packs/core/fixtures/dep-no-deprecated/violating/basic/case.json +10 -0
  59. package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/passing/basic/case.json +10 -0
  60. package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/violating/basic/case.json +10 -0
  61. package/dist/builtin-packs/core/fixtures/dep-one-per-capability/passing/basic/case.json +10 -0
  62. package/dist/builtin-packs/core/fixtures/dep-one-per-capability/violating/basic/case.json +10 -0
  63. package/dist/builtin-packs/core/fixtures/diagnose-before-fix/passing/basic/case.json +10 -0
  64. package/dist/builtin-packs/core/fixtures/diagnose-before-fix/violating/basic/case.json +10 -0
  65. package/dist/builtin-packs/core/fixtures/doc-breadth/passing/basic/case.json +10 -0
  66. package/dist/builtin-packs/core/fixtures/doc-breadth/violating/basic/case.json +10 -0
  67. package/dist/builtin-packs/core/fixtures/doc-density/passing/basic/case.json +10 -0
  68. package/dist/builtin-packs/core/fixtures/doc-density/violating/basic/case.json +10 -0
  69. package/dist/builtin-packs/core/fixtures/doc-links-valid/passing/basic/case.json +10 -0
  70. package/dist/builtin-packs/core/fixtures/doc-links-valid/violating/basic/case.json +10 -0
  71. package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/passing/basic/case.json +10 -0
  72. package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/violating/basic/case.json +10 -0
  73. package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/passing/basic/case.json +10 -0
  74. package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/violating/basic/case.json +10 -0
  75. package/dist/builtin-packs/core/fixtures/doc-one-level/passing/basic/case.json +10 -0
  76. package/dist/builtin-packs/core/fixtures/doc-one-level/violating/basic/case.json +10 -0
  77. package/dist/builtin-packs/core/fixtures/doc-placement/passing/basic/case.json +10 -0
  78. package/dist/builtin-packs/core/fixtures/doc-placement/violating/basic/case.json +10 -0
  79. package/dist/builtin-packs/core/fixtures/doc-router-leaf/passing/basic/case.json +10 -0
  80. package/dist/builtin-packs/core/fixtures/doc-router-leaf/violating/basic/case.json +10 -0
  81. package/dist/builtin-packs/core/fixtures/doc-single-owner/passing/basic/case.json +10 -0
  82. package/dist/builtin-packs/core/fixtures/doc-single-owner/violating/basic/case.json +10 -0
  83. package/dist/builtin-packs/core/fixtures/doc-size/passing/basic/case.json +10 -0
  84. package/dist/builtin-packs/core/fixtures/doc-size/violating/basic/case.json +10 -0
  85. package/dist/builtin-packs/core/fixtures/duplication/passing/basic/case.json +10 -0
  86. package/dist/builtin-packs/core/fixtures/duplication/violating/basic/case.json +10 -0
  87. package/dist/builtin-packs/core/fixtures/engine-version-match/passing/basic/case.json +10 -0
  88. package/dist/builtin-packs/core/fixtures/engine-version-match/violating/basic/case.json +10 -0
  89. package/dist/builtin-packs/core/fixtures/file-naming/passing/basic/case.json +10 -0
  90. package/dist/builtin-packs/core/fixtures/file-naming/violating/basic/case.json +10 -0
  91. package/dist/builtin-packs/core/fixtures/file-size/passing/basic/case.json +10 -0
  92. package/dist/builtin-packs/core/fixtures/file-size/violating/basic/case.json +10 -0
  93. package/dist/builtin-packs/core/fixtures/function-size/passing/basic/case.json +10 -0
  94. package/dist/builtin-packs/core/fixtures/function-size/violating/basic/case.json +10 -0
  95. package/dist/builtin-packs/core/fixtures/graph-before-scan/passing/basic/case.json +10 -0
  96. package/dist/builtin-packs/core/fixtures/graph-before-scan/violating/basic/case.json +10 -0
  97. package/dist/builtin-packs/core/fixtures/guardrail-manifest/passing/basic/case.json +10 -0
  98. package/dist/builtin-packs/core/fixtures/guardrail-manifest/violating/basic/case.json +10 -0
  99. package/dist/builtin-packs/core/fixtures/history-append-only/passing/basic/case.json +10 -0
  100. package/dist/builtin-packs/core/fixtures/history-append-only/violating/basic/case.json +10 -0
  101. package/dist/builtin-packs/core/fixtures/history-entry/passing/basic/case.json +10 -0
  102. package/dist/builtin-packs/core/fixtures/history-entry/violating/basic/case.json +10 -0
  103. package/dist/builtin-packs/core/fixtures/history-entry-complete/passing/basic/case.json +10 -0
  104. package/dist/builtin-packs/core/fixtures/history-entry-complete/violating/basic/case.json +10 -0
  105. package/dist/builtin-packs/core/fixtures/hooks-active/passing/basic/case.json +10 -0
  106. package/dist/builtin-packs/core/fixtures/hooks-active/violating/basic/case.json +10 -0
  107. package/dist/builtin-packs/core/fixtures/loop-breaker/passing/basic/case.json +10 -0
  108. package/dist/builtin-packs/core/fixtures/loop-breaker/violating/basic/case.json +10 -0
  109. package/dist/builtin-packs/core/fixtures/max-file-bytes/passing/basic/case.json +10 -0
  110. package/dist/builtin-packs/core/fixtures/max-file-bytes/violating/basic/case.json +10 -0
  111. package/dist/builtin-packs/core/fixtures/mcp-declared/passing/basic/case.json +10 -0
  112. package/dist/builtin-packs/core/fixtures/mcp-declared/violating/basic/case.json +10 -0
  113. package/dist/builtin-packs/core/fixtures/no-assertion-loss/passing/basic/case.json +10 -0
  114. package/dist/builtin-packs/core/fixtures/no-assertion-loss/violating/basic/case.json +10 -0
  115. package/dist/builtin-packs/core/fixtures/no-baseline-raise/passing/basic/case.json +10 -0
  116. package/dist/builtin-packs/core/fixtures/no-baseline-raise/violating/basic/case.json +10 -0
  117. package/dist/builtin-packs/core/fixtures/no-bypass/passing/basic/case.json +10 -0
  118. package/dist/builtin-packs/core/fixtures/no-bypass/violating/basic/case.json +10 -0
  119. package/dist/builtin-packs/core/fixtures/no-fixture-shrink/passing/basic/case.json +10 -0
  120. package/dist/builtin-packs/core/fixtures/no-fixture-shrink/violating/basic/case.json +10 -0
  121. package/dist/builtin-packs/core/fixtures/no-guard-removal/passing/basic/case.json +10 -0
  122. package/dist/builtin-packs/core/fixtures/no-guard-removal/violating/basic/case.json +10 -0
  123. package/dist/builtin-packs/core/fixtures/no-new-suppressions/passing/basic/case.json +10 -0
  124. package/dist/builtin-packs/core/fixtures/no-new-suppressions/violating/basic/case.json +10 -0
  125. package/dist/builtin-packs/core/fixtures/no-secret-reads/passing/basic/case.json +10 -0
  126. package/dist/builtin-packs/core/fixtures/no-secret-reads/violating/basic/case.json +10 -0
  127. package/dist/builtin-packs/core/fixtures/no-secrets/passing/basic/case.json +10 -0
  128. package/dist/builtin-packs/core/fixtures/no-secrets/violating/basic/case.json +10 -0
  129. package/dist/builtin-packs/core/fixtures/no-skipped-tests/passing/basic/case.json +10 -0
  130. package/dist/builtin-packs/core/fixtures/no-skipped-tests/violating/basic/case.json +10 -0
  131. package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/passing/basic/case.json +10 -0
  132. package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/violating/basic/case.json +10 -0
  133. package/dist/builtin-packs/core/fixtures/no-threshold-lowering/passing/basic/case.json +10 -0
  134. package/dist/builtin-packs/core/fixtures/no-threshold-lowering/violating/basic/case.json +10 -0
  135. package/dist/builtin-packs/core/fixtures/perf-budgets/passing/basic/case.json +10 -0
  136. package/dist/builtin-packs/core/fixtures/perf-budgets/violating/basic/case.json +10 -0
  137. package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/passing/basic/case.json +10 -0
  138. package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/violating/basic/case.json +10 -0
  139. package/dist/builtin-packs/core/fixtures/read-dedupe/passing/basic/case.json +10 -0
  140. package/dist/builtin-packs/core/fixtures/read-dedupe/violating/basic/case.json +10 -0
  141. package/dist/builtin-packs/core/fixtures/red-before-green/passing/basic/case.json +10 -0
  142. package/dist/builtin-packs/core/fixtures/red-before-green/violating/basic/case.json +10 -0
  143. package/dist/builtin-packs/core/fixtures/regression-test-for-fix/passing/basic/case.json +10 -0
  144. package/dist/builtin-packs/core/fixtures/regression-test-for-fix/violating/basic/case.json +10 -0
  145. package/dist/builtin-packs/core/fixtures/remediation-step-size/passing/basic/case.json +10 -0
  146. package/dist/builtin-packs/core/fixtures/remediation-step-size/violating/basic/case.json +10 -0
  147. package/dist/builtin-packs/core/fixtures/repo-hygiene/passing/basic/case.json +10 -0
  148. package/dist/builtin-packs/core/fixtures/repo-hygiene/violating/basic/case.json +10 -0
  149. package/dist/builtin-packs/core/fixtures/review-gate/passing/basic/case.json +10 -0
  150. package/dist/builtin-packs/core/fixtures/review-gate/violating/basic/case.json +10 -0
  151. package/dist/builtin-packs/core/fixtures/review-round-cap/passing/basic/case.json +10 -0
  152. package/dist/builtin-packs/core/fixtures/review-round-cap/violating/basic/case.json +10 -0
  153. package/dist/builtin-packs/core/fixtures/session-tool-call-limit/passing/basic/case.json +10 -0
  154. package/dist/builtin-packs/core/fixtures/session-tool-call-limit/violating/basic/case.json +10 -0
  155. package/dist/builtin-packs/core/fixtures/spec-trace/passing/basic/case.json +10 -0
  156. package/dist/builtin-packs/core/fixtures/spec-trace/violating/basic/case.json +10 -0
  157. package/dist/builtin-packs/core/fixtures/test-command-intact/passing/basic/case.json +10 -0
  158. package/dist/builtin-packs/core/fixtures/test-command-intact/violating/basic/case.json +10 -0
  159. package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/passing/basic/case.json +10 -0
  160. package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/violating/basic/case.json +10 -0
  161. package/dist/builtin-packs/core/fixtures/waivers-valid/passing/basic/case.json +10 -0
  162. package/dist/builtin-packs/core/fixtures/waivers-valid/violating/basic/case.json +10 -0
  163. package/dist/builtin-packs/core/fixtures/workflow-gates/passing/basic/case.json +10 -0
  164. package/dist/builtin-packs/core/fixtures/workflow-gates/violating/basic/case.json +10 -0
  165. package/dist/builtin-packs/core/fixtures/write-confinement/passing/basic/case.json +10 -0
  166. package/dist/builtin-packs/core/fixtures/write-confinement/violating/basic/case.json +10 -0
  167. package/dist/builtin-packs/core/fixtures/writes-within-plan/passing/basic/case.json +10 -0
  168. package/dist/builtin-packs/core/fixtures/writes-within-plan/violating/basic/case.json +10 -0
  169. package/dist/builtin-packs/core/index.ts +8 -0
  170. package/dist/builtin-packs/core/pack.json +2057 -0
  171. package/dist/builtin-packs/dotnet/index.ts +47 -0
  172. package/dist/builtin-packs/python/extract.ts +245 -0
  173. package/dist/builtin-packs/python/fixtures/lint/passing/basic/case.json +10 -0
  174. package/dist/builtin-packs/python/fixtures/lint/violating/basic/case.json +10 -0
  175. package/dist/builtin-packs/python/fixtures/no-phantom-import/passing/basic/case.json +12 -0
  176. package/dist/builtin-packs/python/fixtures/no-phantom-import/violating/basic/case.json +11 -0
  177. package/dist/builtin-packs/python/fixtures/security-patterns/passing/basic/case.json +10 -0
  178. package/dist/builtin-packs/python/fixtures/security-patterns/violating/basic/case.json +10 -0
  179. package/dist/builtin-packs/python/fixtures/typecheck/passing/basic/case.json +10 -0
  180. package/dist/builtin-packs/python/fixtures/typecheck/violating/basic/case.json +10 -0
  181. package/dist/builtin-packs/python/index.ts +57 -0
  182. package/dist/builtin-packs/python/pack.json +116 -0
  183. package/dist/builtin-packs/typescript/extract-clauses.ts +153 -0
  184. package/dist/builtin-packs/typescript/extract-literals.ts +111 -0
  185. package/dist/builtin-packs/typescript/extract-words.ts +79 -0
  186. package/dist/builtin-packs/typescript/extract.ts +77 -0
  187. package/dist/builtin-packs/typescript/fixtures/lint/passing/basic/case.json +10 -0
  188. package/dist/builtin-packs/typescript/fixtures/lint/passing/exported/case.json +8 -0
  189. package/dist/builtin-packs/typescript/fixtures/lint/violating/basic/case.json +10 -0
  190. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/basic/case.json +10 -0
  191. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/host-provided/case.json +10 -0
  192. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/basic/case.json +10 -0
  193. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/host-provided/case.json +10 -0
  194. package/dist/builtin-packs/typescript/fixtures/security-patterns/passing/basic/case.json +10 -0
  195. package/dist/builtin-packs/typescript/fixtures/security-patterns/violating/basic/case.json +10 -0
  196. package/dist/builtin-packs/typescript/fixtures/typecheck/passing/basic/case.json +10 -0
  197. package/dist/builtin-packs/typescript/fixtures/typecheck/violating/basic/case.json +10 -0
  198. package/dist/builtin-packs/typescript/index.ts +85 -0
  199. package/dist/builtin-packs/typescript/lex.ts +199 -0
  200. package/dist/builtin-packs/typescript/measures-exports.ts +173 -0
  201. package/dist/builtin-packs/typescript/measures-functions.ts +138 -0
  202. package/dist/builtin-packs/typescript/measures.ts +10 -0
  203. package/dist/builtin-packs/typescript/naming.ts +47 -0
  204. package/dist/builtin-packs/typescript/pack.json +169 -0
  205. package/dist/builtin-packs/typescript/patterns.ts +93 -0
  206. package/dist/builtin-packs/typescript/resolve.ts +224 -0
  207. package/dist/builtin-packs/typescript/strict.ts +177 -0
  208. package/dist/builtin-packs/typescript/titles.ts +184 -0
  209. package/dist/cli/baseline.d.ts +3 -0
  210. package/dist/cli/baseline.js +67 -0
  211. package/dist/cli/ci-bot-change.d.ts +3 -0
  212. package/dist/cli/ci-bot-change.js +54 -0
  213. package/dist/cli/ci-range.d.ts +18 -0
  214. package/dist/cli/ci-range.js +228 -0
  215. package/dist/cli/ci-summary.d.ts +3 -0
  216. package/dist/cli/ci-summary.js +45 -0
  217. package/dist/cli/ci.d.ts +4 -0
  218. package/dist/cli/ci.js +195 -0
  219. package/dist/cli/commands.d.ts +5 -0
  220. package/dist/cli/commands.js +39 -0
  221. package/dist/cli/deps.d.ts +3 -0
  222. package/dist/cli/deps.js +115 -0
  223. package/dist/cli/drift.d.ts +11 -0
  224. package/dist/cli/drift.js +91 -0
  225. package/dist/cli/evaluate.d.ts +20 -0
  226. package/dist/cli/evaluate.js +213 -0
  227. package/dist/cli/gate-scope.d.ts +11 -0
  228. package/dist/cli/gate-scope.js +93 -0
  229. package/dist/cli/git-hook.d.ts +3 -0
  230. package/dist/cli/git-hook.js +184 -0
  231. package/dist/cli/guardrail.d.ts +5 -0
  232. package/dist/cli/guardrail.js +190 -0
  233. package/dist/cli/index.d.ts +12 -0
  234. package/dist/cli/index.js +198 -0
  235. package/dist/cli/init-plan.d.ts +23 -0
  236. package/dist/cli/init-plan.js +135 -0
  237. package/dist/cli/init.d.ts +3 -0
  238. package/dist/cli/init.js +122 -0
  239. package/dist/cli/inspect-status.d.ts +8 -0
  240. package/dist/cli/inspect-status.js +164 -0
  241. package/dist/cli/inspect.d.ts +5 -0
  242. package/dist/cli/inspect.js +98 -0
  243. package/dist/cli/main.d.ts +2 -0
  244. package/dist/cli/main.js +60 -0
  245. package/dist/cli/pack-adapters.d.ts +3 -0
  246. package/dist/cli/pack-adapters.js +81 -0
  247. package/dist/cli/packs.d.ts +6 -0
  248. package/dist/cli/packs.js +131 -0
  249. package/dist/cli/plan-launcher.d.ts +2 -0
  250. package/dist/cli/plan-launcher.js +272 -0
  251. package/dist/cli/plan.d.ts +25 -0
  252. package/dist/cli/plan.js +121 -0
  253. package/dist/cli/proofs-test.d.ts +3 -0
  254. package/dist/cli/proofs-test.js +77 -0
  255. package/dist/cli/proofs.d.ts +3 -0
  256. package/dist/cli/proofs.js +168 -0
  257. package/dist/cli/remediation.d.ts +3 -0
  258. package/dist/cli/remediation.js +107 -0
  259. package/dist/cli/report.d.ts +4 -0
  260. package/dist/cli/report.js +93 -0
  261. package/dist/cli/serve-eval.d.ts +2 -0
  262. package/dist/cli/serve-eval.js +165 -0
  263. package/dist/cli/serve-log.d.ts +2 -0
  264. package/dist/cli/serve-log.js +150 -0
  265. package/dist/cli/serve-methods.d.ts +2 -0
  266. package/dist/cli/serve-methods.js +181 -0
  267. package/dist/cli/serve-protocol.d.ts +35 -0
  268. package/dist/cli/serve-protocol.js +97 -0
  269. package/dist/cli/serve-run.d.ts +9 -0
  270. package/dist/cli/serve-run.js +135 -0
  271. package/dist/cli/serve-server.d.ts +5 -0
  272. package/dist/cli/serve-server.js +120 -0
  273. package/dist/cli/serve-shared.d.ts +34 -0
  274. package/dist/cli/serve-shared.js +20 -0
  275. package/dist/cli/serve-status.d.ts +2 -0
  276. package/dist/cli/serve-status.js +130 -0
  277. package/dist/cli/serve-transport.d.ts +2 -0
  278. package/dist/cli/serve-transport.js +114 -0
  279. package/dist/cli/shared.d.ts +35 -0
  280. package/dist/cli/shared.js +181 -0
  281. package/dist/cli/task-advance.d.ts +3 -0
  282. package/dist/cli/task-advance.js +144 -0
  283. package/dist/cli/task-phases.d.ts +3 -0
  284. package/dist/cli/task-phases.js +77 -0
  285. package/dist/cli/tasks.d.ts +12 -0
  286. package/dist/cli/tasks.js +176 -0
  287. package/dist/cli/transparency.d.ts +4 -0
  288. package/dist/cli/transparency.js +197 -0
  289. package/dist/cli/waivers.d.ts +3 -0
  290. package/dist/cli/waivers.js +195 -0
  291. package/dist/features/adapters/claude-code.d.ts +8 -0
  292. package/dist/features/adapters/claude-code.js +198 -0
  293. package/dist/features/adapters/claude-shaped.d.ts +4 -0
  294. package/dist/features/adapters/claude-shaped.js +174 -0
  295. package/dist/features/adapters/codex-cli.d.ts +8 -0
  296. package/dist/features/adapters/codex-cli.js +180 -0
  297. package/dist/features/adapters/contract.d.ts +104 -0
  298. package/dist/features/adapters/contract.js +17 -0
  299. package/dist/features/adapters/copilot-capabilities.d.ts +2 -0
  300. package/dist/features/adapters/copilot-capabilities.js +46 -0
  301. package/dist/features/adapters/copilot.d.ts +8 -0
  302. package/dist/features/adapters/copilot.js +200 -0
  303. package/dist/features/adapters/cursor.d.ts +8 -0
  304. package/dist/features/adapters/cursor.js +245 -0
  305. package/dist/features/adapters/custom-event.d.ts +3 -0
  306. package/dist/features/adapters/custom-event.js +180 -0
  307. package/dist/features/adapters/custom-load.d.ts +3 -0
  308. package/dist/features/adapters/custom-load.js +185 -0
  309. package/dist/features/adapters/custom-shape.d.ts +21 -0
  310. package/dist/features/adapters/custom-shape.js +87 -0
  311. package/dist/features/adapters/custom.d.ts +9 -0
  312. package/dist/features/adapters/custom.js +130 -0
  313. package/dist/features/adapters/effective-cache.d.ts +5 -0
  314. package/dist/features/adapters/effective-cache.js +45 -0
  315. package/dist/features/adapters/gemini-cli.d.ts +6 -0
  316. package/dist/features/adapters/gemini-cli.js +160 -0
  317. package/dist/features/adapters/gemini-tables.d.ts +7 -0
  318. package/dist/features/adapters/gemini-tables.js +104 -0
  319. package/dist/features/adapters/hook-dispatch.d.ts +7 -0
  320. package/dist/features/adapters/hook-dispatch.js +97 -0
  321. package/dist/features/adapters/hook-injection.d.ts +12 -0
  322. package/dist/features/adapters/hook-injection.js +75 -0
  323. package/dist/features/adapters/hook-load.d.ts +15 -0
  324. package/dist/features/adapters/hook-load.js +152 -0
  325. package/dist/features/adapters/hook-scope.d.ts +3 -0
  326. package/dist/features/adapters/hook-scope.js +54 -0
  327. package/dist/features/adapters/index.d.ts +22 -0
  328. package/dist/features/adapters/index.js +86 -0
  329. package/dist/features/adapters/muse-code.d.ts +8 -0
  330. package/dist/features/adapters/muse-code.js +223 -0
  331. package/dist/features/adapters/opencode-bridge.d.ts +1 -0
  332. package/dist/features/adapters/opencode-bridge.js +230 -0
  333. package/dist/features/adapters/opencode-capabilities.d.ts +2 -0
  334. package/dist/features/adapters/opencode-capabilities.js +47 -0
  335. package/dist/features/adapters/opencode-parse.d.ts +3 -0
  336. package/dist/features/adapters/opencode-parse.js +137 -0
  337. package/dist/features/adapters/opencode-tables.d.ts +5 -0
  338. package/dist/features/adapters/opencode-tables.js +63 -0
  339. package/dist/features/adapters/opencode.d.ts +10 -0
  340. package/dist/features/adapters/opencode.js +97 -0
  341. package/dist/features/adapters/runtime.d.ts +25 -0
  342. package/dist/features/adapters/runtime.js +148 -0
  343. package/dist/features/adapters/universal.d.ts +7 -0
  344. package/dist/features/adapters/universal.js +89 -0
  345. package/dist/features/arch/arch-profiles.d.ts +3 -0
  346. package/dist/features/arch/arch-profiles.js +5 -0
  347. package/dist/features/arch/checks.d.ts +25 -0
  348. package/dist/features/arch/checks.js +173 -0
  349. package/dist/features/arch/codictator-modules.d.ts +4 -0
  350. package/dist/features/arch/codictator-modules.js +180 -0
  351. package/dist/features/arch/cycle-walk.d.ts +1 -0
  352. package/dist/features/arch/cycle-walk.js +36 -0
  353. package/dist/features/arch/edge-checks.d.ts +13 -0
  354. package/dist/features/arch/edge-checks.js +186 -0
  355. package/dist/features/arch/graph.d.ts +32 -0
  356. package/dist/features/arch/graph.js +202 -0
  357. package/dist/features/arch/index.d.ts +29 -0
  358. package/dist/features/arch/index.js +16 -0
  359. package/dist/features/arch/layer-rules.d.ts +3 -0
  360. package/dist/features/arch/layer-rules.js +38 -0
  361. package/dist/features/arch/module-map-validation.d.ts +3 -0
  362. package/dist/features/arch/module-map-validation.js +30 -0
  363. package/dist/features/arch/module-mapping.d.ts +15 -0
  364. package/dist/features/arch/module-mapping.js +184 -0
  365. package/dist/features/arch/profiles.d.ts +4 -0
  366. package/dist/features/arch/profiles.js +8 -0
  367. package/dist/features/audit/append.d.ts +26 -0
  368. package/dist/features/audit/append.js +210 -0
  369. package/dist/features/audit/explain-table-tail.d.ts +2 -0
  370. package/dist/features/audit/explain-table-tail.js +29 -0
  371. package/dist/features/audit/explain-table.d.ts +8 -0
  372. package/dist/features/audit/explain-table.js +48 -0
  373. package/dist/features/audit/explain.d.ts +7 -0
  374. package/dist/features/audit/explain.js +87 -0
  375. package/dist/features/audit/index.d.ts +37 -0
  376. package/dist/features/audit/index.js +17 -0
  377. package/dist/features/audit/injection-event.d.ts +11 -0
  378. package/dist/features/audit/injection-event.js +17 -0
  379. package/dist/features/audit/read.d.ts +8 -0
  380. package/dist/features/audit/read.js +62 -0
  381. package/dist/features/audit/summarize.d.ts +1 -0
  382. package/dist/features/audit/summarize.js +41 -0
  383. package/dist/features/audit/surfaces.d.ts +47 -0
  384. package/dist/features/audit/surfaces.js +172 -0
  385. package/dist/features/audit/token-saver-evidence.d.ts +14 -0
  386. package/dist/features/audit/token-saver-evidence.js +85 -0
  387. package/dist/features/ci/changes.d.ts +28 -0
  388. package/dist/features/ci/changes.js +88 -0
  389. package/dist/features/ci/index.d.ts +22 -0
  390. package/dist/features/ci/index.js +75 -0
  391. package/dist/features/ci/protection-read.d.ts +3 -0
  392. package/dist/features/ci/protection-read.js +264 -0
  393. package/dist/features/ci/protection.d.ts +25 -0
  394. package/dist/features/ci/protection.js +101 -0
  395. package/dist/features/ci/workflow.d.ts +23 -0
  396. package/dist/features/ci/workflow.js +261 -0
  397. package/dist/features/config/human.d.ts +4 -0
  398. package/dist/features/config/human.js +31 -0
  399. package/dist/features/config/index.d.ts +37 -0
  400. package/dist/features/config/index.js +129 -0
  401. package/dist/features/config/pack-data.d.ts +18 -0
  402. package/dist/features/config/pack-data.js +116 -0
  403. package/dist/features/config/validate-sections.d.ts +6 -0
  404. package/dist/features/config/validate-sections.js +198 -0
  405. package/dist/features/config/validate-shared.d.ts +8 -0
  406. package/dist/features/config/validate-shared.js +69 -0
  407. package/dist/features/config/validate-tunables.d.ts +1 -0
  408. package/dist/features/config/validate-tunables.js +89 -0
  409. package/dist/features/config/validate.d.ts +2 -0
  410. package/dist/features/config/validate.js +57 -0
  411. package/dist/features/deps/bots.d.ts +5 -0
  412. package/dist/features/deps/bots.js +39 -0
  413. package/dist/features/deps/capabilities.d.ts +3 -0
  414. package/dist/features/deps/capabilities.js +91 -0
  415. package/dist/features/deps/check.d.ts +18 -0
  416. package/dist/features/deps/check.js +70 -0
  417. package/dist/features/deps/dependabot.d.ts +10 -0
  418. package/dist/features/deps/dependabot.js +154 -0
  419. package/dist/features/deps/eval.d.ts +41 -0
  420. package/dist/features/deps/eval.js +24 -0
  421. package/dist/features/deps/fields.d.ts +4 -0
  422. package/dist/features/deps/fields.js +18 -0
  423. package/dist/features/deps/index.d.ts +67 -0
  424. package/dist/features/deps/index.js +27 -0
  425. package/dist/features/deps/lockfile.d.ts +8 -0
  426. package/dist/features/deps/lockfile.js +87 -0
  427. package/dist/features/deps/npm.d.ts +22 -0
  428. package/dist/features/deps/npm.js +187 -0
  429. package/dist/features/deps/npmrc.d.ts +12 -0
  430. package/dist/features/deps/npmrc.js +50 -0
  431. package/dist/features/deps/nuget.d.ts +25 -0
  432. package/dist/features/deps/nuget.js +112 -0
  433. package/dist/features/deps/osv-ranges.d.ts +12 -0
  434. package/dist/features/deps/osv-ranges.js +83 -0
  435. package/dist/features/deps/osv.d.ts +16 -0
  436. package/dist/features/deps/osv.js +144 -0
  437. package/dist/features/deps/pypi-pyproject.d.ts +7 -0
  438. package/dist/features/deps/pypi-pyproject.js +118 -0
  439. package/dist/features/deps/pypi.d.ts +29 -0
  440. package/dist/features/deps/pypi.js +137 -0
  441. package/dist/features/deps/registry.d.ts +29 -0
  442. package/dist/features/deps/registry.js +158 -0
  443. package/dist/features/deps/renovate.d.ts +15 -0
  444. package/dist/features/deps/renovate.js +98 -0
  445. package/dist/features/deps/selection.d.ts +20 -0
  446. package/dist/features/deps/selection.js +150 -0
  447. package/dist/features/deps/snapshot-verdicts.d.ts +16 -0
  448. package/dist/features/deps/snapshot-verdicts.js +184 -0
  449. package/dist/features/deps/stable.d.ts +19 -0
  450. package/dist/features/deps/stable.js +131 -0
  451. package/dist/features/deps/step-size.d.ts +7 -0
  452. package/dist/features/deps/step-size.js +24 -0
  453. package/dist/features/deps/upgrade.d.ts +35 -0
  454. package/dist/features/deps/upgrade.js +124 -0
  455. package/dist/features/deps/verdicts.d.ts +21 -0
  456. package/dist/features/deps/verdicts.js +219 -0
  457. package/dist/features/engine/evaluate.d.ts +12 -0
  458. package/dist/features/engine/evaluate.js +170 -0
  459. package/dist/features/engine/index.d.ts +21 -0
  460. package/dist/features/engine/index.js +24 -0
  461. package/dist/features/engine/message.d.ts +3 -0
  462. package/dist/features/engine/message.js +69 -0
  463. package/dist/features/engine/ratchet.d.ts +1 -0
  464. package/dist/features/engine/ratchet.js +63 -0
  465. package/dist/features/engine/run-enforcer.d.ts +4 -0
  466. package/dist/features/engine/run-enforcer.js +82 -0
  467. package/dist/features/engine/waivers.d.ts +23 -0
  468. package/dist/features/engine/waivers.js +169 -0
  469. package/dist/features/generator/draft.d.ts +7 -0
  470. package/dist/features/generator/draft.js +148 -0
  471. package/dist/features/generator/index.d.ts +22 -0
  472. package/dist/features/generator/index.js +8 -0
  473. package/dist/features/generator/llm-draft.d.ts +3 -0
  474. package/dist/features/generator/llm-draft.js +93 -0
  475. package/dist/features/generator/prompt.d.ts +25 -0
  476. package/dist/features/generator/prompt.js +105 -0
  477. package/dist/features/generator/self-test.d.ts +12 -0
  478. package/dist/features/generator/self-test.js +65 -0
  479. package/dist/features/generator/templates.d.ts +26 -0
  480. package/dist/features/generator/templates.js +177 -0
  481. package/dist/features/integrity/drift.d.ts +19 -0
  482. package/dist/features/integrity/drift.js +168 -0
  483. package/dist/features/integrity/hooks.d.ts +19 -0
  484. package/dist/features/integrity/hooks.js +54 -0
  485. package/dist/features/integrity/index.d.ts +10 -0
  486. package/dist/features/integrity/index.js +14 -0
  487. package/dist/features/integrity/manifest.d.ts +15 -0
  488. package/dist/features/integrity/manifest.js +26 -0
  489. package/dist/features/integrity/self-protection.d.ts +12 -0
  490. package/dist/features/integrity/self-protection.js +144 -0
  491. package/dist/features/llm/attempt.d.ts +17 -0
  492. package/dist/features/llm/attempt.js +99 -0
  493. package/dist/features/llm/errors.d.ts +5 -0
  494. package/dist/features/llm/errors.js +18 -0
  495. package/dist/features/llm/index.d.ts +23 -0
  496. package/dist/features/llm/index.js +46 -0
  497. package/dist/features/llm/presets.d.ts +25 -0
  498. package/dist/features/llm/presets.js +159 -0
  499. package/dist/features/llm/wire.d.ts +17 -0
  500. package/dist/features/llm/wire.js +163 -0
  501. package/dist/features/packs/accept.d.ts +7 -0
  502. package/dist/features/packs/accept.js +73 -0
  503. package/dist/features/packs/enforcers/arch-guards.d.ts +12 -0
  504. package/dist/features/packs/enforcers/arch-guards.js +193 -0
  505. package/dist/features/packs/enforcers/binding.d.ts +31 -0
  506. package/dist/features/packs/enforcers/binding.js +157 -0
  507. package/dist/features/packs/enforcers/ci-guards.d.ts +10 -0
  508. package/dist/features/packs/enforcers/ci-guards.js +131 -0
  509. package/dist/features/packs/enforcers/code-health.d.ts +9 -0
  510. package/dist/features/packs/enforcers/code-health.js +180 -0
  511. package/dist/features/packs/enforcers/code.d.ts +5 -0
  512. package/dist/features/packs/enforcers/code.js +129 -0
  513. package/dist/features/packs/enforcers/command-forbid.d.ts +8 -0
  514. package/dist/features/packs/enforcers/command-forbid.js +61 -0
  515. package/dist/features/packs/enforcers/deps-guards.d.ts +15 -0
  516. package/dist/features/packs/enforcers/deps-guards.js +235 -0
  517. package/dist/features/packs/enforcers/deps-policy-guards.d.ts +9 -0
  518. package/dist/features/packs/enforcers/deps-policy-guards.js +135 -0
  519. package/dist/features/packs/enforcers/docs-guards-measures.d.ts +9 -0
  520. package/dist/features/packs/enforcers/docs-guards-measures.js +117 -0
  521. package/dist/features/packs/enforcers/docs-guards.d.ts +11 -0
  522. package/dist/features/packs/enforcers/docs-guards.js +180 -0
  523. package/dist/features/packs/enforcers/engine-version-guards.d.ts +6 -0
  524. package/dist/features/packs/enforcers/engine-version-guards.js +42 -0
  525. package/dist/features/packs/enforcers/external-attribute.d.ts +18 -0
  526. package/dist/features/packs/enforcers/external-attribute.js +122 -0
  527. package/dist/features/packs/enforcers/external-bind.d.ts +4 -0
  528. package/dist/features/packs/enforcers/external-bind.js +206 -0
  529. package/dist/features/packs/enforcers/external-check.d.ts +7 -0
  530. package/dist/features/packs/enforcers/external-check.js +131 -0
  531. package/dist/features/packs/enforcers/external-output.d.ts +30 -0
  532. package/dist/features/packs/enforcers/external-output.js +144 -0
  533. package/dist/features/packs/enforcers/external-probe.d.ts +4 -0
  534. package/dist/features/packs/enforcers/external-probe.js +65 -0
  535. package/dist/features/packs/enforcers/external-runs.d.ts +33 -0
  536. package/dist/features/packs/enforcers/external-runs.js +162 -0
  537. package/dist/features/packs/enforcers/external-sarif.d.ts +3 -0
  538. package/dist/features/packs/enforcers/external-sarif.js +109 -0
  539. package/dist/features/packs/enforcers/external.d.ts +39 -0
  540. package/dist/features/packs/enforcers/external.js +11 -0
  541. package/dist/features/packs/enforcers/gate-guards.d.ts +11 -0
  542. package/dist/features/packs/enforcers/gate-guards.js +117 -0
  543. package/dist/features/packs/enforcers/health-abstraction.d.ts +5 -0
  544. package/dist/features/packs/enforcers/health-abstraction.js +126 -0
  545. package/dist/features/packs/enforcers/health-duplication.d.ts +5 -0
  546. package/dist/features/packs/enforcers/health-duplication.js +197 -0
  547. package/dist/features/packs/enforcers/health-lex-imports.d.ts +5 -0
  548. package/dist/features/packs/enforcers/health-lex-imports.js +225 -0
  549. package/dist/features/packs/enforcers/health-lex-template.d.ts +10 -0
  550. package/dist/features/packs/enforcers/health-lex-template.js +67 -0
  551. package/dist/features/packs/enforcers/health-lex.d.ts +8 -0
  552. package/dist/features/packs/enforcers/health-lex.js +227 -0
  553. package/dist/features/packs/enforcers/health-markers.d.ts +3 -0
  554. package/dist/features/packs/enforcers/health-markers.js +31 -0
  555. package/dist/features/packs/enforcers/health-measures.d.ts +26 -0
  556. package/dist/features/packs/enforcers/health-measures.js +223 -0
  557. package/dist/features/packs/enforcers/health-refs.d.ts +5 -0
  558. package/dist/features/packs/enforcers/health-refs.js +76 -0
  559. package/dist/features/packs/enforcers/integrity-guards-repo.d.ts +6 -0
  560. package/dist/features/packs/enforcers/integrity-guards-repo.js +189 -0
  561. package/dist/features/packs/enforcers/integrity-guards.d.ts +12 -0
  562. package/dist/features/packs/enforcers/integrity-guards.js +202 -0
  563. package/dist/features/packs/enforcers/jsonkey.d.ts +13 -0
  564. package/dist/features/packs/enforcers/jsonkey.js +95 -0
  565. package/dist/features/packs/enforcers/parametric.d.ts +7 -0
  566. package/dist/features/packs/enforcers/parametric.js +138 -0
  567. package/dist/features/packs/enforcers/pattern.d.ts +11 -0
  568. package/dist/features/packs/enforcers/pattern.js +88 -0
  569. package/dist/features/packs/enforcers/placement.d.ts +10 -0
  570. package/dist/features/packs/enforcers/placement.js +54 -0
  571. package/dist/features/packs/enforcers/py-checks.d.ts +7 -0
  572. package/dist/features/packs/enforcers/py-checks.js +131 -0
  573. package/dist/features/packs/enforcers/py-lex.d.ts +10 -0
  574. package/dist/features/packs/enforcers/py-lex.js +271 -0
  575. package/dist/features/packs/enforcers/py-phantom.d.ts +6 -0
  576. package/dist/features/packs/enforcers/py-phantom.js +163 -0
  577. package/dist/features/packs/enforcers/py-pins.d.ts +16 -0
  578. package/dist/features/packs/enforcers/py-pins.js +184 -0
  579. package/dist/features/packs/enforcers/py-security-patterns.d.ts +18 -0
  580. package/dist/features/packs/enforcers/py-security-patterns.js +70 -0
  581. package/dist/features/packs/enforcers/records-guards.d.ts +12 -0
  582. package/dist/features/packs/enforcers/records-guards.js +178 -0
  583. package/dist/features/packs/enforcers/remediation-guards.d.ts +6 -0
  584. package/dist/features/packs/enforcers/remediation-guards.js +42 -0
  585. package/dist/features/packs/enforcers/required.d.ts +10 -0
  586. package/dist/features/packs/enforcers/required.js +65 -0
  587. package/dist/features/packs/enforcers/secret-scan.d.ts +6 -0
  588. package/dist/features/packs/enforcers/secret-scan.js +173 -0
  589. package/dist/features/packs/enforcers/shell-analyse.d.ts +14 -0
  590. package/dist/features/packs/enforcers/shell-analyse.js +105 -0
  591. package/dist/features/packs/enforcers/sizes.d.ts +10 -0
  592. package/dist/features/packs/enforcers/sizes.js +82 -0
  593. package/dist/features/packs/enforcers/steering-guards.d.ts +11 -0
  594. package/dist/features/packs/enforcers/steering-guards.js +162 -0
  595. package/dist/features/packs/enforcers/testing-guards.d.ts +10 -0
  596. package/dist/features/packs/enforcers/testing-guards.js +118 -0
  597. package/dist/features/packs/enforcers/ts-checks.d.ts +7 -0
  598. package/dist/features/packs/enforcers/ts-checks.js +147 -0
  599. package/dist/features/packs/enforcers/ts-phantom-host.d.ts +11 -0
  600. package/dist/features/packs/enforcers/ts-phantom-host.js +155 -0
  601. package/dist/features/packs/enforcers/ts-phantom.d.ts +6 -0
  602. package/dist/features/packs/enforcers/ts-phantom.js +117 -0
  603. package/dist/features/packs/enforcers/ts-security-patterns.d.ts +18 -0
  604. package/dist/features/packs/enforcers/ts-security-patterns.js +97 -0
  605. package/dist/features/packs/enforcers/workflow-guards.d.ts +10 -0
  606. package/dist/features/packs/enforcers/workflow-guards.js +117 -0
  607. package/dist/features/packs/enforcers/write-confine.d.ts +13 -0
  608. package/dist/features/packs/enforcers/write-confine.js +131 -0
  609. package/dist/features/packs/hashes.d.ts +6 -0
  610. package/dist/features/packs/hashes.js +84 -0
  611. package/dist/features/packs/index.d.ts +22 -0
  612. package/dist/features/packs/index.js +15 -0
  613. package/dist/features/packs/loader.d.ts +13 -0
  614. package/dist/features/packs/loader.js +205 -0
  615. package/dist/features/packs/manifest-decl.d.ts +13 -0
  616. package/dist/features/packs/manifest-decl.js +121 -0
  617. package/dist/features/packs/manifest.d.ts +7 -0
  618. package/dist/features/packs/manifest.js +95 -0
  619. package/dist/features/packs/params.d.ts +2 -0
  620. package/dist/features/packs/params.js +90 -0
  621. package/dist/features/packs/registry.d.ts +11 -0
  622. package/dist/features/packs/registry.js +136 -0
  623. package/dist/features/packs/selftest.d.ts +3 -0
  624. package/dist/features/packs/selftest.js +144 -0
  625. package/dist/features/records/bug-grammar.d.ts +17 -0
  626. package/dist/features/records/bug-grammar.js +128 -0
  627. package/dist/features/records/bug-registry.d.ts +9 -0
  628. package/dist/features/records/bug-registry.js +67 -0
  629. package/dist/features/records/bug-rows-immutable.d.ts +3 -0
  630. package/dist/features/records/bug-rows-immutable.js +52 -0
  631. package/dist/features/records/bugs.d.ts +2 -0
  632. package/dist/features/records/bugs.js +24 -0
  633. package/dist/features/records/docs-lines.d.ts +16 -0
  634. package/dist/features/records/docs-lines.js +36 -0
  635. package/dist/features/records/docs-prose.d.ts +14 -0
  636. package/dist/features/records/docs-prose.js +252 -0
  637. package/dist/features/records/docs-structure.d.ts +17 -0
  638. package/dist/features/records/docs-structure.js +223 -0
  639. package/dist/features/records/docs.d.ts +9 -0
  640. package/dist/features/records/docs.js +238 -0
  641. package/dist/features/records/history-checks.d.ts +6 -0
  642. package/dist/features/records/history-checks.js +94 -0
  643. package/dist/features/records/history-parse.d.ts +16 -0
  644. package/dist/features/records/history-parse.js +101 -0
  645. package/dist/features/records/history-scope.d.ts +5 -0
  646. package/dist/features/records/history-scope.js +86 -0
  647. package/dist/features/records/history.d.ts +3 -0
  648. package/dist/features/records/history.js +5 -0
  649. package/dist/features/records/index.d.ts +8 -0
  650. package/dist/features/records/index.js +11 -0
  651. package/dist/features/remediation/adoption.d.ts +32 -0
  652. package/dist/features/remediation/adoption.js +142 -0
  653. package/dist/features/remediation/index.d.ts +12 -0
  654. package/dist/features/remediation/index.js +21 -0
  655. package/dist/features/remediation/plan-chains.d.ts +3 -0
  656. package/dist/features/remediation/plan-chains.js +111 -0
  657. package/dist/features/remediation/plan-generate.d.ts +3 -0
  658. package/dist/features/remediation/plan-generate.js +129 -0
  659. package/dist/features/remediation/plan-kinds.d.ts +32 -0
  660. package/dist/features/remediation/plan-kinds.js +42 -0
  661. package/dist/features/remediation/plan-markers.d.ts +2 -0
  662. package/dist/features/remediation/plan-markers.js +155 -0
  663. package/dist/features/remediation/plan-merge.d.ts +6 -0
  664. package/dist/features/remediation/plan-merge.js +33 -0
  665. package/dist/features/remediation/plan.d.ts +4 -0
  666. package/dist/features/remediation/plan.js +7 -0
  667. package/dist/features/remediation/step-floor.d.ts +5 -0
  668. package/dist/features/remediation/step-floor.js +76 -0
  669. package/dist/features/remediation/step-gates.d.ts +18 -0
  670. package/dist/features/remediation/step-gates.js +77 -0
  671. package/dist/features/remediation/step-split.d.ts +12 -0
  672. package/dist/features/remediation/step-split.js +75 -0
  673. package/dist/features/remediation/steps.d.ts +3 -0
  674. package/dist/features/remediation/steps.js +6 -0
  675. package/dist/features/remediation/types.d.ts +37 -0
  676. package/dist/features/remediation/types.js +1 -0
  677. package/dist/features/security/index.d.ts +12 -0
  678. package/dist/features/security/index.js +142 -0
  679. package/dist/features/steering/agent-assets.d.ts +7 -0
  680. package/dist/features/steering/agent-assets.js +75 -0
  681. package/dist/features/steering/budgets.d.ts +20 -0
  682. package/dist/features/steering/budgets.js +86 -0
  683. package/dist/features/steering/checks.d.ts +7 -0
  684. package/dist/features/steering/checks.js +67 -0
  685. package/dist/features/steering/context-file.d.ts +11 -0
  686. package/dist/features/steering/context-file.js +107 -0
  687. package/dist/features/steering/graph-scan.d.ts +7 -0
  688. package/dist/features/steering/graph-scan.js +17 -0
  689. package/dist/features/steering/index.d.ts +30 -0
  690. package/dist/features/steering/index.js +45 -0
  691. package/dist/features/steering/injection.d.ts +23 -0
  692. package/dist/features/steering/injection.js +124 -0
  693. package/dist/features/steering/mcp.d.ts +2 -0
  694. package/dist/features/steering/mcp.js +18 -0
  695. package/dist/features/steering/precedence.d.ts +10 -0
  696. package/dist/features/steering/precedence.js +28 -0
  697. package/dist/features/steering/read-cache.d.ts +13 -0
  698. package/dist/features/steering/read-cache.js +51 -0
  699. package/dist/features/testing/base.d.ts +1 -0
  700. package/dist/features/testing/base.js +8 -0
  701. package/dist/features/testing/covers.d.ts +8 -0
  702. package/dist/features/testing/covers.js +50 -0
  703. package/dist/features/testing/evaluate.d.ts +19 -0
  704. package/dist/features/testing/evaluate.js +47 -0
  705. package/dist/features/testing/index.d.ts +10 -0
  706. package/dist/features/testing/index.js +13 -0
  707. package/dist/features/testing/integrity.d.ts +28 -0
  708. package/dist/features/testing/integrity.js +140 -0
  709. package/dist/features/testing/ledger.d.ts +11 -0
  710. package/dist/features/testing/ledger.js +51 -0
  711. package/dist/features/testing/proofs.d.ts +26 -0
  712. package/dist/features/testing/proofs.js +88 -0
  713. package/dist/features/testing/report.d.ts +6 -0
  714. package/dist/features/testing/report.js +16 -0
  715. package/dist/features/testing/scenarios.d.ts +34 -0
  716. package/dist/features/testing/scenarios.js +112 -0
  717. package/dist/features/testing/tap-parser.d.ts +9 -0
  718. package/dist/features/testing/tap-parser.js +96 -0
  719. package/dist/features/testing/trace.d.ts +23 -0
  720. package/dist/features/testing/trace.js +110 -0
  721. package/dist/features/workflow/index.d.ts +14 -0
  722. package/dist/features/workflow/index.js +19 -0
  723. package/dist/features/workflow/loop.d.ts +5 -0
  724. package/dist/features/workflow/loop.js +36 -0
  725. package/dist/features/workflow/phases.d.ts +10 -0
  726. package/dist/features/workflow/phases.js +184 -0
  727. package/dist/features/workflow/review.d.ts +25 -0
  728. package/dist/features/workflow/review.js +119 -0
  729. package/dist/features/workflow/tasks.d.ts +73 -0
  730. package/dist/features/workflow/tasks.js +80 -0
  731. package/dist/features/workflow/writes.d.ts +8 -0
  732. package/dist/features/workflow/writes.js +96 -0
  733. package/dist/kernel/clock.d.ts +4 -0
  734. package/dist/kernel/clock.js +5 -0
  735. package/dist/kernel/config-keys.d.ts +2 -0
  736. package/dist/kernel/config-keys.js +5 -0
  737. package/dist/kernel/config-toml-keys.d.ts +2 -0
  738. package/dist/kernel/config-toml-keys.js +237 -0
  739. package/dist/kernel/config-yaml-keys.d.ts +2 -0
  740. package/dist/kernel/config-yaml-keys.js +177 -0
  741. package/dist/kernel/contracts.d.ts +76 -0
  742. package/dist/kernel/contracts.js +9 -0
  743. package/dist/kernel/entry.d.ts +1 -0
  744. package/dist/kernel/entry.js +31 -0
  745. package/dist/kernel/env.d.ts +4 -0
  746. package/dist/kernel/env.js +5 -0
  747. package/dist/kernel/errors.d.ts +7 -0
  748. package/dist/kernel/errors.js +6 -0
  749. package/dist/kernel/fs-confine.d.ts +14 -0
  750. package/dist/kernel/fs-confine.js +129 -0
  751. package/dist/kernel/fs-errors.d.ts +8 -0
  752. package/dist/kernel/fs-errors.js +37 -0
  753. package/dist/kernel/fs.d.ts +28 -0
  754. package/dist/kernel/fs.js +245 -0
  755. package/dist/kernel/git.d.ts +16 -0
  756. package/dist/kernel/git.js +128 -0
  757. package/dist/kernel/glob.d.ts +1 -0
  758. package/dist/kernel/glob.js +178 -0
  759. package/dist/kernel/hash.d.ts +3 -0
  760. package/dist/kernel/hash.js +12 -0
  761. package/dist/kernel/host.d.ts +3 -0
  762. package/dist/kernel/host.js +48 -0
  763. package/dist/kernel/index.d.ts +115 -0
  764. package/dist/kernel/index.js +33 -0
  765. package/dist/kernel/json.d.ts +4 -0
  766. package/dist/kernel/json.js +68 -0
  767. package/dist/kernel/net-allow.d.ts +8 -0
  768. package/dist/kernel/net-allow.js +45 -0
  769. package/dist/kernel/net-fetch.d.ts +5 -0
  770. package/dist/kernel/net-fetch.js +135 -0
  771. package/dist/kernel/net.d.ts +10 -0
  772. package/dist/kernel/net.js +24 -0
  773. package/dist/kernel/path.d.ts +3 -0
  774. package/dist/kernel/path.js +40 -0
  775. package/dist/kernel/pattern.d.ts +2 -0
  776. package/dist/kernel/pattern.js +150 -0
  777. package/dist/kernel/proc.d.ts +6 -0
  778. package/dist/kernel/proc.js +207 -0
  779. package/dist/kernel/read-cache.d.ts +6 -0
  780. package/dist/kernel/read-cache.js +27 -0
  781. package/dist/kernel/redact.d.ts +1 -0
  782. package/dist/kernel/redact.js +206 -0
  783. package/dist/kernel/repo-root.d.ts +3 -0
  784. package/dist/kernel/repo-root.js +29 -0
  785. package/dist/kernel/result.d.ts +10 -0
  786. package/dist/kernel/result.js +6 -0
  787. package/dist/kernel/schema-helpers.d.ts +11 -0
  788. package/dist/kernel/schema-helpers.js +101 -0
  789. package/dist/kernel/schema.d.ts +2 -0
  790. package/dist/kernel/schema.js +203 -0
  791. package/dist/kernel/secret-paths.d.ts +3 -0
  792. package/dist/kernel/secret-paths.js +70 -0
  793. package/dist/kernel/shell-bypass.d.ts +4 -0
  794. package/dist/kernel/shell-bypass.js +151 -0
  795. package/dist/kernel/shell-cmd.d.ts +6 -0
  796. package/dist/kernel/shell-cmd.js +213 -0
  797. package/dist/kernel/shell-deny-cmd.d.ts +7 -0
  798. package/dist/kernel/shell-deny-cmd.js +35 -0
  799. package/dist/kernel/shell-deny-destroy.d.ts +7 -0
  800. package/dist/kernel/shell-deny-destroy.js +71 -0
  801. package/dist/kernel/shell-deny-escalate.d.ts +7 -0
  802. package/dist/kernel/shell-deny-escalate.js +96 -0
  803. package/dist/kernel/shell-deny-target.d.ts +4 -0
  804. package/dist/kernel/shell-deny-target.js +51 -0
  805. package/dist/kernel/shell-deny.d.ts +8 -0
  806. package/dist/kernel/shell-deny.js +171 -0
  807. package/dist/kernel/shell-scan.d.ts +3 -0
  808. package/dist/kernel/shell-scan.js +226 -0
  809. package/dist/kernel/shell-word.d.ts +15 -0
  810. package/dist/kernel/shell-word.js +216 -0
  811. package/dist/kernel/shell.d.ts +22 -0
  812. package/dist/kernel/shell.js +2 -0
  813. package/dist/kernel/stdin.d.ts +2 -0
  814. package/dist/kernel/stdin.js +59 -0
  815. package/dist/kernel/test-report.d.ts +7 -0
  816. package/dist/kernel/test-report.js +112 -0
  817. package/dist/kernel/version.d.ts +2 -0
  818. package/dist/kernel/version.js +46 -0
  819. package/dist/tsconfig.build.tsbuildinfo +1 -0
  820. package/package.json +19 -11
  821. package/schema/accepted.schema.json +20 -0
  822. package/schema/baseline.schema.json +17 -0
  823. package/schema/capability.schema.json +31 -0
  824. package/schema/cli/error.schema.json +15 -0
  825. package/schema/cli/explain.schema.json +19 -0
  826. package/schema/cli/report.schema.json +15 -0
  827. package/schema/cli/status.schema.json +51 -0
  828. package/schema/cli/verify.schema.json +15 -0
  829. package/schema/config.schema.json +43 -0
  830. package/schema/event-log.schema.json +52 -0
  831. package/schema/hook-decision.schema.json +13 -0
  832. package/schema/hook-event.schema.json +50 -0
  833. package/schema/manifest.schema.json +26 -0
  834. package/schema/pack-draft.schema.json +42 -0
  835. package/schema/pack.schema.json +70 -0
  836. package/schema/registry-snapshot.schema.json +41 -0
  837. package/schema/remediation-plan.schema.json +44 -0
  838. package/schema/review-findings.schema.json +25 -0
  839. package/schema/task-record.schema.json +49 -0
  840. package/schema/waivers.schema.json +29 -0
@@ -0,0 +1,219 @@
1
+ // SPEC §4.8.5 verdicts over manifests plus snapshot. The orchestration and
2
+ // the manifest-intrinsic rows live here; pinned rows needing registry data
3
+ // live in snapshot-verdicts.ts and the §6.1 catalogue in capabilities.ts.
4
+ import { makeError } from "../../kernel/index.js";
5
+ import { capabilityOf, DEFAULT_LICENSE_ALLOW, platformCapabilityCover, } from "./capabilities.js";
6
+ import { pinFinding, uniqueDeps, } from "./eval.js";
7
+ import { lockfileMismatches, parsePackageLock } from "./lockfile.js";
8
+ import { isExactNpmPin } from "./npm.js";
9
+ import { NPM_PUBLIC_REGISTRY_HOST, parseNpmrc, privateRegistryHosts, } from "./npmrc.js";
10
+ import { checkPinnedVerdicts, pinnedOrUnversionedNote, snapshotForm, } from "./snapshot-verdicts.js";
11
+ import { DEFAULT_DEP_LAG_PARAMS } from "./stable.js";
12
+ export function manifestToEval(manifest) {
13
+ return {
14
+ path: manifest.path,
15
+ dependencies: manifest.dependencies.map((dep) => ({
16
+ name: dep.name,
17
+ range: dep.range,
18
+ kind: dep.kind ?? "prod",
19
+ })),
20
+ };
21
+ }
22
+ // SPEC §4.8.5 verdicts over manifests plus snapshot. Anything needing data
23
+ // the caller did not supply is skipped, never default-allowed: absence of a
24
+ // snapshot entry means "not fetched", not "clean".
25
+ export function evaluateDepVerdicts(input) {
26
+ const findings = [];
27
+ const notes = [];
28
+ checkExactPins(input, findings);
29
+ checkLockfiles(input, findings);
30
+ checkNewNeedsReason(input, findings);
31
+ checkOnePerCapability(input, findings);
32
+ checkNpmrc(input, findings);
33
+ if (input.snapshot !== undefined) {
34
+ checkSnapshotVerdicts(input, findings, notes);
35
+ }
36
+ return { findings, notes };
37
+ }
38
+ function checkExactPins(input, findings) {
39
+ for (const manifest of input.manifests) {
40
+ for (const dep of manifest.dependencies) {
41
+ if (dep.kind === "peer") {
42
+ continue;
43
+ }
44
+ if (!isExactNpmPin(dep.range)) {
45
+ findings.push(pinFinding(manifest.path, dep.name, dep.range));
46
+ }
47
+ }
48
+ }
49
+ }
50
+ function lockfileFindingsFor(manifest, text) {
51
+ const parsed = parsePackageLock(text);
52
+ if (!parsed.ok) {
53
+ return [
54
+ {
55
+ ruleId: "core/dep-lockfile",
56
+ path: manifest.path,
57
+ code: parsed.error.code,
58
+ message: `lockfile for ${manifest.path} is unparseable`,
59
+ remediation: `Regenerate the lockfile for ${manifest.path} with the ecosystem tool.`,
60
+ },
61
+ ];
62
+ }
63
+ const mismatched = lockfileMismatches(manifest.dependencies, {
64
+ lockfileVersion: 3,
65
+ pinned: parsed.value.pinned,
66
+ });
67
+ return mismatched.map((name) => ({
68
+ ruleId: "core/dep-lockfile",
69
+ path: manifest.path,
70
+ message: `${name} in ${manifest.path} is out of sync with the lockfile`,
71
+ remediation: `Regenerate the lockfile for ${manifest.path} with the ecosystem tool.`,
72
+ }));
73
+ }
74
+ function checkLockfiles(input, findings) {
75
+ if (input.lockfiles === undefined) {
76
+ return;
77
+ }
78
+ for (const manifest of input.manifests) {
79
+ if (!(manifest.path in input.lockfiles)) {
80
+ continue;
81
+ }
82
+ const text = input.lockfiles[manifest.path];
83
+ if (text === null || text === undefined) {
84
+ findings.push({
85
+ ruleId: "core/dep-lockfile",
86
+ path: manifest.path,
87
+ message: `no lockfile committed for ${manifest.path}`,
88
+ remediation: `Commit the lockfile for ${manifest.path}.`,
89
+ });
90
+ continue;
91
+ }
92
+ for (const finding of lockfileFindingsFor(manifest, text)) {
93
+ findings.push(finding);
94
+ }
95
+ }
96
+ }
97
+ function checkNewNeedsReason(input, findings) {
98
+ if (input.newDeps === undefined) {
99
+ return;
100
+ }
101
+ for (const manifest of input.manifests) {
102
+ for (const dep of manifest.dependencies) {
103
+ if (input.newDeps.includes(dep.name) &&
104
+ input.addedReasons?.[dep.name] !== true) {
105
+ findings.push({
106
+ ruleId: "core/dep-new-needs-reason",
107
+ path: manifest.path,
108
+ message: `${dep.name} in ${manifest.path} has no recorded reason`,
109
+ remediation: `Record why ${dep.name} is needed in ${manifest.path}.`,
110
+ });
111
+ }
112
+ }
113
+ }
114
+ }
115
+ function checkOnePerCapability(input, findings) {
116
+ const byCapability = new Map();
117
+ const platformHeld = new Set(input.platformCaps ?? []);
118
+ for (const { path, dep } of uniqueDeps(input.manifests)) {
119
+ const capability = capabilityOf(dep.name);
120
+ if (capability === undefined) {
121
+ continue;
122
+ }
123
+ if (platformHeld.has(capability)) {
124
+ const cover = platformCapabilityCover(capability) ?? capability;
125
+ findings.push({
126
+ ruleId: "core/dep-one-per-capability",
127
+ path,
128
+ message: `${dep.name} duplicates the pinned platform's ${cover} (${capability})`,
129
+ remediation: `Remove ${dep.name}; the pinned platform already covers ${capability}.`,
130
+ });
131
+ continue;
132
+ }
133
+ const holders = byCapability.get(capability) ?? [];
134
+ holders.push({ path, name: dep.name });
135
+ byCapability.set(capability, holders);
136
+ }
137
+ for (const [capability, holders] of [...byCapability.entries()].sort()) {
138
+ const first = holders[0];
139
+ const second = holders[1];
140
+ if (first !== undefined && second !== undefined) {
141
+ findings.push({
142
+ ruleId: "core/dep-one-per-capability",
143
+ path: first.path,
144
+ message: `${first.name} and ${second.name} both cover ${capability}`,
145
+ remediation: `Remove ${second.name}; the kept package already covers ${capability}.`,
146
+ });
147
+ }
148
+ }
149
+ }
150
+ function checkNpmrc(input, findings) {
151
+ if (input.npmrc === undefined) {
152
+ return;
153
+ }
154
+ const parsed = parseNpmrc(input.npmrc.text);
155
+ if (input.saveExactRequired === true && parsed.saveExact !== true) {
156
+ findings.push({
157
+ ruleId: "core/dep-exact-pin",
158
+ path: input.npmrc.path,
159
+ message: `${input.npmrc.path} lacks the owned save-exact=true entry`,
160
+ remediation: `Set save-exact=true in ${input.npmrc.path}.`,
161
+ });
162
+ }
163
+ const allowed = input.allowedRegistryHosts ?? [];
164
+ for (const host of privateRegistryHosts(parsed)) {
165
+ if (host !== NPM_PUBLIC_REGISTRY_HOST && !allowed.includes(host)) {
166
+ findings.push({
167
+ ruleId: "core/dep-exact-pin",
168
+ path: input.npmrc.path,
169
+ code: "CDX-E702",
170
+ message: `private registry ${host} is not on the network allowlist`,
171
+ remediation: `Add ${host} via config.network.registries (SPEC §9.2).`,
172
+ });
173
+ }
174
+ }
175
+ }
176
+ function checkSnapshotVerdicts(input, findings, notes) {
177
+ const params = { ...DEFAULT_DEP_LAG_PARAMS, ...input.params };
178
+ const allow = input.licenseAllow ?? DEFAULT_LICENSE_ALLOW;
179
+ const snapshot = input.snapshot;
180
+ if (snapshot === undefined) {
181
+ return;
182
+ }
183
+ for (const { path, dep } of uniqueDeps(input.manifests)) {
184
+ if (dep.kind === "peer") {
185
+ continue;
186
+ }
187
+ const form = snapshotForm(dep.range);
188
+ if (form === "unversioned") {
189
+ notes.push(pinnedOrUnversionedNote(path, dep.name));
190
+ continue;
191
+ }
192
+ if (form !== "pinned") {
193
+ continue;
194
+ }
195
+ const pinned = dep.range.replace(/^v/, "");
196
+ for (const finding of checkPinnedVerdicts({
197
+ snapshot,
198
+ params,
199
+ allow,
200
+ path,
201
+ dep,
202
+ unpublished: input.unpublished ?? [],
203
+ }, pinned, notes)) {
204
+ findings.push(finding);
205
+ }
206
+ }
207
+ }
208
+ export function depErrorFinding(ruleId, path, error, remediation) {
209
+ return {
210
+ ruleId,
211
+ path,
212
+ code: error.code,
213
+ message: error.message,
214
+ remediation,
215
+ };
216
+ }
217
+ export function makeDepError(code, message, remediation) {
218
+ return makeError(code, message, remediation);
219
+ }
@@ -0,0 +1,12 @@
1
+ import { type Result } from "../../kernel/index.ts";
2
+ import type { NewEvent } from "../audit/index.ts";
3
+ import type { Enforcer, Engine } from "./index.ts";
4
+ import { type Waiver, type WaiverStore } from "./waivers.ts";
5
+ export interface EngineOptions {
6
+ readonly waiverStore?: WaiverStore;
7
+ readonly append?: (event: NewEvent) => Promise<Result<void>>;
8
+ readonly configHash?: string;
9
+ readonly packs?: Readonly<Record<string, string>>;
10
+ }
11
+ export declare function createEngine(enforcers: ReadonlyArray<Enforcer>, options?: EngineOptions): Engine;
12
+ export type { Waiver, WaiverStore };
@@ -0,0 +1,170 @@
1
+ // SPEC §4.3.3 evaluation with §4.3.8 fail closed: select rules for the
2
+ // trigger, run their enforcers concurrently under budget, apply waivers,
3
+ // decide, then append the verdict event before returning. The verdict is
4
+ // a pure function of the inputs (SPEC §4.3.6): enforcer and finding order
5
+ // is sorted and the id derives from the inputs, so replay is byte-identical.
6
+ // The clock arrives only through CheckContext.
7
+ import { ok, sha256Text, stableStringify, } from "../../kernel/index.js";
8
+ import { buildMessage } from "./message.js";
9
+ import { appendFailedFinding, runEnforcer, sortFindings, } from "./run-enforcer.js";
10
+ import { DEFAULT_WAIVER_STORE, matchWaivers, } from "./waivers.js";
11
+ // SPEC §4.3.2: each engine trigger evaluates at one layer. Coarse triggers
12
+ // map to the layer of their first scope; finer hook names arrive with the
13
+ // adapter contract (phase 5).
14
+ const TRIGGER_LAYERS = {
15
+ startup: "L0",
16
+ prompt: "L0",
17
+ compact: "L0",
18
+ "pre-tool": "L1",
19
+ "post-tool": "L1",
20
+ review: "L3",
21
+ scheduled: "L5",
22
+ };
23
+ // SPEC §4.3.3: findings only from advisory triggers advise; everything
24
+ // else with findings blocks. L2 (editor.save, never a gate per §4.3.8) has
25
+ // no trigger in this union yet; prompt carries the injection path.
26
+ const ADVISORY_TRIGGERS = ["prompt"];
27
+ // SPEC §4.3.6: the verdict id is a pure function of the inputs, so the
28
+ // same evaluation replays byte-identical (EC-12). Uniqueness across
29
+ // concurrent processes lives at append time: the hook runtime passes its
30
+ // per-process counter as the appendEvent seq (SPEC §7.10).
31
+ function makeVerdictId(now, trigger, scope, decision, findings, waiversApplied, configHash) {
32
+ const stamp = now.replace(/[-:.]/g, "");
33
+ const canonical = stableStringify({
34
+ trigger,
35
+ files: [...scope.files].sort(),
36
+ sessionId: scope.sessionId,
37
+ // SPEC §4.3.6: the hook input is a verdict input, so the proposed
38
+ // tool content joins the id; two proposals never share an event.
39
+ ...(scope.proposedContent === undefined
40
+ ? {}
41
+ : { proposedContent: scope.proposedContent }),
42
+ ...(scope.shellCommand === undefined
43
+ ? {}
44
+ : { shellCommand: scope.shellCommand }),
45
+ ...(scope.proposedPaths === undefined
46
+ ? {}
47
+ : { proposedPaths: [...scope.proposedPaths].sort() }),
48
+ decision,
49
+ findings,
50
+ waiversApplied,
51
+ configHash,
52
+ });
53
+ return `${stamp}-${sha256Text(canonical).slice(0, 12)}`;
54
+ }
55
+ // SPEC §4.3.4: suppress findings covered by an active waiver, recording
56
+ // the waiver ids. Synthetic fail-closed findings (CDX-E*) never suppress,
57
+ // and an invalid floor-rule waiver blocks loudly instead of suppressing.
58
+ async function applyWaivers(findings, store, now) {
59
+ const kept = [];
60
+ const applied = new Set();
61
+ for (const finding of findings) {
62
+ if (finding.code?.startsWith("CDX-E") === true) {
63
+ kept.push(finding);
64
+ continue;
65
+ }
66
+ const matched = matchWaivers(store, finding.ruleId, finding.path ?? "", now);
67
+ if (!matched.ok) {
68
+ kept.push(finding);
69
+ kept.push({
70
+ ruleId: finding.ruleId,
71
+ code: matched.error.code,
72
+ message: matched.error.message,
73
+ remediation: matched.error.remediation,
74
+ });
75
+ continue;
76
+ }
77
+ if (matched.value.length === 0) {
78
+ kept.push(finding);
79
+ continue;
80
+ }
81
+ for (const waiver of matched.value) {
82
+ applied.add(waiver.id);
83
+ }
84
+ }
85
+ return { kept, waiversApplied: [...applied].sort() };
86
+ }
87
+ function ruleIdsOf(findings) {
88
+ const seen = new Set();
89
+ for (const finding of findings) {
90
+ seen.add(finding.ruleId);
91
+ }
92
+ return [...seen].sort();
93
+ }
94
+ async function collectFindings(ordered, ctx, store) {
95
+ const runnable = ordered.filter((enforcer) => enforcer.kinds.includes(ctx.trigger));
96
+ // SPEC §4.3.3 step 2: bounded concurrency — one guard at a time keeps every
97
+ // guard's event-loop share (no E902 herd); sortFindings keeps the verdict byte-identical (§4.3.6).
98
+ const ran = [];
99
+ for (const enforcer of runnable) {
100
+ ran.push(await runEnforcer(enforcer, ctx));
101
+ }
102
+ return applyWaivers(sortFindings(ran.flat()), store, ctx.now);
103
+ }
104
+ function decideDecision(kept, trigger) {
105
+ if (kept.length === 0) {
106
+ return "allow";
107
+ }
108
+ return ADVISORY_TRIGGERS.includes(trigger) ? "advise" : "block";
109
+ }
110
+ function buildVerdictEvent(trigger, now, decision, kept, waiversApplied, configHash, packs, message, clockSkew) {
111
+ return {
112
+ kind: "verdict",
113
+ layer: TRIGGER_LAYERS[trigger],
114
+ trigger,
115
+ ruleIds: ruleIdsOf(kept),
116
+ decision,
117
+ findings: kept,
118
+ durationMs: 0,
119
+ configHash,
120
+ packs,
121
+ message,
122
+ ts: now,
123
+ ...(clockSkew ? { clockSkew: true } : {}),
124
+ ...(waiversApplied.length > 0 ? { waivers: waiversApplied } : {}),
125
+ };
126
+ }
127
+ function blockedVerdict(now, trigger, scope, configHash) {
128
+ const blocked = [appendFailedFinding()];
129
+ const blockedId = makeVerdictId(now, trigger, scope, "block", blocked, [], configHash);
130
+ return {
131
+ decision: "block",
132
+ findings: blocked,
133
+ message: buildMessage("block", blocked, blockedId),
134
+ eventId: blockedId,
135
+ waiversApplied: [],
136
+ };
137
+ }
138
+ // SPEC §4.3.3: pure evaluation over registered enforcers.
139
+ export function createEngine(enforcers, options = {}) {
140
+ const ordered = [...enforcers].sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0);
141
+ const store = options.waiverStore ?? DEFAULT_WAIVER_STORE;
142
+ const append = options.append ??
143
+ (() => Promise.resolve(ok(undefined)));
144
+ const configHash = options.configHash ?? "unknown";
145
+ const packs = options.packs ?? {};
146
+ // Per-engine memory for EC-15 skew detection: closure state, never
147
+ // module-level, so engines stay independent (CONVENTIONS determinism).
148
+ // It never leaks into the verdict, which stays a pure function of its
149
+ // inputs (SPEC §4.3.6).
150
+ let lastNow;
151
+ return {
152
+ evaluate: async (trigger, scope, now) => {
153
+ const clockSkew = lastNow !== undefined && now < lastNow;
154
+ if (lastNow === undefined || now > lastNow) {
155
+ lastNow = now;
156
+ }
157
+ const ctx = { trigger, scope, now, configHash };
158
+ const { kept, waiversApplied } = await collectFindings(ordered, ctx, store);
159
+ const decision = decideDecision(kept, trigger);
160
+ const eventId = makeVerdictId(now, trigger, scope, decision, kept, waiversApplied, configHash);
161
+ const message = buildMessage(decision, kept, eventId);
162
+ const event = buildVerdictEvent(trigger, now, decision, kept, waiversApplied, configHash, packs, message, clockSkew);
163
+ const appended = await append(event);
164
+ if (!appended.ok) {
165
+ return blockedVerdict(now, trigger, scope, configHash);
166
+ }
167
+ return { decision, findings: kept, message, eventId, waiversApplied };
168
+ },
169
+ };
170
+ }
@@ -0,0 +1,21 @@
1
+ import type { CheckContext, Decision, Enforcer, Finding, Instant, Result, Scope, Trigger } from "../../kernel/index.ts";
2
+ import type { EngineOptions } from "./evaluate.ts";
3
+ import { DEFAULT_WAIVER_STORE, MAX_WAIVER_DAYS, type Waiver, type WaiverStore } from "./waivers.ts";
4
+ export { TRIGGERS } from "../../kernel/index.ts";
5
+ export type { CheckContext, Decision, Enforcer, EngineOptions, Finding, Result, Scope, Trigger, Waiver, WaiverStore, };
6
+ export { DEFAULT_WAIVER_STORE, MAX_WAIVER_DAYS };
7
+ export interface Verdict {
8
+ readonly decision: Decision;
9
+ readonly findings: ReadonlyArray<Finding>;
10
+ readonly message: string;
11
+ readonly eventId: string;
12
+ readonly waiversApplied: ReadonlyArray<string>;
13
+ }
14
+ export interface Engine {
15
+ readonly evaluate: (trigger: Trigger, scope: Scope, now: Instant) => Promise<Verdict>;
16
+ }
17
+ export declare function createEngine(enforcers: ReadonlyArray<Enforcer>, options?: EngineOptions): Engine;
18
+ export declare function buildMessage(decision: Decision, findings: ReadonlyArray<Finding>, eventId: string): string;
19
+ export declare function isWaived(ruleId: string, path: string, now: Instant, store?: WaiverStore): Promise<Result<boolean>>;
20
+ export declare function matchWaivers(store: WaiverStore, ruleId: string, path: string, now: Instant): Result<ReadonlyArray<Waiver>>;
21
+ export { compareRatchet } from "./ratchet.ts";
@@ -0,0 +1,24 @@
1
+ import { createEngine as createEngineImpl } from "./evaluate.js";
2
+ import { buildMessage as buildMessageImpl } from "./message.js";
3
+ import { DEFAULT_WAIVER_STORE, isWaived as isWaivedImpl, MAX_WAIVER_DAYS, matchWaivers as matchWaiversImpl, } from "./waivers.js";
4
+ export { TRIGGERS } from "../../kernel/index.js";
5
+ export { DEFAULT_WAIVER_STORE, MAX_WAIVER_DAYS };
6
+ // SPEC §4.3.3: pure evaluation over registered enforcers.
7
+ export function createEngine(enforcers, options = {}) {
8
+ return createEngineImpl(enforcers, options);
9
+ }
10
+ // SPEC §4.3.7: the agent-facing verdict text inside its byte budget.
11
+ export function buildMessage(decision, findings, eventId) {
12
+ return buildMessageImpl(decision, findings, eventId);
13
+ }
14
+ // SPEC §4.3.4: waiver lookup for the verdict path.
15
+ export function isWaived(ruleId, path, now, store = DEFAULT_WAIVER_STORE) {
16
+ return isWaivedImpl(ruleId, path, now, store);
17
+ }
18
+ // SPEC §4.3.4: the waivers suppressing a finding, or CDX-E103 for a floor
19
+ // rule waiver.
20
+ export function matchWaivers(store, ruleId, path, now) {
21
+ return matchWaiversImpl(store, ruleId, path, now);
22
+ }
23
+ // SPEC §4.3.5: ratchet comparison against the baseline.
24
+ export { compareRatchet } from "./ratchet.js";
@@ -0,0 +1,3 @@
1
+ import type { Decision, Finding } from "./index.ts";
2
+ export declare const MAX_MESSAGE_BYTES = 1200;
3
+ export declare function buildMessage(decision: Decision, findings: ReadonlyArray<Finding>, eventId: string): string;
@@ -0,0 +1,69 @@
1
+ // SPEC §4.3.7: the agent-facing verdict text. E2 covers the block shape
2
+ // the §4.3 EC rows assert (rule names, Why, Do instead, the count line);
3
+ // the full message budget copy lands with step 4.8.
4
+ import { redactSecrets } from "../../kernel/index.js";
5
+ // SPEC §4.3.7: the agent message stays inside 1,200 bytes.
6
+ export const MAX_MESSAGE_BYTES = 1200;
7
+ function byteLength(text) {
8
+ return new TextEncoder().encode(text).length;
9
+ }
10
+ function truncateUtf8(text, maxBytes) {
11
+ const bytes = new TextEncoder().encode(text);
12
+ if (bytes.length <= maxBytes) {
13
+ return text;
14
+ }
15
+ let cut = maxBytes;
16
+ while (cut > 0) {
17
+ const byte = bytes[cut];
18
+ if (byte === undefined || (byte & 0xc0) !== 0x80) {
19
+ break;
20
+ }
21
+ cut -= 1;
22
+ }
23
+ return new TextDecoder().decode(bytes.subarray(0, cut));
24
+ }
25
+ function ruleIdsOf(findings) {
26
+ const seen = new Set();
27
+ for (const finding of findings) {
28
+ seen.add(finding.ruleId);
29
+ }
30
+ return [...seen].sort();
31
+ }
32
+ // SPEC §4.3.7: at most the first three findings render in full, then a
33
+ // count line for the rest.
34
+ export function buildMessage(decision, findings, eventId) {
35
+ const verb = decision === "allow"
36
+ ? "allowed"
37
+ : decision === "advise"
38
+ ? "flagged for review"
39
+ : "blocked";
40
+ if (findings.length === 0) {
41
+ return redactSecrets(`Codictator ${verb} this: no findings remain. (event ${eventId})`);
42
+ }
43
+ const rules = ruleIdsOf(findings);
44
+ const detail = [];
45
+ for (const finding of findings.slice(0, 3)) {
46
+ detail.push(`- [${finding.ruleId}] Why: ${finding.message}`);
47
+ detail.push(` Do instead: ${finding.remediation}`);
48
+ }
49
+ const lines = [`Codictator ${verb} this: ${rules.join(", ")}`, ...detail];
50
+ if (findings.length > 3) {
51
+ lines.push(`and ${findings.length - 3} more — codictator verify`);
52
+ }
53
+ lines.push(`More: codictator explain ${rules[0] ?? "unknown"} (event ${eventId})`);
54
+ // SPEC §4.3.9 EC-14: the message is redacted by the kernel; findings
55
+ // stay raw so remediation keeps its data.
56
+ let message = redactSecrets(lines.join("\n"));
57
+ if (byteLength(message) > MAX_MESSAGE_BYTES) {
58
+ const trimmed = lines.slice(0, 1);
59
+ if (findings.length > 3) {
60
+ trimmed.push(`and ${findings.length} more — codictator verify`);
61
+ }
62
+ trimmed.push(lines[lines.length - 1] ?? "");
63
+ message = redactSecrets(trimmed.join("\n"));
64
+ }
65
+ if (byteLength(message) > MAX_MESSAGE_BYTES) {
66
+ message = `${truncateUtf8(message, MAX_MESSAGE_BYTES - 20)}[truncated]`;
67
+ }
68
+ return message;
69
+ }
@@ -0,0 +1 @@
1
+ export declare function compareRatchet(baseline: Readonly<Record<string, number>>, current: Readonly<Record<string, number>>): ReadonlyArray<string>;
@@ -0,0 +1,63 @@
1
+ // SPEC §4.3.5: a count above its baseline blocks — worse than recorded.
2
+ // Counts at or below baseline pass as recorded debt.
3
+ function keysAboveBaseline(baseline, current) {
4
+ const violations = [];
5
+ for (const key of Object.keys(baseline).sort()) {
6
+ if (!Object.hasOwn(current, key)) {
7
+ continue;
8
+ }
9
+ const before = baseline[key] ?? 0;
10
+ const now = current[key] ?? 0;
11
+ if (now > before) {
12
+ violations.push(key);
13
+ }
14
+ }
15
+ return violations;
16
+ }
17
+ // SPEC §4.3.5: deleted files drop their keys. Each dropped key lends its
18
+ // count so a pure rename can move it (same normalised content, same count).
19
+ function droppedCounts(baseline, current) {
20
+ const dropped = new Map();
21
+ for (const key of Object.keys(baseline).sort()) {
22
+ if (Object.hasOwn(current, key)) {
23
+ continue;
24
+ }
25
+ const before = baseline[key] ?? 0;
26
+ if (before > 0) {
27
+ dropped.set(before, (dropped.get(before) ?? 0) + 1);
28
+ }
29
+ }
30
+ return dropped;
31
+ }
32
+ // SPEC §4.3.5: a key absent from the baseline with a count above zero is a
33
+ // candidate block.
34
+ function keysAbsentFromBaseline(baseline, current) {
35
+ const added = [];
36
+ for (const key of Object.keys(current).sort()) {
37
+ if (Object.hasOwn(baseline, key)) {
38
+ continue;
39
+ }
40
+ const count = current[key] ?? 0;
41
+ if (count > 0) {
42
+ added.push({ key, count });
43
+ }
44
+ }
45
+ return added;
46
+ }
47
+ // SPEC §4.3.5: ratchet comparison against the baseline. A pure rename (same
48
+ // normalised content) moves its keys and is not touched, so each dropped
49
+ // key cancels one added key with the same count; count equality is the only
50
+ // move signal this pure comparison has. Every other added key blocks.
51
+ export function compareRatchet(baseline, current) {
52
+ const violations = keysAboveBaseline(baseline, current);
53
+ const dropped = droppedCounts(baseline, current);
54
+ for (const entry of keysAbsentFromBaseline(baseline, current)) {
55
+ const spare = dropped.get(entry.count) ?? 0;
56
+ if (spare > 0) {
57
+ dropped.set(entry.count, spare - 1);
58
+ continue;
59
+ }
60
+ violations.push(entry.key);
61
+ }
62
+ return violations.sort();
63
+ }
@@ -0,0 +1,4 @@
1
+ import type { CheckContext, Enforcer, Finding } from "./index.ts";
2
+ export declare function runEnforcer(enforcer: Enforcer, ctx: CheckContext): Promise<Array<Finding>>;
3
+ export declare function sortFindings(findings: Array<Finding>): Array<Finding>;
4
+ export declare function appendFailedFinding(): Finding;
@@ -0,0 +1,82 @@
1
+ function failFinding(enforcerId, code, detail, remediation) {
2
+ return {
3
+ ruleId: enforcerId,
4
+ code,
5
+ message: `the guard "${enforcerId}" ${detail}; the code was not judged`,
6
+ remediation,
7
+ };
8
+ }
9
+ // SPEC §4.3.8: a throw is CDX-E901, unless the enforcer threw its CdxError
10
+ // for unavailable data, which is CDX-E903.
11
+ function thrownCode(error) {
12
+ if (typeof error === "object" && error !== null && "code" in error) {
13
+ const code = error.code;
14
+ if (code === "CDX-E903") {
15
+ return "CDX-E903";
16
+ }
17
+ }
18
+ return "CDX-E901";
19
+ }
20
+ const TIMED_OUT = { timedOut: true };
21
+ function withBudget(pending, budgetMs) {
22
+ let timer;
23
+ const timeout = new Promise((_resolve, reject) => {
24
+ timer = setTimeout(() => {
25
+ reject(TIMED_OUT);
26
+ }, budgetMs);
27
+ });
28
+ return Promise.race([pending, timeout]).finally(() => {
29
+ if (timer !== undefined) {
30
+ clearTimeout(timer);
31
+ }
32
+ });
33
+ }
34
+ export async function runEnforcer(enforcer, ctx) {
35
+ let pending;
36
+ try {
37
+ // Rule params arrive with the pack registry (phase 5); E2 runs
38
+ // enforcers with an empty param set.
39
+ pending = enforcer.check(ctx, {});
40
+ }
41
+ catch (error) {
42
+ return [
43
+ failFinding(enforcer.id, thrownCode(error), "failed with CDX-E901", "Fix the guard or retry the hook, then run codictator verify."),
44
+ ];
45
+ }
46
+ try {
47
+ return await withBudget(pending, enforcer.budgetMs);
48
+ }
49
+ catch (error) {
50
+ if (error === TIMED_OUT) {
51
+ return [
52
+ failFinding(enforcer.id, "CDX-E902", `exceeded its ${enforcer.budgetMs} ms budget (CDX-E902)`, "Give the guard a larger budget or a smaller scope, then retry."),
53
+ ];
54
+ }
55
+ return [
56
+ failFinding(enforcer.id, thrownCode(error), "failed with CDX-E901", "Fix the guard or retry the hook, then run codictator verify."),
57
+ ];
58
+ }
59
+ }
60
+ export function sortFindings(findings) {
61
+ return [...findings].sort(compareFindings);
62
+ }
63
+ function compareText(a, b) {
64
+ return a < b ? -1 : a > b ? 1 : 0;
65
+ }
66
+ function compareFindingPaths(a, b) {
67
+ return compareText(a.path ?? "", b.path ?? "");
68
+ }
69
+ function compareFindingContent(a, b) {
70
+ if ((a.line ?? 0) !== (b.line ?? 0)) {
71
+ return (a.line ?? 0) - (b.line ?? 0);
72
+ }
73
+ return compareText(a.message, b.message);
74
+ }
75
+ function compareFindings(a, b) {
76
+ return (compareText(a.ruleId, b.ruleId) ||
77
+ compareFindingPaths(a, b) ||
78
+ compareFindingContent(a, b));
79
+ }
80
+ export function appendFailedFinding() {
81
+ return failFinding("core/engine", "CDX-E801", "could not record its verdict event (CDX-E801)", "Free disk space and fix permissions on .codictator/state/, then retry.");
82
+ }