codictator 0.0.0-stage → 0.1.2

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 (835) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +4 -2
  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/violating/basic/case.json +10 -0
  189. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/basic/case.json +10 -0
  190. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/host-provided/case.json +10 -0
  191. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/basic/case.json +10 -0
  192. package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/host-provided/case.json +10 -0
  193. package/dist/builtin-packs/typescript/fixtures/security-patterns/passing/basic/case.json +10 -0
  194. package/dist/builtin-packs/typescript/fixtures/security-patterns/violating/basic/case.json +10 -0
  195. package/dist/builtin-packs/typescript/fixtures/typecheck/passing/basic/case.json +10 -0
  196. package/dist/builtin-packs/typescript/fixtures/typecheck/violating/basic/case.json +10 -0
  197. package/dist/builtin-packs/typescript/index.ts +85 -0
  198. package/dist/builtin-packs/typescript/lex.ts +199 -0
  199. package/dist/builtin-packs/typescript/measures-exports.ts +173 -0
  200. package/dist/builtin-packs/typescript/measures-functions.ts +138 -0
  201. package/dist/builtin-packs/typescript/measures.ts +10 -0
  202. package/dist/builtin-packs/typescript/naming.ts +47 -0
  203. package/dist/builtin-packs/typescript/pack.json +169 -0
  204. package/dist/builtin-packs/typescript/patterns.ts +93 -0
  205. package/dist/builtin-packs/typescript/resolve.ts +224 -0
  206. package/dist/builtin-packs/typescript/strict.ts +177 -0
  207. package/dist/builtin-packs/typescript/titles.ts +184 -0
  208. package/dist/cli/baseline.d.ts +3 -0
  209. package/dist/cli/baseline.js +67 -0
  210. package/dist/cli/ci-bot-change.d.ts +3 -0
  211. package/dist/cli/ci-bot-change.js +54 -0
  212. package/dist/cli/ci-range.d.ts +18 -0
  213. package/dist/cli/ci-range.js +228 -0
  214. package/dist/cli/ci-summary.d.ts +3 -0
  215. package/dist/cli/ci-summary.js +45 -0
  216. package/dist/cli/ci.d.ts +4 -0
  217. package/dist/cli/ci.js +195 -0
  218. package/dist/cli/commands.d.ts +5 -0
  219. package/dist/cli/commands.js +39 -0
  220. package/dist/cli/deps.d.ts +3 -0
  221. package/dist/cli/deps.js +115 -0
  222. package/dist/cli/drift.d.ts +11 -0
  223. package/dist/cli/drift.js +91 -0
  224. package/dist/cli/evaluate.d.ts +20 -0
  225. package/dist/cli/evaluate.js +213 -0
  226. package/dist/cli/gate-scope.d.ts +10 -0
  227. package/dist/cli/gate-scope.js +82 -0
  228. package/dist/cli/git-hook.d.ts +3 -0
  229. package/dist/cli/git-hook.js +179 -0
  230. package/dist/cli/guardrail.d.ts +5 -0
  231. package/dist/cli/guardrail.js +190 -0
  232. package/dist/cli/index.d.ts +12 -0
  233. package/dist/cli/index.js +198 -0
  234. package/dist/cli/init-plan.d.ts +23 -0
  235. package/dist/cli/init-plan.js +135 -0
  236. package/dist/cli/init.d.ts +3 -0
  237. package/dist/cli/init.js +122 -0
  238. package/dist/cli/inspect-status.d.ts +8 -0
  239. package/dist/cli/inspect-status.js +164 -0
  240. package/dist/cli/inspect.d.ts +5 -0
  241. package/dist/cli/inspect.js +98 -0
  242. package/dist/cli/main.d.ts +2 -0
  243. package/dist/cli/main.js +60 -0
  244. package/dist/cli/pack-adapters.d.ts +3 -0
  245. package/dist/cli/pack-adapters.js +81 -0
  246. package/dist/cli/packs.d.ts +6 -0
  247. package/dist/cli/packs.js +131 -0
  248. package/dist/cli/plan-launcher.d.ts +1 -0
  249. package/dist/cli/plan-launcher.js +222 -0
  250. package/dist/cli/plan.d.ts +25 -0
  251. package/dist/cli/plan.js +121 -0
  252. package/dist/cli/proofs-test.d.ts +3 -0
  253. package/dist/cli/proofs-test.js +77 -0
  254. package/dist/cli/proofs.d.ts +3 -0
  255. package/dist/cli/proofs.js +168 -0
  256. package/dist/cli/remediation.d.ts +3 -0
  257. package/dist/cli/remediation.js +107 -0
  258. package/dist/cli/report.d.ts +4 -0
  259. package/dist/cli/report.js +93 -0
  260. package/dist/cli/serve-eval.d.ts +2 -0
  261. package/dist/cli/serve-eval.js +165 -0
  262. package/dist/cli/serve-log.d.ts +2 -0
  263. package/dist/cli/serve-log.js +150 -0
  264. package/dist/cli/serve-methods.d.ts +2 -0
  265. package/dist/cli/serve-methods.js +181 -0
  266. package/dist/cli/serve-protocol.d.ts +35 -0
  267. package/dist/cli/serve-protocol.js +97 -0
  268. package/dist/cli/serve-run.d.ts +9 -0
  269. package/dist/cli/serve-run.js +135 -0
  270. package/dist/cli/serve-server.d.ts +5 -0
  271. package/dist/cli/serve-server.js +120 -0
  272. package/dist/cli/serve-shared.d.ts +34 -0
  273. package/dist/cli/serve-shared.js +20 -0
  274. package/dist/cli/serve-status.d.ts +2 -0
  275. package/dist/cli/serve-status.js +130 -0
  276. package/dist/cli/serve-transport.d.ts +2 -0
  277. package/dist/cli/serve-transport.js +114 -0
  278. package/dist/cli/shared.d.ts +35 -0
  279. package/dist/cli/shared.js +181 -0
  280. package/dist/cli/task-advance.d.ts +3 -0
  281. package/dist/cli/task-advance.js +144 -0
  282. package/dist/cli/task-phases.d.ts +3 -0
  283. package/dist/cli/task-phases.js +77 -0
  284. package/dist/cli/tasks.d.ts +12 -0
  285. package/dist/cli/tasks.js +176 -0
  286. package/dist/cli/transparency.d.ts +4 -0
  287. package/dist/cli/transparency.js +197 -0
  288. package/dist/cli/waivers.d.ts +3 -0
  289. package/dist/cli/waivers.js +195 -0
  290. package/dist/features/adapters/claude-code.d.ts +8 -0
  291. package/dist/features/adapters/claude-code.js +198 -0
  292. package/dist/features/adapters/claude-shaped.d.ts +3 -0
  293. package/dist/features/adapters/claude-shaped.js +176 -0
  294. package/dist/features/adapters/codex-cli.d.ts +8 -0
  295. package/dist/features/adapters/codex-cli.js +180 -0
  296. package/dist/features/adapters/contract.d.ts +104 -0
  297. package/dist/features/adapters/contract.js +17 -0
  298. package/dist/features/adapters/copilot-capabilities.d.ts +2 -0
  299. package/dist/features/adapters/copilot-capabilities.js +46 -0
  300. package/dist/features/adapters/copilot.d.ts +8 -0
  301. package/dist/features/adapters/copilot.js +207 -0
  302. package/dist/features/adapters/cursor.d.ts +8 -0
  303. package/dist/features/adapters/cursor.js +245 -0
  304. package/dist/features/adapters/custom-event.d.ts +3 -0
  305. package/dist/features/adapters/custom-event.js +180 -0
  306. package/dist/features/adapters/custom-load.d.ts +3 -0
  307. package/dist/features/adapters/custom-load.js +185 -0
  308. package/dist/features/adapters/custom-shape.d.ts +21 -0
  309. package/dist/features/adapters/custom-shape.js +87 -0
  310. package/dist/features/adapters/custom.d.ts +9 -0
  311. package/dist/features/adapters/custom.js +130 -0
  312. package/dist/features/adapters/effective-cache.d.ts +5 -0
  313. package/dist/features/adapters/effective-cache.js +45 -0
  314. package/dist/features/adapters/gemini-cli.d.ts +6 -0
  315. package/dist/features/adapters/gemini-cli.js +160 -0
  316. package/dist/features/adapters/gemini-tables.d.ts +7 -0
  317. package/dist/features/adapters/gemini-tables.js +104 -0
  318. package/dist/features/adapters/hook-dispatch.d.ts +7 -0
  319. package/dist/features/adapters/hook-dispatch.js +97 -0
  320. package/dist/features/adapters/hook-injection.d.ts +12 -0
  321. package/dist/features/adapters/hook-injection.js +75 -0
  322. package/dist/features/adapters/hook-load.d.ts +15 -0
  323. package/dist/features/adapters/hook-load.js +152 -0
  324. package/dist/features/adapters/hook-scope.d.ts +3 -0
  325. package/dist/features/adapters/hook-scope.js +54 -0
  326. package/dist/features/adapters/index.d.ts +22 -0
  327. package/dist/features/adapters/index.js +86 -0
  328. package/dist/features/adapters/muse-code.d.ts +8 -0
  329. package/dist/features/adapters/muse-code.js +223 -0
  330. package/dist/features/adapters/opencode-bridge.d.ts +1 -0
  331. package/dist/features/adapters/opencode-bridge.js +230 -0
  332. package/dist/features/adapters/opencode-capabilities.d.ts +2 -0
  333. package/dist/features/adapters/opencode-capabilities.js +47 -0
  334. package/dist/features/adapters/opencode-parse.d.ts +3 -0
  335. package/dist/features/adapters/opencode-parse.js +137 -0
  336. package/dist/features/adapters/opencode-tables.d.ts +5 -0
  337. package/dist/features/adapters/opencode-tables.js +63 -0
  338. package/dist/features/adapters/opencode.d.ts +10 -0
  339. package/dist/features/adapters/opencode.js +97 -0
  340. package/dist/features/adapters/runtime.d.ts +25 -0
  341. package/dist/features/adapters/runtime.js +148 -0
  342. package/dist/features/adapters/universal.d.ts +7 -0
  343. package/dist/features/adapters/universal.js +89 -0
  344. package/dist/features/arch/arch-profiles.d.ts +3 -0
  345. package/dist/features/arch/arch-profiles.js +5 -0
  346. package/dist/features/arch/checks.d.ts +25 -0
  347. package/dist/features/arch/checks.js +173 -0
  348. package/dist/features/arch/codictator-modules.d.ts +4 -0
  349. package/dist/features/arch/codictator-modules.js +180 -0
  350. package/dist/features/arch/cycle-walk.d.ts +1 -0
  351. package/dist/features/arch/cycle-walk.js +36 -0
  352. package/dist/features/arch/edge-checks.d.ts +13 -0
  353. package/dist/features/arch/edge-checks.js +186 -0
  354. package/dist/features/arch/graph.d.ts +32 -0
  355. package/dist/features/arch/graph.js +202 -0
  356. package/dist/features/arch/index.d.ts +29 -0
  357. package/dist/features/arch/index.js +16 -0
  358. package/dist/features/arch/layer-rules.d.ts +3 -0
  359. package/dist/features/arch/layer-rules.js +38 -0
  360. package/dist/features/arch/module-map-validation.d.ts +3 -0
  361. package/dist/features/arch/module-map-validation.js +30 -0
  362. package/dist/features/arch/module-mapping.d.ts +15 -0
  363. package/dist/features/arch/module-mapping.js +184 -0
  364. package/dist/features/arch/profiles.d.ts +4 -0
  365. package/dist/features/arch/profiles.js +8 -0
  366. package/dist/features/audit/append.d.ts +26 -0
  367. package/dist/features/audit/append.js +205 -0
  368. package/dist/features/audit/explain-table-tail.d.ts +2 -0
  369. package/dist/features/audit/explain-table-tail.js +29 -0
  370. package/dist/features/audit/explain-table.d.ts +8 -0
  371. package/dist/features/audit/explain-table.js +48 -0
  372. package/dist/features/audit/explain.d.ts +7 -0
  373. package/dist/features/audit/explain.js +87 -0
  374. package/dist/features/audit/index.d.ts +37 -0
  375. package/dist/features/audit/index.js +17 -0
  376. package/dist/features/audit/injection-event.d.ts +11 -0
  377. package/dist/features/audit/injection-event.js +17 -0
  378. package/dist/features/audit/read.d.ts +8 -0
  379. package/dist/features/audit/read.js +62 -0
  380. package/dist/features/audit/summarize.d.ts +1 -0
  381. package/dist/features/audit/summarize.js +41 -0
  382. package/dist/features/audit/surfaces.d.ts +47 -0
  383. package/dist/features/audit/surfaces.js +165 -0
  384. package/dist/features/audit/token-saver-evidence.d.ts +14 -0
  385. package/dist/features/audit/token-saver-evidence.js +85 -0
  386. package/dist/features/ci/changes.d.ts +28 -0
  387. package/dist/features/ci/changes.js +88 -0
  388. package/dist/features/ci/index.d.ts +22 -0
  389. package/dist/features/ci/index.js +75 -0
  390. package/dist/features/ci/protection-read.d.ts +3 -0
  391. package/dist/features/ci/protection-read.js +264 -0
  392. package/dist/features/ci/protection.d.ts +25 -0
  393. package/dist/features/ci/protection.js +77 -0
  394. package/dist/features/ci/workflow.d.ts +23 -0
  395. package/dist/features/ci/workflow.js +261 -0
  396. package/dist/features/config/human.d.ts +4 -0
  397. package/dist/features/config/human.js +31 -0
  398. package/dist/features/config/index.d.ts +37 -0
  399. package/dist/features/config/index.js +129 -0
  400. package/dist/features/config/pack-data.d.ts +18 -0
  401. package/dist/features/config/pack-data.js +116 -0
  402. package/dist/features/config/validate-sections.d.ts +6 -0
  403. package/dist/features/config/validate-sections.js +198 -0
  404. package/dist/features/config/validate-shared.d.ts +8 -0
  405. package/dist/features/config/validate-shared.js +69 -0
  406. package/dist/features/config/validate-tunables.d.ts +1 -0
  407. package/dist/features/config/validate-tunables.js +89 -0
  408. package/dist/features/config/validate.d.ts +2 -0
  409. package/dist/features/config/validate.js +57 -0
  410. package/dist/features/deps/bots.d.ts +5 -0
  411. package/dist/features/deps/bots.js +39 -0
  412. package/dist/features/deps/capabilities.d.ts +3 -0
  413. package/dist/features/deps/capabilities.js +91 -0
  414. package/dist/features/deps/check.d.ts +18 -0
  415. package/dist/features/deps/check.js +70 -0
  416. package/dist/features/deps/dependabot.d.ts +10 -0
  417. package/dist/features/deps/dependabot.js +154 -0
  418. package/dist/features/deps/eval.d.ts +41 -0
  419. package/dist/features/deps/eval.js +24 -0
  420. package/dist/features/deps/fields.d.ts +4 -0
  421. package/dist/features/deps/fields.js +18 -0
  422. package/dist/features/deps/index.d.ts +67 -0
  423. package/dist/features/deps/index.js +27 -0
  424. package/dist/features/deps/lockfile.d.ts +8 -0
  425. package/dist/features/deps/lockfile.js +87 -0
  426. package/dist/features/deps/npm.d.ts +22 -0
  427. package/dist/features/deps/npm.js +172 -0
  428. package/dist/features/deps/npmrc.d.ts +12 -0
  429. package/dist/features/deps/npmrc.js +50 -0
  430. package/dist/features/deps/nuget.d.ts +25 -0
  431. package/dist/features/deps/nuget.js +112 -0
  432. package/dist/features/deps/osv-ranges.d.ts +12 -0
  433. package/dist/features/deps/osv-ranges.js +83 -0
  434. package/dist/features/deps/osv.d.ts +16 -0
  435. package/dist/features/deps/osv.js +144 -0
  436. package/dist/features/deps/pypi-pyproject.d.ts +7 -0
  437. package/dist/features/deps/pypi-pyproject.js +118 -0
  438. package/dist/features/deps/pypi.d.ts +29 -0
  439. package/dist/features/deps/pypi.js +137 -0
  440. package/dist/features/deps/registry.d.ts +29 -0
  441. package/dist/features/deps/registry.js +147 -0
  442. package/dist/features/deps/renovate.d.ts +15 -0
  443. package/dist/features/deps/renovate.js +98 -0
  444. package/dist/features/deps/selection.d.ts +20 -0
  445. package/dist/features/deps/selection.js +150 -0
  446. package/dist/features/deps/snapshot-verdicts.d.ts +16 -0
  447. package/dist/features/deps/snapshot-verdicts.js +184 -0
  448. package/dist/features/deps/stable.d.ts +19 -0
  449. package/dist/features/deps/stable.js +106 -0
  450. package/dist/features/deps/step-size.d.ts +7 -0
  451. package/dist/features/deps/step-size.js +24 -0
  452. package/dist/features/deps/upgrade.d.ts +35 -0
  453. package/dist/features/deps/upgrade.js +114 -0
  454. package/dist/features/deps/verdicts.d.ts +21 -0
  455. package/dist/features/deps/verdicts.js +219 -0
  456. package/dist/features/engine/evaluate.d.ts +12 -0
  457. package/dist/features/engine/evaluate.js +165 -0
  458. package/dist/features/engine/index.d.ts +21 -0
  459. package/dist/features/engine/index.js +24 -0
  460. package/dist/features/engine/message.d.ts +3 -0
  461. package/dist/features/engine/message.js +69 -0
  462. package/dist/features/engine/ratchet.d.ts +1 -0
  463. package/dist/features/engine/ratchet.js +63 -0
  464. package/dist/features/engine/run-enforcer.d.ts +4 -0
  465. package/dist/features/engine/run-enforcer.js +82 -0
  466. package/dist/features/engine/waivers.d.ts +23 -0
  467. package/dist/features/engine/waivers.js +169 -0
  468. package/dist/features/generator/draft.d.ts +7 -0
  469. package/dist/features/generator/draft.js +148 -0
  470. package/dist/features/generator/index.d.ts +22 -0
  471. package/dist/features/generator/index.js +8 -0
  472. package/dist/features/generator/llm-draft.d.ts +3 -0
  473. package/dist/features/generator/llm-draft.js +93 -0
  474. package/dist/features/generator/prompt.d.ts +25 -0
  475. package/dist/features/generator/prompt.js +105 -0
  476. package/dist/features/generator/self-test.d.ts +12 -0
  477. package/dist/features/generator/self-test.js +65 -0
  478. package/dist/features/generator/templates.d.ts +26 -0
  479. package/dist/features/generator/templates.js +177 -0
  480. package/dist/features/integrity/drift.d.ts +19 -0
  481. package/dist/features/integrity/drift.js +168 -0
  482. package/dist/features/integrity/hooks.d.ts +19 -0
  483. package/dist/features/integrity/hooks.js +54 -0
  484. package/dist/features/integrity/index.d.ts +10 -0
  485. package/dist/features/integrity/index.js +14 -0
  486. package/dist/features/integrity/manifest.d.ts +15 -0
  487. package/dist/features/integrity/manifest.js +26 -0
  488. package/dist/features/integrity/self-protection.d.ts +12 -0
  489. package/dist/features/integrity/self-protection.js +144 -0
  490. package/dist/features/llm/attempt.d.ts +17 -0
  491. package/dist/features/llm/attempt.js +99 -0
  492. package/dist/features/llm/errors.d.ts +5 -0
  493. package/dist/features/llm/errors.js +18 -0
  494. package/dist/features/llm/index.d.ts +23 -0
  495. package/dist/features/llm/index.js +46 -0
  496. package/dist/features/llm/presets.d.ts +25 -0
  497. package/dist/features/llm/presets.js +159 -0
  498. package/dist/features/llm/wire.d.ts +17 -0
  499. package/dist/features/llm/wire.js +163 -0
  500. package/dist/features/packs/accept.d.ts +7 -0
  501. package/dist/features/packs/accept.js +73 -0
  502. package/dist/features/packs/enforcers/arch-guards.d.ts +12 -0
  503. package/dist/features/packs/enforcers/arch-guards.js +193 -0
  504. package/dist/features/packs/enforcers/binding.d.ts +31 -0
  505. package/dist/features/packs/enforcers/binding.js +157 -0
  506. package/dist/features/packs/enforcers/ci-guards.d.ts +10 -0
  507. package/dist/features/packs/enforcers/ci-guards.js +128 -0
  508. package/dist/features/packs/enforcers/code-health.d.ts +9 -0
  509. package/dist/features/packs/enforcers/code-health.js +180 -0
  510. package/dist/features/packs/enforcers/code.d.ts +5 -0
  511. package/dist/features/packs/enforcers/code.js +128 -0
  512. package/dist/features/packs/enforcers/command-forbid.d.ts +8 -0
  513. package/dist/features/packs/enforcers/command-forbid.js +61 -0
  514. package/dist/features/packs/enforcers/deps-guards.d.ts +15 -0
  515. package/dist/features/packs/enforcers/deps-guards.js +235 -0
  516. package/dist/features/packs/enforcers/deps-policy-guards.d.ts +9 -0
  517. package/dist/features/packs/enforcers/deps-policy-guards.js +135 -0
  518. package/dist/features/packs/enforcers/docs-guards-measures.d.ts +9 -0
  519. package/dist/features/packs/enforcers/docs-guards-measures.js +117 -0
  520. package/dist/features/packs/enforcers/docs-guards.d.ts +11 -0
  521. package/dist/features/packs/enforcers/docs-guards.js +180 -0
  522. package/dist/features/packs/enforcers/external-attribute.d.ts +18 -0
  523. package/dist/features/packs/enforcers/external-attribute.js +122 -0
  524. package/dist/features/packs/enforcers/external-bind.d.ts +4 -0
  525. package/dist/features/packs/enforcers/external-bind.js +172 -0
  526. package/dist/features/packs/enforcers/external-check.d.ts +7 -0
  527. package/dist/features/packs/enforcers/external-check.js +131 -0
  528. package/dist/features/packs/enforcers/external-output.d.ts +30 -0
  529. package/dist/features/packs/enforcers/external-output.js +144 -0
  530. package/dist/features/packs/enforcers/external-probe.d.ts +4 -0
  531. package/dist/features/packs/enforcers/external-probe.js +65 -0
  532. package/dist/features/packs/enforcers/external-runs.d.ts +33 -0
  533. package/dist/features/packs/enforcers/external-runs.js +162 -0
  534. package/dist/features/packs/enforcers/external-sarif.d.ts +3 -0
  535. package/dist/features/packs/enforcers/external-sarif.js +103 -0
  536. package/dist/features/packs/enforcers/external.d.ts +39 -0
  537. package/dist/features/packs/enforcers/external.js +11 -0
  538. package/dist/features/packs/enforcers/gate-guards.d.ts +12 -0
  539. package/dist/features/packs/enforcers/gate-guards.js +170 -0
  540. package/dist/features/packs/enforcers/health-abstraction.d.ts +5 -0
  541. package/dist/features/packs/enforcers/health-abstraction.js +126 -0
  542. package/dist/features/packs/enforcers/health-duplication.d.ts +5 -0
  543. package/dist/features/packs/enforcers/health-duplication.js +197 -0
  544. package/dist/features/packs/enforcers/health-lex-imports.d.ts +5 -0
  545. package/dist/features/packs/enforcers/health-lex-imports.js +225 -0
  546. package/dist/features/packs/enforcers/health-lex-template.d.ts +10 -0
  547. package/dist/features/packs/enforcers/health-lex-template.js +67 -0
  548. package/dist/features/packs/enforcers/health-lex.d.ts +8 -0
  549. package/dist/features/packs/enforcers/health-lex.js +227 -0
  550. package/dist/features/packs/enforcers/health-markers.d.ts +3 -0
  551. package/dist/features/packs/enforcers/health-markers.js +31 -0
  552. package/dist/features/packs/enforcers/health-measures.d.ts +24 -0
  553. package/dist/features/packs/enforcers/health-measures.js +214 -0
  554. package/dist/features/packs/enforcers/health-refs.d.ts +6 -0
  555. package/dist/features/packs/enforcers/health-refs.js +61 -0
  556. package/dist/features/packs/enforcers/integrity-guards-repo.d.ts +6 -0
  557. package/dist/features/packs/enforcers/integrity-guards-repo.js +189 -0
  558. package/dist/features/packs/enforcers/integrity-guards.d.ts +12 -0
  559. package/dist/features/packs/enforcers/integrity-guards.js +202 -0
  560. package/dist/features/packs/enforcers/jsonkey.d.ts +13 -0
  561. package/dist/features/packs/enforcers/jsonkey.js +95 -0
  562. package/dist/features/packs/enforcers/parametric.d.ts +7 -0
  563. package/dist/features/packs/enforcers/parametric.js +138 -0
  564. package/dist/features/packs/enforcers/pattern.d.ts +11 -0
  565. package/dist/features/packs/enforcers/pattern.js +88 -0
  566. package/dist/features/packs/enforcers/placement.d.ts +10 -0
  567. package/dist/features/packs/enforcers/placement.js +54 -0
  568. package/dist/features/packs/enforcers/py-checks.d.ts +7 -0
  569. package/dist/features/packs/enforcers/py-checks.js +131 -0
  570. package/dist/features/packs/enforcers/py-lex.d.ts +10 -0
  571. package/dist/features/packs/enforcers/py-lex.js +271 -0
  572. package/dist/features/packs/enforcers/py-phantom.d.ts +6 -0
  573. package/dist/features/packs/enforcers/py-phantom.js +163 -0
  574. package/dist/features/packs/enforcers/py-pins.d.ts +16 -0
  575. package/dist/features/packs/enforcers/py-pins.js +184 -0
  576. package/dist/features/packs/enforcers/py-security-patterns.d.ts +18 -0
  577. package/dist/features/packs/enforcers/py-security-patterns.js +70 -0
  578. package/dist/features/packs/enforcers/records-guards.d.ts +12 -0
  579. package/dist/features/packs/enforcers/records-guards.js +178 -0
  580. package/dist/features/packs/enforcers/remediation-guards.d.ts +6 -0
  581. package/dist/features/packs/enforcers/remediation-guards.js +42 -0
  582. package/dist/features/packs/enforcers/required.d.ts +10 -0
  583. package/dist/features/packs/enforcers/required.js +65 -0
  584. package/dist/features/packs/enforcers/secret-scan.d.ts +22 -0
  585. package/dist/features/packs/enforcers/secret-scan.js +179 -0
  586. package/dist/features/packs/enforcers/shell-analyse.d.ts +14 -0
  587. package/dist/features/packs/enforcers/shell-analyse.js +105 -0
  588. package/dist/features/packs/enforcers/sizes.d.ts +10 -0
  589. package/dist/features/packs/enforcers/sizes.js +82 -0
  590. package/dist/features/packs/enforcers/steering-guards.d.ts +11 -0
  591. package/dist/features/packs/enforcers/steering-guards.js +162 -0
  592. package/dist/features/packs/enforcers/testing-guards.d.ts +10 -0
  593. package/dist/features/packs/enforcers/testing-guards.js +118 -0
  594. package/dist/features/packs/enforcers/ts-checks.d.ts +7 -0
  595. package/dist/features/packs/enforcers/ts-checks.js +101 -0
  596. package/dist/features/packs/enforcers/ts-phantom-host.d.ts +11 -0
  597. package/dist/features/packs/enforcers/ts-phantom-host.js +155 -0
  598. package/dist/features/packs/enforcers/ts-phantom.d.ts +6 -0
  599. package/dist/features/packs/enforcers/ts-phantom.js +117 -0
  600. package/dist/features/packs/enforcers/ts-security-patterns.d.ts +18 -0
  601. package/dist/features/packs/enforcers/ts-security-patterns.js +93 -0
  602. package/dist/features/packs/enforcers/workflow-guards.d.ts +10 -0
  603. package/dist/features/packs/enforcers/workflow-guards.js +117 -0
  604. package/dist/features/packs/enforcers/write-confine.d.ts +13 -0
  605. package/dist/features/packs/enforcers/write-confine.js +131 -0
  606. package/dist/features/packs/hashes.d.ts +6 -0
  607. package/dist/features/packs/hashes.js +84 -0
  608. package/dist/features/packs/index.d.ts +22 -0
  609. package/dist/features/packs/index.js +15 -0
  610. package/dist/features/packs/loader.d.ts +13 -0
  611. package/dist/features/packs/loader.js +205 -0
  612. package/dist/features/packs/manifest.d.ts +17 -0
  613. package/dist/features/packs/manifest.js +180 -0
  614. package/dist/features/packs/params.d.ts +2 -0
  615. package/dist/features/packs/params.js +90 -0
  616. package/dist/features/packs/registry.d.ts +11 -0
  617. package/dist/features/packs/registry.js +136 -0
  618. package/dist/features/packs/selftest.d.ts +3 -0
  619. package/dist/features/packs/selftest.js +127 -0
  620. package/dist/features/records/bug-grammar.d.ts +17 -0
  621. package/dist/features/records/bug-grammar.js +128 -0
  622. package/dist/features/records/bug-registry.d.ts +9 -0
  623. package/dist/features/records/bug-registry.js +67 -0
  624. package/dist/features/records/bug-rows-immutable.d.ts +3 -0
  625. package/dist/features/records/bug-rows-immutable.js +52 -0
  626. package/dist/features/records/bugs.d.ts +2 -0
  627. package/dist/features/records/bugs.js +24 -0
  628. package/dist/features/records/docs-lines.d.ts +16 -0
  629. package/dist/features/records/docs-lines.js +36 -0
  630. package/dist/features/records/docs-prose.d.ts +14 -0
  631. package/dist/features/records/docs-prose.js +252 -0
  632. package/dist/features/records/docs-structure.d.ts +17 -0
  633. package/dist/features/records/docs-structure.js +223 -0
  634. package/dist/features/records/docs.d.ts +9 -0
  635. package/dist/features/records/docs.js +238 -0
  636. package/dist/features/records/history-checks.d.ts +6 -0
  637. package/dist/features/records/history-checks.js +94 -0
  638. package/dist/features/records/history-parse.d.ts +16 -0
  639. package/dist/features/records/history-parse.js +101 -0
  640. package/dist/features/records/history-scope.d.ts +5 -0
  641. package/dist/features/records/history-scope.js +86 -0
  642. package/dist/features/records/history.d.ts +3 -0
  643. package/dist/features/records/history.js +5 -0
  644. package/dist/features/records/index.d.ts +8 -0
  645. package/dist/features/records/index.js +11 -0
  646. package/dist/features/remediation/adoption.d.ts +32 -0
  647. package/dist/features/remediation/adoption.js +131 -0
  648. package/dist/features/remediation/index.d.ts +12 -0
  649. package/dist/features/remediation/index.js +21 -0
  650. package/dist/features/remediation/plan-chains.d.ts +3 -0
  651. package/dist/features/remediation/plan-chains.js +111 -0
  652. package/dist/features/remediation/plan-generate.d.ts +3 -0
  653. package/dist/features/remediation/plan-generate.js +129 -0
  654. package/dist/features/remediation/plan-kinds.d.ts +32 -0
  655. package/dist/features/remediation/plan-kinds.js +42 -0
  656. package/dist/features/remediation/plan-markers.d.ts +2 -0
  657. package/dist/features/remediation/plan-markers.js +155 -0
  658. package/dist/features/remediation/plan-merge.d.ts +6 -0
  659. package/dist/features/remediation/plan-merge.js +33 -0
  660. package/dist/features/remediation/plan.d.ts +4 -0
  661. package/dist/features/remediation/plan.js +7 -0
  662. package/dist/features/remediation/step-floor.d.ts +5 -0
  663. package/dist/features/remediation/step-floor.js +76 -0
  664. package/dist/features/remediation/step-gates.d.ts +18 -0
  665. package/dist/features/remediation/step-gates.js +77 -0
  666. package/dist/features/remediation/step-split.d.ts +12 -0
  667. package/dist/features/remediation/step-split.js +75 -0
  668. package/dist/features/remediation/steps.d.ts +3 -0
  669. package/dist/features/remediation/steps.js +6 -0
  670. package/dist/features/remediation/types.d.ts +37 -0
  671. package/dist/features/remediation/types.js +1 -0
  672. package/dist/features/security/index.d.ts +12 -0
  673. package/dist/features/security/index.js +142 -0
  674. package/dist/features/steering/agent-assets.d.ts +7 -0
  675. package/dist/features/steering/agent-assets.js +75 -0
  676. package/dist/features/steering/budgets.d.ts +20 -0
  677. package/dist/features/steering/budgets.js +86 -0
  678. package/dist/features/steering/checks.d.ts +7 -0
  679. package/dist/features/steering/checks.js +67 -0
  680. package/dist/features/steering/context-file.d.ts +11 -0
  681. package/dist/features/steering/context-file.js +107 -0
  682. package/dist/features/steering/graph-scan.d.ts +7 -0
  683. package/dist/features/steering/graph-scan.js +17 -0
  684. package/dist/features/steering/index.d.ts +30 -0
  685. package/dist/features/steering/index.js +45 -0
  686. package/dist/features/steering/injection.d.ts +23 -0
  687. package/dist/features/steering/injection.js +124 -0
  688. package/dist/features/steering/mcp.d.ts +2 -0
  689. package/dist/features/steering/mcp.js +18 -0
  690. package/dist/features/steering/precedence.d.ts +10 -0
  691. package/dist/features/steering/precedence.js +28 -0
  692. package/dist/features/steering/read-cache.d.ts +13 -0
  693. package/dist/features/steering/read-cache.js +51 -0
  694. package/dist/features/testing/base.d.ts +1 -0
  695. package/dist/features/testing/base.js +8 -0
  696. package/dist/features/testing/covers.d.ts +8 -0
  697. package/dist/features/testing/covers.js +50 -0
  698. package/dist/features/testing/evaluate.d.ts +19 -0
  699. package/dist/features/testing/evaluate.js +47 -0
  700. package/dist/features/testing/index.d.ts +10 -0
  701. package/dist/features/testing/index.js +13 -0
  702. package/dist/features/testing/integrity.d.ts +28 -0
  703. package/dist/features/testing/integrity.js +140 -0
  704. package/dist/features/testing/ledger.d.ts +11 -0
  705. package/dist/features/testing/ledger.js +51 -0
  706. package/dist/features/testing/proofs.d.ts +26 -0
  707. package/dist/features/testing/proofs.js +88 -0
  708. package/dist/features/testing/report.d.ts +6 -0
  709. package/dist/features/testing/report.js +16 -0
  710. package/dist/features/testing/scenarios.d.ts +34 -0
  711. package/dist/features/testing/scenarios.js +90 -0
  712. package/dist/features/testing/tap-parser.d.ts +9 -0
  713. package/dist/features/testing/tap-parser.js +84 -0
  714. package/dist/features/testing/trace.d.ts +23 -0
  715. package/dist/features/testing/trace.js +110 -0
  716. package/dist/features/workflow/index.d.ts +14 -0
  717. package/dist/features/workflow/index.js +19 -0
  718. package/dist/features/workflow/loop.d.ts +5 -0
  719. package/dist/features/workflow/loop.js +36 -0
  720. package/dist/features/workflow/phases.d.ts +10 -0
  721. package/dist/features/workflow/phases.js +181 -0
  722. package/dist/features/workflow/review.d.ts +25 -0
  723. package/dist/features/workflow/review.js +112 -0
  724. package/dist/features/workflow/tasks.d.ts +73 -0
  725. package/dist/features/workflow/tasks.js +80 -0
  726. package/dist/features/workflow/writes.d.ts +8 -0
  727. package/dist/features/workflow/writes.js +96 -0
  728. package/dist/kernel/clock.d.ts +4 -0
  729. package/dist/kernel/clock.js +5 -0
  730. package/dist/kernel/config-keys.d.ts +2 -0
  731. package/dist/kernel/config-keys.js +5 -0
  732. package/dist/kernel/config-toml-keys.d.ts +2 -0
  733. package/dist/kernel/config-toml-keys.js +237 -0
  734. package/dist/kernel/config-yaml-keys.d.ts +2 -0
  735. package/dist/kernel/config-yaml-keys.js +177 -0
  736. package/dist/kernel/contracts.d.ts +76 -0
  737. package/dist/kernel/contracts.js +9 -0
  738. package/dist/kernel/entry.d.ts +1 -0
  739. package/dist/kernel/entry.js +31 -0
  740. package/dist/kernel/env.d.ts +4 -0
  741. package/dist/kernel/env.js +5 -0
  742. package/dist/kernel/errors.d.ts +7 -0
  743. package/dist/kernel/errors.js +6 -0
  744. package/dist/kernel/fs-confine.d.ts +14 -0
  745. package/dist/kernel/fs-confine.js +129 -0
  746. package/dist/kernel/fs-errors.d.ts +8 -0
  747. package/dist/kernel/fs-errors.js +37 -0
  748. package/dist/kernel/fs.d.ts +28 -0
  749. package/dist/kernel/fs.js +245 -0
  750. package/dist/kernel/git.d.ts +16 -0
  751. package/dist/kernel/git.js +125 -0
  752. package/dist/kernel/glob.d.ts +1 -0
  753. package/dist/kernel/glob.js +178 -0
  754. package/dist/kernel/hash.d.ts +3 -0
  755. package/dist/kernel/hash.js +12 -0
  756. package/dist/kernel/host.d.ts +3 -0
  757. package/dist/kernel/host.js +48 -0
  758. package/dist/kernel/index.d.ts +115 -0
  759. package/dist/kernel/index.js +33 -0
  760. package/dist/kernel/json.d.ts +4 -0
  761. package/dist/kernel/json.js +68 -0
  762. package/dist/kernel/net-allow.d.ts +8 -0
  763. package/dist/kernel/net-allow.js +45 -0
  764. package/dist/kernel/net-fetch.d.ts +5 -0
  765. package/dist/kernel/net-fetch.js +135 -0
  766. package/dist/kernel/net.d.ts +10 -0
  767. package/dist/kernel/net.js +24 -0
  768. package/dist/kernel/path.d.ts +3 -0
  769. package/dist/kernel/path.js +40 -0
  770. package/dist/kernel/pattern.d.ts +2 -0
  771. package/dist/kernel/pattern.js +116 -0
  772. package/dist/kernel/proc.d.ts +6 -0
  773. package/dist/kernel/proc.js +207 -0
  774. package/dist/kernel/read-cache.d.ts +6 -0
  775. package/dist/kernel/read-cache.js +27 -0
  776. package/dist/kernel/redact.d.ts +1 -0
  777. package/dist/kernel/redact.js +206 -0
  778. package/dist/kernel/repo-root.d.ts +3 -0
  779. package/dist/kernel/repo-root.js +29 -0
  780. package/dist/kernel/result.d.ts +10 -0
  781. package/dist/kernel/result.js +6 -0
  782. package/dist/kernel/schema-helpers.d.ts +11 -0
  783. package/dist/kernel/schema-helpers.js +101 -0
  784. package/dist/kernel/schema.d.ts +2 -0
  785. package/dist/kernel/schema.js +203 -0
  786. package/dist/kernel/secret-paths.d.ts +3 -0
  787. package/dist/kernel/secret-paths.js +56 -0
  788. package/dist/kernel/shell-bypass.d.ts +4 -0
  789. package/dist/kernel/shell-bypass.js +151 -0
  790. package/dist/kernel/shell-cmd.d.ts +6 -0
  791. package/dist/kernel/shell-cmd.js +196 -0
  792. package/dist/kernel/shell-deny-cmd.d.ts +7 -0
  793. package/dist/kernel/shell-deny-cmd.js +35 -0
  794. package/dist/kernel/shell-deny-destroy.d.ts +7 -0
  795. package/dist/kernel/shell-deny-destroy.js +71 -0
  796. package/dist/kernel/shell-deny-escalate.d.ts +7 -0
  797. package/dist/kernel/shell-deny-escalate.js +96 -0
  798. package/dist/kernel/shell-deny-target.d.ts +4 -0
  799. package/dist/kernel/shell-deny-target.js +51 -0
  800. package/dist/kernel/shell-deny.d.ts +8 -0
  801. package/dist/kernel/shell-deny.js +171 -0
  802. package/dist/kernel/shell-scan.d.ts +3 -0
  803. package/dist/kernel/shell-scan.js +226 -0
  804. package/dist/kernel/shell-word.d.ts +15 -0
  805. package/dist/kernel/shell-word.js +216 -0
  806. package/dist/kernel/shell.d.ts +22 -0
  807. package/dist/kernel/shell.js +2 -0
  808. package/dist/kernel/stdin.d.ts +2 -0
  809. package/dist/kernel/stdin.js +59 -0
  810. package/dist/kernel/test-report.d.ts +7 -0
  811. package/dist/kernel/test-report.js +112 -0
  812. package/dist/kernel/version.d.ts +2 -0
  813. package/dist/kernel/version.js +46 -0
  814. package/dist/tsconfig.build.tsbuildinfo +1 -0
  815. package/package.json +20 -5
  816. package/schema/accepted.schema.json +20 -0
  817. package/schema/baseline.schema.json +17 -0
  818. package/schema/capability.schema.json +31 -0
  819. package/schema/cli/error.schema.json +15 -0
  820. package/schema/cli/explain.schema.json +19 -0
  821. package/schema/cli/report.schema.json +15 -0
  822. package/schema/cli/status.schema.json +51 -0
  823. package/schema/cli/verify.schema.json +15 -0
  824. package/schema/config.schema.json +43 -0
  825. package/schema/event-log.schema.json +52 -0
  826. package/schema/hook-decision.schema.json +13 -0
  827. package/schema/hook-event.schema.json +50 -0
  828. package/schema/manifest.schema.json +26 -0
  829. package/schema/pack-draft.schema.json +42 -0
  830. package/schema/pack.schema.json +70 -0
  831. package/schema/registry-snapshot.schema.json +41 -0
  832. package/schema/remediation-plan.schema.json +44 -0
  833. package/schema/review-findings.schema.json +25 -0
  834. package/schema/task-record.schema.json +49 -0
  835. package/schema/waivers.schema.json +29 -0
