approval-md 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/README.md +629 -559
  2. package/SPEC.md +99 -24
  3. package/dist/src/adapters/agentmail.d.ts +426 -0
  4. package/dist/src/adapters/agentmail.js +2 -2
  5. package/dist/src/adapters/conformance.d.ts +149 -0
  6. package/dist/src/adapters/contract.d.ts +628 -0
  7. package/dist/src/adapters/contract.js +110 -16
  8. package/dist/src/adapters/contract.js.map +1 -1
  9. package/dist/src/adapters/email.d.ts +324 -0
  10. package/dist/src/adapters/env-passphrase.d.ts +93 -0
  11. package/dist/src/adapters/public.d.ts +11 -0
  12. package/dist/src/adapters/public.js +11 -0
  13. package/dist/src/adapters/public.js.map +1 -0
  14. package/dist/src/adapters/registry.d.ts +59 -0
  15. package/dist/src/adapters/registry.js +2 -1
  16. package/dist/src/adapters/registry.js.map +1 -1
  17. package/dist/src/adapters/smtp.d.ts +213 -0
  18. package/dist/src/adapters/vault-provider.d.ts +114 -0
  19. package/dist/src/adapters/vault-provider.js +3 -3
  20. package/dist/src/adapters/zzz.d.ts +66 -0
  21. package/dist/src/adapters/zzz.js +299 -0
  22. package/dist/src/adapters/zzz.js.map +1 -0
  23. package/dist/src/channels/batch.d.ts +109 -0
  24. package/dist/src/channels/cli.d.ts +193 -0
  25. package/dist/src/channels/conformance.d.ts +92 -0
  26. package/dist/src/channels/contract.d.ts +656 -0
  27. package/dist/src/channels/contract.js +200 -7
  28. package/dist/src/channels/contract.js.map +1 -1
  29. package/dist/src/channels/payload-view.d.ts +35 -0
  30. package/dist/src/channels/render-queue.d.ts +149 -0
  31. package/dist/src/channels/tagging.d.ts +196 -0
  32. package/dist/src/channels/telegram.d.ts +1944 -0
  33. package/dist/src/channels/telegram.js +218 -23
  34. package/dist/src/channels/telegram.js.map +1 -1
  35. package/dist/src/channels/web.d.ts +350 -0
  36. package/dist/src/channels/web.js +17 -0
  37. package/dist/src/channels/web.js.map +1 -1
  38. package/dist/src/cli/adapter.d.ts +90 -0
  39. package/dist/src/cli/adapter.js +25 -15
  40. package/dist/src/cli/adapter.js.map +1 -1
  41. package/dist/src/cli/amend.d.ts +59 -0
  42. package/dist/src/cli/amend.js +214 -30
  43. package/dist/src/cli/amend.js.map +1 -1
  44. package/dist/src/cli/args.d.ts +43 -0
  45. package/dist/src/cli/attest.d.ts +50 -0
  46. package/dist/src/cli/attest.js +134 -7
  47. package/dist/src/cli/attest.js.map +1 -1
  48. package/dist/src/cli/audit-card.d.ts +62 -0
  49. package/dist/src/cli/audit.d.ts +59 -0
  50. package/dist/src/cli/channel-telegram.d.ts +879 -0
  51. package/dist/src/cli/channel-telegram.js +311 -13
  52. package/dist/src/cli/channel-telegram.js.map +1 -1
  53. package/dist/src/cli/channel-web.d.ts +131 -0
  54. package/dist/src/cli/channel.d.ts +80 -0
  55. package/dist/src/cli/channel.js +9 -0
  56. package/dist/src/cli/channel.js.map +1 -1
  57. package/dist/src/cli/checkpoint-tap.d.ts +169 -0
  58. package/dist/src/cli/codex-bridge.d.ts +819 -0
  59. package/dist/src/cli/codex-bridge.js +1607 -0
  60. package/dist/src/cli/codex-bridge.js.map +1 -0
  61. package/dist/src/cli/codex.d.ts +2 -0
  62. package/dist/src/cli/codex.js +469 -0
  63. package/dist/src/cli/codex.js.map +1 -0
  64. package/dist/src/cli/coverage.d.ts +61 -0
  65. package/dist/src/cli/daemon.d.ts +120 -0
  66. package/dist/src/cli/daemon.js +4 -1
  67. package/dist/src/cli/daemon.js.map +1 -1
  68. package/dist/src/cli/doctor.d.ts +129 -0
  69. package/dist/src/cli/doctor.js +586 -17
  70. package/dist/src/cli/doctor.js.map +1 -1
  71. package/dist/src/cli/env.d.ts +65 -0
  72. package/dist/src/cli/execute.d.ts +202 -0
  73. package/dist/src/cli/execute.js +25 -2
  74. package/dist/src/cli/execute.js.map +1 -1
  75. package/dist/src/cli/exit-codes.d.ts +73 -0
  76. package/dist/src/cli/feedback.d.ts +60 -0
  77. package/dist/src/cli/gate-window.d.ts +40 -0
  78. package/dist/src/cli/gate.d.ts +68 -0
  79. package/dist/src/cli/git-scope.d.ts +190 -0
  80. package/dist/src/cli/gloss-attach.d.ts +85 -0
  81. package/dist/src/cli/gloss-codex-child.d.ts +9 -0
  82. package/dist/src/cli/gloss-codex.d.ts +24 -0
  83. package/dist/src/cli/gloss-options.d.ts +42 -0
  84. package/dist/src/cli/gloss.d.ts +265 -0
  85. package/dist/src/cli/help.d.ts +107 -0
  86. package/dist/src/cli/help.js +320 -93
  87. package/dist/src/cli/help.js.map +1 -1
  88. package/dist/src/cli/hook-codex.d.ts +126 -0
  89. package/dist/src/cli/hook-codex.js +226 -0
  90. package/dist/src/cli/hook-codex.js.map +1 -0
  91. package/dist/src/cli/hook.d.ts +787 -0
  92. package/dist/src/cli/hook.js +1235 -181
  93. package/dist/src/cli/hook.js.map +1 -1
  94. package/dist/src/cli/import.d.ts +35 -0
  95. package/dist/src/cli/import.js +1 -1
  96. package/dist/src/cli/import.js.map +1 -1
  97. package/dist/src/cli/init.d.ts +84 -0
  98. package/dist/src/cli/init.js +2 -2
  99. package/dist/src/cli/init.js.map +1 -1
  100. package/dist/src/cli/instructions.d.ts +23 -0
  101. package/dist/src/cli/journal.d.ts +41 -0
  102. package/dist/src/cli/log-advance.d.ts +287 -0
  103. package/dist/src/cli/log-advance.js +102 -11
  104. package/dist/src/cli/log-advance.js.map +1 -1
  105. package/dist/src/cli/log-anchor.d.ts +176 -0
  106. package/dist/src/cli/log-checkpoint.d.ts +22 -0
  107. package/dist/src/cli/log-sync.d.ts +243 -0
  108. package/dist/src/cli/log-verbs.d.ts +16 -0
  109. package/dist/src/cli/log-verbs.js +7 -1
  110. package/dist/src/cli/log-verbs.js.map +1 -1
  111. package/dist/src/cli/long-help.d.ts +70 -0
  112. package/dist/src/cli/main.d.ts +77 -0
  113. package/dist/src/cli/main.js +159 -7
  114. package/dist/src/cli/main.js.map +1 -1
  115. package/dist/src/cli/mcp.d.ts +52 -0
  116. package/dist/src/cli/paths.d.ts +56 -0
  117. package/dist/src/cli/payload.d.ts +58 -0
  118. package/dist/src/cli/policy-apply.d.ts +195 -0
  119. package/dist/src/cli/policy-apply.js +573 -0
  120. package/dist/src/cli/policy-apply.js.map +1 -0
  121. package/dist/src/cli/policy.d.ts +43 -0
  122. package/dist/src/cli/policy.js +14 -1
  123. package/dist/src/cli/policy.js.map +1 -1
  124. package/dist/src/cli/preflight.d.ts +501 -0
  125. package/dist/src/cli/preflight.js +689 -45
  126. package/dist/src/cli/preflight.js.map +1 -1
  127. package/dist/src/cli/progress.d.ts +78 -0
  128. package/dist/src/cli/prompt.d.ts +209 -0
  129. package/dist/src/cli/quickstart.d.ts +46 -0
  130. package/dist/src/cli/quickstart.js +297 -0
  131. package/dist/src/cli/quickstart.js.map +1 -0
  132. package/dist/src/cli/records.d.ts +34 -0
  133. package/dist/src/cli/render.d.ts +22 -0
  134. package/dist/src/cli/sandbox.d.ts +51 -0
  135. package/dist/src/cli/sandbox.js +17 -1
  136. package/dist/src/cli/sandbox.js.map +1 -1
  137. package/dist/src/cli/scaffold.d.ts +79 -0
  138. package/dist/src/cli/scaffold.js +1 -1
  139. package/dist/src/cli/setup-adapter.d.ts +137 -0
  140. package/dist/src/cli/setup-adapter.js +38 -4
  141. package/dist/src/cli/setup-adapter.js.map +1 -1
  142. package/dist/src/cli/setup-channel.d.ts +126 -0
  143. package/dist/src/cli/setup-channel.js +28 -1
  144. package/dist/src/cli/setup-channel.js.map +1 -1
  145. package/dist/src/cli/setup-checkpoint.d.ts +57 -0
  146. package/dist/src/cli/setup-common.d.ts +277 -0
  147. package/dist/src/cli/setup-common.js +3 -2
  148. package/dist/src/cli/setup-common.js.map +1 -1
  149. package/dist/src/cli/setup-flow.d.ts +287 -0
  150. package/dist/src/cli/setup-service.d.ts +96 -0
  151. package/dist/src/cli/setup.d.ts +204 -0
  152. package/dist/src/cli/setup.js +94 -2
  153. package/dist/src/cli/setup.js.map +1 -1
  154. package/dist/src/cli/style.d.ts +320 -0
  155. package/dist/src/cli/token.d.ts +39 -0
  156. package/dist/src/cli/up.d.ts +155 -0
  157. package/dist/src/cli/up.js +119 -53
  158. package/dist/src/cli/up.js.map +1 -1
  159. package/dist/src/cli/usage.d.ts +37 -0
  160. package/dist/src/cli/values.d.ts +40 -0
  161. package/dist/src/cli/values.js +3 -4
  162. package/dist/src/cli/values.js.map +1 -1
  163. package/dist/src/cli/vault.d.ts +59 -0
  164. package/dist/src/cli/vault.js +2 -2
  165. package/dist/src/cli/vault.js.map +1 -1
  166. package/dist/src/cli/verb-registry.d.ts +76 -0
  167. package/dist/src/cli/verb-registry.js +344 -11
  168. package/dist/src/cli/verb-registry.js.map +1 -1
  169. package/dist/src/cli/wordmark.d.ts +31 -0
  170. package/dist/src/cli/wordmark.js +2 -2
  171. package/dist/src/codex/broker.d.ts +229 -0
  172. package/dist/src/codex/broker.js +548 -0
  173. package/dist/src/codex/broker.js.map +1 -0
  174. package/dist/src/codex/doctor.d.ts +13 -0
  175. package/dist/src/codex/doctor.js +41 -0
  176. package/dist/src/codex/doctor.js.map +1 -0
  177. package/dist/src/codex/manifest.d.ts +49 -0
  178. package/dist/src/codex/manifest.js +103 -0
  179. package/dist/src/codex/manifest.js.map +1 -0
  180. package/dist/src/codex/runner.d.ts +178 -0
  181. package/dist/src/codex/runner.js +231 -0
  182. package/dist/src/codex/runner.js.map +1 -0
  183. package/dist/src/codex/serve.d.ts +56 -0
  184. package/dist/src/codex/serve.js +98 -0
  185. package/dist/src/codex/serve.js.map +1 -0
  186. package/dist/src/codex/templates.d.ts +41 -0
  187. package/dist/src/codex/templates.js +319 -0
  188. package/dist/src/codex/templates.js.map +1 -0
  189. package/dist/src/codex/trust.d.ts +19 -0
  190. package/dist/src/codex/trust.js +183 -0
  191. package/dist/src/codex/trust.js.map +1 -0
  192. package/dist/src/codex/workspace-commit.d.ts +219 -0
  193. package/dist/src/codex/workspace-commit.js +549 -0
  194. package/dist/src/codex/workspace-commit.js.map +1 -0
  195. package/dist/src/codex/workspace-plan.d.ts +131 -0
  196. package/dist/src/codex/workspace-plan.js +561 -0
  197. package/dist/src/codex/workspace-plan.js.map +1 -0
  198. package/dist/src/core/actor.d.ts +2 -0
  199. package/dist/src/core/actor.js +5 -0
  200. package/dist/src/core/actor.js.map +1 -0
  201. package/dist/src/core/advance-cycle.d.ts +221 -0
  202. package/dist/src/core/advance-cycle.js +66 -2
  203. package/dist/src/core/advance-cycle.js.map +1 -1
  204. package/dist/src/core/agents-md.d.ts +278 -0
  205. package/dist/src/core/agents-md.js +33 -31
  206. package/dist/src/core/agents-md.js.map +1 -1
  207. package/dist/src/core/apply-patch.d.ts +49 -0
  208. package/dist/src/core/apply-patch.js +266 -0
  209. package/dist/src/core/apply-patch.js.map +1 -0
  210. package/dist/src/core/attest.d.ts +635 -0
  211. package/dist/src/core/attest.js +326 -4
  212. package/dist/src/core/attest.js.map +1 -1
  213. package/dist/src/core/audit.d.ts +510 -0
  214. package/dist/src/core/audit.js +13 -0
  215. package/dist/src/core/audit.js.map +1 -1
  216. package/dist/src/core/budgets.d.ts +238 -0
  217. package/dist/src/core/channel-owner.d.ts +213 -0
  218. package/dist/src/core/channel-owner.js +358 -0
  219. package/dist/src/core/channel-owner.js.map +1 -0
  220. package/dist/src/core/checkpoint.d.ts +500 -0
  221. package/dist/src/core/child-env.d.ts +88 -0
  222. package/dist/src/core/clock.d.ts +52 -0
  223. package/dist/src/core/command-class.d.ts +697 -0
  224. package/dist/src/core/command-class.js +713 -25
  225. package/dist/src/core/command-class.js.map +1 -1
  226. package/dist/src/core/commit-guard.d.ts +272 -0
  227. package/dist/src/core/commit-guard.js +424 -0
  228. package/dist/src/core/commit-guard.js.map +1 -0
  229. package/dist/src/core/coverage-sources/adapter.d.ts +40 -0
  230. package/dist/src/core/coverage-sources/gh.d.ts +48 -0
  231. package/dist/src/core/coverage-sources/git.d.ts +101 -0
  232. package/dist/src/core/coverage.d.ts +217 -0
  233. package/dist/src/core/credential-spec.d.ts +72 -0
  234. package/dist/src/core/daemon-actor.d.ts +45 -0
  235. package/dist/src/core/daemon-actor.js +54 -0
  236. package/dist/src/core/daemon-actor.js.map +1 -0
  237. package/dist/src/core/dark-session.d.ts +432 -0
  238. package/dist/src/core/dark-session.js +266 -82
  239. package/dist/src/core/dark-session.js.map +1 -1
  240. package/dist/src/core/decision-refusal.d.ts +206 -0
  241. package/dist/src/core/decision-refusal.js +24 -2
  242. package/dist/src/core/decision-refusal.js.map +1 -1
  243. package/dist/src/core/env-file.d.ts +455 -0
  244. package/dist/src/core/env-file.js +60 -1
  245. package/dist/src/core/env-file.js.map +1 -1
  246. package/dist/src/core/execute.d.ts +871 -0
  247. package/dist/src/core/execute.js +59 -8
  248. package/dist/src/core/execute.js.map +1 -1
  249. package/dist/src/core/frontmatter.d.ts +78 -0
  250. package/dist/src/core/gate-window.d.ts +312 -0
  251. package/dist/src/core/gate.d.ts +1449 -0
  252. package/dist/src/core/gate.js +149 -14
  253. package/dist/src/core/gate.js.map +1 -1
  254. package/dist/src/core/gesture-refusal.d.ts +166 -0
  255. package/dist/src/core/gesture-refusal.js +188 -0
  256. package/dist/src/core/gesture-refusal.js.map +1 -0
  257. package/dist/src/core/git-run.d.ts +73 -0
  258. package/dist/src/core/harness-version.d.ts +157 -0
  259. package/dist/src/core/harness-version.js +4 -1
  260. package/dist/src/core/harness-version.js.map +1 -1
  261. package/dist/src/core/harness-wait.d.ts +55 -0
  262. package/dist/src/core/head-retry.d.ts +107 -0
  263. package/dist/src/core/instance.d.ts +310 -0
  264. package/dist/src/core/instance.js +113 -0
  265. package/dist/src/core/instance.js.map +1 -1
  266. package/dist/src/core/intake-limits.d.ts +247 -0
  267. package/dist/src/core/jcs.d.ts +52 -0
  268. package/dist/src/core/journal.d.ts +144 -0
  269. package/dist/src/core/live-draw.d.ts +436 -0
  270. package/dist/src/core/log-reconcile.d.ts +89 -0
  271. package/dist/src/core/log-subscribe.d.ts +36 -0
  272. package/dist/src/core/log-subscribe.js +162 -0
  273. package/dist/src/core/log-subscribe.js.map +1 -0
  274. package/dist/src/core/log.d.ts +316 -0
  275. package/dist/src/core/log.js.map +1 -1
  276. package/dist/src/core/loop.d.ts +274 -0
  277. package/dist/src/core/loop.js +11 -0
  278. package/dist/src/core/loop.js.map +1 -1
  279. package/dist/src/core/md-fence.d.ts +41 -0
  280. package/dist/src/core/money.d.ts +147 -0
  281. package/dist/src/core/payload-census.d.ts +74 -0
  282. package/dist/src/core/payload-store.d.ts +175 -0
  283. package/dist/src/core/payload.d.ts +71 -0
  284. package/dist/src/core/policy-diff.d.ts +292 -0
  285. package/dist/src/core/policy-diff.js +27 -4
  286. package/dist/src/core/policy-diff.js.map +1 -1
  287. package/dist/src/core/policy-expectations.d.ts +199 -0
  288. package/dist/src/core/policy-explain.d.ts +160 -0
  289. package/dist/src/core/policy-explain.js +63 -3
  290. package/dist/src/core/policy-explain.js.map +1 -1
  291. package/dist/src/core/policy-load.d.ts +567 -0
  292. package/dist/src/core/policy-load.js +36 -6
  293. package/dist/src/core/policy-load.js.map +1 -1
  294. package/dist/src/core/policy-match.d.ts +324 -0
  295. package/dist/src/core/policy-match.js +72 -9
  296. package/dist/src/core/policy-match.js.map +1 -1
  297. package/dist/src/core/policy-proposal.d.ts +317 -0
  298. package/dist/src/core/policy-proposal.js +102 -2
  299. package/dist/src/core/policy-proposal.js.map +1 -1
  300. package/dist/src/core/prompt-layout.d.ts +221 -0
  301. package/dist/src/core/protected-path-guard.d.ts +566 -0
  302. package/dist/src/core/protected-path-guard.js +848 -55
  303. package/dist/src/core/protected-path-guard.js.map +1 -1
  304. package/dist/src/core/question-preempted.d.ts +141 -0
  305. package/dist/src/core/question-preempted.js +152 -0
  306. package/dist/src/core/question-preempted.js.map +1 -0
  307. package/dist/src/core/read-scope.d.ts +172 -0
  308. package/dist/src/core/read-scope.js +252 -0
  309. package/dist/src/core/read-scope.js.map +1 -0
  310. package/dist/src/core/registration.d.ts +25 -0
  311. package/dist/src/core/reindex.d.ts +99 -0
  312. package/dist/src/core/sampler.d.ts +313 -0
  313. package/dist/src/core/sandbox.d.ts +371 -0
  314. package/dist/src/core/sandbox.js +190 -1
  315. package/dist/src/core/sandbox.js.map +1 -1
  316. package/dist/src/core/seal.d.ts +165 -0
  317. package/dist/src/core/sender-identity.d.ts +476 -0
  318. package/dist/src/core/sender-identity.js +572 -0
  319. package/dist/src/core/sender-identity.js.map +1 -0
  320. package/dist/src/core/shlex.d.ts +102 -0
  321. package/dist/src/core/shlex.js +159 -0
  322. package/dist/src/core/shlex.js.map +1 -0
  323. package/dist/src/core/state.d.ts +505 -0
  324. package/dist/src/core/task-file.d.ts +185 -0
  325. package/dist/src/core/telegram-config.d.ts +93 -0
  326. package/dist/src/core/token.d.ts +409 -0
  327. package/dist/src/core/token.js +21 -38
  328. package/dist/src/core/token.js.map +1 -1
  329. package/dist/src/core/validate.d.ts +138 -0
  330. package/dist/src/core/values.d.ts +147 -0
  331. package/dist/src/core/values.js +36 -1
  332. package/dist/src/core/values.js.map +1 -1
  333. package/dist/src/core/vault.d.ts +291 -0
  334. package/dist/src/core/verified-snapshot.d.ts +204 -0
  335. package/dist/src/core/verify.d.ts +336 -0
  336. package/dist/src/core/version.d.ts +8 -0
  337. package/dist/src/core/wysiwys.d.ts +370 -0
  338. package/dist/src/daemon/advance-child.d.ts +39 -0
  339. package/dist/src/daemon/advance.d.ts +476 -0
  340. package/dist/src/daemon/advance.js +25 -4
  341. package/dist/src/daemon/advance.js.map +1 -1
  342. package/dist/src/daemon/audit.d.ts +87 -0
  343. package/dist/src/daemon/daemon.d.ts +1180 -0
  344. package/dist/src/daemon/daemon.js +9 -0
  345. package/dist/src/daemon/daemon.js.map +1 -1
  346. package/dist/src/daemon/dark-session.d.ts +64 -0
  347. package/dist/src/daemon/draw-child.d.ts +36 -0
  348. package/dist/src/daemon/draw.d.ts +154 -0
  349. package/dist/src/daemon/git-evidence.d.ts +173 -0
  350. package/dist/src/daemon/git-evidence.js +1 -1
  351. package/dist/src/daemon/projection.d.ts +180 -0
  352. package/dist/src/daemon/prune.d.ts +207 -0
  353. package/dist/src/mcp/http.d.ts +113 -0
  354. package/dist/src/mcp/server.d.ts +265 -0
  355. package/dist/src/mcp/server.js +17 -1
  356. package/dist/src/mcp/server.js.map +1 -1
  357. package/docs/adapter-api.md +106 -0
  358. package/docs/cli-reference.md +1316 -63
  359. package/docs/codex-enforced-session.md +103 -0
  360. package/docs/codex-workspace-broker.md +118 -0
  361. package/package.json +14 -2
  362. package/schema/codex-instance.schema.json +82 -0
  363. package/schema/event.schema.json +539 -9
  364. package/schema/fixtures/codex-instance/invalid/unpinned-codex-version.json +40 -0
  365. package/schema/fixtures/codex-instance/valid/canonical.json +40 -0
  366. package/schema/fixtures/event/invalid/approval-granted-sender-hashed-false.json +20 -0
  367. package/schema/fixtures/event/invalid/approval-granted-sender-hashed-raw-id.json +20 -0
  368. package/schema/fixtures/event/invalid/audit-gesture-refused-human-actor.json +16 -0
  369. package/schema/fixtures/event/invalid/audit-gesture-refused-no-actor-no-sender.json +15 -0
  370. package/schema/fixtures/event/invalid/audit-gesture-refused-unknown-gesture.json +16 -0
  371. package/schema/fixtures/event/invalid/audit-question-preempted-agent-actor.json +16 -0
  372. package/schema/fixtures/event/invalid/audit-question-preempted-no-question-id.json +16 -0
  373. package/schema/fixtures/event/invalid/audit-question-preempted-unknown-source.json +15 -0
  374. package/schema/fixtures/event/invalid/gate-path-signed-off-absolute-path.json +14 -0
  375. package/schema/fixtures/event/invalid/gate-path-signed-off-agent-actor.json +14 -0
  376. package/schema/fixtures/event/invalid/gate-path-signed-off-missing-path.json +13 -0
  377. package/schema/fixtures/event/valid/approval-granted-sender-hashed.json +20 -0
  378. package/schema/fixtures/event/valid/audit-gesture-refused-review-note.json +21 -0
  379. package/schema/fixtures/event/valid/audit-gesture-refused-sender-key-unavailable.json +19 -0
  380. package/schema/fixtures/event/valid/audit-gesture-refused.json +19 -0
  381. package/schema/fixtures/event/valid/audit-question-preempted-no-verdict.json +16 -0
  382. package/schema/fixtures/event/valid/audit-question-preempted.json +20 -0
  383. package/schema/fixtures/event/valid/gate-path-signed-off.json +14 -0
  384. package/schema/fixtures/event/valid/harness-kind-claude-code.json +23 -0
  385. package/schema/fixtures/event/valid/harness-kind-codex.json +23 -0
  386. package/schema/fixtures/event/valid/harness-kind-cursor.json +23 -0
  387. package/schema/fixtures/event/valid/harness-kind-grok.json +23 -0
  388. package/schema/fixtures/event/valid/harness-kind-muse.json +23 -0
  389. package/schema/fixtures/policy/invalid/senders-half-keyed.json +20 -0
  390. package/schema/fixtures/policy/valid/canonical.json +1 -1
  391. package/schema/fixtures/policy/valid/senders-keyed.json +24 -0
  392. package/schema/fixtures/policy-md/valid/canonical.md +1 -1
  393. package/schema/fixtures/policy-md/valid/with-values.md +5 -7
  394. package/schema/fixtures/values/invalid/class-shaped.json +1 -1
  395. package/schema/fixtures/values/invalid/duplicate-entry.json +1 -1
  396. package/schema/fixtures/values/invalid/non-string-item.json +1 -1
  397. package/schema/fixtures/values/invalid/over-cap.json +1 -1
  398. package/schema/fixtures/values/invalid/unknown-key.json +1 -1
  399. package/schema/fixtures/values/invalid/version-float.json +1 -0
  400. package/schema/fixtures/values/invalid/version-integer.json +1 -0
  401. package/schema/fixtures/values/invalid/version-wrong-string.json +1 -0
  402. package/schema/fixtures/values/valid/empty-lists.json +2 -3
  403. package/schema/fixtures/values/valid/full.json +5 -7
  404. package/schema/fixtures/values/valid/minimal.json +1 -1
  405. package/schema/fixtures/values-md/invalid/schema-invalid.md +5 -3
  406. package/schema/fixtures/values-md/invalid/two-blocks.md +3 -3
  407. package/schema/fixtures/values-md/invalid/unterminated.md +2 -2
  408. package/schema/fixtures/values-md/invalid/version-1.md +69 -0
  409. package/schema/fixtures/values-md/invalid/version-unquoted.md +64 -0
  410. package/schema/fixtures/values-md/invalid/yaml-error.md +2 -2
  411. package/schema/fixtures/values-md/valid/absent.md +1 -1
  412. package/schema/fixtures/values-md/valid/with-values.md +5 -7
  413. package/schema/policy.schema.json +75 -3
  414. package/schema/values.schema.json +7 -11
  415. package/templates/codex/README.md +9 -0
  416. package/schema/fixtures/values/invalid/version-string.json +0 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * The payload store: one source of bytes for the gate, the render, and every
