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,445 @@
1
+ /**
2
+ * The shared channel conformance suite (SPEC.md §9, §10.3, §10.4).
3
+ *
4
+ * SPEC.md §9 states the display rule and then names its consequence in the same
5
+ * breath: rendering claimed fields with the visual authority of computed fields
6
+ * "is a conformance failure for a channel". This module is what that sentence
7
+ * points at. It ships with the contract rather than with any one channel, so
8
+ * `cli`, `web` and `telegram` (APRV-23/25/26) are held to one standard written
9
+ * once, and a fourth channel written by someone else can import it and find out
10
+ * in a single test whether it is a channel or merely a message sender.
11
+ *
12
+ * ## What it checks
13
+ *
14
+ * 1. **Tagging.** Every member of the request handed to the channel is a
15
+ * {@link TaggedField} ({@link assertTagged}), and every field the channel
16
+ * reports rendering carries the *same* kind the request gave it. A channel
17
+ * that presents a claimed summary as computed fails here.
18
+ * 2. **The full payload** (§10.4). A manual request's rendering contains the
19
+ * payload text verbatim, in a region distinct from the claimed summary.
20
+ * 3. **Decision round-trip.** A gesture driven through the harness lands
21
+ * exactly one correctly-shaped event in a real log, through the real gate.
22
+ * 4. **Batch semantics** (§10.3, B7). A batch notify plus two decisions lands
23
+ * two events, each carrying the batch delivery id; and the forbidden mix is
24
+ * refused at {@link assembleBatch} before anything is delivered.
25
+ * 5. **Terminal requests are neither pending nor armed** (APRV-113). A request
26
+ * the log has settled is absent from the derivation every channel builds its
27
+ * queue from, and a second gesture on it is refused and appends nothing.
28
+ *
29
+ * ## How it is run
30
+ *
31
+ * ```ts
32
+ * test("my channel conforms", async (t) => {
33
+ * await runChannelConformance(t, () => new MyChannel(), harness);
34
+ * });
35
+ * ```
36
+ *
37
+ * `t` is a `node:test` context and is used only for `diagnostic()` labels: the
38
+ * checks run inline and **throw** on the first failure rather than being split
39
+ * into subtests. That is deliberate. A subtest's promise resolves even when the
40
+ * subtest fails, so a suite built from `t.test()` could not itself be tested —
41
+ * and a conformance suite nobody has watched fail is a suite that might pass
42
+ * anything. Throwing means `tests/channels-contract.test.ts` can assert the
43
+ * suite goes RED against deliberately broken channels.
44
+ *
45
+ * The suite writes to whatever log the harness gives it, through the real gate.
46
+ * It never hand-writes a log line.
47
+ */
48
+ import assert from "node:assert/strict";
49
+ import { withdraw } from "../core/gate.js";
50
+ import { readVerifiedRecords, requestState } from "../core/state.js";
51
+ import { canonicalRender, CANONICAL_BEGIN } from "../core/wysiwys.js";
52
+ import { assembleBatch } from "./batch.js";
53
+ import { assertTagged, batchDeliveryIdOf, isTaggedField, isTestableChannel, recordChannelDecision, } from "./contract.js";
54
+ function say(t, message) {
55
+ t.diagnostic?.(`channel conformance: ${message}`);
56
+ }
57
+ /** The runtime's decision handler: the only thing a channel's callback may do. */
58
+ function handlerFor(unit) {
59
+ return (decision) => recordChannelDecision(unit.logPath, decision, unit.actor, unit.gateOptions ?? {}).outcome;
60
+ }
61
+ /** Records currently in the log; the suite counts them before and after. */
62
+ function recordsOf(logPath) {
63
+ const read = readVerifiedRecords(logPath);
64
+ assert.equal(read.ok, true, `conformance log does not verify: ${JSON.stringify(read)}`);
65
+ return read.ok ? read.records : [];
66
+ }
67
+ async function deliver(harness, channel, handler, decision) {
68
+ if (harness.decide === undefined)
69
+ return handler(decision);
70
+ return await harness.decide(channel, decision);
71
+ }
72
+ function renderedFor(channel, actionKey) {
73
+ if (!isTestableChannel(channel))
74
+ return null;
75
+ return channel.lastRendered().find((entry) => entry.action_key === actionKey) ?? null;
76
+ }
77
+ /**
78
+ * Check one rendering against the request it came from.
79
+ *
80
+ * The rule being enforced is SPEC.md §9's: a field's *kind* must survive the
81
+ * trip to the screen. A rendered field naming a member the request does not
82
+ * have is also a failure — that is a channel inventing a datum, which is the
83
+ * same defect wearing a different hat.
84
+ */
85
+ function assertRenderingFaithful(request, rendered) {
86
+ assert.equal(rendered.action_key, request.action_key.value, "the channel rendered a different action key than it was given");
87
+ assert.ok(rendered.fields.length > 0, "the channel reported rendering no fields at all");
88
+ const members = request;
89
+ for (const field of rendered.fields) {
90
+ const member = members[field.field];
91
+ assert.ok(member !== undefined, `the channel rendered a field ${JSON.stringify(field.field)} that the request does not carry`);
92
+ assert.ok(isTaggedField(member), `request member ${JSON.stringify(field.field)} is not a tagged field`);
93
+ assert.equal(field.kind, member.kind, `the channel rendered ${JSON.stringify(field.field)} as ${field.kind}, but it is ${member.kind} (SPEC.md §9: claimed fields must not be given the visual authority of computed ones)`);
94
+ }
95
+ }
96
+ /** §10.4: the full payload is present, verbatim, and not the summary. */
97
+ function assertFullPayloadPresented(request, rendered) {
98
+ const rendering = request.fullPayload.value;
99
+ assert.notEqual(rendering, null, "a manual request reached the channel with no full payload; construction should have refused it");
100
+ if (rendering === null)
101
+ return;
102
+ assert.ok(rendered.fullPayloadText !== null, `the channel rendered no full payload for manual action ${request.action_key.value} (SPEC.md §10.4)`);
103
+ // A TRUNCATED rendering gets no canonical block (APRV-119), so the raw JSON
104
+ // it carries is the only thing the region can be checked against. For a whole
105
+ // payload the requirement is the canonical text below, and the raw JSON is
106
+ // not expected to appear at all: under `approval.md/wysiwys/2` a structured
107
+ // kind's view IS the rendering, and repeating the JSON beneath it would be
108
+ // the second reading APRV-162 removed.
109
+ if (rendering.truncated) {
110
+ assert.ok((rendered.fullPayloadText ?? "").includes(rendering.text), "the channel's full-payload region does not contain the truncated payload text it was given");
111
+ }
112
+ // APRV-119 (WYSIWYS). The region carries the CANONICAL rendering, verbatim:
113
+ // the one text `core/wysiwys.ts` derives from the bound bytes and the class,
114
+ // and the one the gate recorded a `display_hash` of on the request. A channel
115
+ // that assembled its own reading of the same payload would be showing this
116
+ // approver something no other approver, and no later auditor, can reproduce.
117
+ if (!rendering.truncated) {
118
+ const canonical = canonicalRender(rendering.value, request.class.value);
119
+ assert.ok((rendered.fullPayloadText ?? "").includes(canonical.text), `the channel's full-payload region is not the canonical rendering for ${request.action_key.value} (APRV-119). Every channel presents ${canonical.display_hash}; this one presented something else.`);
120
+ // Claimed material being OUTSIDE the block follows from that equality and
121
+ // is not checked field by field, deliberately: the canonical text is a pure
122
+ // function of the payload and the class, so nothing a channel knows about
123
+ // the summary, the estimate or a model's gloss can reach it. Searching the
124
+ // block for a claimed field's words would report the opposite — a payload
125
+ // whose own bytes happen to contain the sentence the agent also wrote about
126
+ // it, which is the ordinary case for an email and not a defect at all.
127
+ assert.ok(canonical.text.startsWith(CANONICAL_BEGIN), "the canonical block is not delimited; a channel cannot show where claimed material ends");
128
+ }
129
+ const summary = request.summary.value;
130
+ if (typeof summary === "string" && summary.length > 0) {
131
+ assert.notEqual(rendered.fullPayloadText, summary, "the channel presented the agent's summary as the full payload (SPEC.md §10.4: the payload must be clearly delineated from any agent-written summary)");
132
+ const summaryField = rendered.fields.find((field) => field.field === "summary");
133
+ if (summaryField !== undefined) {
134
+ assert.equal(summaryField.kind, "claimed", "the summary must be rendered as claimed");
135
+ }
136
+ }
137
+ }
138
+ /**
139
+ * Run the suite. Resolves when every check passes; throws (an `AssertionError`)
140
+ * on the first failure.
141
+ */
142
+ export async function runChannelConformance(t, makeChannel, harness) {
143
+ await checkTaggingAndPayload(t, makeChannel, harness);
144
+ await checkDecisionRoundTrip(t, makeChannel, harness);
145
+ await checkBatchSemantics(t, makeChannel, harness);
146
+ await checkWithdrawal(t, makeChannel, harness);
147
+ await checkTerminalNotArmed(t, makeChannel, harness);
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // (f) a decided request is not presented as pending — APRV-113
151
+ // ---------------------------------------------------------------------------
152
+ /**
153
+ * A channel does not present a terminal request as pending, and does not leave
154
+ * a decision affordance armed for one.
155
+ *
156
+ * The withdrawal check above says this for one terminal state. This says it for
157
+ * the ordinary one: the request the human just answered. A pull channel passes
158
+ * by construction — `cli` and `web` build their view from the log every time
159
+ * they render, so a granted request is simply absent from the next one. A push
160
+ * channel has already put a message somewhere it cannot re-derive, and this is
161
+ * the check that says leaving it looking live is a conformance failure, not a
162
+ * cosmetic debt (`telegram` answers it by editing the message and forgetting
163
+ * the delivery — APRV-113).
164
+ *
165
+ * Two assertions, and the second is the one with teeth:
166
+ *
167
+ * 1. The request is terminal by the derivation every channel's queue is built
168
+ * from, so nothing re-derived from the log can show it as pending.
169
+ * 2. A second gesture on it is REFUSED and appends nothing. An affordance that
170
+ * is still on a screen somewhere must be inert — a channel cannot promise a
171
+ * button is gone from a phone, but it must not be able to collect a second
172
+ * decision through one.
173
+ */
174
+ async function checkTerminalNotArmed(t, makeChannel, harness) {
175
+ say(t, "a decided request is neither pending nor armed");
176
+ const unit = await harness.setup(1);
177
+ try {
178
+ const request = unit.requests[0];
179
+ assert.ok(request !== undefined, "harness.setup(1) returned no request");
180
+ const actionKey = request.action_key.value;
181
+ const channel = makeChannel();
182
+ const handler = handlerFor(unit);
183
+ channel.onDecision(handler);
184
+ const deliveryId = await channel.notify(request);
185
+ const decided = await deliver(harness, channel, handler, {
186
+ action_key: actionKey,
187
+ decision: "grant",
188
+ deliveryId,
189
+ });
190
+ assert.equal(decided.ok, true, `the decision was refused: ${JSON.stringify(decided)}`);
191
+ const state = requestState(recordsOf(unit.logPath), actionKey, new Date().toISOString(), null)
192
+ .state;
193
+ assert.equal(state, "granted", 'the decision did not settle the request; every channel derives its queue from `state === "requested"`, so a channel would keep presenting it');
194
+ const before = recordsOf(unit.logPath).length;
195
+ const second = recordChannelDecision(unit.logPath, { action_key: actionKey, decision: "grant", deliveryId }, unit.actor, unit.gateOptions ?? {}).outcome;
196
+ assert.equal(second.ok, false, "a decided request must not be decidable again; an affordance left on a screen has to be inert");
197
+ if (!second.ok) {
198
+ assert.equal(second.code, "already-decided", `a second decision must refuse already-decided, got ${second.code}`);
199
+ }
200
+ assertNoDecisionRecorded(unit.logPath, before, "the refused second decision");
201
+ }
202
+ finally {
203
+ unit.cleanup?.();
204
+ }
205
+ }
206
+ /**
207
+ * A refused gesture recorded no DECISION (APRV-113, amended APRV-235).
208
+ *
209
+ * This used to be a byte count: nothing at all was appended, so "no decision"
210
+ * and "no record" were one assertion. They were never one requirement, and
211
+ * APRV-235 separated them — a refused HUMAN decision now appends one
212
+ * `audit.decision_refused`, because a person's answer is a fact even when the
213
+ * gate cannot honour it, and a `policy-drift` refusal appends the
214
+ * `approval.withdrawn` that takes the void request out of every queue.
215
+ *
216
+ * What conformance asks of a channel is unchanged, and is what this checks: the
217
+ * gesture produced no `approval.granted`, `approval.rejected` or
218
+ * `approval.revoked`, so an affordance left on a screen collected nothing. A
219
+ * second implementation that writes only the audit trail passes; one that
220
+ * records a decision does not, and one that writes some third thing does not
221
+ * either.
222
+ */
223
+ function assertNoDecisionRecorded(logPath, before, what) {
224
+ const written = recordsOf(logPath).slice(before);
225
+ const decisions = written
226
+ .map((record) => record.event)
227
+ .filter((event) => event === "approval.granted" || event === "approval.rejected" || event === "approval.revoked");
228
+ assert.deepEqual(decisions, [], `${what} recorded a decision`);
229
+ const unexpected = written
230
+ .map((record) => record.event)
231
+ .filter((event) => event !== "audit.decision_refused" && event !== "approval.withdrawn");
232
+ assert.deepEqual(unexpected, [], `${what} appended something that is neither a refusal's audit trail nor the withdrawal of a void request`);
233
+ }
234
+ // ---------------------------------------------------------------------------
235
+ // (e) withdrawal — APRV-106
236
+ // ---------------------------------------------------------------------------
237
+ /**
238
+ * A withdrawn request is not pending, and the age/deadline line is computed.
239
+ *
240
+ * Two checks, one scenario, both about the same failure: a channel that keeps
241
+ * asking a question nobody is waiting on. The first is structural — the request
242
+ * is withdrawn through the real gate, and the channel must not be able to
243
+ * collect a decision on it. The second is the line that tells an approver
244
+ * looking at a live request how long an answer still has to reach anyone; it
245
+ * MUST be presented as computed, because a channel that rendered it as claimed
246
+ * would be inviting a reader to discount the one number that says whether their
247
+ * attention is about to be wasted.
248
+ *
249
+ * What is deliberately NOT required: that a channel retract a delivery it
250
+ * already made. `Channel.retract` is optional (see the contract), because a
251
+ * withdrawn request leaves every queue by derivation and a pull channel has
252
+ * nothing to retract. What every channel must do is refuse to present one.
253
+ */
254
+ async function checkWithdrawal(t, makeChannel, harness) {
255
+ say(t, "withdrawn requests are not pending, and the age/deadline line is computed");
256
+ const unit = await harness.setup(1);
257
+ try {
258
+ const request = unit.requests[0];
259
+ assert.ok(request !== undefined, "harness.setup(1) returned no request");
260
+ const actionKey = request.action_key.value;
261
+ // The line, on a live request, before anything is withdrawn.
262
+ assert.ok(isTaggedField(request.waiting), "the request carries no `waiting` field; SPEC.md §6.3 (APRV-106) asks a channel to show how old a question is and how long an answer still has");
263
+ assert.equal(request.waiting.kind, "computed", "the age/deadline line must be presented as COMPUTED: it is arithmetic on the log's own timestamps against the display instant, and a reader who took it for an agent's claim would discount the one number that says whether their attention is about to be wasted");
264
+ assert.match(request.waiting.value, /requested/u, "the age/deadline line does not say when the request was made");
265
+ const channel = makeChannel();
266
+ channel.onDecision(handlerFor(unit));
267
+ await channel.notify(request);
268
+ const rendered = renderedFor(channel, actionKey);
269
+ if (rendered !== null) {
270
+ const shown = rendered.fields.find((field) => field.field === "waiting");
271
+ assert.ok(shown !== undefined, "the channel rendered no `waiting` line; an approver cannot see whether an answer now still reaches anyone");
272
+ assert.equal(shown.kind, "computed", "the channel rendered the age/deadline line as claimed; it is computed");
273
+ }
274
+ // Withdraw through the real gate, as the party that requested.
275
+ const requester = requesterOf(unit.logPath, actionKey);
276
+ assert.notEqual(requester, null, "the conformance log holds no approval.requested actor");
277
+ const gone = withdraw(unit.logPath, actionKey, requester ?? "", {
278
+ ...unit.gateOptions,
279
+ reason: "timeout",
280
+ });
281
+ assert.equal(gone.ok, true, `withdraw refused: ${JSON.stringify(gone)}`);
282
+ // The one requirement: it is not pending any more, by the same derivation
283
+ // every channel builds its queue from.
284
+ const state = requestState(recordsOf(unit.logPath), actionKey, new Date().toISOString(), null)
285
+ .state;
286
+ assert.equal(state, "withdrawn", "the withdrawal did not settle the request; every channel's queue is derived from `state === \"requested\"`, so a channel would keep presenting it");
287
+ // And a gesture on it is refused by the gate rather than recorded. This is
288
+ // the tap that races the withdrawal, which every push channel will see.
289
+ const before = recordsOf(unit.logPath).length;
290
+ const outcome = recordChannelDecision(unit.logPath, { action_key: actionKey, decision: "grant", deliveryId: "conformance" }, unit.actor, unit.gateOptions ?? {}).outcome;
291
+ assert.equal(outcome.ok, false, "a withdrawn request must not be grantable");
292
+ if (!outcome.ok) {
293
+ assert.equal(outcome.code, "request-withdrawn", `a decision on a withdrawn request must refuse request-withdrawn, got ${outcome.code}`);
294
+ }
295
+ assertNoDecisionRecorded(unit.logPath, before, "the refused decision");
296
+ }
297
+ finally {
298
+ unit.cleanup?.();
299
+ }
300
+ }
301
+ /** The actor on the latest `approval.requested` for `actionKey`. */
302
+ function requesterOf(logPath, actionKey) {
303
+ let actor = null;
304
+ for (const record of recordsOf(logPath)) {
305
+ if (record.event === "approval.requested" && record.action_key === actionKey) {
306
+ actor = record.actor;
307
+ }
308
+ }
309
+ return actor;
310
+ }
311
+ // ---------------------------------------------------------------------------
312
+ // (a) + (b) tagging and the full payload
313
+ // ---------------------------------------------------------------------------
314
+ async function checkTaggingAndPayload(t, makeChannel, harness) {
315
+ say(t, "tagging and full-payload presentation");
316
+ const unit = await harness.setup(1);
317
+ try {
318
+ const request = unit.requests[0];
319
+ assert.ok(request !== undefined, "harness.setup(1) returned no request");
320
+ const channel = makeChannel();
321
+ assert.equal(typeof channel.name, "string", "a channel must have a name");
322
+ const health = channel.health();
323
+ assert.equal(typeof health.ok, "boolean", "health() must report a boolean ok");
324
+ channel.onDecision(handlerFor(unit));
325
+ assertTagged(request);
326
+ const before = recordsOf(unit.logPath).length;
327
+ const deliveryId = await channel.notify(request);
328
+ assert.equal(typeof deliveryId, "string", "notify() must return a delivery id");
329
+ assert.ok(deliveryId.length > 0, "notify() returned an empty delivery id");
330
+ assert.equal(recordsOf(unit.logPath).length, before, "notify() wrote to the log; channels are transport and hold no state (SPEC.md §10.3)");
331
+ const rendered = renderedFor(channel, request.action_key.value);
332
+ assert.ok(rendered !== null, "the channel is not a TestableChannel, or reported no rendering for the request it was notified with; conformance cannot inspect a screen, so a channel under test must expose lastRendered()");
333
+ assertRenderingFaithful(request, rendered);
334
+ if (request.autonomy.value === "manual")
335
+ assertFullPayloadPresented(request, rendered);
336
+ }
337
+ finally {
338
+ unit.cleanup?.();
339
+ }
340
+ }
341
+ // ---------------------------------------------------------------------------
342
+ // (c) decision round-trip
343
+ // ---------------------------------------------------------------------------
344
+ async function checkDecisionRoundTrip(t, makeChannel, harness) {
345
+ say(t, "decision round-trip through the real gate");
346
+ const unit = await harness.setup(1);
347
+ try {
348
+ const request = unit.requests[0];
349
+ assert.ok(request !== undefined, "harness.setup(1) returned no request");
350
+ const actionKey = request.action_key.value;
351
+ const channel = makeChannel();
352
+ const handler = handlerFor(unit);
353
+ channel.onDecision(handler);
354
+ const deliveryId = await channel.notify(request);
355
+ const before = recordsOf(unit.logPath);
356
+ const outcome = await deliver(harness, channel, handler, {
357
+ action_key: actionKey,
358
+ decision: "grant",
359
+ deliveryId,
360
+ });
361
+ assert.equal(outcome.ok, true, `the decision was refused: ${JSON.stringify(outcome)}`);
362
+ const after = recordsOf(unit.logPath);
363
+ assert.equal(after.length, before.length + 1, "a single decision must append exactly one event");
364
+ const appended = after[after.length - 1];
365
+ assert.ok(appended !== undefined, "no record was appended");
366
+ assert.equal(appended.event, "approval.granted", "the wrong event type was appended");
367
+ assert.equal(appended.action_key, actionKey, "the event names the wrong action key");
368
+ assert.match(appended.actor, /^human:/u, "an approval decision must be recorded against a human actor (SPEC.md §10.1)");
369
+ assert.equal(batchDeliveryIdOf(appended), null, "a unit decision must not carry a batch delivery id");
370
+ if (outcome.ok) {
371
+ assert.equal(outcome.record.seq, appended.seq, "the outcome names a different record");
372
+ assert.equal(Object.prototype.hasOwnProperty.call(outcome, "token"), false, "the outcome handed back to the channel must not carry the raw execution token");
373
+ }
374
+ }
375
+ finally {
376
+ unit.cleanup?.();
377
+ }
378
+ }
379
+ // ---------------------------------------------------------------------------
380
+ // (d) batch semantics — B7
381
+ // ---------------------------------------------------------------------------
382
+ async function checkBatchSemantics(t, makeChannel, harness) {
383
+ say(t, "batch delivery, per-member events, and the forbidden mix");
384
+ const unit = await harness.setup(2);
385
+ try {
386
+ const [first, second] = unit.requests;
387
+ assert.ok(first !== undefined && second !== undefined, "harness.setup(2) must return two requests");
388
+ assert.notEqual(first.payload_hash.value, second.payload_hash.value, "harness.setup(2) must return two requests with distinct payload hashes, or the B7 checks are vacuous");
389
+ const assembled = assembleBatch([first, second]);
390
+ assert.equal(assembled.ok, true, `two whole payloads must assemble into a batch: ${JSON.stringify(assembled)}`);
391
+ if (!assembled.ok)
392
+ return;
393
+ const channel = makeChannel();
394
+ const handler = handlerFor(unit);
395
+ channel.onDecision(handler);
396
+ const batchDeliveryId = await channel.notify(assembled.batch);
397
+ assert.equal(typeof batchDeliveryId, "string", "a batch notify must return a delivery id");
398
+ if (isTestableChannel(channel)) {
399
+ const rendered = channel.lastRendered();
400
+ assert.equal(rendered.length, 2, "a batch must be rendered member by member; each request carries its own full payload (SPEC.md §10.3)");
401
+ for (const request of [first, second]) {
402
+ const entry = rendered.find((item) => item.action_key === request.action_key.value);
403
+ assert.ok(entry !== undefined, "a batch member was not rendered at all");
404
+ assertRenderingFaithful(request, entry);
405
+ if (request.autonomy.value === "manual")
406
+ assertFullPayloadPresented(request, entry);
407
+ }
408
+ }
409
+ const before = recordsOf(unit.logPath).length;
410
+ for (const request of [first, second]) {
411
+ const outcome = await deliver(harness, channel, handler, {
412
+ action_key: request.action_key.value,
413
+ decision: "grant",
414
+ deliveryId: batchDeliveryId,
415
+ batchDeliveryId,
416
+ });
417
+ assert.equal(outcome.ok, true, `a batch member was refused: ${JSON.stringify(outcome)}`);
418
+ }
419
+ const after = recordsOf(unit.logPath);
420
+ assert.equal(after.length, before + 2, "the log never batches: two granted requests must produce two events (SPEC.md §10.3)");
421
+ for (const record of after.slice(before)) {
422
+ assert.equal(batchDeliveryIdOf(record), batchDeliveryId, "each event of a batched gesture must carry the batch delivery id");
423
+ }
424
+ // B7: the same two requests, one of them no longer whole.
425
+ const truncated = {
426
+ ...second,
427
+ fullPayload: {
428
+ kind: "computed",
429
+ source: "payload-binding",
430
+ value: second.fullPayload.value === null
431
+ ? null
432
+ : { ...second.fullPayload.value, truncated: true },
433
+ },
434
+ };
435
+ const mixed = assembleBatch([first, truncated]);
436
+ assert.equal(mixed.ok, false, "a batch mixing distinct payloads where one is truncated must be refused (SPEC.md §10.3, B7)");
437
+ if (!mixed.ok) {
438
+ assert.equal(mixed.code, "batch-forbidden-mix", "the wrong refusal code was returned");
439
+ }
440
+ }
441
+ finally {
442
+ unit.cleanup?.();
443
+ }
444
+ }
445
+ //# sourceMappingURL=conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../../src/channels/conformance.ts"],"names":[],"mappings":"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"}