@@ -0,0 +1,110 @@
1
+ // SPEC §4.10.1: the SPEC trace. Every acceptance test carries a reference
2
+ // matching config.spec.refPattern; every reference resolves to a heading or
3
+ // an EC row; every code task lists references its declared tests cite. The
4
+ // spec index is caller-supplied data (the loader owns the SPEC files), so
5
+ // this module never reads the filesystem.
6
+ import { globMatch } from "../../kernel/index.js";
7
+ export const DEFAULT_REF_PATTERN = "\\[(§[\\d.]+(?: EC-\\d+)?)\\]";
8
+ function parseInner(raw) {
9
+ const match = /^§([\d.]+)(?: EC-(\d+))?$/.exec(raw);
10
+ if (match === null) {
11
+ return undefined;
12
+ }
13
+ const section = match[1] ?? "";
14
+ const ecText = match[2];
15
+ return {
16
+ section,
17
+ ec: ecText === undefined ? undefined : Number.parseInt(ecText, 10),
18
+ raw,
19
+ };
20
+ }
21
+ // SPEC §4.10.1: config.spec.refPattern finds references in test titles.
22
+ export function parseSpecRefs(title, refPattern = DEFAULT_REF_PATTERN) {
23
+ const refs = [];
24
+ const pattern = new RegExp(refPattern, "g");
25
+ let match = pattern.exec(title);
26
+ while (match !== null) {
27
+ const parsed = parseInner(match[1] ?? "");
28
+ if (parsed !== undefined) {
29
+ refs.push(parsed);
30
+ }
31
+ match = pattern.exec(title);
32
+ }
33
+ return refs;
34
+ }
35
+ function nearestSections(wanted, known) {
36
+ const scored = [...known]
37
+ .map((section) => {
38
+ let shared = 0;
39
+ while (shared < wanted.length &&
40
+ shared < section.length &&
41
+ wanted[shared] === section[shared]) {
42
+ shared += 1;
43
+ }
44
+ return { section, shared };
45
+ })
46
+ .sort((a, b) => b.shared - a.shared || (a.section < b.section ? -1 : 1));
47
+ return scored
48
+ .slice(0, 3)
49
+ .map((entry) => `§${entry.section}`)
50
+ .join(", ");
51
+ }
52
+ function nearestEcs(wanted, known) {
53
+ return [...known]
54
+ .sort((a, b) => Math.abs(a - wanted) - Math.abs(b - wanted) || a - b)
55
+ .slice(0, 3)
56
+ .map((ec) => `EC-${ec}`)
57
+ .join(", ");
58
+ }
59
+ function traceFinding(path, message, remediation) {
60
+ return { ruleId: "core/spec-trace", path, message, remediation };
61
+ }
62
+ // SPEC §4.10.1 core/spec-trace: acceptance tests trace; references resolve;
63
+ // remediation lists the nearest existing ids.
64
+ export function checkSpecTrace(tests, spec, acceptanceGlobs = ["tests/acceptance/**"], refPattern = DEFAULT_REF_PATTERN) {
65
+ const findings = [];
66
+ for (const test of tests) {
67
+ if (!acceptanceGlobs.some((glob) => globMatch(glob, test.path))) {
68
+ continue;
69
+ }
70
+ const refs = parseSpecRefs(test.title, refPattern);
71
+ if (refs.length === 0) {
72
+ findings.push(traceFinding(test.path, `acceptance test without a SPEC reference: ${test.title}`, `Give the test in ${test.path} a literal SPEC reference, e.g. [§4.10 EC-4].`));
73
+ continue;
74
+ }
75
+ for (const ref of refs) {
76
+ if (!spec.headings.has(ref.section)) {
77
+ findings.push(traceFinding(test.path, `SPEC reference to unknown section: ${ref.raw}`, `Point ${test.path} at an existing section. Nearest: ${nearestSections(ref.section, spec.headings)}.`));
78
+ continue;
79
+ }
80
+ if (ref.ec !== undefined) {
81
+ const rows = spec.ecRows.get(ref.section) ?? new Set();
82
+ if (!rows.has(ref.ec)) {
83
+ findings.push(traceFinding(test.path, `SPEC reference to unknown EC row: ${ref.raw}`, `Point ${test.path} at an existing EC row. Nearest: ${nearestEcs(ref.ec, rows)}.`));
84
+ }
85
+ }
86
+ }
87
+ }
88
+ return findings;
89
+ }
90
+ // SPEC §4.10.1 planning gate: every code task lists spec references, each
91
+ // cited by at least one declared test; zero declared tests blocks.
92
+ export function checkPlanningGate(task) {
93
+ const findings = [];
94
+ if (task.type !== "code" && task.type !== "fix") {
95
+ return findings;
96
+ }
97
+ if (task.declaredTests.length === 0) {
98
+ findings.push(traceFinding("(task)", `code task declares zero tests`, "Declare at least one test for the code task before planning it."));
99
+ }
100
+ if (task.specRefs.length === 0) {
101
+ findings.push(traceFinding("(task)", `code task lists zero SPEC references`, "List at least one SPEC reference on the code task."));
102
+ }
103
+ for (const test of task.declaredTests) {
104
+ const cites = parseSpecRefs(test.title).some((ref) => task.specRefs.includes(ref.raw));
105
+ if (!cites) {
106
+ findings.push(traceFinding(test.path, `declared test cites none of the task references: ${test.title}`, `Cite one of ${task.specRefs.join(", ")} in ${test.path}.`));
107
+ }
108
+ }
109
+ return findings;
110
+ }
@@ -0,0 +1,14 @@
1
+ import type { CheckContext, Finding } from "../engine/index.ts";
2
+ import { type PhaseGateDetail } from "./phases.ts";
3
+ import { type ReviewCheckDetail, type ReviewFindingsFile } from "./review.ts";
4
+ import type { TaskRecord } from "./tasks.ts";
5
+ export { checkReviewCap, DEFAULT_MAX_REPEATS, escalationMessage, } from "./loop.ts";
6
+ export { isMandatoryPhase, MANDATORY_PHASES, validatePhaseOrder, } from "./phases.ts";
7
+ export type { ReviewFinding, ReviewSeverity } from "./review.ts";
8
+ export type { AgentRole, ChangeClass, ReviewRound, TaskEscalation, TaskGreenProof, TaskPhase, TaskProof, TaskRecord, TaskTestRef, TaskType, } from "./tasks.ts";
9
+ export { isTaskId, mergeTaskRecords, resolveActiveTask, roleForAsset, TASK_LOCK_PATH, taskIdFor, validateTaskRecord, } from "./tasks.ts";
10
+ export { checkWriteWithinPlan, classifyChange, type WriteCheckOptions, } from "./writes.ts";
11
+ export type { PhaseGateDetail, ReviewCheckDetail, ReviewFindingsFile };
12
+ export declare function checkPhaseGate(task: TaskRecord, phase: string, detail?: PhaseGateDetail): Promise<Array<Finding>>;
13
+ export declare function checkReview(ctx: CheckContext, findings: ReviewFindingsFile, detail?: ReviewCheckDetail): Promise<Array<Finding>>;
14
+ export declare function checkLoop(ctx: CheckContext, attempts: number, maxRepeats?: number): Promise<Array<Finding>>;
@@ -0,0 +1,19 @@
1
+ import { checkLoop as checkLoopImpl, DEFAULT_MAX_REPEATS } from "./loop.js";
2
+ import { checkPhaseGate as checkPhaseGateImpl, } from "./phases.js";
3
+ import { checkReview as checkReviewImpl, } from "./review.js";
4
+ export { checkReviewCap, DEFAULT_MAX_REPEATS, escalationMessage, } from "./loop.js";
5
+ export { isMandatoryPhase, MANDATORY_PHASES, validatePhaseOrder, } from "./phases.js";
6
+ export { isTaskId, mergeTaskRecords, resolveActiveTask, roleForAsset, TASK_LOCK_PATH, taskIdFor, validateTaskRecord, } from "./tasks.js";
7
+ export { checkWriteWithinPlan, classifyChange, } from "./writes.js";
8
+ // SPEC §4.12.2: phase gate evaluation for the task state machine.
9
+ export function checkPhaseGate(task, phase, detail) {
10
+ return checkPhaseGateImpl(task, phase, detail ?? {});
11
+ }
12
+ // SPEC §4.12.4: review gate verdicts.
13
+ export function checkReview(ctx, findings, detail) {
14
+ return checkReviewImpl(ctx, findings, detail ?? {});
15
+ }
16
+ // SPEC §4.12.5: loop breaker escalation.
17
+ export function checkLoop(ctx, attempts, maxRepeats) {
18
+ return checkLoopImpl(ctx, attempts, maxRepeats ?? DEFAULT_MAX_REPEATS);
19
+ }
@@ -0,0 +1,5 @@
1
+ import type { CheckContext, Finding } from "../engine/index.ts";
2
+ export declare const DEFAULT_MAX_REPEATS = 3;
3
+ export declare function escalationMessage(ruleId: string, attempts: number): string;
4
+ export declare function checkLoop(ctx: CheckContext, attempts: number, maxRepeats?: number): Promise<Array<Finding>>;
5
+ export declare function checkReviewCap(completedRounds: number, maxRounds?: number): Promise<Array<Finding>>;
@@ -0,0 +1,36 @@
1
+ export const DEFAULT_MAX_REPEATS = 3;
2
+ export function escalationMessage(ruleId, attempts) {
3
+ return (`escalation: ${ruleId} blocked ${String(attempts)} times with no intervening allow. ` +
4
+ "Stop and give the human a summary of the rule, the attempts and the conflict.");
5
+ }
6
+ // SPEC §4.12.7 EC-7: the fourth consecutive block escalates, and every
7
+ // tool call for the task stays blocked until a human runs task ack.
8
+ // SPEC §4.12.7 EC-8: the ack itself is human-only, so the shell guard
9
+ // blocks agents there; this check returns no finding for low counts.
10
+ export async function checkLoop(ctx, attempts, maxRepeats = DEFAULT_MAX_REPEATS) {
11
+ void ctx;
12
+ if (attempts <= maxRepeats) {
13
+ return [];
14
+ }
15
+ return [
16
+ {
17
+ ruleId: "core/loop-breaker",
18
+ message: escalationMessage("core/loop-breaker", attempts),
19
+ remediation: "Run codictator task ack <id> --note ... to clear the escalation; task ack is human-only.",
20
+ },
21
+ ];
22
+ }
23
+ // SPEC §4.12.4 cap: reaching the review-round cap escalates through the
24
+ // same path; the floor never moves, only the attempt stops.
25
+ export async function checkReviewCap(completedRounds, maxRounds = 3) {
26
+ if (completedRounds < maxRounds) {
27
+ return [];
28
+ }
29
+ return [
30
+ {
31
+ ruleId: "core/review-round-cap",
32
+ message: escalationMessage("core/review-round-cap", completedRounds),
33
+ remediation: "Run codictator task ack <id> --note ... to clear the escalation; task ack is human-only.",
34
+ },
35
+ ];
36
+ }
@@ -0,0 +1,10 @@
1
+ import type { Finding } from "../engine/index.ts";
2
+ import type { TaskRecord } from "./tasks.ts";
3
+ export declare const MANDATORY_PHASES: ReadonlyArray<string>;
4
+ export declare function isMandatoryPhase(value: string): boolean;
5
+ export declare function validatePhaseOrder(order: ReadonlyArray<string>): boolean;
6
+ export interface PhaseGateDetail {
7
+ readonly openTasks?: ReadonlyArray<string>;
8
+ readonly phaseOrder?: ReadonlyArray<string>;
9
+ }
10
+ export declare function checkPhaseGate(task: TaskRecord, phase: string, detail?: PhaseGateDetail): Promise<Array<Finding>>;
@@ -0,0 +1,181 @@
1
+ // SPEC §4.12.2: the seven mandatory phases in order.
2
+ export const MANDATORY_PHASES = [
3
+ "discovery",
4
+ "planning",
5
+ "implementation",
6
+ "validation",
7
+ "review",
8
+ "record",
9
+ "integrate",
10
+ ];
11
+ export function isMandatoryPhase(value) {
12
+ return MANDATORY_PHASES.includes(value);
13
+ }
14
+ function customPhasesOf(task) {
15
+ return task.customPhases ?? [];
16
+ }
17
+ function isKnownPhase(task, phase) {
18
+ return isMandatoryPhase(phase) || customPhasesOf(task).includes(phase);
19
+ }
20
+ // SPEC §4.12.2: the mandatory phases keep their relative order; removing
21
+ // or reordering one is CDX-E105, as is inserting a custom phase before
22
+ // discovery.
23
+ export function validatePhaseOrder(order) {
24
+ let cursor = -1;
25
+ for (const mandatory of MANDATORY_PHASES) {
26
+ const at = order.indexOf(mandatory);
27
+ if (at < 0 || at <= cursor) {
28
+ return false;
29
+ }
30
+ cursor = at;
31
+ }
32
+ return true;
33
+ }
34
+ function e105UnknownPhase(phase) {
35
+ return {
36
+ ruleId: "core/workflow-gates",
37
+ code: "CDX-E105",
38
+ message: `unknown phase "${phase}"; the seven mandatory phases keep their order`,
39
+ remediation: "Declare the phase in config.workflow.phases after discovery, then re-run the gate.",
40
+ };
41
+ }
42
+ function e105PhaseOrder() {
43
+ return {
44
+ ruleId: "core/workflow-gates",
45
+ code: "CDX-E105",
46
+ message: "mandatory workflow phases removed or reordered; custom phases insert after discovery only",
47
+ remediation: "Restore the seven mandatory phases in order with custom phases after discovery.",
48
+ };
49
+ }
50
+ function e606TwoTasks(open, task) {
51
+ const listed = open.length > 0 ? open.join(", ") : `${task.id} and a second opener`;
52
+ return {
53
+ ruleId: "core/workflow-gates",
54
+ code: "CDX-E606",
55
+ message: `more than one open task on branch "${task.branch}": ${listed}`,
56
+ remediation: "Run codictator task status, close or merge the extra task, then retry.",
57
+ };
58
+ }
59
+ // SPEC §4.12.2 exit gates: the evidence each phase owes before the next
60
+ // phase opens. Implementation and integrate owe no exit evidence.
61
+ function missingExitEvidence(task, phase) {
62
+ switch (phase) {
63
+ case "discovery": {
64
+ const missing = [];
65
+ if (task.spec.length === 0) {
66
+ missing.push("spec refs");
67
+ }
68
+ if (task.type === "fix" && (task.diagnosis ?? "").length === 0) {
69
+ missing.push("diagnosis");
70
+ }
71
+ return missing;
72
+ }
73
+ case "planning": {
74
+ const missing = [];
75
+ if (task.files.allow.length === 0) {
76
+ missing.push("files.allow globs");
77
+ }
78
+ if (task.acceptanceCriteria.length === 0) {
79
+ missing.push("acceptance criteria");
80
+ }
81
+ if ((task.tests ?? []).length === 0) {
82
+ missing.push("declared tests");
83
+ }
84
+ if (task.redProof === undefined) {
85
+ missing.push("red proof");
86
+ }
87
+ return missing;
88
+ }
89
+ case "validation": {
90
+ return task.greenProof === undefined ? ["green proof"] : [];
91
+ }
92
+ case "review": {
93
+ return missingReviewEvidence(task);
94
+ }
95
+ case "record": {
96
+ const missing = [];
97
+ if (task.historyStaged !== true) {
98
+ missing.push("staged history entry");
99
+ }
100
+ if (task.type === "fix" && task.bugRowUpdated !== true) {
101
+ missing.push("bug row update");
102
+ }
103
+ return missing;
104
+ }
105
+ default: {
106
+ return [];
107
+ }
108
+ }
109
+ }
110
+ function missingReviewEvidence(task) {
111
+ const rounds = task.reviews ?? [];
112
+ if (rounds.length === 0) {
113
+ return ["completed review round"];
114
+ }
115
+ const last = rounds[rounds.length - 1];
116
+ if (last === undefined) {
117
+ return ["completed review round"];
118
+ }
119
+ const missing = [];
120
+ if (last.openBlockers > 0 || last.openMajors > 0) {
121
+ missing.push("zero open blocker/major findings");
122
+ }
123
+ const pending = (task.integrityExceptions ?? []).filter((id) => !last.acknowledgedExceptions.includes(id));
124
+ if (pending.length > 0) {
125
+ missing.push("acknowledged integrity exceptions");
126
+ }
127
+ return missing;
128
+ }
129
+ function e604MissingGate(task, missing) {
130
+ return {
131
+ ruleId: "core/workflow-gates",
132
+ code: "CDX-E604",
133
+ message: `phase gate evidence missing for ${task.phase}: ${missing.join(", ")}`,
134
+ remediation: `Run codictator task phase next to list the missing evidence for ${task.phase}.`,
135
+ };
136
+ }
137
+ // SPEC §4.12.2: advance only when the exit gate holds, else CDX-E604. A
138
+ // change that touches code files is reclassified as code and owes every
139
+ // gate; docs-only writes stay allowed but never waive code gates.
140
+ export async function checkPhaseGate(task, phase, detail = {}) {
141
+ if (!isKnownPhase(task, phase)) {
142
+ return [e105UnknownPhase(phase)];
143
+ }
144
+ if (detail.phaseOrder !== undefined &&
145
+ !validatePhaseOrder(detail.phaseOrder)) {
146
+ return [e105PhaseOrder()];
147
+ }
148
+ // SPEC §4.12.7 EC-10: re-entering planning while planning is already
149
+ // active means a second writer opened planning on this branch. The
150
+ // caller-provided open-task list decides whenever it is present.
151
+ const open = detail.openTasks;
152
+ if (open !== undefined && open.length >= 2) {
153
+ return [e606TwoTasks(open, task)];
154
+ }
155
+ if (open === undefined && task.phase === "planning" && phase === "planning") {
156
+ return [e606TwoTasks([], task)];
157
+ }
158
+ if (phase !== task.phase) {
159
+ const missing = missingExitEvidence(task, task.phase);
160
+ if (missing.length > 0) {
161
+ return [e604MissingGate(task, missing)];
162
+ }
163
+ return [];
164
+ }
165
+ // Same-phase evaluation: implementation, validation and record writes
166
+ // are judged by the L1 write gate, not here; review re-entry owes a
167
+ // completed round before it can pass.
168
+ if (task.phase === "review") {
169
+ const missing = missingReviewEvidence(task);
170
+ if (missing.length > 0) {
171
+ return [
172
+ {
173
+ ruleId: "core/review-gate",
174
+ message: `review gate unmet in phase review: ${missing.join(", ")}`,
175
+ remediation: "Run codictator review submit with a fresh reviewer session.",
176
+ },
177
+ ];
178
+ }
179
+ }
180
+ return [];
181
+ }
@@ -0,0 +1,25 @@
1
+ import type { CheckContext, Finding } from "../engine/index.ts";
2
+ export type ReviewSeverity = "blocker" | "major" | "minor" | "nit";
3
+ export interface ReviewFinding {
4
+ readonly id: string;
5
+ readonly severity: string;
6
+ readonly path: string;
7
+ readonly line?: number;
8
+ readonly message: string;
9
+ }
10
+ export interface ReviewFindingsFile {
11
+ readonly version: 1;
12
+ readonly findings: ReadonlyArray<ReviewFinding>;
13
+ readonly tree?: string;
14
+ readonly reviewerSession?: string;
15
+ readonly identity?: "observed" | "declared";
16
+ readonly round?: number;
17
+ }
18
+ export interface ReviewCheckDetail {
19
+ readonly authorSessions?: ReadonlyArray<string>;
20
+ readonly reviewerSessions?: ReadonlyArray<string>;
21
+ readonly tree?: string;
22
+ readonly maxRounds?: number;
23
+ readonly completedRounds?: number;
24
+ }
25
+ export declare function checkReview(ctx: CheckContext, file: ReviewFindingsFile, detail?: ReviewCheckDetail): Promise<Array<Finding>>;
@@ -0,0 +1,112 @@
1
+ const SEVERITIES = ["blocker", "major", "minor", "nit"];
2
+ function malformedReason(file) {
3
+ if (!Array.isArray(file.findings)) {
4
+ return "findings is not a list";
5
+ }
6
+ const seen = new Set();
7
+ for (const finding of file.findings) {
8
+ if (typeof finding.id !== "string" ||
9
+ typeof finding.severity !== "string" ||
10
+ typeof finding.path !== "string" ||
11
+ typeof finding.message !== "string" ||
12
+ finding.id.length === 0 ||
13
+ finding.message.length === 0) {
14
+ return "a finding misses id, severity, path or message";
15
+ }
16
+ if (!SEVERITIES.includes(finding.severity)) {
17
+ return `severity "${finding.severity}" is not blocker, major, minor or nit`;
18
+ }
19
+ if (seen.has(finding.id)) {
20
+ return `duplicate finding id "${finding.id}"`;
21
+ }
22
+ seen.add(finding.id);
23
+ }
24
+ // SPEC §4.12.4 Bind/Submit: a submittable round binds the staged tree
25
+ // and the reviewer session. An empty findings list is a pass only once
26
+ // bound; without either the round cannot be recorded.
27
+ if (file.tree === undefined || file.reviewerSession === undefined) {
28
+ return "the round binds no staged tree or reviewer session";
29
+ }
30
+ return undefined;
31
+ }
32
+ // SPEC §4.12.4: review submit refuses a reviewer from the author sessions
33
+ // or from any earlier round (CDX-E605). Identity comes from the recorded
34
+ // tool event; without an adapter the round is marked declared.
35
+ function freshnessRefusal(file, detail) {
36
+ const reviewer = file.reviewerSession;
37
+ if (reviewer === undefined) {
38
+ return {
39
+ ruleId: "core/review-gate",
40
+ code: "CDX-E605",
41
+ message: "reviewer session unknown; reviewer freshness cannot be proven",
42
+ remediation: "Re-submit with --session from a fresh session that wrote no task file.",
43
+ };
44
+ }
45
+ const authors = detail.authorSessions ?? [];
46
+ const earlier = detail.reviewerSessions ?? [];
47
+ if (authors.includes(reviewer) || earlier.includes(reviewer)) {
48
+ return {
49
+ ruleId: "core/review-gate",
50
+ code: "CDX-E605",
51
+ message: `reviewer session "${reviewer}" is not fresh`,
52
+ remediation: "Re-submit from a fresh session that wrote no task file and ran no earlier round.",
53
+ };
54
+ }
55
+ return undefined;
56
+ }
57
+ // SPEC §4.12.4 gate: last round tree equals staged, zero open
58
+ // blocker/major, exceptions acknowledged, rounds under the cap.
59
+ export async function checkReview(ctx, file, detail = {}) {
60
+ const findings = [];
61
+ const malformed = malformedReason(file);
62
+ if (malformed !== undefined) {
63
+ findings.push({
64
+ ruleId: "core/review-gate",
65
+ code: "CDX-E607",
66
+ message: `review findings file invalid: ${malformed}; the round is not recorded`,
67
+ remediation: "Submit findings as { id, severity, path, line?, message } bound to the staged tree and reviewer session.",
68
+ });
69
+ }
70
+ const refusal = freshnessRefusal(file, detail);
71
+ if (refusal !== undefined) {
72
+ findings.push(refusal);
73
+ }
74
+ const openBlockers = Array.isArray(file.findings)
75
+ ? file.findings.filter((entry) => entry.severity === "blocker" || entry.severity === "major")
76
+ : [];
77
+ if (openBlockers.length > 0 && malformed === undefined) {
78
+ const first = openBlockers[0];
79
+ const location = first?.path === undefined
80
+ ? {}
81
+ : {
82
+ path: first.path,
83
+ ...(first.line === undefined ? {} : { line: first.line }),
84
+ };
85
+ findings.push({
86
+ ruleId: "core/review-gate",
87
+ ...location,
88
+ message: `${String(openBlockers.length)} open blocker/major findings; only a code change starts a new round`,
89
+ remediation: "Fix the blocker or major finding with a code change, then submit a new round.",
90
+ });
91
+ }
92
+ if (detail.tree !== undefined &&
93
+ file.tree !== undefined &&
94
+ detail.tree !== file.tree) {
95
+ findings.push({
96
+ ruleId: "core/review-gate",
97
+ message: "stale review: the index tree changed after the round was submitted",
98
+ remediation: "Submit a new review round against the current staged tree.",
99
+ });
100
+ }
101
+ const maxRounds = detail.maxRounds ?? 3;
102
+ const completed = detail.completedRounds ?? 0;
103
+ if (completed >= maxRounds) {
104
+ findings.push({
105
+ ruleId: "core/review-round-cap",
106
+ message: `review round cap reached (${String(completed)} of ${String(maxRounds)}); escalation recorded`,
107
+ remediation: "Stop and give a human the summary; run codictator task ack --note ... (human-only) to clear it.",
108
+ });
109
+ }
110
+ void ctx;
111
+ return findings;
112
+ }
@@ -0,0 +1,73 @@
1
+ export type TaskType = "feature" | "fix" | "refactor" | "docs" | "deps" | "chore";
2
+ export type ChangeClass = "code" | "docs" | "refactor" | "deps" | "chore" | "guardrail";
3
+ export type AgentRole = "planner" | "implementer" | "reviewer" | "qa";
4
+ export interface TaskPhase {
5
+ readonly name: string;
6
+ readonly enteredAt: string;
7
+ readonly evidence: string;
8
+ }
9
+ export interface TaskTestRef {
10
+ readonly path: string;
11
+ readonly title: string;
12
+ readonly kind: string;
13
+ }
14
+ export interface TaskProof {
15
+ readonly commit: string;
16
+ readonly tree: string;
17
+ readonly failing: ReadonlyArray<string>;
18
+ readonly at: string;
19
+ }
20
+ export interface TaskGreenProof {
21
+ readonly at: string;
22
+ readonly tree: string;
23
+ }
24
+ export interface ReviewRound {
25
+ readonly round: number;
26
+ readonly tree: string;
27
+ readonly reviewerSession: string;
28
+ readonly identity: "observed" | "declared";
29
+ readonly openBlockers: number;
30
+ readonly openMajors: number;
31
+ readonly acknowledgedExceptions: ReadonlyArray<string>;
32
+ readonly at: string;
33
+ }
34
+ export interface TaskEscalation {
35
+ readonly at: string;
36
+ readonly ruleId: string;
37
+ readonly attempts: number;
38
+ readonly ackedBy?: string;
39
+ readonly note?: string;
40
+ }
41
+ export interface TaskRecord {
42
+ readonly version: 1;
43
+ readonly id: string;
44
+ readonly type: string;
45
+ readonly title: string;
46
+ readonly branch: string;
47
+ readonly phase: string;
48
+ readonly phases: ReadonlyArray<TaskPhase>;
49
+ readonly spec: ReadonlyArray<string>;
50
+ readonly acceptanceCriteria: ReadonlyArray<string>;
51
+ readonly files: {
52
+ readonly allow: ReadonlyArray<string>;
53
+ };
54
+ readonly customPhases?: ReadonlyArray<string>;
55
+ readonly tests?: ReadonlyArray<TaskTestRef>;
56
+ readonly diagnosis?: string;
57
+ readonly redProof?: TaskProof;
58
+ readonly greenProof?: TaskGreenProof;
59
+ readonly authorSessions?: ReadonlyArray<string>;
60
+ readonly roles?: Readonly<Record<string, AgentRole>>;
61
+ readonly reviews?: ReadonlyArray<ReviewRound>;
62
+ readonly integrityExceptions?: ReadonlyArray<string>;
63
+ readonly historyStaged?: boolean;
64
+ readonly bugRowUpdated?: boolean;
65
+ readonly escalations?: ReadonlyArray<TaskEscalation>;
66
+ }
67
+ export declare function isTaskId(value: string): boolean;
68
+ export declare function taskIdFor(sequence: number): string;
69
+ export declare function resolveActiveTask(tasks: ReadonlyArray<TaskRecord>, branch: string): TaskRecord | undefined;
70
+ export declare const TASK_LOCK_PATH = ".codictator/state/task.lock";
71
+ export declare function roleForAsset(asset: string): AgentRole | undefined;
72
+ export declare function mergeTaskRecords(base: TaskRecord, head: TaskRecord, phaseOrder: ReadonlyArray<string>, evidenceOk?: (phase: string) => boolean): TaskRecord;
73
+ export declare function validateTaskRecord(task: TaskRecord): Array<string>;
@@ -0,0 +1,80 @@
1
+ // SPEC §4.12.1: ids are T-####, sequential per repo.
2
+ const TASK_ID_PATTERN = /^T-\d{4}$/;
3
+ export function isTaskId(value) {
4
+ return TASK_ID_PATTERN.test(value);
5
+ }
6
+ export function taskIdFor(sequence) {
7
+ return `T-${String(sequence).padStart(4, "0")}`;
8
+ }
9
+ // SPEC §4.12.1: a branch has at most one open task, which is the active
10
+ // task for every hook on that branch, subagents included.
11
+ export function resolveActiveTask(tasks, branch) {
12
+ for (const task of tasks) {
13
+ if (task.branch === branch) {
14
+ return task;
15
+ }
16
+ }
17
+ return undefined;
18
+ }
19
+ // SPEC §4.12.6: one lock serialises task-record writes on a machine.
20
+ export const TASK_LOCK_PATH = ".codictator/state/task.lock";
21
+ // SPEC §4.12.6: roles are recorded per session from the subagent or skill
22
+ // name. The codictator-review asset marks reviewers; gates are the same
23
+ // for every role, so the label only informs injection.
24
+ const ROLE_ASSETS = [
25
+ ["codictator-review", "reviewer"],
26
+ ["review", "reviewer"],
27
+ ["qa", "qa"],
28
+ ["implement", "implementer"],
29
+ ["plan", "planner"],
30
+ ];
31
+ export function roleForAsset(asset) {
32
+ const lowered = asset.toLowerCase();
33
+ for (const [fragment, role] of ROLE_ASSETS) {
34
+ if (lowered.includes(fragment)) {
35
+ return role;
36
+ }
37
+ }
38
+ return undefined;
39
+ }
40
+ // SPEC §4.12.6: on merge conflicts in a task record the later phase wins
41
+ // only if its gate evidence verifies. Entry in phases[] is the evidence
42
+ // of entry; per-gate evidence is verified by the caller through evidenceOk.
43
+ export function mergeTaskRecords(base, head, phaseOrder, evidenceOk) {
44
+ const baseIndex = phaseOrder.indexOf(base.phase);
45
+ const headIndex = phaseOrder.indexOf(head.phase);
46
+ const headLater = headIndex > baseIndex;
47
+ const verified = evidenceOk === undefined
48
+ ? head.phases.some((entry) => entry.name === head.phase)
49
+ : evidenceOk(head.phase);
50
+ if (headLater && verified) {
51
+ return head;
52
+ }
53
+ return base;
54
+ }
55
+ // SPEC §4.12.1 + §4.12.2: the record is only writable through task commands;
56
+ // direct writes are blocked (§4.14.3). Structural validation for new tasks.
57
+ export function validateTaskRecord(task) {
58
+ const problems = [];
59
+ if (!isTaskId(task.id)) {
60
+ problems.push(`id "${task.id}" is not T-####`);
61
+ }
62
+ const types = [
63
+ "feature",
64
+ "fix",
65
+ "refactor",
66
+ "docs",
67
+ "deps",
68
+ "chore",
69
+ ];
70
+ if (!types.includes(task.type)) {
71
+ problems.push(`type "${task.type}" is not a task type`);
72
+ }
73
+ if (task.branch.length === 0) {
74
+ problems.push("branch is empty; a task binds to its branch");
75
+ }
76
+ if (task.title.length === 0) {
77
+ problems.push("title is empty");
78
+ }
79
+ return problems;
80
+ }