3
+ * channel (SPEC.md §6.2, §9, §10.4; APRV-28).
4
+ *
5
+ * SPEC.md §6.2 already asks for this in one clause — "The payload itself is
6
+ * stored or referenced by the request so channels can display it; the hash is
7
+ * what approval binds to" — and until now nothing implemented it. The bytes a
8
+ * human had to see before deciding were carried around the runtime by hand:
9
+ * `--payload-dir` for the CLI and web channels, `--payloads` for Telegram, and
10
+ * nothing at all for `approval render`, which is why QUEUE.md's pending count
11
+ * disagreed with the queue every channel showed (the APRV-27 friction case).
12
+ *
13
+ * ## What this is
14
+ *
15
+ * A content-addressed directory, `.approval/payloads/` beside the log, holding
16
+ * one file per bound payload: `<payload_hash>.json`, whose contents are the
17
+ * exact material whose RFC 8785 canonical serialization hashes to the filename.
18
+ * The name *is* the checksum, so the store needs no index, no manifest and no
19
+ * lock: two writers writing the same payload write the same bytes to the same
20
+ * path, and a file either verifies or it is refused.
21
+ *
22
+ * ## Verified on every read, without exception
23
+ *
24
+ * {@link loadPayload} re-canonicalizes and re-hashes what it read and compares
25
+ * that against the filename before returning anything. A file whose contents
26
+ * were edited after it was written refuses `hash-mismatch` and its value is
27
+ * **never returned**, so tampering with the store cannot put different bytes in
28
+ * front of an approver than the ones the request bound to. The recorded binding
29
+ * on `approval.requested` stays authoritative in both directions: the store is a
30
+ * cache of bytes that the log already committed to, and when the two disagree
31
+ * the log is right and the store is refused.
32
+ *
33
+ * This is the same rule the rest of the codebase keeps — files are the
34
+ * interface, the log is the truth, the database (and now the store) is a cache.
35
+ *
36
+ * ## External references
37
+ *
38
+ * A request may name material this runtime cannot hold: a message body in a
39
+ * vault, an object in a bucket. The store records that as `{"$ref": "<uri>"}` in
40
+ * the same `<hash>.json` file, and {@link loadPayload} reports it as a
41
+ * `reference` — deliberately **not** resolved. Resolving a URI would mean
42
+ * fetching bytes at render time from a source this module cannot verify, and a
43
+ * channel that displayed them would be showing an approver something no hash
44
+ * ever bound. So a reference renders as a reference: the channel says where the
45
+ * payload lives and refuses to pretend it has seen it.
46
+ *
47
+ * ## Writes never touch the log
48
+ *
49
+ * Nothing here opens `events.jsonl`. {@link storePayload} writes exactly one
50
+ * file, atomically (temp + rename in the destination directory), and the store
51
+ * directory is a sibling of the log directory rather than a child, so no
52
+ * conceivable store path collides with the log's.
53
+ */
54
+ /** The directory name, beside the log's home: `.approval/payloads/`. */
55
+ export declare const PAYLOAD_STORE_DIRNAME = "payloads";
56
+ /**
57
+ * The store directory for a given log path — the convention every caller uses
58
+ * when no explicit directory is supplied.
59
+ *
60
+ * SPEC.md §9 fixes the log at `<home>/log/events.jsonl`, so the store is
61
+ * `<home>/payloads/`: a sibling of the log directory, never inside it. When a
62
+ * caller points `--log` at some other layout the store lands beside that file
63
+ * instead, which keeps the two together for the ad-hoc case without ever
64
+ * placing payload files in the directory the log is walked from.
65
+ */
66
+ export declare function payloadStoreDirFor(logPath: string): string;
67
+ /** The file one payload hash addresses. */
68
+ export declare function payloadPath(storeDir: string, hash: string): string;
69
+ export type StorePayloadResult = {
70
+ ok: true;
71
+ hash: string;
72
+ path: string;
73
+ } | {
74
+ ok: false;
75
+ code: "unserializable" | "write-failed";
76
+ message: string;
77
+ };
78
+ /**
79
+ * Store payload material and return the hash it is addressed by.
80
+ *
81
+ * The bytes written are the RFC 8785 canonical serialization itself — not
82
+ * `JSON.stringify` of the value — so the file's own bytes hash to its own name
83
+ * and the store is verifiable byte for byte as well as semantically.
84
+ *
85
+ * **Idempotent.** Writing the same value twice writes the same bytes to the same
86
+ * path and reports the same hash. The write is unconditional rather than
87
+ * skipped-if-present, which also means a corrupted file is repaired by the next
88
+ * store of the same payload: content addressing makes "overwrite" and "leave
89
+ * alone" the same operation for anything that was ever valid.
90
+ *
91
+ * Refuses `unserializable` for material RFC 8785 cannot serialize (a cycle, a
92
+ * NaN, a function). A payload that cannot be canonicalized cannot be bound to,
93
+ * so it must not be stored under a hash that would then name something else.
94
+ */
95
+ export declare function storePayload(storeDir: string, value: unknown): StorePayloadResult;
96
+ /**
97
+ * Record an external reference for a payload this runtime does not hold.
98
+ *
99
+ * The hash is supplied by the caller because a reference does not determine one:
100
+ * the binding is a fact about the *payload*, which lives elsewhere, and the
101
+ * reference is only a pointer to it. {@link loadPayload} reports the pointer and
102
+ * resolves nothing — see the module header.
103
+ */
104
+ export declare function storeReference(storeDir: string, hash: string, reference: string): StorePayloadResult;
105
+ /**
106
+ * Every payload hash the store currently holds, sorted.
107
+ *
108
+ * Only `<hash>.json` names whose stem is a well-formed `payload_hash` are
109
+ * reported. A directory, a dotfile (the temp name an interrupted
110
+ * {@link writeAtomic} leaves behind), and anything else a human dropped in the
111
+ * directory are not payloads the store addresses, so no caller — the daemon's
112
+ * pruner least of all — is ever handed one as if it were.
113
+ *
114
+ * An unreadable or absent directory yields the empty list rather than throwing:
115
+ * a store that cannot be listed holds nothing this process can act on, which is
116
+ * the fail-closed reading for every caller here (reporting counts, deciding what
117
+ * to prune).
118
+ */
119
+ export declare function listStoredPayloadHashes(storeDir: string): string[];
120
+ /** Why a removal did not happen. `absent` is a success for every caller here. */
121
+ export type RemovePayloadResult = {
122
+ ok: true;
123
+ path: string;
124
+ existed: boolean;
125
+ } | {
126
+ ok: false;
127
+ code: "unlink-failed";
128
+ message: string;
129
+ path: string;
130
+ };
131
+ /**
132
+ * Delete the bytes stored under `hash`.
133
+ *
134
+ * **Daemon-only.** SPEC.md §5.2: "Pruning is performed by the daemon and by
135
+ * nothing else." Nothing in the CLI calls this, and the retention rule that
136
+ * decides *which* hash reaches it lives in `daemon/prune.ts`, which appends the
137
+ * `payload.pruned` event before the file goes. This function is the unlink and
138
+ * nothing more: it judges no retention, reads no policy, and touches no log.
139
+ *
140
+ * A file that is already gone reports `existed: false` and `ok`. The caller's
141
+ * intent is that the bytes not be there, and a removal that raced another
142
+ * removal (or completed a crash-interrupted one) achieved exactly that.
143
+ */
144
+ export declare function removeStoredPayload(storeDir: string, hash: string): RemovePayloadResult;
145
+ /** Why a read did not produce material. */
146
+ export type LoadPayloadRefusalCode =
147
+ /** No file is stored under this hash. */
148
+ "absent"
149
+ /** A file exists but its contents do not hash to its name. */
150
+ | "hash-mismatch"
151
+ /** The file could not be read, or is not JSON. */
152
+ | "unreadable"
153
+ /** The file holds a `{"$ref": …}` pointer, which is not resolved here. */
154
+ | "reference";
155
+ export type LoadPayloadResult = {
156
+ ok: true;
157
+ value: unknown;
158
+ path: string;
159
+ } | {
160
+ ok: false;
161
+ code: LoadPayloadRefusalCode;
162
+ message: string;
163
+ path: string;
164
+ /** The pointer, when `code` is `reference`. */
165
+ reference?: string;
166
+ };
167
+ /**
168
+ * Load the material stored under `hash`, verifying it against `hash`.
169
+ *
170
+ * The verification is unconditional and the value is withheld when it fails:
171
+ * `hash-mismatch` says the file on disk is not the payload the request bound to,
172
+ * and returning it "so the caller can decide" would hand a channel exactly the
173
+ * bytes the binding exists to keep away from an approver.
174
+ */
175
+ export declare function loadPayload(storeDir: string, hash: string): LoadPayloadResult;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Content binding: the hash an approval is bound to (amended SPEC.md §6.2, §10,
3
+ * APRV-20 pass two / amendment A1).
4
+ *
5
+ * ## What this buys
6
+ *
7
+ * Before content binding, a grant approved an *action key*. The bytes that key
8
+ * would ultimately execute were whatever the executor happened to hold at
9
+ * execution time, which is to say: whatever the agent decided after the human
10
+ * said yes. The amended §10 closes that:
11
+ *
12
+ * > An execution token is bound to the request, its `idempotency_key`, AND its
13
+ * > `payload_hash`. Adapters and `approval run` MUST recompute the hash of the
14
+ * > payload they are about to execute and MUST refuse, with a distinct
15
+ * > machine-readable reason (`payload-mismatch`), when it differs from the hash
16
+ * > the grant recorded. A grant therefore approves specific bytes.
17
+ *
18
+ * So the hash is the *whole* mechanism: `core/gate.ts` refuses to admit a manual
19
+ * action whose declaration carries none (`payload-hash-required`), copies it
20
+ * onto `approval.requested` and then onto `approval.granted`, and
21
+ * `core/token.ts` refuses to spend a token against different bytes
22
+ * (`payload-mismatch`).
23
+ *
24
+ * ## Why JCS, and why not "just hash the string"
25
+ *
26
+ * §6.2 says "SHA-256 over the RFC 8785 canonical serialization of the action's
27
+ * concrete payload". Canonicalization is what makes the hash reproducible across
28
+ * two implementations that agree about the *payload* but not about key order,
29
+ * whitespace, or number formatting — which is exactly the situation an adapter
30
+ * written in another language is in. The same canonicalizer the log's hash chain
31
+ * uses (`core/jcs.ts`) is used here, so there is one serialization rule in this
32
+ * codebase and not two.
33
+ *
34
+ * ## The `approval run` payload
35
+ *
36
+ * §6.2 names it: "for `approval run`, the argv array and cwd". {@link
37
+ * runPayloadHash} is that definition made executable — the hash of
38
+ * `{"argv": [...], "cwd": "..."}` — and `approval run` computes it
39
+ * automatically from the command it is about to spawn. An adapter whose payload
40
+ * is something else (a message body and its recipients, a proposed record)
41
+ * hashes that with {@link payloadHash} and presents the result explicitly.
42
+ *
43
+ * The cwd is inside the hash on purpose: `rm -rf build` means two different
44
+ * things in two different directories, and a binding that ignored the working
45
+ * directory would approve one of them and execute the other.
46
+ *
47
+ * Pure: no I/O, no clock, no randomness.
48
+ */
49
+ /** The form a `payload_hash` takes everywhere: SHA-256, lowercase hex. */
50
+ export declare const PAYLOAD_HASH_PATTERN: RegExp;
51
+ /** Is this a well-formed `payload_hash`? The schema says the same thing. */
52
+ export declare function isPayloadHash(value: unknown): value is string;
53
+ /**
54
+ * SHA-256 (lowercase hex) over the RFC 8785 canonical serialization of a
55
+ * payload — the definition amended SPEC.md §6.2 gives for `payload_hash`.
56
+ *
57
+ * Throws `JcsError` for a value RFC 8785 cannot serialize (a cycle, a NaN, a
58
+ * function). That is deliberate: a payload that cannot be canonicalized cannot
59
+ * be bound to, and returning a plausible-looking digest for it would be worse
60
+ * than failing.
61
+ */
62
+ export declare function payloadHash(value: unknown): string;
63
+ /**
64
+ * The `payload_hash` of an `approval run` invocation: the argv array and cwd.
65
+ *
66
+ * `argv` is the child's argv as it will actually be spawned — the command name
67
+ * first, then its arguments — not the `approval` wrapper's own flags, which
68
+ * have no side effect to bind. `cwd` is the absolute directory the child will
69
+ * run in.
70
+ */
71
+ export declare function runPayloadHash(argv: readonly string[], cwd: string): string;
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Semantic policy diff (APRV-30) — what an edit to `APPROVAL.md` actually
3
+ * *changes about the runtime's answers*, computed by the real engine on both
4
+ * versions of the file.
5
+ *
6
+ * ## Why this module exists: two live incidents
7
+ *
8
+ * **seq 2 of this repository's own log.** An amendment was attested and then
9
+ * superseded eleven minutes later, because the operator attested a policy edit
10
+ * that broke a pinned dogfood assertion — a fact nobody learned until the test
11
+ * suite ran, well after the bytes had been signed for. Nothing in the ceremony
12
+ * had asked "what does this edit change?" before recording "a human saw these
13
+ * bytes".
14
+ *
15
+ * **The unsigned interregnum.** Commit `f829e6c` edited the policy file; its
16
+ * attestation landed in a later commit. In between, the repository was carrying
17
+ * an *inoperative* policy: `checkAttestation` reported `hash-mismatch`, and
18
+ * every gate operation refused. The edit and the attestation were two acts when
19
+ * they should have been one.
20
+ *
21
+ * Both incidents share a shape: the policy edit was treated as a text change
22
+ * rather than as an amendment with consequences. This module supplies the
23
+ * missing half of the ceremony — the consequences — and `cli/amend.ts` supplies
24
+ * the ceremony itself.
25
+ *
26
+ * ## What is compared, and how
27
+ *
28
+ * Nothing here re-implements matching, specificity, the irreversibility floor,
29
+ * or defaulting. {@link diffPolicies} calls `resolve()` from
30
+ * `core/policy-match.ts` on **both** loads for the same probe class, and reports
31
+ * the pairs that differ. A diff that computed the answer a second way could
32
+ * disagree with the engine, and the diff would be the more convincing lie.
33
+ *
34
+ * Five sections:
35
+ *
36
+ * - **classes** — resolution changes (autonomy, provenance, matched pattern)
37
+ * over a probe set: every key of either version's `classes` map, plus the
38
+ * caller's `sampleClasses` (the CLI passes SPEC.md §7's top-level namespaces).
39
+ * - **approvers** — approvers added, removed, or whose channel reachability
40
+ * changed, plus the class rules left naming an approver the policy no longer
41
+ * defines. Losing the only human who can be reached for a class is an
42
+ * availability change disguised as a config tweak.
43
+ * - **defaults** — `autonomy`, `channel`, `approval_ttl`, `on_expiry`.
44
+ * - **budgets** — every `(scope, limit)` pair, old -> new. Scopes are the
45
+ * `budgets` map's keys plus `classes.<pattern>` for a rule's `limits`.
46
+ * - **vocabulary** — every other key of the policy document, by dotted path,
47
+ * before -> after. See below.
48
+ *
49
+ * ## The vocabulary section, and the incident that added it (APRV-111)
50
+ *
51
+ * On 2026-08-20 a real amendment added `protected_paths: [SPEC.md]` — a key
52
+ * that decides which file edits are `policy.edit`, which is to say which edits
53
+ * a human has to approve — and this module reported **"no semantic change"**.
54
+ * The four sections above were the whole diff, and none of them can see a
55
+ * top-level key outside `classes` / `approvers` / `defaults` / `budgets`. A
56
+ * human was shown "nothing changed" while signing bytes that moved the gate.
57
+ *
58
+ * The fix is not a fifth hand-written list, because a hand-written list is
59
+ * exactly what went stale: `protected_paths` was added to the vocabulary by
60
+ * APRV-107 and nothing here changed. {@link diffPolicies} now walks **both
61
+ * documents' actual keys**, flattens them to dotted paths, and reports every
62
+ * pair that differs. New spec keys are covered the day they parse, with no edit
63
+ * to this file. Paths the dedicated sections already report are dropped, so
64
+ * nothing is said twice.
65
+ *
66
+ * Two consequences worth stating:
67
+ *
68
+ * - **Unknown top-level keys are named, never dropped.** `policy.schema.json`
69
+ * is closed, so an unrecognised key means the load FAILED and the policy is
70
+ * all-manual. That key is reported (marked `recognised: false`) whether or
71
+ * not its value changed: the display side fails closed too, and an edit this
72
+ * module cannot describe must be called out rather than summarised as no
73
+ * change. Which keys are known is READ FROM THAT SCHEMA since APRV-296 (see
74
+ * {@link policyTopLevelKeys}), because the hand-written copy that stood here
75
+ * fell behind it and warned an operator about three `daemon.*` keys the
76
+ * schema had admitted for a month.
77
+ * - **A side whose YAML never parsed has no vocabulary to read.** Then
78
+ * {@link PolicyDiff.vocabularyComparable} is `false` and the renderer says the
79
+ * rest of the document was not compared, instead of printing "no semantic
80
+ * change" over an unexamined document.
81
+ *
82
+ * ## Probes are a report, not a proof
83
+ *
84
+ * The class space is infinite; a diff over it cannot be exhaustive. The probe
85
+ * set is stated in the output ({@link PolicyDiff.probes}) precisely so a reader
86
+ * knows what was *not* examined. Wildcard keys (`read.*`) are probed as the
87
+ * literal strings they are, which is the honest thing to do without inventing
88
+ * action classes that nobody declared: both versions are asked the same
89
+ * question, so a difference in the answers is a real difference, and a class
90
+ * outside the probe set may still have changed.
91
+ *
92
+ * ## Fail-closed sides are rendered honestly
93
+ *
94
+ * A side that fails to load is not "an empty policy". It resolves **every**
95
+ * class to `manual` with provenance `fail-closed`, and `resolve()` already says
96
+ * so, so the class section stays truthful with no special case. The structural
97
+ * sections are different: a failed load has no `approvers`, `defaults` or
98
+ * `budgets` to read, and reporting them as removed would assert a change the
99
+ * file never made. So when either side failed, those three sections are empty
100
+ * and {@link PolicyDiff.structuralComparable} is `false`, with
101
+ * {@link PolicyDiff.beforeFailure} / {@link PolicyDiff.afterFailure} carrying
102
+ * the codes a renderer prints as "everything manual (fail-closed: <code>)".
103
+ *
104
+ * Deterministic: no clock, no randomness, and probe order is sorted, so the
105
+ * same two loads always produce a byte-identical diff. The one read of the
106
+ * filesystem is the policy SCHEMA, once per process, for the key vocabulary
107
+ * described above; nothing here reads a policy file, and no answer depends on
108
+ * anything but the two loads it was handed.
109
+ */
110
+ import type { Autonomy, PolicyLoadErrorCode, PolicyLoadResult } from "./policy-load.js";
111
+ import { type Provenance } from "./policy-match.js";
112
+ /**
113
+ * SPEC.md §7's reserved top-level namespaces, in table order.
114
+ *
115
+ * Exported here rather than in the CLI because they are a fact about the spec's
116
+ * taxonomy, not about a command's flags, and because a diff that only probed
117
+ * the classes a policy happens to name would go quiet on exactly the edit that
118
+ * matters most: one that *stops* naming a dangerous namespace and lets it fall
119
+ * through to `defaults.autonomy`.
120
+ */
121
+ export declare const SPEC_NAMESPACES: readonly string[];
122
+ /** One version's answer for one probe class. */
123
+ export interface ResolutionSnapshot {
124
+ autonomy: Autonomy;
125
+ provenance: Provenance;
126
+ /** The pattern that matched, or `null` for a default / fail-closed answer. */
127
+ pattern: string | null;
128
+ }
129
+ /** A probe class whose resolution differs between the two versions. */
130
+ export interface ClassResolutionChange {
131
+ /** The probe string that was resolved under both versions. */
132
+ class: string;
133
+ before: ResolutionSnapshot;
134
+ after: ResolutionSnapshot;
135
+ /** Present whenever the truthful irreversible outcome changed. */
136
+ irreversible?: {
137
+ before: ResolutionSnapshot;
138
+ after: ResolutionSnapshot;
139
+ };
140
+ }
141
+ /** How an approver entry changed. */
142
+ export type ApproverChangeKind = "added" | "removed" | "channels-changed";
143
+ /** An approver added, removed, or re-channelled. */
144
+ export interface ApproverChange {
145
+ approver: string;
146
+ change: ApproverChangeKind;
147
+ /** Channels before; `null` when the approver did not exist. */
148
+ beforeChannels: string[] | null;
149
+ /** Channels after; `null` when the approver no longer exists. */
150
+ afterChannels: string[] | null;
151
+ /**
152
+ * Class patterns in the AFTER policy that still name this approver although
153
+ * the AFTER `approvers` map no longer defines them — a rule whose decider is
154
+ * reachable on nothing.
155
+ *
156
+ * `policy.schema.json` already forbids an approver with an empty `channels`
157
+ * list ("an approver reachable nowhere can never grant"), so the only
158
+ * reachability hole a *loadable* policy can have is this dangling reference:
159
+ * the schema says explicitly that the rule-to-approver cross-reference is a
160
+ * runtime check, not a schema constraint. Empty for every other change.
161
+ */
162
+ danglingRules: string[];
163
+ }
164
+ /** A `defaults` field whose value changed. `null` means "absent". */
165
+ export interface DefaultsChange {
166
+ field: "autonomy" | "channel" | "approval_ttl" | "on_expiry";
167
+ before: string | null;
168
+ after: string | null;
169
+ }
170
+ /**
171
+ * A policy key outside the four dedicated sections, before -> after (APRV-111).
172
+ *
173
+ * `key` is a dotted path into the policy document (`protected_paths`,
174
+ * `audit.skew_tolerance`, `channels.telegram.token_env`). Values are rendered
175
+ * for reading, not for parsing: scalars as themselves, sequences and anything
176
+ * else as JSON. `null` means the key was absent on that side.
177
+ */
178
+ export interface VocabularyChange {
179
+ key: string;
180
+ /**
181
+ * Is this path's TOP-LEVEL key part of SPEC.md §5.2's policy vocabulary?
182
+ *
183
+ * `false` means the schema does not know the key, which means the policy does
184
+ * not load, which means every class is `manual`. Reported even when the value
185
+ * did not change — see the module header.
186
+ */
187
+ recognised: boolean;
188
+ before: string | null;
189
+ after: string | null;
190
+ }
191
+ /** A budget or class limit whose value changed. `null` means "absent". */
192
+ export interface BudgetChange {
193
+ /** `budgets` key (e.g. `global`) or `classes.<pattern>` for a rule limit. */
194
+ scope: string;
195
+ /** The limit's name, e.g. `daily_usd`, `daily_actions`, `max_usd`. */
196
+ limit: string;
197
+ before: number | null;
198
+ after: number | null;
199
+ }
200
+ /** The result of {@link diffPolicies}. Frozen shape: the CLI prints it as JSON. */
201
+ export interface PolicyDiff {
202
+ /** Non-null when the BEFORE side failed to load: everything was manual. */
203
+ beforeFailure: {
204
+ code: PolicyLoadErrorCode;
205
+ message: string;
206
+ } | null;
207
+ /** Non-null when the AFTER side failed to load: everything becomes manual. */
208
+ afterFailure: {
209
+ code: PolicyLoadErrorCode;
210
+ message: string;
211
+ } | null;
212
+ /**
213
+ * False when either side failed to load, in which case `approvers`,
214
+ * `defaults` and `budgets` are empty because a failed load has no structure
215
+ * to compare — not because nothing changed.
216
+ */
217
+ structuralComparable: boolean;
218
+ /** Every probe class that was resolved, sorted; the stated scope of the diff. */
219
+ probes: string[];
220
+ classes: ClassResolutionChange[];
221
+ approvers: ApproverChange[];
222
+ defaults: DefaultsChange[];
223
+ budgets: BudgetChange[];
224
+ /**
225
+ * Every other key of the document, changed or unrecognised (APRV-111).
226
+ * Sorted by `key`, so the same two policies always diff byte-identically.
227
+ */
228
+ vocabulary: VocabularyChange[];
229
+ /**
230
+ * False when a side's document could not be read as a mapping at all (its
231
+ * YAML did not parse, or the file was missing), in which case `vocabulary` is
232
+ * empty because there were no keys to walk — not because none changed.
233
+ */
234
+ vocabularyComparable: boolean;
235
+ /** True when no section reported a change. */
236
+ unchanged: boolean;
237
+ }
238
+ /**
239
+ * The policy schema on disk, the file `core/validate.ts` validates against.
240
+ *
241
+ * Derived here rather than imported from `DEFAULT_SCHEMA_DIR` so this module
242
+ * keeps its empty runtime dependency graph: importing `validate.ts` would pull
243
+ * Ajv into every process that renders a diff, the Telegram channel included.
244
+ * The two derivations are the same walk from the same directory, and
245
+ * `tests/policy-vocabulary.test.ts` asserts they name one file, so a schema
246
+ * directory that ever moves fails there rather than drifting quietly.
247
+ */
248
+ export declare const POLICY_SCHEMA_PATH: string;
249
+ /**
250
+ * SPEC.md §5.2's top-level policy keys, READ FROM `policy.schema.json`
251
+ * (APRV-296).
252
+ *
253
+ * Used for ONE decision: whether a key the document carries is part of the
254
+ * vocabulary at all. It is not used to decide what to walk — the documents' own
255
+ * keys decide that — so this list only ever changes what a key is CALLED in the
256
+ * report.
257
+ *
258
+ * It used to be a second, hand-written copy of the schema's top-level
259
+ * `properties`, and the 2026-09-07 ceremony is what a hand-written copy costs:
260
+ * the amend diff printed `daemon.full_reproof_after: 60s -> 60s (UNKNOWN KEY:
261
+ * … the policy FAILS CLOSED to all-manual until it is removed)` for three
262
+ * `daemon.*` keys the schema had admitted since APRV-217, which the same
263
+ * ceremony then loaded cleanly and resolved every pin against. A false
264
+ * fail-closed warning in a ceremony's output is worse than no warning: it
265
+ * teaches the operator reading it that the warnings are noise.
266
+ *
267
+ * Reading the schema is the fix that cannot go stale, because the schema is
268
+ * what actually decides whether the key loads. The read is memoised for the
269
+ * life of the process, which `core/validate.ts` deliberately does not do for
270
+ * validation: this is DISPLAY vocabulary over a file shipped with the package,
271
+ * not a verdict, and a schema edited under a running process changes what the
272
+ * next diff CALLS a key rather than whether that key was validated.
273
+ */
274
+ export declare function policyTopLevelKeys(): readonly string[];
275
+ /**
276
+ * Diff two loaded policies by what the engine answers under each.
277
+ *
278
+ * `before` and `after` are whole {@link PolicyLoadResult}s, failures included —
279
+ * see the module header for why a failed side is reported rather than treated
280
+ * as empty. `sampleClasses` widens the probe set beyond the two policies' own
281
+ * class keys; the CLI supplies {@link SPEC_NAMESPACES}.
282
+ */
283
+ export declare function diffPolicies(before: PolicyLoadResult, after: PolicyLoadResult, sampleClasses?: readonly string[]): PolicyDiff;
284
+ /**
285
+ * Render a {@link PolicyDiff} as the lines the CLI prints.
286
+ *
287
+ * Lives beside the diff rather than in the CLI for the same reason
288
+ * `decisionPath` lives in `policy-explain.ts`: the human rendering and the
289
+ * machine shape must be derived from one value, or they will eventually
290
+ * disagree about what changed.
291
+ */
292
+ export declare function renderDiff(diff: PolicyDiff): string[];
@@ -319,7 +319,13 @@ function failureOf(load) {
319
319
  return load.ok ? null : { code: load.code, message: load.message };
320
320
  }
