approval-md 0.0.1 → 0.2.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 (722) hide show
  1. package/LICENSE +176 -0
  2. package/NOTICE +5 -0
  3. package/README.md +940 -4
  4. package/SPEC.md +476 -34
  5. package/cli.js +29 -3
  6. package/dist/src/adapters/agentmail.d.ts +426 -0
  7. package/dist/src/adapters/agentmail.js +1200 -0
  8. package/dist/src/adapters/agentmail.js.map +1 -0
  9. package/dist/src/adapters/conformance.d.ts +149 -0
  10. package/dist/src/adapters/conformance.js +461 -0
  11. package/dist/src/adapters/conformance.js.map +1 -0
  12. package/dist/src/adapters/contract.d.ts +628 -0
  13. package/dist/src/adapters/contract.js +1035 -0
  14. package/dist/src/adapters/contract.js.map +1 -0
  15. package/dist/src/adapters/email.d.ts +324 -0
  16. package/dist/src/adapters/email.js +749 -0
  17. package/dist/src/adapters/email.js.map +1 -0
  18. package/dist/src/adapters/env-passphrase.d.ts +93 -0
  19. package/dist/src/adapters/env-passphrase.js +132 -0
  20. package/dist/src/adapters/env-passphrase.js.map +1 -0
  21. package/dist/src/adapters/public.d.ts +11 -0
  22. package/dist/src/adapters/public.js +11 -0
  23. package/dist/src/adapters/public.js.map +1 -0
  24. package/dist/src/adapters/registry.d.ts +59 -0
  25. package/dist/src/adapters/registry.js +77 -0
  26. package/dist/src/adapters/registry.js.map +1 -0
  27. package/dist/src/adapters/smtp.d.ts +213 -0
  28. package/dist/src/adapters/smtp.js +499 -0
  29. package/dist/src/adapters/smtp.js.map +1 -0
  30. package/dist/src/adapters/vault-provider.d.ts +114 -0
  31. package/dist/src/adapters/vault-provider.js +161 -0
  32. package/dist/src/adapters/vault-provider.js.map +1 -0
  33. package/dist/src/adapters/zzz.d.ts +66 -0
  34. package/dist/src/adapters/zzz.js +299 -0
  35. package/dist/src/adapters/zzz.js.map +1 -0
  36. package/dist/src/channels/batch.d.ts +109 -0
  37. package/dist/src/channels/batch.js +121 -0
  38. package/dist/src/channels/batch.js.map +1 -0
  39. package/dist/src/channels/cli.d.ts +193 -0
  40. package/dist/src/channels/cli.js +468 -0
  41. package/dist/src/channels/cli.js.map +1 -0
  42. package/dist/src/channels/conformance.d.ts +92 -0
  43. package/dist/src/channels/conformance.js +445 -0
  44. package/dist/src/channels/conformance.js.map +1 -0
  45. package/dist/src/channels/contract.d.ts +623 -0
  46. package/dist/src/channels/contract.js +494 -0
  47. package/dist/src/channels/contract.js.map +1 -0
  48. package/dist/src/channels/payload-view.d.ts +35 -0
  49. package/dist/src/channels/payload-view.js +43 -0
  50. package/dist/src/channels/payload-view.js.map +1 -0
  51. package/dist/src/channels/render-queue.d.ts +149 -0
  52. package/dist/src/channels/render-queue.js +564 -0
  53. package/dist/src/channels/render-queue.js.map +1 -0
  54. package/dist/src/channels/tagging.d.ts +196 -0
  55. package/dist/src/channels/tagging.js +723 -0
  56. package/dist/src/channels/tagging.js.map +1 -0
  57. package/dist/src/channels/telegram.d.ts +1832 -0
  58. package/dist/src/channels/telegram.js +3190 -0
  59. package/dist/src/channels/telegram.js.map +1 -0
  60. package/dist/src/channels/web.d.ts +341 -0
  61. package/dist/src/channels/web.js +903 -0
  62. package/dist/src/channels/web.js.map +1 -0
  63. package/dist/src/cli/adapter.d.ts +90 -0
  64. package/dist/src/cli/adapter.js +288 -0
  65. package/dist/src/cli/adapter.js.map +1 -0
  66. package/dist/src/cli/amend.d.ts +59 -0
  67. package/dist/src/cli/amend.js +2171 -0
  68. package/dist/src/cli/amend.js.map +1 -0
  69. package/dist/src/cli/args.d.ts +43 -0
  70. package/dist/src/cli/args.js +86 -0
  71. package/dist/src/cli/args.js.map +1 -0
  72. package/dist/src/cli/attest.d.ts +41 -0
  73. package/dist/src/cli/attest.js +307 -0
  74. package/dist/src/cli/attest.js.map +1 -0
  75. package/dist/src/cli/audit-card.d.ts +62 -0
  76. package/dist/src/cli/audit-card.js +201 -0
  77. package/dist/src/cli/audit-card.js.map +1 -0
  78. package/dist/src/cli/audit.d.ts +59 -0
  79. package/dist/src/cli/audit.js +460 -0
  80. package/dist/src/cli/audit.js.map +1 -0
  81. package/dist/src/cli/channel-telegram.d.ts +806 -0
  82. package/dist/src/cli/channel-telegram.js +2063 -0
  83. package/dist/src/cli/channel-telegram.js.map +1 -0
  84. package/dist/src/cli/channel-web.d.ts +131 -0
  85. package/dist/src/cli/channel-web.js +357 -0
  86. package/dist/src/cli/channel-web.js.map +1 -0
  87. package/dist/src/cli/channel.d.ts +71 -0
  88. package/dist/src/cli/channel.js +438 -0
  89. package/dist/src/cli/channel.js.map +1 -0
  90. package/dist/src/cli/checkpoint-tap.d.ts +169 -0
  91. package/dist/src/cli/checkpoint-tap.js +238 -0
  92. package/dist/src/cli/checkpoint-tap.js.map +1 -0
  93. package/dist/src/cli/codex.d.ts +2 -0
  94. package/dist/src/cli/codex.js +172 -0
  95. package/dist/src/cli/codex.js.map +1 -0
  96. package/dist/src/cli/coverage.d.ts +61 -0
  97. package/dist/src/cli/coverage.js +343 -0
  98. package/dist/src/cli/coverage.js.map +1 -0
  99. package/dist/src/cli/daemon.d.ts +120 -0
  100. package/dist/src/cli/daemon.js +631 -0
  101. package/dist/src/cli/daemon.js.map +1 -0
  102. package/dist/src/cli/doctor.d.ts +129 -0
  103. package/dist/src/cli/doctor.js +2762 -0
  104. package/dist/src/cli/doctor.js.map +1 -0
  105. package/dist/src/cli/env.d.ts +65 -0
  106. package/dist/src/cli/env.js +302 -0
  107. package/dist/src/cli/env.js.map +1 -0
  108. package/dist/src/cli/execute.d.ts +202 -0
  109. package/dist/src/cli/execute.js +1682 -0
  110. package/dist/src/cli/execute.js.map +1 -0
  111. package/dist/src/cli/exit-codes.d.ts +73 -0
  112. package/dist/src/cli/exit-codes.js +82 -0
  113. package/dist/src/cli/exit-codes.js.map +1 -0
  114. package/dist/src/cli/feedback.d.ts +60 -0
  115. package/dist/src/cli/feedback.js +205 -0
  116. package/dist/src/cli/feedback.js.map +1 -0
  117. package/dist/src/cli/gate-window.d.ts +40 -0
  118. package/dist/src/cli/gate-window.js +294 -0
  119. package/dist/src/cli/gate-window.js.map +1 -0
  120. package/dist/src/cli/gate.d.ts +68 -0
  121. package/dist/src/cli/gate.js +557 -0
  122. package/dist/src/cli/gate.js.map +1 -0
  123. package/dist/src/cli/git-scope.d.ts +190 -0
  124. package/dist/src/cli/git-scope.js +295 -0
  125. package/dist/src/cli/git-scope.js.map +1 -0
  126. package/dist/src/cli/gloss-attach.d.ts +85 -0
  127. package/dist/src/cli/gloss-attach.js +107 -0
  128. package/dist/src/cli/gloss-attach.js.map +1 -0
  129. package/dist/src/cli/gloss-codex-child.d.ts +9 -0
  130. package/dist/src/cli/gloss-codex-child.js +149 -0
  131. package/dist/src/cli/gloss-codex-child.js.map +1 -0
  132. package/dist/src/cli/gloss-codex.d.ts +24 -0
  133. package/dist/src/cli/gloss-codex.js +255 -0
  134. package/dist/src/cli/gloss-codex.js.map +1 -0
  135. package/dist/src/cli/gloss-options.d.ts +42 -0
  136. package/dist/src/cli/gloss-options.js +79 -0
  137. package/dist/src/cli/gloss-options.js.map +1 -0
  138. package/dist/src/cli/gloss.d.ts +265 -0
  139. package/dist/src/cli/gloss.js +362 -0
  140. package/dist/src/cli/gloss.js.map +1 -0
  141. package/dist/src/cli/help.d.ts +103 -0
  142. package/dist/src/cli/help.js +2339 -0
  143. package/dist/src/cli/help.js.map +1 -0
  144. package/dist/src/cli/hook-codex.d.ts +78 -0
  145. package/dist/src/cli/hook-codex.js +167 -0
  146. package/dist/src/cli/hook-codex.js.map +1 -0
  147. package/dist/src/cli/hook.d.ts +331 -0
  148. package/dist/src/cli/hook.js +2849 -0
  149. package/dist/src/cli/hook.js.map +1 -0
  150. package/dist/src/cli/import.d.ts +35 -0
  151. package/dist/src/cli/import.js +175 -0
  152. package/dist/src/cli/import.js.map +1 -0
  153. package/dist/src/cli/init.d.ts +84 -0
  154. package/dist/src/cli/init.js +336 -0
  155. package/dist/src/cli/init.js.map +1 -0
  156. package/dist/src/cli/instructions.d.ts +23 -0
  157. package/dist/src/cli/instructions.js +262 -0
  158. package/dist/src/cli/instructions.js.map +1 -0
  159. package/dist/src/cli/journal.d.ts +41 -0
  160. package/dist/src/cli/journal.js +238 -0
  161. package/dist/src/cli/journal.js.map +1 -0
  162. package/dist/src/cli/log-advance.d.ts +287 -0
  163. package/dist/src/cli/log-advance.js +840 -0
  164. package/dist/src/cli/log-advance.js.map +1 -0
  165. package/dist/src/cli/log-anchor.d.ts +176 -0
  166. package/dist/src/cli/log-anchor.js +387 -0
  167. package/dist/src/cli/log-anchor.js.map +1 -0
  168. package/dist/src/cli/log-checkpoint.d.ts +22 -0
  169. package/dist/src/cli/log-checkpoint.js +128 -0
  170. package/dist/src/cli/log-checkpoint.js.map +1 -0
  171. package/dist/src/cli/log-sync.d.ts +243 -0
  172. package/dist/src/cli/log-sync.js +849 -0
  173. package/dist/src/cli/log-sync.js.map +1 -0
  174. package/dist/src/cli/log-verbs.d.ts +16 -0
  175. package/dist/src/cli/log-verbs.js +360 -0
  176. package/dist/src/cli/log-verbs.js.map +1 -0
  177. package/dist/src/cli/long-help.d.ts +70 -0
  178. package/dist/src/cli/long-help.js +148 -0
  179. package/dist/src/cli/long-help.js.map +1 -0
  180. package/dist/src/cli/main.d.ts +77 -0
  181. package/dist/src/cli/main.js +1206 -0
  182. package/dist/src/cli/main.js.map +1 -0
  183. package/dist/src/cli/mcp.d.ts +52 -0
  184. package/dist/src/cli/mcp.js +306 -0
  185. package/dist/src/cli/mcp.js.map +1 -0
  186. package/dist/src/cli/paths.d.ts +56 -0
  187. package/dist/src/cli/paths.js +79 -0
  188. package/dist/src/cli/paths.js.map +1 -0
  189. package/dist/src/cli/payload.d.ts +58 -0
  190. package/dist/src/cli/payload.js +253 -0
  191. package/dist/src/cli/payload.js.map +1 -0
  192. package/dist/src/cli/policy.d.ts +43 -0
  193. package/dist/src/cli/policy.js +229 -0
  194. package/dist/src/cli/policy.js.map +1 -0
  195. package/dist/src/cli/preflight.d.ts +363 -0
  196. package/dist/src/cli/preflight.js +1175 -0
  197. package/dist/src/cli/preflight.js.map +1 -0
  198. package/dist/src/cli/progress.d.ts +78 -0
  199. package/dist/src/cli/progress.js +112 -0
  200. package/dist/src/cli/progress.js.map +1 -0
  201. package/dist/src/cli/prompt.d.ts +209 -0
  202. package/dist/src/cli/prompt.js +312 -0
  203. package/dist/src/cli/prompt.js.map +1 -0
  204. package/dist/src/cli/quickstart.d.ts +46 -0
  205. package/dist/src/cli/quickstart.js +297 -0
  206. package/dist/src/cli/quickstart.js.map +1 -0
  207. package/dist/src/cli/records.d.ts +34 -0
  208. package/dist/src/cli/records.js +66 -0
  209. package/dist/src/cli/records.js.map +1 -0
  210. package/dist/src/cli/render.d.ts +22 -0
  211. package/dist/src/cli/render.js +132 -0
  212. package/dist/src/cli/render.js.map +1 -0
  213. package/dist/src/cli/sandbox.d.ts +51 -0
  214. package/dist/src/cli/sandbox.js +150 -0
  215. package/dist/src/cli/sandbox.js.map +1 -0
  216. package/dist/src/cli/scaffold.d.ts +79 -0
  217. package/dist/src/cli/scaffold.js +137 -0
  218. package/dist/src/cli/scaffold.js.map +1 -0
  219. package/dist/src/cli/setup-adapter.d.ts +137 -0
  220. package/dist/src/cli/setup-adapter.js +509 -0
  221. package/dist/src/cli/setup-adapter.js.map +1 -0
  222. package/dist/src/cli/setup-channel.d.ts +117 -0
  223. package/dist/src/cli/setup-channel.js +635 -0
  224. package/dist/src/cli/setup-channel.js.map +1 -0
  225. package/dist/src/cli/setup-checkpoint.d.ts +57 -0
  226. package/dist/src/cli/setup-checkpoint.js +196 -0
  227. package/dist/src/cli/setup-checkpoint.js.map +1 -0
  228. package/dist/src/cli/setup-common.d.ts +275 -0
  229. package/dist/src/cli/setup-common.js +376 -0
  230. package/dist/src/cli/setup-common.js.map +1 -0
  231. package/dist/src/cli/setup-flow.d.ts +287 -0
  232. package/dist/src/cli/setup-flow.js +476 -0
  233. package/dist/src/cli/setup-flow.js.map +1 -0
  234. package/dist/src/cli/setup-service.d.ts +96 -0
  235. package/dist/src/cli/setup-service.js +308 -0
  236. package/dist/src/cli/setup-service.js.map +1 -0
  237. package/dist/src/cli/setup.d.ts +202 -0
  238. package/dist/src/cli/setup.js +473 -0
  239. package/dist/src/cli/setup.js.map +1 -0
  240. package/dist/src/cli/style.d.ts +320 -0
  241. package/dist/src/cli/style.js +469 -0
  242. package/dist/src/cli/style.js.map +1 -0
  243. package/dist/src/cli/token.d.ts +39 -0
  244. package/dist/src/cli/token.js +274 -0
  245. package/dist/src/cli/token.js.map +1 -0
  246. package/dist/src/cli/up.d.ts +155 -0
  247. package/dist/src/cli/up.js +849 -0
  248. package/dist/src/cli/up.js.map +1 -0
  249. package/dist/src/cli/usage.d.ts +37 -0
  250. package/dist/src/cli/usage.js +91 -0
  251. package/dist/src/cli/usage.js.map +1 -0
  252. package/dist/src/cli/values.d.ts +40 -0
  253. package/dist/src/cli/values.js +189 -0
  254. package/dist/src/cli/values.js.map +1 -0
  255. package/dist/src/cli/vault.d.ts +59 -0
  256. package/dist/src/cli/vault.js +362 -0
  257. package/dist/src/cli/vault.js.map +1 -0
  258. package/dist/src/cli/verb-registry.d.ts +76 -0
  259. package/dist/src/cli/verb-registry.js +2341 -0
  260. package/dist/src/cli/verb-registry.js.map +1 -0
  261. package/dist/src/cli/wordmark.d.ts +31 -0
  262. package/dist/src/cli/wordmark.js +52 -0
  263. package/dist/src/cli/wordmark.js.map +1 -0
  264. package/dist/src/codex/doctor.d.ts +13 -0
  265. package/dist/src/codex/doctor.js +41 -0
  266. package/dist/src/codex/doctor.js.map +1 -0
  267. package/dist/src/codex/manifest.d.ts +49 -0
  268. package/dist/src/codex/manifest.js +103 -0
  269. package/dist/src/codex/manifest.js.map +1 -0
  270. package/dist/src/codex/templates.d.ts +41 -0
  271. package/dist/src/codex/templates.js +319 -0
  272. package/dist/src/codex/templates.js.map +1 -0
  273. package/dist/src/codex/trust.d.ts +19 -0
  274. package/dist/src/codex/trust.js +183 -0
  275. package/dist/src/codex/trust.js.map +1 -0
  276. package/dist/src/codex/workspace-plan.d.ts +131 -0
  277. package/dist/src/codex/workspace-plan.js +561 -0
  278. package/dist/src/codex/workspace-plan.js.map +1 -0
  279. package/dist/src/core/actor.d.ts +2 -0
  280. package/dist/src/core/actor.js +5 -0
  281. package/dist/src/core/actor.js.map +1 -0
  282. package/dist/src/core/advance-cycle.d.ts +170 -0
  283. package/dist/src/core/advance-cycle.js +200 -0
  284. package/dist/src/core/advance-cycle.js.map +1 -0
  285. package/dist/src/core/agents-md.d.ts +276 -0
  286. package/dist/src/core/agents-md.js +747 -0
  287. package/dist/src/core/agents-md.js.map +1 -0
  288. package/dist/src/core/apply-patch.d.ts +49 -0
  289. package/dist/src/core/apply-patch.js +266 -0
  290. package/dist/src/core/apply-patch.js.map +1 -0
  291. package/dist/src/core/attest.d.ts +420 -0
  292. package/dist/src/core/attest.js +589 -0
  293. package/dist/src/core/attest.js.map +1 -0
  294. package/dist/src/core/audit.d.ts +492 -0
  295. package/dist/src/core/audit.js +882 -0
  296. package/dist/src/core/audit.js.map +1 -0
  297. package/dist/src/core/budgets.d.ts +238 -0
  298. package/dist/src/core/budgets.js +449 -0
  299. package/dist/src/core/budgets.js.map +1 -0
  300. package/dist/src/core/checkpoint.d.ts +500 -0
  301. package/dist/src/core/checkpoint.js +738 -0
  302. package/dist/src/core/checkpoint.js.map +1 -0
  303. package/dist/src/core/child-env.d.ts +88 -0
  304. package/dist/src/core/child-env.js +86 -0
  305. package/dist/src/core/child-env.js.map +1 -0
  306. package/dist/src/core/clock.d.ts +52 -0
  307. package/dist/src/core/clock.js +43 -0
  308. package/dist/src/core/clock.js.map +1 -0
  309. package/dist/src/core/command-class.d.ts +543 -0
  310. package/dist/src/core/command-class.js +2356 -0
  311. package/dist/src/core/command-class.js.map +1 -0
  312. package/dist/src/core/coverage-sources/adapter.d.ts +40 -0
  313. package/dist/src/core/coverage-sources/adapter.js +71 -0
  314. package/dist/src/core/coverage-sources/adapter.js.map +1 -0
  315. package/dist/src/core/coverage-sources/gh.d.ts +48 -0
  316. package/dist/src/core/coverage-sources/gh.js +136 -0
  317. package/dist/src/core/coverage-sources/gh.js.map +1 -0
  318. package/dist/src/core/coverage-sources/git.d.ts +101 -0
  319. package/dist/src/core/coverage-sources/git.js +269 -0
  320. package/dist/src/core/coverage-sources/git.js.map +1 -0
  321. package/dist/src/core/coverage.d.ts +217 -0
  322. package/dist/src/core/coverage.js +337 -0
  323. package/dist/src/core/coverage.js.map +1 -0
  324. package/dist/src/core/credential-spec.d.ts +72 -0
  325. package/dist/src/core/credential-spec.js +23 -0
  326. package/dist/src/core/credential-spec.js.map +1 -0
  327. package/dist/src/core/dark-session.d.ts +331 -0
  328. package/dist/src/core/dark-session.js +714 -0
  329. package/dist/src/core/dark-session.js.map +1 -0
  330. package/dist/src/core/decision-refusal.d.ts +185 -0
  331. package/dist/src/core/decision-refusal.js +265 -0
  332. package/dist/src/core/decision-refusal.js.map +1 -0
  333. package/dist/src/core/env-file.d.ts +450 -0
  334. package/dist/src/core/env-file.js +837 -0
  335. package/dist/src/core/env-file.js.map +1 -0
  336. package/dist/src/core/execute.d.ts +858 -0
  337. package/dist/src/core/execute.js +1271 -0
  338. package/dist/src/core/execute.js.map +1 -0
  339. package/dist/src/core/frontmatter.d.ts +78 -0
  340. package/dist/src/core/frontmatter.js +100 -0
  341. package/dist/src/core/frontmatter.js.map +1 -0
  342. package/dist/src/core/gate-window.d.ts +312 -0
  343. package/dist/src/core/gate-window.js +506 -0
  344. package/dist/src/core/gate-window.js.map +1 -0
  345. package/dist/src/core/gate.d.ts +1364 -0
  346. package/dist/src/core/gate.js +3002 -0
  347. package/dist/src/core/gate.js.map +1 -0
  348. package/dist/src/core/git-run.d.ts +73 -0
  349. package/dist/src/core/git-run.js +93 -0
  350. package/dist/src/core/git-run.js.map +1 -0
  351. package/dist/src/core/harness-version.d.ts +157 -0
  352. package/dist/src/core/harness-version.js +211 -0
  353. package/dist/src/core/harness-version.js.map +1 -0
  354. package/dist/src/core/harness-wait.d.ts +55 -0
  355. package/dist/src/core/harness-wait.js +58 -0
  356. package/dist/src/core/harness-wait.js.map +1 -0
  357. package/dist/src/core/head-retry.d.ts +107 -0
  358. package/dist/src/core/head-retry.js +121 -0
  359. package/dist/src/core/head-retry.js.map +1 -0
  360. package/dist/src/core/instance.d.ts +253 -0
  361. package/dist/src/core/instance.js +319 -0
  362. package/dist/src/core/instance.js.map +1 -0
  363. package/dist/src/core/intake-limits.d.ts +247 -0
  364. package/dist/src/core/intake-limits.js +350 -0
  365. package/dist/src/core/intake-limits.js.map +1 -0
  366. package/dist/src/core/jcs.d.ts +52 -0
  367. package/dist/src/core/jcs.js +132 -0
  368. package/dist/src/core/jcs.js.map +1 -0
  369. package/dist/src/core/journal.d.ts +144 -0
  370. package/dist/src/core/journal.js +200 -0
  371. package/dist/src/core/journal.js.map +1 -0
  372. package/dist/src/core/live-draw.d.ts +436 -0
  373. package/dist/src/core/live-draw.js +703 -0
  374. package/dist/src/core/live-draw.js.map +1 -0
  375. package/dist/src/core/log-reconcile.d.ts +89 -0
  376. package/dist/src/core/log-reconcile.js +136 -0
  377. package/dist/src/core/log-reconcile.js.map +1 -0
  378. package/dist/src/core/log-subscribe.d.ts +36 -0
  379. package/dist/src/core/log-subscribe.js +162 -0
  380. package/dist/src/core/log-subscribe.js.map +1 -0
  381. package/dist/src/core/log.d.ts +278 -0
  382. package/dist/src/core/log.js +546 -0
  383. package/dist/src/core/log.js.map +1 -0
  384. package/dist/src/core/loop.d.ts +274 -0
  385. package/dist/src/core/loop.js +487 -0
  386. package/dist/src/core/loop.js.map +1 -0
  387. package/dist/src/core/md-fence.d.ts +41 -0
  388. package/dist/src/core/md-fence.js +74 -0
  389. package/dist/src/core/md-fence.js.map +1 -0
  390. package/dist/src/core/money.d.ts +147 -0
  391. package/dist/src/core/money.js +195 -0
  392. package/dist/src/core/money.js.map +1 -0
  393. package/dist/src/core/payload-census.d.ts +74 -0
  394. package/dist/src/core/payload-census.js +146 -0
  395. package/dist/src/core/payload-census.js.map +1 -0
  396. package/dist/src/core/payload-store.d.ts +175 -0
  397. package/dist/src/core/payload-store.js +340 -0
  398. package/dist/src/core/payload-store.js.map +1 -0
  399. package/dist/src/core/payload.d.ts +71 -0
  400. package/dist/src/core/payload.js +80 -0
  401. package/dist/src/core/payload.js.map +1 -0
  402. package/dist/src/core/policy-diff.d.ts +292 -0
  403. package/dist/src/core/policy-diff.js +588 -0
  404. package/dist/src/core/policy-diff.js.map +1 -0
  405. package/dist/src/core/policy-expectations.d.ts +199 -0
  406. package/dist/src/core/policy-expectations.js +394 -0
  407. package/dist/src/core/policy-expectations.js.map +1 -0
  408. package/dist/src/core/policy-explain.d.ts +150 -0
  409. package/dist/src/core/policy-explain.js +258 -0
  410. package/dist/src/core/policy-explain.js.map +1 -0
  411. package/dist/src/core/policy-load.d.ts +527 -0
  412. package/dist/src/core/policy-load.js +536 -0
  413. package/dist/src/core/policy-load.js.map +1 -0
  414. package/dist/src/core/policy-match.d.ts +281 -0
  415. package/dist/src/core/policy-match.js +478 -0
  416. package/dist/src/core/policy-match.js.map +1 -0
  417. package/dist/src/core/policy-proposal.d.ts +265 -0
  418. package/dist/src/core/policy-proposal.js +458 -0
  419. package/dist/src/core/policy-proposal.js.map +1 -0
  420. package/dist/src/core/prompt-layout.d.ts +221 -0
  421. package/dist/src/core/prompt-layout.js +422 -0
  422. package/dist/src/core/prompt-layout.js.map +1 -0
  423. package/dist/src/core/protected-path-guard.d.ts +453 -0
  424. package/dist/src/core/protected-path-guard.js +1566 -0
  425. package/dist/src/core/protected-path-guard.js.map +1 -0
  426. package/dist/src/core/registration.d.ts +25 -0
  427. package/dist/src/core/registration.js +39 -0
  428. package/dist/src/core/registration.js.map +1 -0
  429. package/dist/src/core/reindex.d.ts +99 -0
  430. package/dist/src/core/reindex.js +336 -0
  431. package/dist/src/core/reindex.js.map +1 -0
  432. package/dist/src/core/sampler.d.ts +313 -0
  433. package/dist/src/core/sampler.js +388 -0
  434. package/dist/src/core/sampler.js.map +1 -0
  435. package/dist/src/core/sandbox.d.ts +290 -0
  436. package/dist/src/core/sandbox.js +424 -0
  437. package/dist/src/core/sandbox.js.map +1 -0
  438. package/dist/src/core/seal.d.ts +165 -0
  439. package/dist/src/core/seal.js +290 -0
  440. package/dist/src/core/seal.js.map +1 -0
  441. package/dist/src/core/state.d.ts +505 -0
  442. package/dist/src/core/state.js +1009 -0
  443. package/dist/src/core/state.js.map +1 -0
  444. package/dist/src/core/task-file.d.ts +185 -0
  445. package/dist/src/core/task-file.js +464 -0
  446. package/dist/src/core/task-file.js.map +1 -0
  447. package/dist/src/core/telegram-config.d.ts +93 -0
  448. package/dist/src/core/telegram-config.js +114 -0
  449. package/dist/src/core/telegram-config.js.map +1 -0
  450. package/dist/src/core/token.d.ts +409 -0
  451. package/dist/src/core/token.js +561 -0
  452. package/dist/src/core/token.js.map +1 -0
  453. package/dist/src/core/validate.d.ts +138 -0
  454. package/dist/src/core/validate.js +0 -0
  455. package/dist/src/core/validate.js.map +1 -0
  456. package/dist/src/core/values.d.ts +137 -0
  457. package/dist/src/core/values.js +153 -0
  458. package/dist/src/core/values.js.map +1 -0
  459. package/dist/src/core/vault.d.ts +291 -0
  460. package/dist/src/core/vault.js +612 -0
  461. package/dist/src/core/vault.js.map +1 -0
  462. package/dist/src/core/verified-snapshot.d.ts +204 -0
  463. package/dist/src/core/verified-snapshot.js +506 -0
  464. package/dist/src/core/verified-snapshot.js.map +1 -0
  465. package/dist/src/core/verify.d.ts +336 -0
  466. package/dist/src/core/verify.js +549 -0
  467. package/dist/src/core/verify.js.map +1 -0
  468. package/dist/src/core/version.d.ts +8 -0
  469. package/dist/src/core/version.js +9 -0
  470. package/dist/src/core/version.js.map +1 -0
  471. package/dist/src/core/wysiwys.d.ts +370 -0
  472. package/dist/src/core/wysiwys.js +728 -0
  473. package/dist/src/core/wysiwys.js.map +1 -0
  474. package/dist/src/daemon/advance-child.d.ts +39 -0
  475. package/dist/src/daemon/advance-child.js +78 -0
  476. package/dist/src/daemon/advance-child.js.map +1 -0
  477. package/dist/src/daemon/advance.d.ts +466 -0
  478. package/dist/src/daemon/advance.js +849 -0
  479. package/dist/src/daemon/advance.js.map +1 -0
  480. package/dist/src/daemon/audit.d.ts +87 -0
  481. package/dist/src/daemon/audit.js +90 -0
  482. package/dist/src/daemon/audit.js.map +1 -0
  483. package/dist/src/daemon/daemon.d.ts +1180 -0
  484. package/dist/src/daemon/daemon.js +1988 -0
  485. package/dist/src/daemon/daemon.js.map +1 -0
  486. package/dist/src/daemon/dark-session.d.ts +64 -0
  487. package/dist/src/daemon/dark-session.js +119 -0
  488. package/dist/src/daemon/dark-session.js.map +1 -0
  489. package/dist/src/daemon/draw-child.d.ts +36 -0
  490. package/dist/src/daemon/draw-child.js +132 -0
  491. package/dist/src/daemon/draw-child.js.map +1 -0
  492. package/dist/src/daemon/draw.d.ts +154 -0
  493. package/dist/src/daemon/draw.js +458 -0
  494. package/dist/src/daemon/draw.js.map +1 -0
  495. package/dist/src/daemon/git-evidence.d.ts +173 -0
  496. package/dist/src/daemon/git-evidence.js +345 -0
  497. package/dist/src/daemon/git-evidence.js.map +1 -0
  498. package/dist/src/daemon/projection.d.ts +180 -0
  499. package/dist/src/daemon/projection.js +233 -0
  500. package/dist/src/daemon/projection.js.map +1 -0
  501. package/dist/src/daemon/prune.d.ts +207 -0
  502. package/dist/src/daemon/prune.js +376 -0
  503. package/dist/src/daemon/prune.js.map +1 -0
  504. package/dist/src/mcp/http.d.ts +113 -0
  505. package/dist/src/mcp/http.js +343 -0
  506. package/dist/src/mcp/http.js.map +1 -0
  507. package/dist/src/mcp/server.d.ts +265 -0
  508. package/dist/src/mcp/server.js +602 -0
  509. package/dist/src/mcp/server.js.map +1 -0
  510. package/docs/adapter-api.md +106 -0
  511. package/docs/cli-reference.md +5716 -0
  512. package/docs/codex-enforced-session.md +30 -0
  513. package/package.json +53 -4
  514. package/schema/.gitkeep +0 -0
  515. package/schema/LICENSE +117 -0
  516. package/schema/codex-instance.schema.json +82 -0
  517. package/schema/envelope.schema.json +137 -0
  518. package/schema/event.schema.json +1811 -0
  519. package/schema/fixtures/codex-instance/invalid/unpinned-codex-version.json +40 -0
  520. package/schema/fixtures/codex-instance/valid/canonical.json +40 -0
  521. package/schema/fixtures/envelope/invalid/action-missing-idempotency-key.json +15 -0
  522. package/schema/fixtures/envelope/invalid/action-unknown-class-format.json +14 -0
  523. package/schema/fixtures/envelope/invalid/confidence-out-of-range.json +11 -0
  524. package/schema/fixtures/envelope/invalid/est-cost-bare-number.json +14 -0
  525. package/schema/fixtures/envelope/invalid/est-cost-noncanonical-string.json +14 -0
  526. package/schema/fixtures/envelope/invalid/malformed-assignee.json +10 -0
  527. package/schema/fixtures/envelope/invalid/malformed-created-by.json +7 -0
  528. package/schema/fixtures/envelope/invalid/malformed-max-latency.json +11 -0
  529. package/schema/fixtures/envelope/invalid/malformed-payload-hash.json +14 -0
  530. package/schema/fixtures/envelope/invalid/max-cost-bare-number.json +11 -0
  531. package/schema/fixtures/envelope/invalid/missing-origin.json +3 -0
  532. package/schema/fixtures/envelope/invalid/negative-est-cost.json +14 -0
  533. package/schema/fixtures/envelope/invalid/unknown-state.json +7 -0
  534. package/schema/fixtures/envelope/invalid/unknown-top-level-field.json +8 -0
  535. package/schema/fixtures/envelope/valid/action-payload-hash.json +17 -0
  536. package/schema/fixtures/envelope/valid/actions-without-budget.json +18 -0
  537. package/schema/fixtures/envelope/valid/canonical.json +25 -0
  538. package/schema/fixtures/envelope/valid/minimal.json +7 -0
  539. package/schema/fixtures/envelope/valid/multi-action-executed.json +30 -0
  540. package/schema/fixtures/envelope/valid/record-write-stage.json +22 -0
  541. package/schema/fixtures/event/invalid/approval-granted-agent-actor.json +15 -0
  542. package/schema/fixtures/event/invalid/approval-granted-empty-batch-delivery-id.json +17 -0
  543. package/schema/fixtures/event/invalid/approval-granted-fifth-reaction.json +16 -0
  544. package/schema/fixtures/event/invalid/approval-granted-missing-actor.json +14 -0
  545. package/schema/fixtures/event/invalid/approval-requested-missing-action-key.json +14 -0
  546. package/schema/fixtures/event/invalid/approval-withdrawn-agent-policy-drift.json +15 -0
  547. package/schema/fixtures/event/invalid/approval-withdrawn-missing-reason.json +15 -0
  548. package/schema/fixtures/event/invalid/approval-withdrawn-system-actor.json +15 -0
  549. package/schema/fixtures/event/invalid/audit-decision-refused-human-actor.json +17 -0
  550. package/schema/fixtures/event/invalid/audit-decision-refused-missing-code.json +16 -0
  551. package/schema/fixtures/event/invalid/audit-reviewed-agent-actor.json +15 -0
  552. package/schema/fixtures/event/invalid/audit-reviewed-loved-no-note.json +16 -0
  553. package/schema/fixtures/event/invalid/audit-reviewed-system-actor.json +15 -0
  554. package/schema/fixtures/event/invalid/bad-actor-prefix.json +15 -0
  555. package/schema/fixtures/event/invalid/est-cost-bare-number.json +17 -0
  556. package/schema/fixtures/event/invalid/execution-completed-fabricated-exit-code.json +16 -0
  557. package/schema/fixtures/event/invalid/execution-completed-provider-ref-empty-id.json +18 -0
  558. package/schema/fixtures/event/invalid/execution-completed-provider-ref-extra-field.json +19 -0
  559. package/schema/fixtures/event/invalid/execution-completed-provider-ref-id-not-string.json +18 -0
  560. package/schema/fixtures/event/invalid/execution-completed-provider-ref-missing-adapter.json +17 -0
  561. package/schema/fixtures/event/invalid/execution-failed-open-reported-by.json +16 -0
  562. package/schema/fixtures/event/invalid/execution-indeterminate-open-reason.json +14 -0
  563. package/schema/fixtures/event/invalid/execution-reconciled-agent-actor.json +17 -0
  564. package/schema/fixtures/event/invalid/execution-started-negative-env-stripped.json +16 -0
  565. package/schema/fixtures/event/invalid/gate-bypassed-missing-opened-seq.json +15 -0
  566. package/schema/fixtures/event/invalid/gate-closed-non-integer-opened-seq.json +13 -0
  567. package/schema/fixtures/event/invalid/gate-opened-agent-actor.json +16 -0
  568. package/schema/fixtures/event/invalid/gate-organ-attested-absolute-path.json +14 -0
  569. package/schema/fixtures/event/invalid/gate-organ-attested-agent-actor.json +14 -0
  570. package/schema/fixtures/event/invalid/gate-organ-attested-missing-organ-path.json +13 -0
  571. package/schema/fixtures/event/invalid/harness-unknown-kind.json +18 -0
  572. package/schema/fixtures/event/invalid/harness-version-multiline.json +16 -0
  573. package/schema/fixtures/event/invalid/log-checkpoint-agent-actor.json +17 -0
  574. package/schema/fixtures/event/invalid/log-checkpoint-missing-signature.json +16 -0
  575. package/schema/fixtures/event/invalid/log-checkpoint-short-signed-hash.json +17 -0
  576. package/schema/fixtures/event/invalid/log-checkpoint-unknown-signature-alg.json +17 -0
  577. package/schema/fixtures/event/invalid/malformed-ts.json +15 -0
  578. package/schema/fixtures/event/invalid/missing-alg.json +14 -0
  579. package/schema/fixtures/event/invalid/missing-hash.json +14 -0
  580. package/schema/fixtures/event/invalid/non-integer-seq.json +15 -0
  581. package/schema/fixtures/event/invalid/payload-pruned-human-actor.json +14 -0
  582. package/schema/fixtures/event/invalid/payload-pruned-missing-hash.json +14 -0
  583. package/schema/fixtures/event/invalid/policy-declined-agent-actor.json +15 -0
  584. package/schema/fixtures/event/invalid/policy-proposed-missing-diff.json +19 -0
  585. package/schema/fixtures/event/invalid/policy-proposed-system-actor.json +26 -0
  586. package/schema/fixtures/event/invalid/short-hash.json +15 -0
  587. package/schema/fixtures/event/invalid/unknown-alg.json +15 -0
  588. package/schema/fixtures/event/invalid/unknown-event-type.json +15 -0
  589. package/schema/fixtures/event/invalid/unknown-top-level-field.json +16 -0
  590. package/schema/fixtures/event/valid/approval-expired.json +15 -0
  591. package/schema/fixtures/event/valid/approval-granted-batch.json +19 -0
  592. package/schema/fixtures/event/valid/approval-granted-reaction.json +16 -0
  593. package/schema/fixtures/event/valid/approval-granted.json +15 -0
  594. package/schema/fixtures/event/valid/approval-rejected.json +15 -0
  595. package/schema/fixtures/event/valid/approval-requested.json +19 -0
  596. package/schema/fixtures/event/valid/approval-revoked.json +15 -0
  597. package/schema/fixtures/event/valid/approval-withdrawn-policy-drift.json +17 -0
  598. package/schema/fixtures/event/valid/approval-withdrawn.json +16 -0
  599. package/schema/fixtures/event/valid/audit-decision-refused.json +20 -0
  600. package/schema/fixtures/event/valid/audit-reviewed-reaction.json +17 -0
  601. package/schema/fixtures/event/valid/audit-reviewed.json +15 -0
  602. package/schema/fixtures/event/valid/audit-sampled.json +14 -0
  603. package/schema/fixtures/event/valid/budget-exceeded.json +21 -0
  604. package/schema/fixtures/event/valid/envelope-drift.json +16 -0
  605. package/schema/fixtures/event/valid/execution-completed-harness-report.json +16 -0
  606. package/schema/fixtures/event/valid/execution-completed-provider-ref.json +18 -0
  607. package/schema/fixtures/event/valid/execution-completed.json +15 -0
  608. package/schema/fixtures/event/valid/execution-failed-harness-report.json +16 -0
  609. package/schema/fixtures/event/valid/execution-failed.json +15 -0
  610. package/schema/fixtures/event/valid/execution-indeterminate.json +15 -0
  611. package/schema/fixtures/event/valid/execution-reconciled.json +17 -0
  612. package/schema/fixtures/event/valid/execution-started-env-stripped.json +17 -0
  613. package/schema/fixtures/event/valid/execution-started.json +14 -0
  614. package/schema/fixtures/event/valid/gate-bypassed-harness-version.json +18 -0
  615. package/schema/fixtures/event/valid/gate-bypassed.json +19 -0
  616. package/schema/fixtures/event/valid/gate-closed.json +14 -0
  617. package/schema/fixtures/event/valid/gate-opened.json +16 -0
  618. package/schema/fixtures/event/valid/gate-organ-attested.json +14 -0
  619. package/schema/fixtures/event/valid/genesis-null-prev.json +14 -0
  620. package/schema/fixtures/event/valid/log-checkpoint.json +17 -0
  621. package/schema/fixtures/event/valid/payload-pruned-orphan.json +13 -0
  622. package/schema/fixtures/event/valid/payload-pruned.json +17 -0
  623. package/schema/fixtures/event/valid/policy-declined.json +16 -0
  624. package/schema/fixtures/event/valid/policy-proposed.json +35 -0
  625. package/schema/fixtures/event/valid/policy-updated.json +14 -0
  626. package/schema/fixtures/event/valid/reconciliation-required.json +18 -0
  627. package/schema/fixtures/event/valid/reconciliation-satisfied.json +17 -0
  628. package/schema/fixtures/event/valid/route-accepted.json +15 -0
  629. package/schema/fixtures/event/valid/route-proposed.json +16 -0
  630. package/schema/fixtures/event/valid/spec-example.json +15 -0
  631. package/schema/fixtures/event/valid/task-registered-harness-version.json +23 -0
  632. package/schema/fixtures/event/valid/task-registered.json +14 -0
  633. package/schema/fixtures/hash/known-answer-pre-121.json +74 -0
  634. package/schema/fixtures/hash/known-answer.json +74 -0
  635. package/schema/fixtures/policy/invalid/bad-approval-ttl.json +7 -0
  636. package/schema/fixtures/policy/invalid/bad-web-port.json +4 -0
  637. package/schema/fixtures/policy/invalid/checkpoint-key-not-base64.json +6 -0
  638. package/schema/fixtures/policy/invalid/class-rule-missing-autonomy.json +9 -0
  639. package/schema/fixtures/policy/invalid/empty-class-key.json +6 -0
  640. package/schema/fixtures/policy/invalid/live-rate-on-human-only.json +7 -0
  641. package/schema/fixtures/policy/invalid/malformed-class-key.json +6 -0
  642. package/schema/fixtures/policy/invalid/missing-version.json +8 -0
  643. package/schema/fixtures/policy/invalid/negative-limit.json +9 -0
  644. package/schema/fixtures/policy/invalid/non-numeric-limit.json +9 -0
  645. package/schema/fixtures/policy/invalid/non-positive-max-pending.json +9 -0
  646. package/schema/fixtures/policy/invalid/on-expiry-grant.json +8 -0
  647. package/schema/fixtures/policy/invalid/payload-retention-bare-number.json +4 -0
  648. package/schema/fixtures/policy/invalid/payload-retention-compound.json +4 -0
  649. package/schema/fixtures/policy/invalid/payload-retention-fractional.json +4 -0
  650. package/schema/fixtures/policy/invalid/payload-retention-zero.json +4 -0
  651. package/schema/fixtures/policy/invalid/protected-paths-escape.json +4 -0
  652. package/schema/fixtures/policy/invalid/protected-paths-glob.json +4 -0
  653. package/schema/fixtures/policy/invalid/retro-rate-on-human-only.json +7 -0
  654. package/schema/fixtures/policy/invalid/retro-rate-on-manual.json +7 -0
  655. package/schema/fixtures/policy/invalid/retro-rate-zero.json +7 -0
  656. package/schema/fixtures/policy/invalid/sample-rate-too-high.json +5 -0
  657. package/schema/fixtures/policy/invalid/sampling-secret-env-empty.json +7 -0
  658. package/schema/fixtures/policy/invalid/sampling-secret-env-not-string.json +6 -0
  659. package/schema/fixtures/policy/invalid/skew-tolerance-compound.json +6 -0
  660. package/schema/fixtures/policy/invalid/unknown-autonomy.json +7 -0
  661. package/schema/fixtures/policy/invalid/unknown-class-rule-key.json +6 -0
  662. package/schema/fixtures/policy/invalid/unknown-top-level-key.json +7 -0
  663. package/schema/fixtures/policy/invalid/vault-passphrase-env-empty.json +6 -0
  664. package/schema/fixtures/policy/invalid/vault-passphrase-literal.json +6 -0
  665. package/schema/fixtures/policy/invalid/version-not-string.json +4 -0
  666. package/schema/fixtures/policy/valid/canonical.json +47 -0
  667. package/schema/fixtures/policy/valid/checkpoint-keys.json +18 -0
  668. package/schema/fixtures/policy/valid/class-approvers-limits.json +25 -0
  669. package/schema/fixtures/policy/valid/class-retro-rate.json +17 -0
  670. package/schema/fixtures/policy/valid/global-budgets.json +19 -0
  671. package/schema/fixtures/policy/valid/human-only.json +9 -0
  672. package/schema/fixtures/policy/valid/minimal.json +6 -0
  673. package/schema/fixtures/policy/valid/protected-paths.json +10 -0
  674. package/schema/fixtures/policy/valid/record-namespace.json +13 -0
  675. package/schema/fixtures/policy/valid/request-volume-limits.json +26 -0
  676. package/schema/fixtures/policy/valid/retention-and-sampling-secret.json +16 -0
  677. package/schema/fixtures/policy/valid/skew-tolerance.json +15 -0
  678. package/schema/fixtures/policy/valid/vault-passphrase-env.json +14 -0
  679. package/schema/fixtures/policy/valid/wildcards.json +15 -0
  680. package/schema/fixtures/policy-md/invalid/alias-bomb.md +15 -0
  681. package/schema/fixtures/policy-md/invalid/no-fence.md +7 -0
  682. package/schema/fixtures/policy-md/invalid/protected-route-not-a-subclass.md +16 -0
  683. package/schema/fixtures/policy-md/invalid/schema-invalid-autonomy.md +16 -0
  684. package/schema/fixtures/policy-md/invalid/schema-invalid-read-proof.md +17 -0
  685. package/schema/fixtures/policy-md/invalid/two-fences.md +19 -0
  686. package/schema/fixtures/policy-md/invalid/unclosed-fence.md +11 -0
  687. package/schema/fixtures/policy-md/invalid/wrong-info-string.md +11 -0
  688. package/schema/fixtures/policy-md/invalid/yaml-syntax-error.md +13 -0
  689. package/schema/fixtures/policy-md/precedence/both/APPROVAL.md +7 -0
  690. package/schema/fixtures/policy-md/precedence/both/APPROVALS.md +7 -0
  691. package/schema/fixtures/policy-md/precedence/fallback-only/APPROVALS.md +7 -0
  692. package/schema/fixtures/policy-md/valid/canonical.md +50 -0
  693. package/schema/fixtures/policy-md/valid/daemon-read-proof.md +18 -0
  694. package/schema/fixtures/policy-md/valid/minimal.md +3 -0
  695. package/schema/fixtures/policy-md/valid/prose-lookalikes.md +54 -0
  696. package/schema/fixtures/policy-md/valid/routed-protected-paths.md +49 -0
  697. package/schema/fixtures/policy-md/valid/with-values.md +79 -0
  698. package/schema/fixtures/sample-record/invalid/bad-date-time.json +4 -0
  699. package/schema/fixtures/sample-record/invalid/missing-required-field.json +3 -0
  700. package/schema/fixtures/sample-record/invalid/unknown-top-level-field.json +5 -0
  701. package/schema/fixtures/sample-record/invalid/wrong-type.json +4 -0
  702. package/schema/fixtures/sample-record/valid/minimal.json +4 -0
  703. package/schema/fixtures/sample-record/valid/with-note.json +5 -0
  704. package/schema/fixtures/values/invalid/class-shaped.json +9 -0
  705. package/schema/fixtures/values/invalid/duplicate-entry.json +4 -0
  706. package/schema/fixtures/values/invalid/non-string-item.json +4 -0
  707. package/schema/fixtures/values/invalid/over-cap.json +26 -0
  708. package/schema/fixtures/values/invalid/unknown-key.json +5 -0
  709. package/schema/fixtures/values/invalid/version-string.json +1 -0
  710. package/schema/fixtures/values/valid/empty-lists.json +7 -0
  711. package/schema/fixtures/values/valid/full.json +20 -0
  712. package/schema/fixtures/values/valid/minimal.json +1 -0
  713. package/schema/fixtures/values-md/invalid/schema-invalid.md +62 -0
  714. package/schema/fixtures/values-md/invalid/two-blocks.md +69 -0
  715. package/schema/fixtures/values-md/invalid/unterminated.md +61 -0
  716. package/schema/fixtures/values-md/invalid/yaml-error.md +63 -0
  717. package/schema/fixtures/values-md/valid/absent.md +50 -0
  718. package/schema/fixtures/values-md/valid/with-values.md +79 -0
  719. package/schema/policy.schema.json +501 -0
  720. package/schema/sample-record.schema.json +26 -0
  721. package/schema/values.schema.json +55 -0
  722. package/templates/codex/README.md +9 -0
