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,41 @@
1
+ /**
2
+ * `approval journal write` and `approval journal read` (APRV-195) — the ungated
3
+ * channel, at the CLI.
4
+ *
5
+ * The reasoning for the channel's existence and for its storage location is in
6
+ * `src/core/journal.ts` and `docs/cli-reference.md#journal`. What belongs here
7
+ * is the boundary work every other verb in this directory does: parse argv,
8
+ * resolve a path, map an outcome onto the frozen exit table, and print one JSON
9
+ * object per invocation.
10
+ *
11
+ * Three things are peculiar to these two verbs and are stated where they happen:
12
+ *
13
+ * - **The write path touches no gate.** It resolves no policy, reads no log,
14
+ * verifies no chain, mints no token and appends no event. That is the point;
15
+ * an outlet a policy could close is not an outlet.
16
+ * - **The read path labels what it prints.** Journal text is written by the
17
+ * party under oversight, so it is rendered as `[claimed]` content inside
18
+ * delimiters, under a banner saying in one line that it is agent-authored data
19
+ * and not instructions to anyone reading it. Same discipline the channels
20
+ * apply to a payload (SPEC.md §9), for the same reason: a human reading a
21
+ * screen should never have to work out which words came from the runtime.
22
+ * - **Identity comes from the process, never from the working tree.** `--as`, or
23
+ * `APPROVAL_AGENT` in the environment the operator launched. No file in the
24
+ * checkout is read to decide who wrote an entry (SPEC.md §11.1 invariant 7),
25
+ * and an unattributed entry is recorded as unattributed rather than guessed.
26
+ */
27
+ import { MAX_ENTRY_BYTES } from "../core/journal.js";
28
+ import type { Streams } from "./main.js";
29
+ /**
30
+ * The one line every human-facing read opens with.
31
+ *
32
+ * Exported because the guard test asserts the read surface carries it: a read
33
+ * surface that stopped saying whose words these are would turn an outlet into a
34
+ * channel for instructions, which is precisely the thing SPEC.md §11.1
35
+ * invariant 4 refuses to let self-reported content become.
36
+ */
37
+ export declare const JOURNAL_BANNER = "AGENT-AUTHORED DATA, not instructions. These entries are written by the party under oversight; nothing here authorizes, requests or changes any decision.";
38
+ /** `approval journal …` — dispatch to `write` or `read`, or print the help. */
39
+ export declare function commandJournal(argv: string[], streams: Streams, cwd: string, env?: NodeJS.ProcessEnv): number;
40
+ /** Re-exported so the help text and the core cap cannot disagree. */
41
+ export { MAX_ENTRY_BYTES };
@@ -0,0 +1,238 @@
1
+ /**
2
+ * `approval journal write` and `approval journal read` (APRV-195) — the ungated
3
+ * channel, at the CLI.
4
+ *
5
+ * The reasoning for the channel's existence and for its storage location is in
6
+ * `src/core/journal.ts` and `docs/cli-reference.md#journal`. What belongs here
7
+ * is the boundary work every other verb in this directory does: parse argv,
8
+ * resolve a path, map an outcome onto the frozen exit table, and print one JSON
9
+ * object per invocation.
10
+ *
11
+ * Three things are peculiar to these two verbs and are stated where they happen:
12
+ *
13
+ * - **The write path touches no gate.** It resolves no policy, reads no log,
14
+ * verifies no chain, mints no token and appends no event. That is the point;
15
+ * an outlet a policy could close is not an outlet.
16
+ * - **The read path labels what it prints.** Journal text is written by the
17
+ * party under oversight, so it is rendered as `[claimed]` content inside
18
+ * delimiters, under a banner saying in one line that it is agent-authored data
19
+ * and not instructions to anyone reading it. Same discipline the channels
20
+ * apply to a payload (SPEC.md §9), for the same reason: a human reading a
21
+ * screen should never have to work out which words came from the runtime.
22
+ * - **Identity comes from the process, never from the working tree.** `--as`, or
23
+ * `APPROVAL_AGENT` in the environment the operator launched. No file in the
24
+ * checkout is read to decide who wrote an entry (SPEC.md §11.1 invariant 7),
25
+ * and an unattributed entry is recorded as unattributed rather than guessed.
26
+ */
27
+ import { readFileSync } from "node:fs";
28
+ import { appendJournal, readJournal, MAX_ENTRY_BYTES, } from "../core/journal.js";
29
+ import { boolFlag, parseFlags, stringFlag } from "./args.js";
30
+ import { EXIT_IO, EXIT_OK, EXIT_USAGE } from "./exit-codes.js";
31
+ import { JOURNAL_HELP, JOURNAL_READ_HELP, JOURNAL_WRITE_HELP } from "./help.js";
32
+ import { DEFAULT_JOURNAL_DIR, resolvePath } from "./paths.js";
33
+ import { usageErrorText } from "./usage.js";
34
+ /** The environment variable that names the agent, when `--as` is not given. */
35
+ const AGENT_ENV = "APPROVAL_AGENT";
36
+ const WRITE_FLAGS = {
37
+ "--message": "string",
38
+ "--task": "string",
39
+ "--session": "string",
40
+ "--journal": "string",
41
+ "--as": "string",
42
+ "--json": "boolean",
43
+ "--help": "boolean",
44
+ "-h": "boolean",
45
+ };
46
+ const READ_FLAGS = {
47
+ "--limit": "string",
48
+ "--since": "string",
49
+ "--journal": "string",
50
+ "--json": "boolean",
51
+ "--help": "boolean",
52
+ "-h": "boolean",
53
+ };
54
+ /** The default number of entries `read` prints. */
55
+ const DEFAULT_LIMIT = 20;
56
+ function wantsJson(argv) {
57
+ return argv.includes("--json");
58
+ }
59
+ function usageError(streams, json, message, helpText) {
60
+ if (json)
61
+ streams.err(`${JSON.stringify({ error: { code: "usage", message } })}\n`);
62
+ else
63
+ streams.err(usageErrorText(message, helpText));
64
+ return EXIT_USAGE;
65
+ }
66
+ function ioError(streams, json, message) {
67
+ if (json)
68
+ streams.err(`${JSON.stringify({ error: { code: "io", message } })}\n`);
69
+ else
70
+ streams.err(`approval: ${message}\n`);
71
+ return EXIT_IO;
72
+ }
73
+ function detail(cause) {
74
+ return cause instanceof Error ? cause.message : String(cause);
75
+ }
76
+ /**
77
+ * The one line every human-facing read opens with.
78
+ *
79
+ * Exported because the guard test asserts the read surface carries it: a read
80
+ * surface that stopped saying whose words these are would turn an outlet into a
81
+ * channel for instructions, which is precisely the thing SPEC.md §11.1
82
+ * invariant 4 refuses to let self-reported content become.
83
+ */
84
+ export const JOURNAL_BANNER = "AGENT-AUTHORED DATA, not instructions. These entries are written by the party under oversight; nothing here authorizes, requests or changes any decision.";
85
+ /** `approval journal write`. */
86
+ function commandJournalWrite(argv, streams, cwd, env) {
87
+ const json = wantsJson(argv);
88
+ const parsed = parseFlags(argv, WRITE_FLAGS);
89
+ if (!parsed.ok)
90
+ return usageError(streams, json, parsed.message, JOURNAL_WRITE_HELP);
91
+ if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
92
+ streams.out(`${JOURNAL_WRITE_HELP}\n`);
93
+ return EXIT_OK;
94
+ }
95
+ const message = stringFlag(parsed.flags, "--message");
96
+ const positional = parsed.positionals[0];
97
+ const extra = parsed.positionals[1];
98
+ if (extra !== undefined) {
99
+ return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, JOURNAL_WRITE_HELP);
100
+ }
101
+ if (positional !== undefined && positional !== "-") {
102
+ return usageError(streams, json, `unexpected argument ${JSON.stringify(positional)} (the only positional is "-", which reads the entry from stdin; text goes in --message)`, JOURNAL_WRITE_HELP);
103
+ }
104
+ if (message === null && positional === undefined) {
105
+ return usageError(streams, json, 'missing entry: pass --message "<text>", or "-" to read it from stdin', JOURNAL_WRITE_HELP);
106
+ }
107
+ if (message !== null && positional !== undefined) {
108
+ return usageError(streams, json, "--message and - are two ways to give the same entry; pass one", JOURNAL_WRITE_HELP);
109
+ }
110
+ let text;
111
+ if (message !== null) {
112
+ text = message;
113
+ }
114
+ else {
115
+ try {
116
+ text = readFileSync(0, "utf8");
117
+ }
118
+ catch (cause) {
119
+ return ioError(streams, json, `stdin could not be read: ${detail(cause)}`);
120
+ }
121
+ }
122
+ const dir = resolvePath(stringFlag(parsed.flags, "--journal"), DEFAULT_JOURNAL_DIR, cwd);
123
+ const actorFlag = stringFlag(parsed.flags, "--as");
124
+ const actorEnv = env[AGENT_ENV];
125
+ const actor = actorFlag !== null && actorFlag.trim().length > 0
126
+ ? actorFlag
127
+ : actorEnv !== undefined && actorEnv.trim().length > 0
128
+ ? actorEnv
129
+ : undefined;
130
+ const task = stringFlag(parsed.flags, "--task");
131
+ const session = stringFlag(parsed.flags, "--session");
132
+ const outcome = appendJournal(dir, text, {
133
+ ...(actor === undefined ? {} : { actor }),
134
+ ...(task === null ? {} : { task }),
135
+ ...(session === null ? {} : { session }),
136
+ });
137
+ if (!outcome.ok) {
138
+ if (outcome.code === "io")
139
+ return ioError(streams, json, outcome.message);
140
+ return usageError(streams, json, outcome.message, JOURNAL_WRITE_HELP);
141
+ }
142
+ if (json) {
143
+ streams.out(`${JSON.stringify({
144
+ ok: true,
145
+ path: outcome.path,
146
+ ts: outcome.entry.ts,
147
+ actor: outcome.entry.actor,
148
+ bytes: Buffer.byteLength(outcome.entry.text, "utf8"),
149
+ })}\n`);
150
+ }
151
+ else {
152
+ streams.out(`journal: entry written to ${outcome.path} as ${outcome.entry.actor}\n`);
153
+ }
154
+ return EXIT_OK;
155
+ }
156
+ /** One entry, rendered for a person. */
157
+ function renderEntry(entry) {
158
+ const attribution = [
159
+ entry.ts,
160
+ entry.actor,
161
+ ...(entry.task === undefined ? [] : [`task ${entry.task}`]),
162
+ ...(entry.session === undefined ? [] : [`session ${entry.session}`]),
163
+ ].join(" ");
164
+ return [`${attribution} [claimed]`, " ---", ...entry.text.split("\n").map((line) => ` ${line}`), " ---"].join("\n");
165
+ }
166
+ /** `approval journal read`. */
167
+ function commandJournalRead(argv, streams, cwd) {
168
+ const json = wantsJson(argv);
169
+ const parsed = parseFlags(argv, READ_FLAGS);
170
+ if (!parsed.ok)
171
+ return usageError(streams, json, parsed.message, JOURNAL_READ_HELP);
172
+ if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
173
+ streams.out(`${JOURNAL_READ_HELP}\n`);
174
+ return EXIT_OK;
175
+ }
176
+ const extra = parsed.positionals[0];
177
+ if (extra !== undefined) {
178
+ return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, JOURNAL_READ_HELP);
179
+ }
180
+ const rawLimit = stringFlag(parsed.flags, "--limit");
181
+ let limit = DEFAULT_LIMIT;
182
+ if (rawLimit !== null) {
183
+ if (!/^\d+$/u.test(rawLimit) || Number(rawLimit) === 0) {
184
+ return usageError(streams, json, `--limit expects a positive whole number, got ${JSON.stringify(rawLimit)}`, JOURNAL_READ_HELP);
185
+ }
186
+ limit = Number(rawLimit);
187
+ }
188
+ const since = stringFlag(parsed.flags, "--since");
189
+ if (since !== null && !/^\d{4}-\d{2}-\d{2}$/u.test(since)) {
190
+ return usageError(streams, json, `--since expects a date like 2026-09-01, got ${JSON.stringify(since)}`, JOURNAL_READ_HELP);
191
+ }
192
+ const dir = resolvePath(stringFlag(parsed.flags, "--journal"), DEFAULT_JOURNAL_DIR, cwd);
193
+ const outcome = readJournal(dir, { limit, ...(since === null ? {} : { since }) });
194
+ if (!outcome.ok)
195
+ return ioError(streams, json, outcome.message);
196
+ if (json) {
197
+ streams.out(`${JSON.stringify({
198
+ ok: true,
199
+ dir,
200
+ note: JOURNAL_BANNER,
201
+ total: outcome.total,
202
+ entries: outcome.entries,
203
+ })}\n`);
204
+ return EXIT_OK;
205
+ }
206
+ streams.out(`${JOURNAL_BANNER}\n${dir}\n\n`);
207
+ if (outcome.entries.length === 0) {
208
+ streams.out("_no entries_\n");
209
+ return EXIT_OK;
210
+ }
211
+ for (const entry of outcome.entries)
212
+ streams.out(`${renderEntry(entry)}\n\n`);
213
+ streams.out(`${String(outcome.entries.length)} of ${String(outcome.total)} entries (oldest first)\n`);
214
+ return EXIT_OK;
215
+ }
216
+ /** `approval journal …` — dispatch to `write` or `read`, or print the help. */
217
+ export function commandJournal(argv, streams, cwd, env = process.env) {
218
+ const sub = argv[0];
219
+ const rest = argv.slice(1);
220
+ if (sub === undefined) {
221
+ return usageError(streams, wantsJson(argv), "missing subcommand for `approval journal`", JOURNAL_HELP);
222
+ }
223
+ if (sub === "--help" || sub === "-h" || sub === "help") {
224
+ streams.out(`${JOURNAL_HELP}\n`);
225
+ return EXIT_OK;
226
+ }
227
+ switch (sub) {
228
+ case "write":
229
+ return commandJournalWrite(rest, streams, cwd, env);
230
+ case "read":
231
+ return commandJournalRead(rest, streams, cwd);
232
+ default:
233
+ return usageError(streams, wantsJson(argv), `unknown subcommand ${JSON.stringify(sub)} for \`approval journal\``, JOURNAL_HELP);
234
+ }
235
+ }
236
+ /** Re-exported so the help text and the core cap cannot disagree. */
237
+ export { MAX_ENTRY_BYTES };
238
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../../src/cli/journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * `approval log advance` (APRV-125) — the commit-and-push half of the log
3
+ * ritual, as a verb.
4
+ *
5
+ * The APRV-92 flow, written down: the log's appends the remote does not have
6
+ * yet are gathered into a commit whose message names the seq range they cover,
7
+ * and pushed to a short-lived records branch that exists for it. Main is
8
+ * protected here, so the commit reaches it through a pull request, and the PR
9
+ * step is `--pr`, which runs the ordinary gated `gh` path. Since APRV-284 that
10
+ * step also ARMS the merge (`gh pr merge <branch> --merge --auto`, off with
11
+ * `--no-auto-merge`): a records pull request carries only evidence paths, so
12
+ * the click it was waiting for was never a review. {@link armAutoMerge} carries
13
+ * the reasoning and the guard that keeps it true.
14
+ *
15
+ * ## The three refusals that are the point
16
+ *
17
+ * **`log-advance-dirty-stage`.** The staged set must be EXACTLY the log, the
18
+ * queue projection, and the payload store — nothing else. The failure this
19
+ * prevents is the one CLAUDE.md's rule is written against: a log commit riding
20
+ * a branch that carries other work. A verb that ran `git add -A` and hoped
21
+ * would be a worse version of the hand-ritual it replaces, so anything else
22
+ * already staged is a refusal and not a thing to unstage. Unstaging someone
23
+ * else's work is not this verb's decision to make.
24
+ *
25
+ * **`log-advance-checkout-required`.** This verb never checks out anything. The
26
+ * checkout is the footgun: a branch switch with an uncommitted working log
27
+ * rewinds `events.jsonl` under whatever holds it open, which is fork 2 of
28
+ * 2026-08-20. It builds the commit with a scratch index and pushes THAT commit
29
+ * to a records branch by refspec, which moves no HEAD and touches no file.
30
+ *
31
+ * ## The base is the remote, not the local branch (APRV-203)
32
+ *
33
+ * The verb used to commit on the branch you were standing on, which made the
34
+ * operator responsible for that branch being current. A checkout whose local
35
+ * `main` was behind origin produced a records commit parented on a stale tip,
36
+ * carrying a tree that silently reverted everything main had merged since. So
37
+ * the verb fetches first and bases its commit on the remote's tip: `git
38
+ * read-tree` fills a scratch index from origin's tree, the log, the queue
39
+ * projection and the payload store are laid over it from the working tree, and
40
+ * `commit-tree` parents the result on origin. HEAD, the operator's index and
41
+ * every file in the working tree are exactly as they were found.
42
+ *
43
+ * **`log-advance-not-primary`.** Same rule as sync's: the committed log has one
44
+ * home, and it is not a worktree.
45
+ *
46
+ * ## One records branch, and one pull request, per day (APRV-204)
47
+ *
48
+ * The daemon advances on a cadence, so an advance is no longer a once-a-day
49
+ * ceremony and the day's records branch usually already exists. When it does,
50
+ * and its log is a prefix of the working log, the commit is parented on THAT
51
+ * branch rather than on the trunk: parenting every advance on the trunk makes
52
+ * the second push of the day a non-fast-forward of a branch a pull request is
53
+ * already open on. `--pr` asks whether an open pull request exists for the head
54
+ * branch before creating one, so a day gets a single pull request that later
55
+ * advances grow.
56
+ *
57
+ * A local branch that is AHEAD of origin with commits this verb did not make is
58
+ * not a refusal: the advance is based on origin either way, and those commits
59
+ * are simply not part of it. What IS refused is a working log that origin's log
60
+ * is not a prefix of, in either direction, because an advance is only ever the
61
+ * records origin does not have yet.
62
+ *
63
+ * ## This verb appends no event
64
+ *
65
+ * For the same reason `log sync` appends none: committing the file the log
66
+ * lives in is housekeeping on the container, not a decision about the world.
67
+ * The commit is already the record of itself, in git, where a reader can see
68
+ * exactly which bytes moved (SPEC §10.1, amended APRV-125).
69
+ */
70
+ import { type EventRecord } from "../core/log.js";
71
+ import type { LogHead } from "../core/verify.js";
72
+ import { defaultRecordsBranch } from "./log-anchor.js";
73
+ import { type ProgressReporter } from "./progress.js";
74
+ /**
75
+ * The only paths an advance may stage, as git spells them.
76
+ *
77
+ * A closed list, checked in both directions: everything staged must be in it,
78
+ * and nothing outside it may be staged. Widening it is a reviewable diff.
79
+ */
80
+ export declare const ADVANCE_PATHS: readonly string[];
81
+ /** Machine-readable refusal codes. Frozen public API, printed in the help. */
82
+ export declare const LOG_ADVANCE_REFUSAL_CODES: readonly ["log-advance-not-primary", "log-advance-no-branch", "log-advance-dirty-stage", "log-advance-checkout-required", "log-advance-unverified", "log-advance-locked", "log-advance-fetch-failed", "log-advance-behind-remote", "log-advance-remote-diverged", "log-advance-git-failed", "log-advance-push-rejected", "log-advance-pr-failed", "log-advance-co-author-invalid"];
83
+ export type LogAdvanceRefusalCode = (typeof LOG_ADVANCE_REFUSAL_CODES)[number];
84
+ /** What became of the auto-merge arm. Closed (SPEC.md §11.1 invariant 6). */
85
+ export type AutoMergeState = "armed" | "withheld" | "refused" | "off";
86
+ export interface LogAdvanceOptions {
87
+ cwd: string;
88
+ /** The records branch to push to. Default `records-log-<YYYY-MM-DD>`. */
89
+ branch?: string | null;
90
+ remote?: string;
91
+ /**
92
+ * The remote branch the records commit is parented on. Defaults to the branch
93
+ * the checkout is standing on, which in the primary checkout is the trunk.
94
+ */
95
+ base?: string | null;
96
+ /** Open the pull request through `gh` as well as pushing. */
97
+ pr?: boolean;
98
+ /**
99
+ * Arm auto-merge on the pull request `--pr` opens or updates (APRV-284).
100
+ *
101
+ * Defaults to true and is read only when {@link pr} is set: there is nothing
102
+ * to arm without a pull request. `false` is the opt-out, and it is an opt-out
103
+ * rather than an opt-in because a records pull request that sits at CLEAN
104
+ * waiting for a hand click is the thing this option exists to remove.
105
+ */
106
+ autoMerge?: boolean;
107
+ /** Optional display credit. It grants no authority and is never inferred. */
108
+ coAuthor?: string;
109
+ /** Report what would happen and stage, commit, and push nothing. */
110
+ dryRun?: boolean;
111
+ /** The date the default branch name is built from. Injected by the CLI edge. */
112
+ today?: string;
113
+ /**
114
+ * Where the phase narration goes (APRV-167/APRV-203). The CLI edge passes a
115
+ * reporter over stderr, and `--json` passes none: a machine consumer parses
116
+ * one object and progress on its stream would corrupt it.
117
+ */
118
+ progress?: ProgressReporter;
119
+ }
120
+ export interface LogAdvanceReport {
121
+ root: string;
122
+ /** The branch the checkout is standing on. It is not moved, ever. */
123
+ branch: string;
124
+ recordsBranch: string;
125
+ remote: string;
126
+ /** The remote branch the advance was measured against, and the sha it was at. */
127
+ base: {
128
+ branch: string;
129
+ sha: string;
130
+ } | null;
131
+ /**
132
+ * The commit this advance is actually parented on (APRV-204): the base
133
+ * branch's tip on the first advance of a day, and the day's records branch on
134
+ * every advance after it, so the push fast-forwards the branch the day's pull
135
+ * request is open on.
136
+ */
137
+ parent?: {
138
+ ref: string;
139
+ sha: string;
140
+ };
141
+ /** True when the parent was the day's existing records branch. */
142
+ reusedRecordsBranch?: boolean;
143
+ /**
144
+ * True when the day's branch existed and did NOT contain the base, so this
145
+ * advance rebuilt it on the base rather than stacking on its tip (APRV-234).
146
+ */
147
+ rebuilt?: boolean;
148
+ /** The ref and sha the rebuild was parented on, when there was one. */
149
+ rebuiltOn?: {
150
+ ref: string;
151
+ sha: string;
152
+ };
153
+ /**
154
+ * The branch this advance would have pushed to, when the rebuilt commit was
155
+ * refused there and a fresh `records-log-<date>-<n>` was opened instead.
156
+ * `null` whenever `recordsBranch` is the branch that was asked for.
157
+ */
158
+ fallbackFrom?: string | null;
159
+ /** True when this run OPENED the pull request; false when one already stood. */
160
+ prCreated?: boolean;
161
+ /**
162
+ * What became of the auto-merge arm (APRV-284). A closed set, machine-read.
163
+ *
164
+ * - `null` — no pull request step ran at all (`pr` was not asked for, or
165
+ * nothing was owed and nothing was pushed).
166
+ * - `"off"` — the caller turned the arm off (`--no-auto-merge`).
167
+ * - `"armed"` — `gh pr merge <branch> --merge --auto` succeeded: the pull
168
+ * request lands as a merge commit when its checks and its branch rules
169
+ * say so, and never before.
170
+ * - `"withheld"` — THIS verb declined to arm, because the branch it pushed
171
+ * carries something outside {@link ADVANCE_PATHS}. See
172
+ * {@link autoMergeNote}.
173
+ * - `"refused"` — `gh` said no (auto-merge disabled on the repository, a
174
+ * merge queue, a pull request already mergeable). The pull request is open
175
+ * either way, so this is reported and never fatal.
176
+ */
177
+ autoMerge?: AutoMergeState | null;
178
+ /** Why the arm was withheld or refused, verbatim; `null` when it was not. */
179
+ autoMergeNote?: string | null;
180
+ /** The seq range this advance carries, inclusive; null when nothing is owed. */
181
+ range: {
182
+ from: number;
183
+ to: number;
184
+ } | null;
185
+ committedHead: LogHead | null;
186
+ workingHead: LogHead | null;
187
+ staged: readonly string[];
188
+ message: string;
189
+ commit: string | null;
190
+ pushed: boolean;
191
+ prUrl: string | null;
192
+ dryRun: boolean;
193
+ }
194
+ export type LogAdvanceResult = {
195
+ ok: true;
196
+ report: LogAdvanceReport;
197
+ } | {
198
+ ok: false;
199
+ code: LogAdvanceRefusalCode;
200
+ message: string;
201
+ /** Paths that were staged and should not have been. */
202
+ offending?: readonly string[];
203
+ quote?: readonly string[];
204
+ };
205
+ export { defaultRecordsBranch };
206
+ /** `approval log advance`, as a function. The CLI wrapper formats its answer. */
207
+ export declare function logAdvance(options: LogAdvanceOptions): LogAdvanceResult;
208
+ /** Where the records that are already published end. */
209
+ export interface PublishedState {
210
+ /** The highest seq this chain reaches on a records branch, the trunk, or HEAD. */
211
+ publishedSeq: number;
212
+ /** The working log's head seq. */
213
+ workingSeq: number;
214
+ /** Working records above `publishedSeq`, advance bookkeeping included. */
215
+ pending: number;
216
+ /** The same count with the daemon's own advance cycles removed. */
217
+ substantive: number;
218
+ /**
219
+ * The rev the published head was read from, or `null` when no rev carried a
220
+ * copy of this chain (APRV-210).
221
+ *
222
+ * A row that says "N records are not yet on a records branch" is unreadable
223
+ * without it: a rev that resolved to nothing and a rev that carried nothing
224
+ * are the same number and completely different facts, and the doctor's
225
+ * cadence row reported the first as the second on a log whose first 8,379
226
+ * records had been merged to the trunk an hour earlier.
227
+ */
228
+ publishedRev: string | null;
229
+ /** Every rev that was consulted, in the order they were tried. */
230
+ revs: readonly string[];
231
+ /**
232
+ * Where the OWED SPAN ends: the highest unpublished seq that is not an
233
+ * advance cycle's own bookkeeping, or {@link publishedSeq} when none is
234
+ * (APRV-211).
235
+ *
236
+ * `workingSeq` was the wrong end of the span for the daemon's idempotency
237
+ * key. One gated attempt appends its own `task.registered` and
238
+ * `approval.requested`, which move the head, so the next tick computed a
239
+ * DIFFERENT key for the SAME owed work and asked the human a second question.
240
+ * Measured over substantive records, the span is stable for exactly as long
241
+ * as the owed work is unchanged, which is what makes one owed advance one
242
+ * question — and it still moves the moment a real record lands, so the
243
+ * payload hash still differs per distinct advance and the `supervised-live`
244
+ * draw is never re-rolled for the same span.
245
+ *
246
+ * Never below `publishedSeq`: a span that ran backwards would name a range
247
+ * the commit could not carry.
248
+ */
249
+ substantiveSeq: number;
250
+ }
251
+ /**
252
+ * How much of the working log is already on a records branch or the trunk.
253
+ *
254
+ * Reads git's object store and NEVER the network: this is asked on every daemon
255
+ * tick and by `approval doctor`, and a status question must not depend on a
256
+ * remote being reachable. The revs consulted are the local advance anchors
257
+ * (`refs/approval/advance/*`, which {@link logAdvance} writes before it pushes),
258
+ * the remote-tracking refs for the base branch and the day's records branch, and
259
+ * `HEAD`. The highest head among the copies that are a PREFIX of this chain
260
+ * wins; anything else is ignored, which can only make a caller advance less
261
+ * eagerly.
262
+ *
263
+ * It lives here rather than beside the daemon's cadence because `approval
264
+ * doctor` reports the same number and a CLI module may not import the daemon.
265
+ */
266
+ export declare function publishedState(root: string, logPath: string, records: readonly EventRecord[], where: {
267
+ remote: string;
268
+ base: string | null;
269
+ }, today: string): PublishedState;
270
+ /** The canonical commit subject. It names the seq range, so the log is findable. */
271
+ export declare function advanceMessage(range: {
272
+ from: number;
273
+ to: number;
274
+ }, branch: string): string;
275
+ /**
276
+ * Validate a display-only Git trailer identity before any mutating step.
277
+ *
278
+ * The accepted form is deliberately one line and one header value. It is never
279
+ * derived from a log actor and never interpreted as gate or GitHub authority.
280
+ */
281
+ export declare function validateCoAuthor(input: string | undefined): {
282
+ ok: true;
283
+ value: string | null;
284
+ } | {
285
+ ok: false;
286
+ message: string;
287
+ };