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,564 @@
1
+ /**
2
+ * `.approval/QUEUE.md` — the queue projection of SPEC.md §9.1.
3
+ *
4
+ * > **The queue** (`.approval/QUEUE.md`): a rendered, read-only markdown view of
5
+ * > pending requests (task, actions, declared effects, cost, TTL countdown) plus
6
+ * > the sampled-audit backlog. Regenerated on every relevant event. This is the
7
+ * > screenshot; it is never the truth.
8
+ *
9
+ * Three properties are the whole point of this module.
10
+ *
11
+ * **It is a pure function of (verified log, policy, `now`).** No ambient clock,
12
+ * no locale, no hostname, no environment, no random temp name in the bytes. The
13
+ * evaluation instant is a parameter — the same discipline `channels/tagging.ts`
14
+ * already keeps — so an identical log rendered at an identical `now` produces
15
+ * identical bytes, and a rendering can be reproduced later from the log alone.
16
+ * Every number here is formatted by hand with integer arithmetic for the same
17
+ * reason: `toLocaleString` would make the output depend on the machine.
18
+ *
19
+ * **It re-derives nothing.** Entries come from
20
+ * {@link buildPendingQueue}, which is the one place a {@link ChannelRequest} is
21
+ * built. So the class, the autonomy, the provenance, the budgets, the
22
+ * attestation and the TTL a reader sees in QUEUE.md are the same answers the
23
+ * gate itself would give — not a second implementation that could drift. This
24
+ * module's entire job is text.
25
+ *
26
+ * **It never writes the log.** {@link writeQueue} writes exactly one file, and
27
+ * it is `QUEUE.md`.
28
+ *
29
+ * ## Why this lives in `src/channels/`, not `src/core/`
30
+ *
31
+ * It consumes `channels/contract.ts`'s tagged requests through
32
+ * `channels/tagging.ts`. Putting it in `core/` would make core import channels,
33
+ * inverting the dependency the codebase is built on: core decides, channels
34
+ * display, and this file is display — a read-only markdown surface that collects
35
+ * no gesture and holds no authority. It sits beside `tagging.ts` and `batch.ts`
36
+ * because it is the third consumer of the same tagged data, and it deliberately
37
+ * does not implement {@link ../channels/contract.js Channel}: QUEUE.md notifies
38
+ * nobody and answers nothing.
39
+ *
40
+ * ## B3: computed vs claimed
41
+ *
42
+ * SPEC.md §9: "Every displayed field is one of two kinds and MUST be visibly
43
+ * distinguished". Here that is structural, not typographic: computed fields are
44
+ * rendered as `computed · <source>` lines under **Computed by the runtime**, and
45
+ * claimed fields under a separate **Claimed by `<actor>` (not verified)** block
46
+ * that names its author. A reader skimming the file cannot mistake an agent's
47
+ * cost estimate for a budget verdict, because they are not in the same list.
48
+ *
49
+ * ## The full payload is NOT in this file — flagged for human review
50
+ *
51
+ * SPEC.md §10.4 requires channels to present the full payload before collecting
52
+ * a decision. QUEUE.md collects no decision: it is a read-only summary, and the
53
+ * decision surfaces are the channels (`approval grant`, the web page, Telegram),
54
+ * each of which presents the bytes at decision time. Inlining payloads here
55
+ * would put every pending payload — recipients, bodies, argv — into a file that
56
+ * is regenerated on every event, checked into nothing, and read by anyone with
57
+ * the working directory, with no gesture ever collected from it. So the queue
58
+ * carries the **binding** (`payload_hash`) and points at the channels for the
59
+ * bytes, and the rendered header says exactly that to the human reading it.
60
+ *
61
+ * Which is a different statement from "the renderer cannot see the payload".
62
+ * Since APRV-28 it can: `channels/tagging.ts` reads the payload store beside the
63
+ * log (SPEC.md §6.2's "the payload itself is stored or referenced by the request
64
+ * so channels can display it"), so a request whose bytes were supplied at intake
65
+ * is *summarizable* here and appears in the pending section — which is why this
66
+ * file's pending count now agrees with the queue every channel shows, where
67
+ * before it silently disagreed. The bytes still do not appear in this file.
68
+ * Requests whose material nobody holds remain in {@link QueueRender.skipped},
69
+ * rendered in their own section with the reason, never silently dropped.
70
+ */
71
+ import { closeSync, mkdirSync, openSync, renameSync, unlinkSync, writeSync } from "node:fs";
72
+ import { dirname, join } from "node:path";
73
+ import { MAX_PENDING, pendingCount } from "../core/intake-limits.js";
74
+ import { loadPolicy, } from "../core/policy-load.js";
75
+ import { payloadOf, readVerifiedRecords } from "../core/state.js";
76
+ import { buildPendingQueue, } from "./tagging.js";
77
+ /**
78
+ * The policy load options, resolved exactly as `channels/tagging.ts` resolves
79
+ * them, so the ceilings this file renders come from the same file the entries
80
+ * above them were tagged against.
81
+ */
82
+ function loadOptionsOf(options) {
83
+ const policy = options.policy ?? {};
84
+ const load = {};
85
+ if (policy.file !== undefined)
86
+ load.file = policy.file;
87
+ else
88
+ load.dir = policy.dir ?? process.cwd();
89
+ if (options.schemaDir !== undefined)
90
+ load.schemaDir = options.schemaDir;
91
+ return load;
92
+ }
93
+ /**
94
+ * Why the renderer refused.
95
+ *
96
+ * The three log codes are `channels/tagging.ts`'s and `core/state.ts`'s,
97
+ * verbatim, so a corrupt log is reported as corruption by every layer with one
98
+ * vocabulary. `write-failed` is {@link writeQueue}'s alone — the renderer itself
99
+ * cannot fail for any other reason, because it is a pure function.
100
+ */
101
+ export const RENDER_QUEUE_REFUSAL_CODES = [
102
+ "log-unreadable",
103
+ "log-torn-tail",
104
+ "log-corrupt",
105
+ "write-failed",
106
+ ];
107
+ function refuse(code, message) {
108
+ return { ok: false, code, message };
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // Deterministic formatting primitives
112
+ // ---------------------------------------------------------------------------
113
+ /**
114
+ * Render a value inside a markdown code span, with anything that could break
115
+ * the line or the span neutralized.
116
+ *
117
+ * Claimed strings are attacker-controlled in the threat model that matters
118
+ * (SPEC.md §11: the party under oversight authors them), so a summary
119
+ * containing a newline, a backtick, or a markdown heading must not be able to
120
+ * restructure the file it is rendered into — a claimed field that could forge a
121
+ * `computed ·` line would defeat B3 by typography alone.
122
+ */
123
+ function span(value) {
124
+ // Replacements are written as escapes so the substitutes themselves (U+23CE
125
+ // RETURN SYMBOL, U+FFFD REPLACEMENT CHARACTER, U+02CB MODIFIER GRAVE ACCENT)
126
+ // are unambiguous in a diff: each is a visible stand-in, never the character
127
+ // it replaces.
128
+ const flat = value
129
+ .replace(/\r\n?|\n/gu, "\u23ce ")
130
+ .replace(/\p{Cc}/gu, "\ufffd")
131
+ .replace(/`/gu, "\u02cb");
132
+ return flat.length === 0 ? "``" : `\`${flat}\``;
133
+ }
134
+ /** `null` renders as an explicit absence, never as an empty cell. */
135
+ function optionalSpan(value) {
136
+ return value === null ? "_none_" : span(value);
137
+ }
138
+ /**
139
+ * A number, formatted without a locale.
140
+ *
141
+ * `JSON.stringify` of a finite number is the ECMAScript number-to-string
142
+ * algorithm: locale-independent, platform-independent, and the same function
143
+ * the log's canonical serialization already relies on.
144
+ */
145
+ function num(value) {
146
+ return Number.isFinite(value) ? JSON.stringify(value) : "NaN";
147
+ }
148
+ /**
149
+ * A TTL remaining, as a countdown.
150
+ *
151
+ * Integer arithmetic only, largest non-zero unit first, seconds always present
152
+ * so the string never reads as more precise than it is. `0ms` is the boundary:
153
+ * a request whose TTL has fully elapsed is no longer `requested` and therefore
154
+ * is not in this file at all — see {@link renderQueue}'s section on expiry.
155
+ */
156
+ function countdown(ms) {
157
+ if (ms === null)
158
+ return "_no TTL_ (the policy declares no `defaults.approval_ttl`)";
159
+ const total = Math.max(0, Math.floor(ms / 1000));
160
+ const hours = Math.floor(total / 3600);
161
+ const minutes = Math.floor((total % 3600) / 60);
162
+ const seconds = total % 60;
163
+ const parts = [];
164
+ if (hours > 0)
165
+ parts.push(`${String(hours)}h`);
166
+ if (hours > 0 || minutes > 0)
167
+ parts.push(`${String(minutes)}m`);
168
+ parts.push(`${String(seconds)}s`);
169
+ return `${parts.join(" ")} left`;
170
+ }
171
+ /**
172
+ * One budget verdict, in the evaluator's own vocabulary.
173
+ *
174
+ * `remaining` is headroom *after* admitting this action, exactly as
175
+ * `core/budgets.ts` defines it, so a failing verdict shows how far over the line
176
+ * the action is rather than a reassuring zero.
177
+ */
178
+ /*
179
+ * The three figures are printed exactly as the evaluator reports them: since
180
+ * APRV-121 they are decimal strings computed in integer micro-USD, so there is
181
+ * no number here to reformat and no locale that could change what a human sees.
182
+ */
183
+ function budgetLine(verdict) {
184
+ const note = verdict.note === undefined ? "" : ` — ${span(verdict.note)}`;
185
+ return `${verdict.pass ? "pass" : "**FAIL**"} ${span(verdict.limit)} (${span(verdict.scope)}, ${span(verdict.window)}): consumed ${verdict.consumed}, requested ${verdict.requested}, remaining ${verdict.remaining}${note}`;
186
+ }
187
+ // ---------------------------------------------------------------------------
188
+ // The tagged-field renderers (B3)
189
+ // ---------------------------------------------------------------------------
190
+ /** One computed line. `source` is always shown: the derivation is the warrant. */
191
+ function computedLine(label, field, rendered) {
192
+ const source = field.kind === "computed" ? field.source : "unknown";
193
+ return `- **${label}** — computed · ${source}: ${rendered}`;
194
+ }
195
+ /** One claimed line. The author is always shown: the claim is theirs, not ours. */
196
+ function claimedLine(label, field, rendered) {
197
+ const author = field.kind === "claimed" ? field.author : "unknown";
198
+ return `- **${label}** — claimed by ${span(author)}: ${rendered}`;
199
+ }
200
+ /**
201
+ * One pending request, as a markdown section.
202
+ *
203
+ * The order is deliberate: what the runtime computed first, what the agent
204
+ * claimed second, under its own heading. B3 is satisfied structurally — the two
205
+ * kinds are never adjacent lines in one list — and the claimed heading repeats
206
+ * the word "unverified" because a heading is what a skimming reader actually
207
+ * reads.
208
+ */
209
+ function renderRequest(index, request) {
210
+ const lines = [];
211
+ const claimedAuthor = request.summary.kind === "claimed" ? request.summary.author : "unknown";
212
+ lines.push(`### ${String(index)}. ${span(request.action_key.value)}`);
213
+ lines.push("");
214
+ lines.push("**Computed by the runtime** (derived from the verified log, the attested policy, and the payload binding):");
215
+ lines.push("");
216
+ lines.push(computedLine("action key", request.action_key, span(request.action_key.value)));
217
+ lines.push(computedLine("task", request.task, optionalSpan(request.task.value)));
218
+ lines.push(computedLine("class", request.class, span(request.class.value)));
219
+ lines.push(computedLine("autonomy", request.autonomy, `${span(request.autonomy.value)} (provenance ${span(request.provenance.value)})`));
220
+ lines.push(computedLine("state", request.state, span(request.state.value)));
221
+ lines.push(computedLine("requested at", request.requested_ts, span(request.requested_ts.value)));
222
+ // APRV-106: the age and the deadline an answer has to beat, in one line.
223
+ lines.push(computedLine("waiting", request.waiting, request.waiting.value));
224
+ lines.push(computedLine("TTL remaining", request.ttl_remaining_ms, countdown(request.ttl_remaining_ms.value)));
225
+ lines.push(computedLine("payload hash", request.payload_hash, span(request.payload_hash.value)));
226
+ lines.push(computedLine("payload bytes", request.fullPayload, request.fullPayload.value === null
227
+ ? "_not held by this renderer_ — the channels present the bytes at decision time"
228
+ : "_not shown here_ — this file is a summary; the channels present the bytes at decision time"));
229
+ lines.push(computedLine("attestation", request.attestation, `${span(request.attestation.value.status)}`));
230
+ const verdicts = request.budgets.value;
231
+ lines.push(computedLine("budgets", request.budgets, verdicts.length === 0 ? "_no budgets in force_" : "").trimEnd());
232
+ for (const verdict of verdicts)
233
+ lines.push(` - ${budgetLine(verdict)}`);
234
+ lines.push(computedLine("chain position", request.chain, `seq ${String(request.chain.value.seq)} ${span(request.chain.value.hash)} (head seq ${String(request.chain.value.head_seq)})`));
235
+ lines.push("");
236
+ lines.push(`**Claimed by ${span(claimedAuthor)} — UNVERIFIED** (the requesting party authored these; they may raise scrutiny, never lower it):`);
237
+ lines.push("");
238
+ lines.push(claimedLine("summary", request.summary, optionalSpan(request.summary.value)));
239
+ lines.push(claimedLine("est. cost (USD)", request.est_cost_usd, num(request.est_cost_usd.value)));
240
+ if (request.rationale !== undefined) {
241
+ lines.push(claimedLine("rationale", request.rationale, span(request.rationale.value)));
242
+ }
243
+ if (request.confidence !== undefined) {
244
+ lines.push(claimedLine("confidence", request.confidence, num(request.confidence.value)));
245
+ }
246
+ lines.push("");
247
+ return lines;
248
+ }
249
+ /**
250
+ * `audit.sampled` events with no later `audit.reviewed` for the same subject.
251
+ *
252
+ * Matching is on `action_key` when both records carry one, and on `task`
253
+ * otherwise — the two identifiers the event schema gives these types. A review
254
+ * must come *after* its sample in the chain: an earlier `audit.reviewed` is a
255
+ * review of an earlier sample, and treating it as covering this one would
256
+ * silently empty the backlog, which is exactly the failure a sampled-audit
257
+ * backlog exists to prevent.
258
+ *
259
+ * The sampler that fills this section is `core/audit.ts`, driven by the daemon
260
+ * (APRV-40). It runs only when the operator's HMAC secret is configured, so an
261
+ * empty backlog is genuinely ambiguous — everything reviewed, or nothing
262
+ * sampled — and the empty state is rendered as an honest statement of that
263
+ * ambiguity, never as "all reviewed". `approval audit list` resolves it.
264
+ */
265
+ function auditBacklog(records) {
266
+ const subjectOf = (record) => {
267
+ const payload = payloadOf(record);
268
+ const key = typeof record.action_key === "string"
269
+ ? record.action_key
270
+ : typeof payload["action_key"] === "string"
271
+ ? payload["action_key"]
272
+ : null;
273
+ const task = typeof record.task === "string"
274
+ ? record.task
275
+ : typeof payload["task"] === "string"
276
+ ? payload["task"]
277
+ : null;
278
+ return { key, task };
279
+ };
280
+ const backlog = [];
281
+ for (const record of records) {
282
+ if (record.event !== "audit.sampled")
283
+ continue;
284
+ const subject = subjectOf(record);
285
+ const reviewed = records.some((other) => {
286
+ if (other.event !== "audit.reviewed" || other.seq <= record.seq)
287
+ return false;
288
+ const theirs = subjectOf(other);
289
+ if (subject.key !== null && theirs.key !== null)
290
+ return subject.key === theirs.key;
291
+ if (subject.task !== null && theirs.task !== null)
292
+ return subject.task === theirs.task;
293
+ return false;
294
+ });
295
+ if (reviewed)
296
+ continue;
297
+ backlog.push({
298
+ seq: record.seq,
299
+ ts: record.ts,
300
+ actor: record.actor,
301
+ task: subject.task,
302
+ actionKey: subject.key,
303
+ });
304
+ }
305
+ return backlog;
306
+ }
307
+ // ---------------------------------------------------------------------------
308
+ // renderQueue
309
+ // ---------------------------------------------------------------------------
310
+ const HEADER = [
311
+ "<!--",
312
+ " GENERATED FILE — DO NOT EDIT.",
313
+ "",
314
+ " This is `.approval/QUEUE.md`, the queue projection of SPEC.md §9.1: a",
315
+ " rendered, READ-ONLY markdown view of pending requests plus the sampled-audit",
316
+ " backlog, regenerated WHOLE on every relevant event. \"This is the screenshot;",
317
+ " it is never the truth.\"",
318
+ "",
319
+ " The truth is `.approval/log/events.jsonl`, the append-only hash-chained event",
320
+ " log. Editing this file changes nothing, authorizes nothing, and will be",
321
+ " overwritten by the next `approval render`. To approve or reject something,",
322
+ " use a decision surface: `approval grant|reject <action-key>`, or a channel.",
323
+ "-->",
324
+ ].join("\n");
325
+ function headerSection(now, head) {
326
+ return [
327
+ HEADER,
328
+ "",
329
+ "# Approval queue (generated — read only)",
330
+ "",
331
+ `> **Do not edit this file.** It is a projection of the append-only log, regenerated whole by \`approval render\`. The log is the truth (SPEC.md §9.1); this is the screenshot.`,
332
+ "",
333
+ `- **Evaluated at** (the \`now\` handed to the renderer, not an ambient clock): ${span(now)}`,
334
+ `- **Derived from log head**: ${head === null ? "_empty log_" : `seq ${String(head.seq)} ${span(head.hash)}`}`,
335
+ "- **Full payloads are not in this file.** The queue is a summary surface and collects no decision. It carries the content binding (`payload_hash`) only; the full payload is presented by the decision channels before a decision is collected, as SPEC.md §10.4 requires.",
336
+ "",
337
+ ];
338
+ }
339
+ /**
340
+ * Render the queue.
341
+ *
342
+ * Deterministic in the strong sense: for a fixed log, policy and `now`, the
343
+ * returned string is byte-identical across processes and machines. Nothing here
344
+ * reads a clock, a locale, an environment variable, or a hostname.
345
+ *
346
+ * Expiry is not this module's judgment: `channels/tagging.ts` derives state
347
+ * through `core/state.ts` with the policy TTL and the same `now`, so a request
348
+ * whose TTL has elapsed is `expired`, not `requested`, and never reaches the
349
+ * pending section. The countdown a reader sees therefore never reaches zero on
350
+ * a listed entry.
351
+ *
352
+ * The verified read happens twice — once here for the head and the audit
353
+ * records, once inside {@link buildPendingQueue} — which is a deliberate trade:
354
+ * a second walk of the chain costs a few milliseconds on a rendering path, and
355
+ * the alternative is widening the tagger's public result to carry records it
356
+ * has no other reason to expose.
357
+ */
358
+ export function renderQueue(logPath, options, now) {
359
+ const read = readVerifiedRecords(logPath, options.schemaDir === undefined ? {} : { schemaDir: options.schemaDir });
360
+ if (!read.ok)
361
+ return refuse(read.code, read.message);
362
+ const queue = buildPendingQueue(logPath, options, now);
363
+ if (!queue.ok) {
364
+ // Only the three log codes can reach here: every other tagger refusal is
365
+ // per-request and lands in `skipped`.
366
+ const code = isLogCode(queue.code)
367
+ ? queue.code
368
+ : "log-corrupt";
369
+ return refuse(code, queue.message);
370
+ }
371
+ const backlog = auditBacklog(read.records);
372
+ const lines = [...headerSection(now, read.head)];
373
+ lines.push("## Pending requests awaiting a human decision");
374
+ lines.push("");
375
+ if (queue.requests.length === 0) {
376
+ lines.push("_Nothing is awaiting a decision._ No action key has a live `approval.requested` at this instant.");
377
+ lines.push("");
378
+ }
379
+ else {
380
+ lines.push(`${String(queue.requests.length)} request(s), oldest first (log order).`);
381
+ lines.push("");
382
+ for (const [index, request] of queue.requests.entries()) {
383
+ lines.push(...renderRequest(index + 1, request));
384
+ }
385
+ }
386
+ lines.push(...renderIntakeLimits(read.records, loadPolicy(loadOptionsOf(options)), now));
387
+ lines.push(...renderSkipped(queue.skipped));
388
+ lines.push(...renderAudit(backlog));
389
+ lines.push(...footer(read.head, logPath));
390
+ return {
391
+ ok: true,
392
+ markdown: `${lines.join("\n")}\n`,
393
+ head: read.head,
394
+ pending: queue.requests.length,
395
+ skipped: queue.skipped.length,
396
+ auditBacklog: backlog.length,
397
+ };
398
+ }
399
+ /**
400
+ * Is this tagger refusal one of the whole-log codes?
401
+ *
402
+ * The tagger's other codes are per-request and land in `skipped`; only these
403
+ * three can refuse an entire render, and they are passed through verbatim so a
404
+ * corrupt log is reported as corruption by every layer with one vocabulary.
405
+ */
406
+ function isLogCode(code) {
407
+ return code === "log-unreadable" || code === "log-torn-tail" || code === "log-corrupt";
408
+ }
409
+ function renderSkipped(skipped) {
410
+ const lines = ["## Live requests this render could not summarize", ""];
411
+ if (skipped.length === 0) {
412
+ lines.push("_None._ Every live request above is rendered in full.");
413
+ lines.push("");
414
+ return lines;
415
+ }
416
+ lines.push("These action keys have a live `approval.requested` that the renderer could not tag. They are listed rather than dropped: a request missing from a queue is a request nobody will answer.");
417
+ lines.push("");
418
+ for (const entry of skipped) {
419
+ lines.push(`- ${span(entry.action_key)} — \`${entry.code}\`: ${span(entry.message)}`);
420
+ }
421
+ lines.push("");
422
+ return lines;
423
+ }
424
+ /**
425
+ * The request-volume ceilings in force, and how close the queue is to them
426
+ * (SPEC.md §5.2, APRV-173).
427
+ *
428
+ * Rendered only when the policy declares at least one `max_pending`, so a
429
+ * policy that declares none produces exactly the file it produced before this
430
+ * section existed. That is not cosmetic: a heading reading "no ceiling is
431
+ * declared" on every queue in the world would train a reader to skip the one
432
+ * place this file says a request was turned away.
433
+ *
434
+ * Why it belongs here at all. A refused intake appends nothing (see
435
+ * `core/gate.ts`), so a `queue-full` refusal is invisible in the log by design.
436
+ * What IS visible is the standing condition that produced it, and this is where
437
+ * a human reads it: the queue is at its ceiling, so requests are being refused
438
+ * until it drains. Every figure is computed by `core/intake-limits.ts` — the
439
+ * same function the gate refuses from, never a second count.
440
+ *
441
+ * The rate limit has no row. It is per origin over a rolling hour, so its
442
+ * pressure is a fact about a requester rather than about this queue, and a
443
+ * number here would be a number for whichever origin the renderer happened to
444
+ * pick.
445
+ */
446
+ function renderIntakeLimits(records, load, now) {
447
+ if (!load.ok)
448
+ return [];
449
+ const rows = [];
450
+ const classes = load.policy.classes ?? {};
451
+ const ttlMs = load.durations.approvalTtlMs;
452
+ for (const pattern of Object.keys(classes).sort()) {
453
+ const declared = classes[pattern]?.limits?.[MAX_PENDING];
454
+ if (declared === undefined)
455
+ continue;
456
+ rows.push(row(MAX_PENDING, pattern, pendingCount(records, pattern, now, ttlMs), declared));
457
+ }
458
+ const budgets = load.policy.budgets ?? {};
459
+ for (const scopeName of Object.keys(budgets).sort()) {
460
+ const declared = budgets[scopeName]?.[MAX_PENDING];
461
+ if (declared === undefined)
462
+ continue;
463
+ rows.push(row(`${scopeName}.${MAX_PENDING}`, "every class", pendingCount(records, null, now, ttlMs), declared));
464
+ }
465
+ if (rows.length === 0)
466
+ return [];
467
+ return [
468
+ "## Request-volume ceilings",
469
+ "",
470
+ "SPEC.md §5.2 caps how many requests may await a decision at once. A request that would cross a ceiling is refused `queue-full` at intake, and a refused request appears nowhere: nothing is appended for it, here or in the log. These figures are computed by the same code the gate refuses from.",
471
+ "",
472
+ "| ceiling | scope | pending | limit | headroom |",
473
+ "|---|---|---|---|---|",
474
+ ...rows,
475
+ "",
476
+ ];
477
+ }
478
+ /** One ceiling's row: computed counts, never a claimed one. */
479
+ function row(limit, scope, pending, declared) {
480
+ const headroom = declared - pending;
481
+ const state = headroom > 0
482
+ ? `${num(headroom)} more`
483
+ : "**full** — intake is refusing `queue-full` until it drains";
484
+ return `| ${span(limit)} | ${span(scope)} | ${num(pending)} | ${num(declared)} | ${state} |`;
485
+ }
486
+ function renderAudit(backlog) {
487
+ const lines = ["## Sampled-audit backlog", ""];
488
+ if (backlog.length === 0) {
489
+ lines.push("_Empty._ No `audit.sampled` event in this log is waiting for an `audit.reviewed`. Note what this does and does not say. The daemon samples supervised executions (SPEC.md §5.2) only when the operator's HMAC secret is configured, so an empty backlog means either **everything sampled has been reviewed** or **nothing was sampled**, and this file cannot tell you which. Run `approval audit list` for the answer: it reports whether sampling is running, and why not when it is not.");
490
+ lines.push("");
491
+ return lines;
492
+ }
493
+ lines.push(`${String(backlog.length)} sampled action(s) with no later \`audit.reviewed\`, oldest first.`);
494
+ lines.push("");
495
+ for (const item of backlog) {
496
+ lines.push(`- seq ${String(item.seq)} — computed · log: sampled at ${span(item.ts)} by ${span(item.actor)}, task ${optionalSpan(item.task)}, action ${optionalSpan(item.actionKey)}`);
497
+ }
498
+ lines.push("");
499
+ return lines;
500
+ }
501
+ function footer(head, logPath) {
502
+ return [
503
+ "---",
504
+ "",
505
+ `Rendered from ${span(logPath)} at log head ${head === null ? "_empty log_" : `seq ${String(head.seq)}, hash ${span(head.hash)}`}. Every fact above is reproducible from that log: re-running \`approval render\` against the same head with the same evaluation instant produces this file byte for byte. If this file disagrees with the log, the log is right.`,
506
+ ];
507
+ }
508
+ // ---------------------------------------------------------------------------
509
+ // writeQueue
510
+ // ---------------------------------------------------------------------------
511
+ /** Distinguishes concurrent renders' temp files within one process. */
512
+ let tempCounter = 0;
513
+ /**
514
+ * Render and write `.approval/QUEUE.md` atomically.
515
+ *
516
+ * Temp file in the destination directory, `fsync`, then `rename` — a reader
517
+ * either sees the previous complete rendering or the new one, never a half-
518
+ * written queue. The temp name is the only non-deterministic byte anywhere in
519
+ * this module and it never reaches the file's contents; it is removed on every
520
+ * failure path, so a failed render leaves no debris beside the queue.
521
+ *
522
+ * Writes this one file and nothing else. In particular it does not touch the
523
+ * log: the log is opened read-only by the verified read and is not reopened
524
+ * here.
525
+ */
526
+ export function writeQueue(logPath, queuePath, options, now) {
527
+ const rendered = renderQueue(logPath, options, now);
528
+ if (!rendered.ok)
529
+ return rendered;
530
+ const directory = dirname(queuePath);
531
+ tempCounter += 1;
532
+ const temp = join(directory, `.${queuePath.split(/[\\/]/u).pop() ?? "QUEUE.md"}.tmp-${String(process.pid)}-${String(tempCounter)}`);
533
+ const bytes = Buffer.byteLength(rendered.markdown, "utf8");
534
+ try {
535
+ mkdirSync(directory, { recursive: true });
536
+ const handle = openSync(temp, "wx");
537
+ try {
538
+ writeSync(handle, rendered.markdown, 0, "utf8");
539
+ }
540
+ finally {
541
+ closeSync(handle);
542
+ }
543
+ renameSync(temp, queuePath);
544
+ }
545
+ catch (cause) {
546
+ try {
547
+ unlinkSync(temp);
548
+ }
549
+ catch {
550
+ // The temp file may never have been created; nothing to clean up.
551
+ }
552
+ return refuse("write-failed", `queue ${queuePath} could not be written: ${cause instanceof Error ? cause.message : String(cause)}. Nothing was written and the log was not touched.`);
553
+ }
554
+ return {
555
+ ok: true,
556
+ path: queuePath,
557
+ bytes,
558
+ head: rendered.head,
559
+ pending: rendered.pending,
560
+ skipped: rendered.skipped,
561
+ auditBacklog: rendered.auditBacklog,
562
+ };
563
+ }
564
+ //# sourceMappingURL=render-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-queue.js","sourceRoot":"","sources":["../../../src/channels/render-queue.ts"],"names":[],"mappings":"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"}