@@ -0,0 +1,549 @@
1
+ /**
2
+ * Hash-chain verification for `.approval/log/events.jsonl` (SPEC.md §8:
3
+ * "`approval log verify` MUST detect any mutation or truncation").
4
+ *
5
+ * This module is the read side of the append-only log. It re-derives every
6
+ * record's digest from its canonical serialization and walks the `prev` chain
7
+ * and the `seq` succession end to end, reporting the *first* place the log
8
+ * stops being self-consistent.
9
+ *
10
+ * **Read-only, by definition.** Verification opens the log for reading and
11
+ * nothing else: it never truncates, never rewrites, never repairs, and never
12
+ * creates a lockfile. A torn tail is *reported*, never auto-truncated — a log
13
+ * that heals itself is a log that can be made to forget. Repair is a human
14
+ * decision, made explicitly: a later CLI task may offer it behind an explicit
15
+ * flag, but the core provides detection only.
16
+ *
17
+ * **What verification detects.** Any mutation of a record without a full
18
+ * recompute of every descendant; truncation of the tail (with an external
19
+ * anchor); deletion, insertion, reorder, or splice anywhere in the chain;
20
+ * `alg` tampering; a malformed or schema-invalid line; a duplicated or skipped
21
+ * `seq`; a non-genesis first record; and — given an anchor — a fully
22
+ * recomputed forged suffix.
23
+ *
24
+ * **The detection boundary — state it plainly.** A hash chain is
25
+ * tamper-*evident*, not tamper-*proof*. A forger who rewrites record N and then
26
+ * recomputes every descendant (new hash, fixed `prev`) produces a file that is
27
+ * internally self-consistent in every respect, and `verify(logPath)` on that
28
+ * file alone CANNOT distinguish it from an honest log. The same is true of
29
+ * dropping records off the tail: the surviving prefix is a valid chain. Closing
30
+ * that gap requires something the forger does not control:
31
+ *
32
+ * - an externally anchored head — pass {@link VerifyOptions.expectedHead} with
33
+ * a `(seq, hash)` pair recorded elsewhere (a channel message, another host, a
34
+ * human's notes); a mismatch is reported as `head-mismatch`;
35
+ * - a retained copy of the log held outside the writer's reach;
36
+ * - the optional per-event git commits of SPEC.md §8, where the daemon commits
37
+ * each record under its own identity, giving signed, distributed evidence.
38
+ *
39
+ * Three questions that keep arriving separately have one answer (APRV-141, F7):
40
+ * the digest covers each record's CANONICAL CONTENT, its RFC 8785
41
+ * serialization, and never the bytes of the line it was read from, so a
42
+ * re-serialization that changes only byte format verifies clean, a line
43
+ * carrying a duplicate key is settled by the JSON parse that precedes
44
+ * canonicalization rather than by the chain, and an unanchored tail truncation
45
+ * leaves a valid prefix that nothing inside the file can contradict.
46
+ *
47
+ * **Anomalies, which are reported and never enforced (APRV-40).** SPEC.md §8
48
+ * requires that "verification treats gate-type events with implausible skew
49
+ * relative to their neighbors as a reportable anomaly, never silently accepted".
50
+ * Every non-corrupt result therefore carries {@link VerifyResult.anomalies}, a
51
+ * list that says nothing about integrity: a clean log with anomalies is clean,
52
+ * exits 0, and authorizes exactly what it authorized before. The separation is
53
+ * the point. Chain integrity is a proof, skew is a judgment, and folding a
54
+ * judgment into a proof would turn `log verify` into a check people learn to
55
+ * pass a flag to silence. See {@link chainAnomalies}.
56
+ *
57
+ * Determinism: the result is a pure function of (log bytes, schema files,
58
+ * options). No clock, no network, no cross-call state — the anomaly pass reads
59
+ * the records' own timestamps and never the current time.
60
+ */
61
+ import { readFileSync } from "node:fs";
62
+ import { ALG, computeRecordHash } from "./log.js";
63
+ import { loadPolicy } from "./policy-load.js";
64
+ import { prepareValidator } from "./validate.js";
65
+ // ---------------------------------------------------------------------------
66
+ // Anomalies (SPEC.md §8, timestamp rules) — reportable, never a verdict
67
+ // ---------------------------------------------------------------------------
68
+ /**
69
+ * SPEC.md §8: "Events written through the gate (`approval.*`, `execution.*`,
70
+ * `budget.*`, `audit.*`, `policy.updated`) have `ts` assigned by the runtime at
71
+ * the write boundary."
72
+ *
73
+ * These are the types whose timestamps the runtime authored, so these are the
74
+ * only types whose timestamps the runtime may be held to. Every other type is
75
+ * writable directly by callers who legitimately supply their own `ts` (an
76
+ * importer replaying a historical log is the obvious case), so comparing them
77
+ * would manufacture anomalies out of correct behavior.
78
+ */
79
+ function isGateTyped(event) {
80
+ return (event.startsWith("approval.") ||
81
+ event.startsWith("execution.") ||
82
+ event.startsWith("budget.") ||
83
+ event.startsWith("audit.") ||
84
+ // Amended SPEC.md §8 (APRV-127): `reconciliation.*` is written through the
85
+ // gate for the same reason `audit.*` is. The obligation is appended by the
86
+ // runtime as a consequence of a human's denial and the satisfaction is a
87
+ // human's act recorded at the write boundary; neither takes a caller's
88
+ // clock, so both may be held to the runtime's.
89
+ event.startsWith("reconciliation.") ||
90
+ // Amended SPEC.md §8 (APRV-214): `gate.*` is written through the write
91
+ // boundary clock like everything above it. The open window's expiry is
92
+ // derived from `gate.opened`'s own `ts`, so an opener who could author that
93
+ // timestamp could author the window's length; holding the trio to the
94
+ // runtime's clock is what makes §8's skew report cover it.
95
+ event.startsWith("gate.") ||
96
+ // Amended SPEC.md §8/§9 (APRV-220): a checkpoint's whole content is a claim
97
+ // about a moment — "this head was signed then" — so its `ts` is stamped at
98
+ // the write boundary, and a signer who could author it could backdate the
99
+ // one record whose value is when it was taken.
100
+ event === "log.checkpoint" ||
101
+ event === "policy.updated");
102
+ }
103
+ /**
104
+ * The skew allowance, in milliseconds, before a backwards step between two
105
+ * gate-typed records is reported.
106
+ *
107
+ * ### Why 2 seconds, and why any number at all
108
+ *
109
+ * Gate-typed timestamps are stamped by `core/clock.ts` at the write boundary. In
110
+ * one process they come from one `Date.now()` and never go backwards. Across
111
+ * processes and hosts — the daemon on one machine, a CLI verb on another, both
112
+ * appending to a shared log — they come from separate wall clocks, and two
113
+ * healthy NTP-disciplined clocks routinely disagree by tens of milliseconds and
114
+ * occasionally by a few hundred during a step correction. A tolerance of zero
115
+ * would therefore report ordinary distributed operation as an anomaly, which is
116
+ * the fastest way to make an anomaly channel ignored.
117
+ *
118
+ * 2000 ms is chosen as roughly an order of magnitude above the disagreement a
119
+ * synchronized fleet actually exhibits, and two to three orders of magnitude
120
+ * below the skew that a *useful* lie requires. The thing this check exists to
121
+ * catch is a timestamp placed to change a judgment: a `ts` inside a lapsed TTL
122
+ * (minutes to hours), or one moved outside a rolling budget window (hours). No
123
+ * attack is bought by 1.9 seconds, and no healthy fleet needs 2.1.
124
+ *
125
+ * It is the DEFAULT rather than the only value since APRV-58: an operator
126
+ * running a single host may tighten it to 250 ms, one running across a WAN with
127
+ * poor time discipline may loosen it to 5 s, and `audit.skew_tolerance` in the
128
+ * policy is where they say so. A policy that declares nothing (or that fails to
129
+ * load at all) leaves this number in force, so the reference runtime still has
130
+ * exactly one value that every reader can see.
131
+ *
132
+ * Widening the tolerance permits nothing: the threshold is report-only in both
133
+ * directions, so a loosened value hides evidence from a human and cannot make
134
+ * any action allowed that was refused before.
135
+ */
136
+ export const GATE_TS_SKEW_TOLERANCE_MS = 2_000;
137
+ /**
138
+ * `audit.skew_tolerance` in milliseconds, or the default when it says nothing.
139
+ *
140
+ * Fails closed to the default exactly as `daemon/prune.ts`'s retention read
141
+ * does: a policy that cannot be loaded configures nothing, and for THIS key the
142
+ * safe fallback is the shipped number rather than zero — a zero allowance would
143
+ * report every ordinary clock disagreement as an anomaly, and an anomaly channel
144
+ * that cries wolf is one operators stop reading. An unparseable duration never
145
+ * reaches here: the schema's duration pattern rejects it and `loadPolicy` fails
146
+ * the whole policy, precisely as a bad `defaults.approval_ttl` does.
147
+ */
148
+ export function skewToleranceMsOf(policy, schemaDir) {
149
+ const where = policy.file !== undefined ? { file: policy.file } : { dir: policy.dir ?? process.cwd() };
150
+ if (schemaDir !== undefined)
151
+ where.schemaDir = schemaDir;
152
+ const load = loadPolicy(where);
153
+ if (!load.ok)
154
+ return GATE_TS_SKEW_TOLERANCE_MS;
155
+ return load.durations.skewToleranceMs ?? GATE_TS_SKEW_TOLERANCE_MS;
156
+ }
157
+ /**
158
+ * Machine-readable anomaly kinds. Closed union, additive-only, each pinned by a
159
+ * test — the same contract every other frozen union in this codebase carries.
160
+ */
161
+ export const CHAIN_ANOMALY_KINDS = [
162
+ /**
163
+ * A gate-typed record's `ts` is earlier than the previous gate-typed record's
164
+ * `ts` by more than {@link GATE_TS_SKEW_TOLERANCE_MS}.
165
+ *
166
+ * One kind covers both directions SPEC.md §8 describes. "Earlier than its
167
+ * predecessor" and "later than its successor" are the same disagreement seen
168
+ * from the two ends of one adjacent pair, and reporting it twice would double
169
+ * every entry without adding a fact.
170
+ */
171
+ "gate-ts-regression",
172
+ ];
173
+ /**
174
+ * Timestamp anomalies among the gate-typed records of a verified chain.
175
+ *
176
+ * Pure: a function of the records alone, with no clock and no I/O. Comparison is
177
+ * between each gate-typed record and the previous **gate-typed** record, not the
178
+ * previous record of any kind, for the reason {@link isGateTyped} states.
179
+ *
180
+ * This changes no verdict. A log full of anomalies is still `clean` if its chain
181
+ * verifies, still exits 0, and still authorizes exactly what it authorized
182
+ * before. Skew is evidence for a human to weigh, and a verifier that refused on
183
+ * it would be refusing on a heuristic — which is how a tamper-evidence tool
184
+ * starts being run with a flag that turns it off.
185
+ */
186
+ export function chainAnomalies(records, toleranceMs = GATE_TS_SKEW_TOLERANCE_MS) {
187
+ const anomalies = [];
188
+ let previous = null;
189
+ for (const record of records) {
190
+ if (!isGateTyped(record.event))
191
+ continue;
192
+ const millis = Date.parse(record.ts);
193
+ if (Number.isNaN(millis))
194
+ continue; // the schema's date-time format precedes this
195
+ if (previous !== null) {
196
+ const skewMs = previous.millis - millis;
197
+ if (skewMs > toleranceMs) {
198
+ anomalies.push({
199
+ kind: "gate-ts-regression",
200
+ seq: record.seq,
201
+ ts: record.ts,
202
+ event: record.event,
203
+ previousSeq: previous.seq,
204
+ previousTs: previous.ts,
205
+ skewMs,
206
+ message: `record ${record.seq} (${record.event}) is timestamped ${record.ts}, ${String(skewMs)}ms BEFORE the previous gate-typed record ${previous.seq} at ${previous.ts}. Gate-typed timestamps are stamped by the runtime at the write boundary (SPEC.md §8), so a backwards step larger than ${String(toleranceMs)}ms means either a clock that stepped backwards or a timestamp that was authored rather than stamped. The chain still verifies and nothing is refused: this is reported for a human to weigh, because TTL judgment and budget windows read ts.`,
207
+ });
208
+ }
209
+ }
210
+ previous = { seq: record.seq, ts: record.ts, millis };
211
+ }
212
+ return anomalies;
213
+ }
214
+ /**
215
+ * How many records pass between progress calls.
216
+ *
217
+ * Count-based rather than time-based, and reported here rather than throttled
218
+ * here: this module has no clock, a listener that fires on a deterministic
219
+ * schedule is a listener a test can assert on exactly, and the decision about
220
+ * how often a HUMAN should see a repaint belongs to the thing holding the
221
+ * terminal (`cli/progress.ts`), which is the only layer that knows whether
222
+ * there is one.
223
+ */
224
+ export const PROGRESS_INTERVAL = 250;
225
+ /** The tolerance a verification run should apply, from its options alone. */
226
+ function toleranceOf(options) {
227
+ if (options.skewToleranceMs !== undefined)
228
+ return options.skewToleranceMs;
229
+ if (options.policy === undefined)
230
+ return GATE_TS_SKEW_TOLERANCE_MS;
231
+ return skewToleranceMsOf(options.policy, options.schemaDir);
232
+ }
233
+ function corrupt(reason, firstBadSeq, message) {
234
+ // A chain that does not verify gets no anomaly report. Anomalies are a
235
+ // secondary reading of records the walk vouched for, and reading timestamps
236
+ // off a log whose integrity is in question would dress up untrusted bytes as
237
+ // findings. The corruption is the finding.
238
+ return { status: "corrupt", firstBadSeq, reason, message, anomalies: [] };
239
+ }
240
+ /** `seq` as reported by a raw parsed line, or `null` when unusable. */
241
+ function readSeq(record) {
242
+ const seq = record["seq"];
243
+ return typeof seq === "number" && Number.isInteger(seq) && seq >= 1 ? seq : null;
244
+ }
245
+ /**
246
+ * Split the raw file into complete lines plus an optional torn tail.
247
+ *
248
+ * A torn tail is *only* an unterminated final segment. {@link appendEvent}
249
+ * writes `line + "\n"` in a single `write(2)` on an `O_APPEND` handle, so a
250
+ * crashed writer can leave a partial line but cannot leave a complete,
251
+ * newline-terminated line that is malformed. A malformed line that *is*
252
+ * newline-terminated is therefore corruption, not a torn write, and is reported
253
+ * as such wherever it appears — final line included.
254
+ */
255
+ function splitLines(raw) {
256
+ const segments = raw.split("\n");
257
+ const last = segments[segments.length - 1] ?? "";
258
+ if (last.length === 0) {
259
+ segments.pop(); // the empty segment after the final newline
260
+ return { complete: segments, torn: null };
261
+ }
262
+ segments.pop();
263
+ return { complete: segments, torn: last };
264
+ }
265
+ const GENESIS_START = { prevSeq: 0, prevHash: null, lineNumberBase: 0 };
266
+ /**
267
+ * Walk `lines` as a hash chain. Returns `null` when the whole prefix verifies,
268
+ * otherwise the first failure.
269
+ *
270
+ * Check order per record — earlier checks report the more specific reason:
271
+ *
272
+ * 1. the line parses as a JSON object (`malformed-line`);
273
+ * 2. `alg` is exactly `sha256/jcs` (`bad-alg`). Checked *before* the schema so
274
+ * a missing or unrecognized scheme identifier — which SPEC.md §8 requires
275
+ * verifiers to reject by name — reports `bad-alg` rather than generic
276
+ * schema noise;
277
+ * 3. the record validates against the `event` schema (`schema-invalid`);
278
+ * 4. the recomputed digest equals `hash` (`hash-mismatch`);
279
+ * 5. `seq` is exactly the predecessor's `seq` + 1, and 1 for the first record
280
+ * (`seq-duplicate` when it repeats the predecessor, else `seq-gap`);
281
+ * 6. `prev` is the predecessor's `hash`, and `null` for the first record
282
+ * (`prev-mismatch`, or `not-genesis` for a first record with a non-null
283
+ * `prev`).
284
+ *
285
+ * Fails closed throughout: anything that cannot be shown to be sound is a
286
+ * failure, never a pass.
287
+ */
288
+ function walk(lines, validateOptions, start,
289
+ /**
290
+ * Called with the number of lines consumed so far, every
291
+ * {@link PROGRESS_INTERVAL} records (APRV-167). Purely observational; see
292
+ * {@link VerifyOptions.onProgress}.
293
+ */
294
+ report = null) {
295
+ let prevSeq = start.prevSeq;
296
+ let prevHash = start.prevHash;
297
+ const verified = [];
298
+ // Compiled once, on the first record that needs it, and reused for every
299
+ // record after: a per-record recompile is what turned a cold walk of a few
300
+ // thousand records into minutes of CPU (APRV-186). Lazy so that a walk over
301
+ // zero lines still never touches the schema directory, exactly as before.
302
+ let eventValidator = null;
303
+ for (const [index, line] of lines.entries()) {
304
+ const lineNumber = start.lineNumberBase + index + 1;
305
+ if (line.trim().length === 0) {
306
+ return {
307
+ failure: corrupt("malformed-line", null, `line ${lineNumber} is blank`),
308
+ head: null,
309
+ records: verified,
310
+ };
311
+ }
312
+ let parsed;
313
+ try {
314
+ parsed = JSON.parse(line);
315
+ }
316
+ catch (cause) {
317
+ const detail = cause instanceof Error ? cause.message : String(cause);
318
+ return {
319
+ failure: corrupt("malformed-line", null, `line ${lineNumber} is not valid JSON: ${detail}`),
320
+ head: null,
321
+ records: verified,
322
+ };
323
+ }
324
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
325
+ return {
326
+ failure: corrupt("malformed-line", null, `line ${lineNumber} is not a JSON object`),
327
+ head: null,
328
+ records: verified,
329
+ };
330
+ }
331
+ const raw = parsed;
332
+ const seq = readSeq(raw);
333
+ if (raw["alg"] !== ALG) {
334
+ const found = raw["alg"] === undefined ? "missing" : JSON.stringify(raw["alg"]);
335
+ return {
336
+ failure: corrupt("bad-alg", seq, `line ${lineNumber}: hash-scheme identifier "alg" is ${found}, expected "${ALG}"`),
337
+ head: null,
338
+ records: verified,
339
+ };
340
+ }
341
+ eventValidator ??= prepareValidator("event", validateOptions);
342
+ const validation = eventValidator.ok ? eventValidator.check(raw) : eventValidator;
343
+ if (!validation.ok) {
344
+ const detail = validation.errors
345
+ .map((error) => `${error.path === "" ? "/" : error.path} ${error.message}`)
346
+ .join("; ");
347
+ return {
348
+ failure: corrupt("schema-invalid", seq, `line ${lineNumber} does not validate against the event schema: ${detail}`),
349
+ head: null,
350
+ records: verified,
351
+ };
352
+ }
353
+ // Schema-valid: the chain fields are now known to have their declared shapes.
354
+ const record = raw;
355
+ let recomputed;
356
+ try {
357
+ recomputed = computeRecordHash(record);
358
+ }
359
+ catch (cause) {
360
+ const detail = cause instanceof Error ? cause.message : String(cause);
361
+ return {
362
+ failure: corrupt("hash-mismatch", record.seq, `record ${record.seq} could not be canonicalized for hashing: ${detail}`),
363
+ head: null,
364
+ records: verified,
365
+ };
366
+ }
367
+ if (recomputed !== record.hash) {
368
+ return {
369
+ failure: corrupt("hash-mismatch", record.seq, `record ${record.seq} hash ${record.hash} does not match its contents (recomputed ${recomputed})`),
370
+ head: null,
371
+ records: verified,
372
+ };
373
+ }
374
+ if (record.seq !== prevSeq + 1) {
375
+ const duplicate = prevSeq > 0 && record.seq === prevSeq;
376
+ return {
377
+ failure: corrupt(duplicate ? "seq-duplicate" : "seq-gap", record.seq, duplicate
378
+ ? `line ${lineNumber} repeats seq ${record.seq}`
379
+ : `line ${lineNumber} has seq ${record.seq}, expected ${prevSeq + 1}`),
380
+ head: null,
381
+ records: verified,
382
+ };
383
+ }
384
+ if (prevHash === null) {
385
+ if (record.prev !== null) {
386
+ return {
387
+ failure: corrupt("not-genesis", record.seq, `record ${record.seq} is the first record but its prev is ${JSON.stringify(record.prev)}, expected null`),
388
+ head: null,
389
+ records: verified,
390
+ };
391
+ }
392
+ }
393
+ else if (record.prev !== prevHash) {
394
+ return {
395
+ failure: corrupt("prev-mismatch", record.seq, `record ${record.seq} prev ${JSON.stringify(record.prev)} does not link to record ${prevSeq} hash ${prevHash}`),
396
+ head: null,
397
+ records: verified,
398
+ };
399
+ }
400
+ prevSeq = record.seq;
401
+ prevHash = record.hash;
402
+ verified.push(record);
403
+ if (report !== null && (index + 1) % PROGRESS_INTERVAL === 0)
404
+ report(index + 1);
405
+ }
406
+ return {
407
+ failure: null,
408
+ head: prevHash === null ? null : { seq: prevSeq, hash: prevHash },
409
+ records: verified,
410
+ };
411
+ }
412
+ /**
413
+ * {@link verify}, returning the verified records alongside the verdict.
414
+ *
415
+ * This exists so that a reader which needs *both* — the gate, the token module,
416
+ * the executor, via `core/state.ts` — can have one walk produce both, rather
417
+ * than verifying with this module and then parsing the same bytes a second time
418
+ * with a private walk that could disagree with it (APRV-20 finding S1).
419
+ */
420
+ export function verifyWithRecords(logPath, options = {}) {
421
+ let raw;
422
+ try {
423
+ raw = readFileSync(logPath, "utf8");
424
+ }
425
+ catch (cause) {
426
+ if (cause.code !== "ENOENT") {
427
+ const detail = cause instanceof Error ? cause.message : String(cause);
428
+ return {
429
+ result: corrupt("malformed-line", null, `log ${logPath} could not be read: ${detail}`),
430
+ records: [],
431
+ };
432
+ }
433
+ // An absent file is an empty log — but it still has to satisfy an anchor,
434
+ // so it falls through to the same walk rather than short-circuiting here.
435
+ raw = "";
436
+ }
437
+ return verifyText(logPath, raw, options, null);
438
+ }
439
+ /**
440
+ * {@link verifyWithRecords} over text already in hand, optionally resuming
441
+ * behind a {@link VerifiedPrefix}.
442
+ *
443
+ * With `prefix === null`, `text` is the whole log and the walk starts at
444
+ * genesis: this is exactly what {@link verifyWithRecords} does, and the two
445
+ * share every check, message, and line number as a result. With a `prefix`,
446
+ * `text` is the *remainder* of the file (the bytes from `prefix.byteLength` on)
447
+ * and the walk chains onto `prefix.head` with line numbers offset by
448
+ * `prefix.lines`, so a resumed verdict is textually identical to the cold one.
449
+ *
450
+ * Exported for `core/state.ts`'s verified-read cache and for nothing else. Every
451
+ * schema check, hash recompute, `seq` succession check, and `prev` link check
452
+ * still runs on every record the walk covers; resuming changes only *which*
453
+ * records are covered, never how.
454
+ */
455
+ export function verifyText(logPath, text, options = {}, prefix = null) {
456
+ // The read boundary, explicitly (APRV-121). A record that was valid when it
457
+ // was appended stays valid forever: the log is append-only, so a verifier
458
+ // that refused the monetary representation of its own history would declare
459
+ // every log written before the change corrupt. The write boundary is
460
+ // unaffected and stays strict — see `ValidationMode` in `core/validate.ts`.
461
+ const validateOptions = options.schemaDir === undefined
462
+ ? { mode: "historical" }
463
+ : { schemaDir: options.schemaDir, mode: "historical" };
464
+ const start = prefix === null
465
+ ? GENESIS_START
466
+ : { prevSeq: prefix.head.seq, prevHash: prefix.head.hash, lineNumberBase: prefix.lines };
467
+ const priorRecords = prefix === null ? [] : prefix.records;
468
+ const priorLines = prefix === null ? 0 : prefix.lines;
469
+ const { complete, torn } = text.length === 0 ? { complete: [], torn: null } : splitLines(text);
470
+ // Absolute over the whole log, not over this walk: a resumed read behind a
471
+ // verified prefix has already accounted for `priorLines` records, and an
472
+ // operator watching "1500/3000" should not see it restart at zero because
473
+ // the process happened to hold a warm cache (APRV-167).
474
+ const progressTotal = priorLines + complete.length;
475
+ const listener = options.onProgress;
476
+ let reported = -1;
477
+ const report = listener === undefined
478
+ ? null
479
+ : (consumed) => {
480
+ // Never twice for the same count, and never backwards: the closing
481
+ // call below lands on a number an interval boundary may already have
482
+ // reported, and a listener drawing a bar should not see it repeat.
483
+ if (consumed <= reported)
484
+ return;
485
+ reported = consumed;
486
+ listener({ done: priorLines + consumed, total: progressTotal });
487
+ };
488
+ const walked = walk(complete, validateOptions, start, report);
489
+ // The closing call: the count the walk actually reached, which is the total
490
+ // when the chain held and the verified prefix when it did not. Reporting the
491
+ // total for a walk that stopped at record 12 would be a progress meter
492
+ // claiming work that was refused.
493
+ if (report !== null) {
494
+ report(walked.failure === null ? complete.length : walked.records.length);
495
+ }
496
+ const { failure, head } = walked;
497
+ const records = priorRecords.length === 0 ? walked.records : [...priorRecords, ...walked.records];
498
+ const lineCount = priorLines + complete.length;
499
+ // A corrupt prefix outranks a torn tail: the tear is the least of the log's
500
+ // problems, and reporting it would understate the damage.
501
+ if (failure !== null)
502
+ return { result: failure, records };
503
+ // Computed once over the records the walk vouched for, and attached to every
504
+ // non-corrupt verdict. Additive: it changes no status, no exit code, and no
505
+ // authorization. Clean with anomalies is clean.
506
+ const anomalies = chainAnomalies(records, toleranceOf(options));
507
+ if (torn !== null) {
508
+ return {
509
+ result: {
510
+ status: "torn-tail",
511
+ anomalies,
512
+ records: lineCount,
513
+ intactThroughSeq: head === null ? 0 : head.seq,
514
+ message: `log ${logPath} ends with an unterminated line of ${torn.length} byte(s); records 1..${head === null ? 0 : head.seq} verify clean. This is the signature of a crashed write. The log is NOT repaired here: truncating the torn line is a human decision.`,
515
+ },
516
+ records,
517
+ };
518
+ }
519
+ const expected = options.expectedHead;
520
+ if (expected !== undefined) {
521
+ if (head === null) {
522
+ return {
523
+ result: corrupt("head-mismatch", null, `log ${logPath} is empty but the anchored head is seq ${expected.seq} ${expected.hash}: records have been removed`),
524
+ records,
525
+ };
526
+ }
527
+ if (head.seq !== expected.seq || head.hash !== expected.hash) {
528
+ return {
529
+ result: corrupt("head-mismatch", head.seq, `log ${logPath} ends at seq ${head.seq} ${head.hash}, but the anchored head is seq ${expected.seq} ${expected.hash}: the log is internally consistent, so this is truncation or a fully recomputed forged suffix`),
530
+ records,
531
+ };
532
+ }
533
+ }
534
+ return { result: { status: "clean", records: lineCount, head, anomalies }, records };
535
+ }
536
+ /**
537
+ * Verify the hash chain of the log at `logPath`.
538
+ *
539
+ * An absent file is an empty log, which is clean with zero records and a `null`
540
+ * head — an audit trail that has recorded nothing is not evidence of tampering.
541
+ *
542
+ * The file is opened for reading only; see the module header for the recovery
543
+ * stance and the detection boundary. This is {@link verifyWithRecords} with the
544
+ * records dropped — one walk, one implementation.
545
+ */
546
+ export function verify(logPath, options = {}) {
547
+ return verifyWithRecords(logPath, options).result;
548
+ }
549
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/core/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Version constants for the approval.md runtime.
3
+ *
4
+ * `SPEC_VERSION` tracks the version of SPEC.md this build implements.
5
+ */
6
+ export declare const SPEC_VERSION = "0.1.0-draft";
7
+ /** Policy schema version accepted in `APPROVAL.md` frontmatter (`version:`). */
8
+ export declare const POLICY_VERSION = "0.1";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Version constants for the approval.md runtime.
3
+ *
4
+ * `SPEC_VERSION` tracks the version of SPEC.md this build implements.
5
+ */
6
+ export const SPEC_VERSION = "0.1.0-draft";
7
+ /** Policy schema version accepted in `APPROVAL.md` frontmatter (`version:`). */
8
+ export const POLICY_VERSION = "0.1";
9
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/core/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAE1C,gFAAgF;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC"}