321
321
  function snapshot(load, probe) {
322
- const resolution = resolve(load, probe);
322
+ return snapshotFor(load, probe, false);
323
+ }
324
+ function irreversibleSnapshot(load, probe) {
325
+ return snapshotFor(load, probe, true);
326
+ }
327
+ function snapshotFor(load, probe, irreversible) {
328
+ const resolution = resolve(load, probe, irreversible ? { reversible: false } : {});
323
329
  return {
324
330
  autonomy: resolution.autonomy,
325
331
  provenance: resolution.provenance,
@@ -462,9 +468,21 @@ export function diffPolicies(before, after, sampleClasses = []) {
462
468
  for (const probe of probes) {
463
469
  const previous = snapshot(before, probe);
464
470
  const next = snapshot(after, probe);
465
- if (sameSnapshot(previous, next))
471
+ const previousIrreversible = irreversibleSnapshot(before, probe);
472
+ const nextIrreversible = irreversibleSnapshot(after, probe);
473
+ const ordinaryChanged = !sameSnapshot(previous, next);
474
+ const irreversibleChanged = !sameSnapshot(previousIrreversible, nextIrreversible);
475
+ if (!ordinaryChanged && !irreversibleChanged)
466
476
  continue;
467
- classes.push({ class: probe, before: previous, after: next });
477
+ const change = {
478
+ class: probe,
479
+ before: previous,
480
+ after: next,
481
+ };
482
+ if (irreversibleChanged) {
483
+ change.irreversible = { before: previousIrreversible, after: nextIrreversible };
484
+ }
485
+ classes.push(change);
468
486
  }
469
487
  const structuralComparable = before.ok && after.ok;
470
488
  const approvers = structuralComparable ? diffApprovers(beforePolicy, afterPolicy) : [];
@@ -518,7 +536,12 @@ export function renderDiff(diff) {
518
536
  if (diff.classes.length > 0) {
519
537
  lines.push(`class resolutions changed (${diff.classes.length}):`);
520
538
  for (const change of diff.classes) {
521
- lines.push(` ${change.class}: ${describeSnapshot(change.before)} -> ${describeSnapshot(change.after)}`);
539
+ if (!sameSnapshot(change.before, change.after)) {
540
+ lines.push(` ${change.class}: ${describeSnapshot(change.before)} -> ${describeSnapshot(change.after)}`);
541
+ }
542
+ if (change.irreversible !== undefined) {
543
+ lines.push(` ${change.class} (reversible: false): ${describeSnapshot(change.irreversible.before)} -> ${describeSnapshot(change.irreversible.after)}`);
544
+ }
522
545
  }
523
546
  }
524
547
  if (diff.approvers.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"policy-diff.js","sourceRoot":"","sources":["../../../src/core/policy-diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-diff.js","sourceRoot":"","sources":["../../../src/core/policy-diff.ts"],"names":[],"mappings":"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"}