approval-md 0.2.0 → 0.4.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 (378) hide show
  1. package/README.md +85 -877
  2. package/SPEC.md +150 -19
  3. package/cli.js +66 -7
  4. package/dist/src/adapters/smtp.d.ts +18 -0
  5. package/dist/src/adapters/smtp.js +24 -3
  6. package/dist/src/adapters/smtp.js.map +1 -1
  7. package/dist/src/channels/contract.d.ts +53 -1
  8. package/dist/src/channels/contract.js +304 -7
  9. package/dist/src/channels/contract.js.map +1 -1
  10. package/dist/src/channels/relay-server.d.ts +90 -0
  11. package/dist/src/channels/relay-server.js +295 -0
  12. package/dist/src/channels/relay-server.js.map +1 -0
  13. package/dist/src/channels/relay.d.ts +273 -0
  14. package/dist/src/channels/relay.js +564 -0
  15. package/dist/src/channels/relay.js.map +1 -0
  16. package/dist/src/channels/tagging.js +6 -1
  17. package/dist/src/channels/tagging.js.map +1 -1
  18. package/dist/src/channels/telegram-webhook.d.ts +273 -0
  19. package/dist/src/channels/telegram-webhook.js +536 -0
  20. package/dist/src/channels/telegram-webhook.js.map +1 -0
  21. package/dist/src/channels/telegram.d.ts +394 -12
  22. package/dist/src/channels/telegram.js +621 -68
  23. package/dist/src/channels/telegram.js.map +1 -1
  24. package/dist/src/channels/web.d.ts +9 -0
  25. package/dist/src/channels/web.js +17 -0
  26. package/dist/src/channels/web.js.map +1 -1
  27. package/dist/src/cli/amend.js +564 -34
  28. package/dist/src/cli/amend.js.map +1 -1
  29. package/dist/src/cli/attest.d.ts +9 -0
  30. package/dist/src/cli/attest.js +177 -13
  31. package/dist/src/cli/attest.js.map +1 -1
  32. package/dist/src/cli/channel-relay.d.ts +108 -0
  33. package/dist/src/cli/channel-relay.js +334 -0
  34. package/dist/src/cli/channel-relay.js.map +1 -0
  35. package/dist/src/cli/channel-telegram-webhook.d.ts +273 -0
  36. package/dist/src/cli/channel-telegram-webhook.js +709 -0
  37. package/dist/src/cli/channel-telegram-webhook.js.map +1 -0
  38. package/dist/src/cli/channel-telegram.d.ts +347 -28
  39. package/dist/src/cli/channel-telegram.js +763 -28
  40. package/dist/src/cli/channel-telegram.js.map +1 -1
  41. package/dist/src/cli/channel.d.ts +10 -1
  42. package/dist/src/cli/channel.js +14 -1
  43. package/dist/src/cli/channel.js.map +1 -1
  44. package/dist/src/cli/codex-bridge.d.ts +819 -0
  45. package/dist/src/cli/codex-bridge.js +1607 -0
  46. package/dist/src/cli/codex-bridge.js.map +1 -0
  47. package/dist/src/cli/codex.d.ts +1 -1
  48. package/dist/src/cli/codex.js +304 -7
  49. package/dist/src/cli/codex.js.map +1 -1
  50. package/dist/src/cli/daemon.js +41 -6
  51. package/dist/src/cli/daemon.js.map +1 -1
  52. package/dist/src/cli/doctor.d.ts +63 -0
  53. package/dist/src/cli/doctor.js +1322 -122
  54. package/dist/src/cli/doctor.js.map +1 -1
  55. package/dist/src/cli/execute.d.ts +17 -1
  56. package/dist/src/cli/execute.js +366 -22
  57. package/dist/src/cli/execute.js.map +1 -1
  58. package/dist/src/cli/exit-codes.d.ts +12 -0
  59. package/dist/src/cli/exit-codes.js +13 -0
  60. package/dist/src/cli/exit-codes.js.map +1 -1
  61. package/dist/src/cli/gate.d.ts +2 -0
  62. package/dist/src/cli/gate.js +233 -2
  63. package/dist/src/cli/gate.js.map +1 -1
  64. package/dist/src/cli/help.d.ts +14 -2
  65. package/dist/src/cli/help.js +395 -82
  66. package/dist/src/cli/help.js.map +1 -1
  67. package/dist/src/cli/hook-codex.d.ts +49 -1
  68. package/dist/src/cli/hook-codex.js +60 -1
  69. package/dist/src/cli/hook-codex.js.map +1 -1
  70. package/dist/src/cli/hook.d.ts +828 -4
  71. package/dist/src/cli/hook.js +2972 -142
  72. package/dist/src/cli/hook.js.map +1 -1
  73. package/dist/src/cli/import.js +1 -1
  74. package/dist/src/cli/import.js.map +1 -1
  75. package/dist/src/cli/init.js +16 -7
  76. package/dist/src/cli/init.js.map +1 -1
  77. package/dist/src/cli/instructions.js +24 -3
  78. package/dist/src/cli/instructions.js.map +1 -1
  79. package/dist/src/cli/log-anchor.d.ts +55 -0
  80. package/dist/src/cli/log-anchor.js +199 -60
  81. package/dist/src/cli/log-anchor.js.map +1 -1
  82. package/dist/src/cli/main.d.ts +0 -12
  83. package/dist/src/cli/main.js +56 -3
  84. package/dist/src/cli/main.js.map +1 -1
  85. package/dist/src/cli/muse.d.ts +2 -0
  86. package/dist/src/cli/muse.js +62 -0
  87. package/dist/src/cli/muse.js.map +1 -0
  88. package/dist/src/cli/payload.js +79 -1
  89. package/dist/src/cli/payload.js.map +1 -1
  90. package/dist/src/cli/policy-apply.d.ts +195 -0
  91. package/dist/src/cli/policy-apply.js +573 -0
  92. package/dist/src/cli/policy-apply.js.map +1 -0
  93. package/dist/src/cli/policy.js +14 -1
  94. package/dist/src/cli/policy.js.map +1 -1
  95. package/dist/src/cli/preflight.d.ts +151 -13
  96. package/dist/src/cli/preflight.js +398 -41
  97. package/dist/src/cli/preflight.js.map +1 -1
  98. package/dist/src/cli/sandbox.js +17 -1
  99. package/dist/src/cli/sandbox.js.map +1 -1
  100. package/dist/src/cli/scaffold.d.ts +1 -1
  101. package/dist/src/cli/scaffold.js +7 -1
  102. package/dist/src/cli/scaffold.js.map +1 -1
  103. package/dist/src/cli/serve.d.ts +53 -0
  104. package/dist/src/cli/serve.js +270 -0
  105. package/dist/src/cli/serve.js.map +1 -0
  106. package/dist/src/cli/setup-channel.d.ts +9 -0
  107. package/dist/src/cli/setup-channel.js +28 -1
  108. package/dist/src/cli/setup-channel.js.map +1 -1
  109. package/dist/src/cli/setup-common.d.ts +3 -1
  110. package/dist/src/cli/setup-common.js +3 -2
  111. package/dist/src/cli/setup-common.js.map +1 -1
  112. package/dist/src/cli/setup.d.ts +2 -0
  113. package/dist/src/cli/setup.js +94 -2
  114. package/dist/src/cli/setup.js.map +1 -1
  115. package/dist/src/cli/up.js +134 -51
  116. package/dist/src/cli/up.js.map +1 -1
  117. package/dist/src/cli/values.js +3 -4
  118. package/dist/src/cli/values.js.map +1 -1
  119. package/dist/src/cli/verb-registry.d.ts +2 -0
  120. package/dist/src/cli/verb-registry.js +510 -47
  121. package/dist/src/cli/verb-registry.js.map +1 -1
  122. package/dist/src/cli/wordmark.d.ts +2 -2
  123. package/dist/src/cli/wordmark.js +2 -2
  124. package/dist/src/codex/broker.d.ts +229 -0
  125. package/dist/src/codex/broker.js +548 -0
  126. package/dist/src/codex/broker.js.map +1 -0
  127. package/dist/src/codex/runner.d.ts +178 -0
  128. package/dist/src/codex/runner.js +231 -0
  129. package/dist/src/codex/runner.js.map +1 -0
  130. package/dist/src/codex/serve.d.ts +56 -0
  131. package/dist/src/codex/serve.js +98 -0
  132. package/dist/src/codex/serve.js.map +1 -0
  133. package/dist/src/codex/workspace-commit.d.ts +219 -0
  134. package/dist/src/codex/workspace-commit.js +549 -0
  135. package/dist/src/codex/workspace-commit.js.map +1 -0
  136. package/dist/src/core/advance-cycle.d.ts +51 -0
  137. package/dist/src/core/advance-cycle.js +66 -2
  138. package/dist/src/core/advance-cycle.js.map +1 -1
  139. package/dist/src/core/agents-md.d.ts +20 -18
  140. package/dist/src/core/agents-md.js +33 -31
  141. package/dist/src/core/agents-md.js.map +1 -1
  142. package/dist/src/core/attest-bootstrap.d.ts +95 -0
  143. package/dist/src/core/attest-bootstrap.js +135 -0
  144. package/dist/src/core/attest-bootstrap.js.map +1 -0
  145. package/dist/src/core/attest.d.ts +234 -2
  146. package/dist/src/core/attest.js +342 -7
  147. package/dist/src/core/attest.js.map +1 -1
  148. package/dist/src/core/audit.d.ts +73 -3
  149. package/dist/src/core/audit.js +65 -5
  150. package/dist/src/core/audit.js.map +1 -1
  151. package/dist/src/core/channel-lease.d.ts +322 -0
  152. package/dist/src/core/channel-lease.js +663 -0
  153. package/dist/src/core/channel-lease.js.map +1 -0
  154. package/dist/src/core/channel-owner.d.ts +213 -0
  155. package/dist/src/core/channel-owner.js +358 -0
  156. package/dist/src/core/channel-owner.js.map +1 -0
  157. package/dist/src/core/command-class.d.ts +205 -0
  158. package/dist/src/core/command-class.js +1433 -28
  159. package/dist/src/core/command-class.js.map +1 -1
  160. package/dist/src/core/commit-guard.d.ts +272 -0
  161. package/dist/src/core/commit-guard.js +424 -0
  162. package/dist/src/core/commit-guard.js.map +1 -0
  163. package/dist/src/core/daemon-actor.d.ts +45 -0
  164. package/dist/src/core/daemon-actor.js +54 -0
  165. package/dist/src/core/daemon-actor.js.map +1 -0
  166. package/dist/src/core/daemon-host.d.ts +178 -0
  167. package/dist/src/core/daemon-host.js +228 -0
  168. package/dist/src/core/daemon-host.js.map +1 -0
  169. package/dist/src/core/daemon-identity.d.ts +238 -0
  170. package/dist/src/core/daemon-identity.js +252 -0
  171. package/dist/src/core/daemon-identity.js.map +1 -0
  172. package/dist/src/core/dark-session.d.ts +109 -8
  173. package/dist/src/core/dark-session.js +266 -82
  174. package/dist/src/core/dark-session.js.map +1 -1
  175. package/dist/src/core/decision-refusal.d.ts +23 -2
  176. package/dist/src/core/decision-refusal.js +24 -2
  177. package/dist/src/core/decision-refusal.js.map +1 -1
  178. package/dist/src/core/env-file.d.ts +5 -0
  179. package/dist/src/core/env-file.js +60 -1
  180. package/dist/src/core/env-file.js.map +1 -1
  181. package/dist/src/core/execute.d.ts +15 -2
  182. package/dist/src/core/execute.js +15 -2
  183. package/dist/src/core/execute.js.map +1 -1
  184. package/dist/src/core/gate.d.ts +392 -6
  185. package/dist/src/core/gate.js +852 -24
  186. package/dist/src/core/gate.js.map +1 -1
  187. package/dist/src/core/gesture-refusal.d.ts +166 -0
  188. package/dist/src/core/gesture-refusal.js +188 -0
  189. package/dist/src/core/gesture-refusal.js.map +1 -0
  190. package/dist/src/core/harness-version.d.ts +128 -4
  191. package/dist/src/core/harness-version.js +181 -12
  192. package/dist/src/core/harness-version.js.map +1 -1
  193. package/dist/src/core/harness-wait.d.ts +82 -3
  194. package/dist/src/core/harness-wait.js +89 -3
  195. package/dist/src/core/harness-wait.js.map +1 -1
  196. package/dist/src/core/instance.d.ts +59 -2
  197. package/dist/src/core/instance.js +113 -0
  198. package/dist/src/core/instance.js.map +1 -1
  199. package/dist/src/core/log-subscribe.d.ts +21 -0
  200. package/dist/src/core/log-subscribe.js +16 -6
  201. package/dist/src/core/log-subscribe.js.map +1 -1
  202. package/dist/src/core/log-write-layer.d.ts +55 -0
  203. package/dist/src/core/log-write-layer.js +91 -0
  204. package/dist/src/core/log-write-layer.js.map +1 -0
  205. package/dist/src/core/log.d.ts +89 -22
  206. package/dist/src/core/log.js +197 -19
  207. package/dist/src/core/log.js.map +1 -1
  208. package/dist/src/core/payload-census.d.ts +51 -0
  209. package/dist/src/core/payload-census.js +125 -2
  210. package/dist/src/core/payload-census.js.map +1 -1
  211. package/dist/src/core/payload-store.d.ts +31 -0
  212. package/dist/src/core/payload-store.js +113 -8
  213. package/dist/src/core/payload-store.js.map +1 -1
  214. package/dist/src/core/payload.d.ts +18 -3
  215. package/dist/src/core/payload.js +20 -4
  216. package/dist/src/core/payload.js.map +1 -1
  217. package/dist/src/core/policy-diff.d.ts +10 -0
  218. package/dist/src/core/policy-diff.js +10 -2
  219. package/dist/src/core/policy-diff.js.map +1 -1
  220. package/dist/src/core/policy-explain.d.ts +17 -1
  221. package/dist/src/core/policy-explain.js +48 -1
  222. package/dist/src/core/policy-explain.js.map +1 -1
  223. package/dist/src/core/policy-load.d.ts +65 -1
  224. package/dist/src/core/policy-load.js +21 -3
  225. package/dist/src/core/policy-load.js.map +1 -1
  226. package/dist/src/core/policy-match.d.ts +81 -0
  227. package/dist/src/core/policy-match.js +87 -0
  228. package/dist/src/core/policy-match.js.map +1 -1
  229. package/dist/src/core/policy-proposal.d.ts +75 -0
  230. package/dist/src/core/policy-proposal.js +110 -4
  231. package/dist/src/core/policy-proposal.js.map +1 -1
  232. package/dist/src/core/protected-path-guard.d.ts +117 -4
  233. package/dist/src/core/protected-path-guard.js +362 -48
  234. package/dist/src/core/protected-path-guard.js.map +1 -1
  235. package/dist/src/core/question-preempted.d.ts +141 -0
  236. package/dist/src/core/question-preempted.js +152 -0
  237. package/dist/src/core/question-preempted.js.map +1 -0
  238. package/dist/src/core/read-scope.d.ts +182 -0
  239. package/dist/src/core/read-scope.js +256 -0
  240. package/dist/src/core/read-scope.js.map +1 -0
  241. package/dist/src/core/run-payload.d.ts +160 -0
  242. package/dist/src/core/run-payload.js +304 -0
  243. package/dist/src/core/run-payload.js.map +1 -0
  244. package/dist/src/core/sandbox.d.ts +81 -0
  245. package/dist/src/core/sandbox.js +190 -1
  246. package/dist/src/core/sandbox.js.map +1 -1
  247. package/dist/src/core/sender-identity.d.ts +501 -0
  248. package/dist/src/core/sender-identity.js +609 -0
  249. package/dist/src/core/sender-identity.js.map +1 -0
  250. package/dist/src/core/shlex.d.ts +102 -0
  251. package/dist/src/core/shlex.js +159 -0
  252. package/dist/src/core/shlex.js.map +1 -0
  253. package/dist/src/core/state.d.ts +52 -1
  254. package/dist/src/core/state.js +52 -6
  255. package/dist/src/core/state.js.map +1 -1
  256. package/dist/src/core/telegram-config.d.ts +79 -0
  257. package/dist/src/core/telegram-config.js +108 -0
  258. package/dist/src/core/telegram-config.js.map +1 -1
  259. package/dist/src/core/values.d.ts +18 -8
  260. package/dist/src/core/values.js +36 -1
  261. package/dist/src/core/values.js.map +1 -1
  262. package/dist/src/core/verify.d.ts +23 -1
  263. package/dist/src/core/verify.js +20 -2
  264. package/dist/src/core/verify.js.map +1 -1
  265. package/dist/src/daemon/advance.d.ts +10 -0
  266. package/dist/src/daemon/advance.js +25 -4
  267. package/dist/src/daemon/advance.js.map +1 -1
  268. package/dist/src/daemon/audit.d.ts +80 -5
  269. package/dist/src/daemon/audit.js +126 -6
  270. package/dist/src/daemon/audit.js.map +1 -1
  271. package/dist/src/daemon/daemon.d.ts +174 -2
  272. package/dist/src/daemon/daemon.js +307 -7
  273. package/dist/src/daemon/daemon.js.map +1 -1
  274. package/dist/src/daemon/git-evidence.d.ts +2 -2
  275. package/dist/src/daemon/git-evidence.js +1 -1
  276. package/dist/src/daemon/projection.d.ts +13 -2
  277. package/dist/src/daemon/projection.js +39 -6
  278. package/dist/src/daemon/projection.js.map +1 -1
  279. package/dist/src/mcp/server.d.ts +39 -3
  280. package/dist/src/mcp/server.js +30 -3
  281. package/dist/src/mcp/server.js.map +1 -1
  282. package/dist/src/muse/server.d.ts +16 -0
  283. package/dist/src/muse/server.js +238 -0
  284. package/dist/src/muse/server.js.map +1 -0
  285. package/dist/src/serve/archive.d.ts +158 -0
  286. package/dist/src/serve/archive.js +354 -0
  287. package/dist/src/serve/archive.js.map +1 -0
  288. package/dist/src/serve/arguments.d.ts +93 -0
  289. package/dist/src/serve/arguments.js +228 -0
  290. package/dist/src/serve/arguments.js.map +1 -0
  291. package/dist/src/serve/credentials.d.ts +91 -0
  292. package/dist/src/serve/credentials.js +143 -0
  293. package/dist/src/serve/credentials.js.map +1 -0
  294. package/dist/src/serve/follow.d.ts +86 -0
  295. package/dist/src/serve/follow.js +101 -0
  296. package/dist/src/serve/follow.js.map +1 -0
  297. package/dist/src/serve/hook-thread.d.ts +134 -0
  298. package/dist/src/serve/hook-thread.js +333 -0
  299. package/dist/src/serve/hook-thread.js.map +1 -0
  300. package/dist/src/serve/hook-worker.d.ts +134 -0
  301. package/dist/src/serve/hook-worker.js +173 -0
  302. package/dist/src/serve/hook-worker.js.map +1 -0
  303. package/dist/src/serve/server.d.ts +412 -0
  304. package/dist/src/serve/server.js +1251 -0
  305. package/dist/src/serve/server.js.map +1 -0
  306. package/docs/README-extended.md +766 -0
  307. package/docs/cli-reference.md +2563 -73
  308. package/docs/codex-enforced-session.md +75 -2
  309. package/docs/codex-workspace-broker.md +118 -0
  310. package/package.json +6 -2
  311. package/schema/event.schema.json +595 -9
  312. package/schema/fixtures/event/invalid/approval-granted-sender-hashed-false.json +20 -0
  313. package/schema/fixtures/event/invalid/approval-granted-sender-hashed-raw-id.json +20 -0
  314. package/schema/fixtures/event/invalid/audit-gesture-refused-human-actor.json +16 -0
  315. package/schema/fixtures/event/invalid/audit-gesture-refused-no-actor-no-sender.json +15 -0
  316. package/schema/fixtures/event/invalid/audit-gesture-refused-unknown-gesture.json +16 -0
  317. package/schema/fixtures/event/invalid/audit-question-preempted-agent-actor.json +16 -0
  318. package/schema/fixtures/event/invalid/audit-question-preempted-no-question-id.json +16 -0
  319. package/schema/fixtures/event/invalid/audit-question-preempted-unknown-source.json +15 -0
  320. package/schema/fixtures/event/invalid/daemon-id-malformed.json +15 -0
  321. package/schema/fixtures/event/invalid/execution-started-truncated-policy-sha256.json +18 -0
  322. package/schema/fixtures/event/invalid/gate-path-signed-off-absolute-path.json +14 -0
  323. package/schema/fixtures/event/invalid/gate-path-signed-off-agent-actor.json +14 -0
  324. package/schema/fixtures/event/invalid/gate-path-signed-off-missing-path.json +13 -0
  325. package/schema/fixtures/event/invalid/harness-cap-at-margin.json +16 -0
  326. package/schema/fixtures/event/invalid/harness-cap-fractional.json +16 -0
  327. package/schema/fixtures/event/invalid/harness-cap-negative.json +16 -0
  328. package/schema/fixtures/event/invalid/harness-cap-string.json +16 -0
  329. package/schema/fixtures/event/invalid/harness-cap-without-harness-execution.json +16 -0
  330. package/schema/fixtures/event/invalid/harness-cap-zero.json +16 -0
  331. package/schema/fixtures/event/valid/approval-granted-sender-hashed.json +20 -0
  332. package/schema/fixtures/event/valid/approval-requested-harness-cap.json +18 -0
  333. package/schema/fixtures/event/valid/audit-gesture-refused-review-note.json +21 -0
  334. package/schema/fixtures/event/valid/audit-gesture-refused-sender-key-unavailable.json +19 -0
  335. package/schema/fixtures/event/valid/audit-gesture-refused.json +19 -0
  336. package/schema/fixtures/event/valid/audit-question-preempted-no-verdict.json +16 -0
  337. package/schema/fixtures/event/valid/audit-question-preempted.json +20 -0
  338. package/schema/fixtures/event/valid/daemon-identity-declared.json +17 -0
  339. package/schema/fixtures/event/valid/daemon-identity.json +15 -0
  340. package/schema/fixtures/event/valid/execution-started-policy-sha256.json +18 -0
  341. package/schema/fixtures/event/valid/gate-path-signed-off.json +14 -0
  342. package/schema/fixtures/event/valid/harness-kind-claude-code.json +23 -0
  343. package/schema/fixtures/event/valid/harness-kind-codex.json +23 -0
  344. package/schema/fixtures/event/valid/harness-kind-cursor.json +23 -0
  345. package/schema/fixtures/event/valid/harness-kind-grok.json +23 -0
  346. package/schema/fixtures/event/valid/harness-kind-hermes.json +23 -0
  347. package/schema/fixtures/event/valid/harness-kind-muse.json +23 -0
  348. package/schema/fixtures/policy/invalid/daemons-malformed-id.json +10 -0
  349. package/schema/fixtures/policy/invalid/senders-half-keyed.json +20 -0
  350. package/schema/fixtures/policy/valid/canonical.json +1 -1
  351. package/schema/fixtures/policy/valid/daemons-allowlist.json +19 -0
  352. package/schema/fixtures/policy/valid/senders-keyed.json +24 -0
  353. package/schema/fixtures/policy-md/invalid/schema-invalid-agent-may-request.md +21 -0
  354. package/schema/fixtures/policy-md/valid/agent-may-request.md +24 -0
  355. package/schema/fixtures/policy-md/valid/canonical.md +1 -1
  356. package/schema/fixtures/policy-md/valid/with-values.md +5 -7
  357. package/schema/fixtures/values/invalid/class-shaped.json +1 -1
  358. package/schema/fixtures/values/invalid/duplicate-entry.json +1 -1
  359. package/schema/fixtures/values/invalid/non-string-item.json +1 -1
  360. package/schema/fixtures/values/invalid/over-cap.json +1 -1
  361. package/schema/fixtures/values/invalid/unknown-key.json +1 -1
  362. package/schema/fixtures/values/invalid/version-float.json +1 -0
  363. package/schema/fixtures/values/invalid/version-integer.json +1 -0
  364. package/schema/fixtures/values/invalid/version-wrong-string.json +1 -0
  365. package/schema/fixtures/values/valid/empty-lists.json +2 -3
  366. package/schema/fixtures/values/valid/full.json +5 -7
  367. package/schema/fixtures/values/valid/minimal.json +1 -1
  368. package/schema/fixtures/values-md/invalid/schema-invalid.md +5 -3
  369. package/schema/fixtures/values-md/invalid/two-blocks.md +3 -3
  370. package/schema/fixtures/values-md/invalid/unterminated.md +2 -2
  371. package/schema/fixtures/values-md/invalid/version-1.md +69 -0
  372. package/schema/fixtures/values-md/invalid/version-unquoted.md +64 -0
  373. package/schema/fixtures/values-md/invalid/yaml-error.md +2 -2
  374. package/schema/fixtures/values-md/valid/absent.md +1 -1
  375. package/schema/fixtures/values-md/valid/with-values.md +5 -7
  376. package/schema/policy.schema.json +100 -4
  377. package/schema/values.schema.json +7 -11
  378. package/schema/fixtures/values/invalid/version-string.json +0 -1
@@ -171,6 +171,58 @@ export function humanOnlyRefusal(actionClass, whatWasRefused) {
171
171
  `This is not a rejection — nobody decided anything, and asking again with a better summary will get the same answer. ` +
172
172
  `Nothing was appended. If the class should be gated rather than reserved, amend APPROVAL.md and re-attest it.`);
173
173
  }
174
+ /**
175
+ * The `harness.launch.*` family: starting an agent harness session (APRV-354).
176
+ *
177
+ * Defined here rather than beside the classifier rows that emit it, because two
178
+ * enforcement paths and the classifier all have to agree on what the family IS,
179
+ * and a second spelling of the prefix is the shape of bug that lets one door
180
+ * close while another stays open.
181
+ */
182
+ export const HARNESS_LAUNCH_PREFIX = "harness.launch.";
183
+ /** Is `actionClass` a member of the `harness.launch.*` family? */
184
+ export function isHarnessLaunchClass(actionClass) {
185
+ return actionClass.startsWith(HARNESS_LAUNCH_PREFIX);
186
+ }
187
+ /**
188
+ * Does this family member resolve with NO explicit rule behind it? (APRV-354.)
189
+ *
190
+ * SPEC.md §7 says the family is never inferred autonomous. This is the stronger
191
+ * reading, and the one the family needs: it is never inferred AT ALL. A launch
192
+ * resolves only under a rule an operator wrote — `harness.launch.*` or
193
+ * `harness.launch.NAME` — and a policy that names neither refuses the launch
194
+ * rather than falling to `defaults.autonomy`.
195
+ *
196
+ * The reason is the window the softer reading opens. Before this family existed
197
+ * a harness launch was `unclassified`: refused outright. Adding the class and
198
+ * letting it fall to `defaults.autonomy` would make every launch grantable by a
199
+ * single approval in every project that has ever written `defaults: { autonomy:
200
+ * manual }` — which is all of them — the moment they upgraded. For most classes
201
+ * that is exactly right, because a manual default is an operator saying "ask
202
+ * me". For this one it is not: what the operator would be approving is a whole
203
+ * second agent whose own actions this gate never sees, and a capability that
204
+ * arrives by upgrade rather than by decision is not a capability anybody chose.
205
+ * Muse is the sharp end of it (a Contributor model trains on what it is shown,
206
+ * and the model may come from that harness's own settings where no command line
207
+ * shows it), and the rule is written for the family because the argument is not
208
+ * really about Muse.
209
+ *
210
+ * Keyed on `matched === null`, which is exactly "no rule of the policy's own
211
+ * decided this". That covers both spellings of the fallback: `provenance:
212
+ * "default"` (the file loaded and named nothing for this class) and
213
+ * `provenance: "fail-closed"` (the file did not load, so it names nothing for
214
+ * any class). An explicit rule resolves as written, human-only included.
215
+ */
216
+ export function harnessLaunchNeedsRule(actionClass, resolution) {
217
+ return isHarnessLaunchClass(actionClass) && resolution.matched === null;
218
+ }
219
+ /** The refusal text for a harness launch no policy rule names (APRV-354). */
220
+ export function harnessLaunchUnruledRefusal(actionClass, whatWasRefused) {
221
+ return (`class ${actionClass} is a harness launch and this policy names no rule for it (SPEC.md §7, APRV-354), so ${whatWasRefused}. ` +
222
+ `Launching an agent harness resolves only under an explicit rule — \`${HARNESS_LAUNCH_PREFIX}*\` or \`${actionClass}\` — and never under \`defaults.autonomy\`, because a grant of this class covers the launch and nothing the launched session then does: that session runs its own tools outside this gate unless its own adapter is installed and attested. ` +
223
+ `This is not a rejection and nobody decided anything. ` +
224
+ `Nothing was appended. To allow it, add the line and re-attest (\`docs/proposals/harness-launch-2026-09.md\` carries this repository's pair, \`${HARNESS_LAUNCH_PREFIX}*\` at manual and \`${HARNESS_LAUNCH_PREFIX}muse\` at human-only).`);
225
+ }
174
226
  const WILDCARD = "*";
175
227
  /** Split a dotted class or pattern into segments. */
176
228
  function segments(text) {
@@ -475,4 +527,39 @@ function applyFloor(resolution, options) {
475
527
  floorApplied: true,
476
528
  };
477
529
  }
530
+ export function agentRequestability(load, actionClass) {
531
+ if (!load.ok)
532
+ return { allowed: false, explicit: false, pattern: null, humanOnly: false };
533
+ const classes = load.policy.classes ?? {};
534
+ const own = Object.prototype.hasOwnProperty.call(classes, actionClass)
535
+ ? classes[actionClass]
536
+ : undefined;
537
+ const explicit = own !== undefined;
538
+ let decided = null;
539
+ if (own?.agent_may_request !== undefined) {
540
+ decided = { pattern: actionClass, value: own.agent_may_request };
541
+ }
542
+ else {
543
+ // Families, most specific first: the longest literal prefix the class
544
+ // extends. `a.b.*` beats `a.*` for `a.b.c`.
545
+ const classSegments = segments(actionClass);
546
+ for (let length = classSegments.length - 1; length >= 1; length -= 1) {
547
+ const family = `${classSegments.slice(0, length).join(".")}.${WILDCARD}`;
548
+ if (!Object.prototype.hasOwnProperty.call(classes, family))
549
+ continue;
550
+ const value = classes[family]?.agent_may_request;
551
+ if (value === undefined)
552
+ continue;
553
+ decided = { pattern: family, value };
554
+ break;
555
+ }
556
+ }
557
+ const humanOnly = resolve(load, actionClass).autonomy === "human-only";
558
+ return {
559
+ allowed: explicit && decided?.value === true && !humanOnly,
560
+ explicit,
561
+ pattern: decided?.pattern ?? null,
562
+ humanOnly,
563
+ };
564
+ }
478
565
  //# sourceMappingURL=policy-match.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-match.js","sourceRoot":"","sources":["../../../src/core/policy-match.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-match.js","sourceRoot":"","sources":["../../../src/core/policy-match.ts"],"names":[],"mappings":"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"}
@@ -139,6 +139,29 @@ export interface ProposeInput {
139
139
  * can only raise urgency: see `ChannelRequest.waiting`.
140
140
  */
141
141
  waitUntil?: string;
142
+ /**
143
+ * Propose bytes that are ALREADY the policy in force, so that a different
144
+ * human can become the attester of record without changing a rule
145
+ * (APRV-455).
146
+ *
147
+ * Off by default, and every existing caller leaves it off: `policy amend`
148
+ * still refuses `policy-already-attested`, because a terminal amendment of
149
+ * bytes already in force asks a human to sign for nothing. The one caller
150
+ * that sets it is `approval channel relay`'s `propose` gesture, and the
151
+ * case it exists for is the onboarding review: the operator attested the
152
+ * starting policy (APRV-449), the resident read it in the app and accepted
153
+ * it unchanged, and that acceptance is the resident's attestation. Without
154
+ * this the unchanged review, which is the common one, could only ever be
155
+ * recorded outside the log.
156
+ *
157
+ * What it changes is the attester, never the rules: the proposal names the
158
+ * same hash the attestation in force names, its diff is taken against the
159
+ * verified in-force text and reads "no semantic change", and an acceptance
160
+ * appends a `policy.updated` of the same bytes. Who may accept is decided
161
+ * exactly as for any other proposal, against the policy in force, so it can
162
+ * widen nobody's authority.
163
+ */
164
+ reaffirm?: boolean;
142
165
  }
143
166
  /** Options for both verbs: the append's, plus the clock and the schema dir. */
144
167
  export interface ProposalOptions extends ClockOptions {
@@ -185,6 +208,41 @@ export declare function diffSize(summary: DiffSummary): {
185
208
  export declare function summarizeDiff(policyPath: string, baseline: Uint8Array | null | undefined, live: Uint8Array, attestedSha256: string | null, schemaDir?: string): DiffSummary;
186
209
  /** The stored value a channel displays as the prompt's full payload. */
187
210
  export declare function proposalPayloadValue(policyPath: string, text: string): Record<string, unknown>;
211
+ /** What {@link inForcePolicyText} could recover, or why it could not. */
212
+ export type InForcePolicy = {
213
+ ok: true;
214
+ text: string;
215
+ sha256: string;
216
+ } | {
217
+ ok: false;
218
+ reason: string;
219
+ };
220
+ /**
221
+ * The bytes of the policy currently IN FORCE, recovered and hash-verified
222
+ * (APRV-324 follow-up).
223
+ *
224
+ * The attestation ceremony records only the SHA-256 of the bytes it attests, so
225
+ * the log alone cannot produce them — `summarizeDiff` above says exactly that,
226
+ * and takes its baseline from a caller. What CAN produce them is the payload
227
+ * store: every `policy.proposed` binds the whole policy text as its payload
228
+ * (SPEC.md §10.4, so an approver can read the file rather than a summary of
229
+ * it), and a proposal that was attested therefore left the attested text
230
+ * addressable by its own `payload_hash`.
231
+ *
232
+ * So: find the hash in force, find any proposal that named exactly those bytes,
233
+ * read its stored text, and **verify**. Nothing here trusts the store — the
234
+ * recovered text is hashed and compared against the attested digest from the
235
+ * verified log, so a tampered, truncated or swapped payload file is a failure
236
+ * rather than a different policy wearing the attested hash.
237
+ *
238
+ * It fails, legitimately and often, and callers MUST have an answer for that:
239
+ * a policy attested at a terminal (`approval policy attest`, and `policy amend`
240
+ * on its human path) appends a `policy.updated` and stores nothing, so a chain
241
+ * that has never been attested from a phone has no recoverable bytes at all.
242
+ * `channels/contract.ts` is the caller, and its fallback is to refuse the
243
+ * privileged gesture rather than to assume.
244
+ */
245
+ export declare function inForcePolicyText(records: readonly EventRecord[], storeDir: string): InForcePolicy;
188
246
  /**
189
247
  * Append a `policy.proposed` asking a human to attest `policyPath`'s bytes.
190
248
  *
@@ -244,6 +302,23 @@ export interface DecideAttestationOptions extends ProposalOptions {
244
302
  policyPath?: string;
245
303
  /** The channel delivery id this gesture answered, for audit. */
246
304
  batchDeliveryId?: string;
305
+ /**
306
+ * The authenticated account this answer arrived from (APRV-324 follow-up),
307
+ * recorded as `payload.sender`, and the kind of evidence it is.
308
+ *
309
+ * Absent means what it means everywhere else: the answer was attributed by
310
+ * configuration rather than by anything a transport authenticated, which is
311
+ * what every attestation before this field says. The RESOLUTION that decides
312
+ * whether a sender may answer at all is the decision surface's
313
+ * (`channels/contract.ts`), against the policy in force rather than the one
314
+ * being attested, and nothing here re-derives or second-guesses it.
315
+ */
316
+ sender?: {
317
+ channel: string;
318
+ id: string;
319
+ hashed?: true;
320
+ };
321
+ senderSource?: "policy";
247
322
  }
248
323
  /**
249
324
  * Answer a proposal: attest the bytes the prompt displayed, or decline them.
@@ -54,11 +54,11 @@
54
54
  */
55
55
  import { readFileSync } from "node:fs";
56
56
  import { basename, join } from "node:path";
57
- import { POLICY_HASH_FIELD, checkAttestationOfBytes, policyBytesHash, } from "./attest.js";
57
+ import { POLICY_HASH_FIELD, attestationSha256, checkAttestationOfBytes, policyBytesHash, } from "./attest.js";
58
58
  import { tick } from "./clock.js";
59
59
  import { appendEvent, } from "./log.js";
60
60
  import { payloadHash } from "./payload.js";
61
- import { payloadStoreDirFor, storePayload } from "./payload-store.js";
61
+ import { loadPayload, payloadStoreDirFor, storePayload } from "./payload-store.js";
62
62
  import { diffPolicies, renderDiff, SPEC_NAMESPACES } from "./policy-diff.js";
63
63
  import { loadPolicyText, POLICY_FILENAMES } from "./policy-load.js";
64
64
  import { readVerifiedRecords } from "./state.js";
@@ -76,6 +76,15 @@ const HUMAN_ACTOR = /^human:.+/u;
76
76
  * attestation as an ordinary authorization.
77
77
  */
78
78
  export const PROPOSAL_EVENT = "policy.proposed";
79
+ /**
80
+ * The attestation's own event type (APRV-356).
81
+ *
82
+ * Spelled here rather than imported from `core/attest.ts` for the reason that
83
+ * module's header gives about direction: attestation knows nothing about
84
+ * proposals, and a cycle between the two would be a dependency neither needs.
85
+ * `attestationSha256` above already selects on the same string.
86
+ */
87
+ const ATTESTATION_EVENT = "policy.updated";
79
88
  /** The event a decline appends. An attestation appends `policy.updated`. */
80
89
  export const DECLINE_EVENT = "policy.declined";
81
90
  /**
@@ -228,6 +237,82 @@ export function summarizeDiff(policyPath, baseline, live, attestedSha256, schema
228
237
  export function proposalPayloadValue(policyPath, text) {
229
238
  return { policy_path: basename(policyPath), text };
230
239
  }
240
+ /**
241
+ * The bytes of the policy currently IN FORCE, recovered and hash-verified
242
+ * (APRV-324 follow-up).
243
+ *
244
+ * The attestation ceremony records only the SHA-256 of the bytes it attests, so
245
+ * the log alone cannot produce them — `summarizeDiff` above says exactly that,
246
+ * and takes its baseline from a caller. What CAN produce them is the payload
247
+ * store: every `policy.proposed` binds the whole policy text as its payload
248
+ * (SPEC.md §10.4, so an approver can read the file rather than a summary of
249
+ * it), and a proposal that was attested therefore left the attested text
250
+ * addressable by its own `payload_hash`.
251
+ *
252
+ * So: find the hash in force, find any proposal that named exactly those bytes,
253
+ * read its stored text, and **verify**. Nothing here trusts the store — the
254
+ * recovered text is hashed and compared against the attested digest from the
255
+ * verified log, so a tampered, truncated or swapped payload file is a failure
256
+ * rather than a different policy wearing the attested hash.
257
+ *
258
+ * It fails, legitimately and often, and callers MUST have an answer for that:
259
+ * a policy attested at a terminal (`approval policy attest`, and `policy amend`
260
+ * on its human path) appends a `policy.updated` and stores nothing, so a chain
261
+ * that has never been attested from a phone has no recoverable bytes at all.
262
+ * `channels/contract.ts` is the caller, and its fallback is to refuse the
263
+ * privileged gesture rather than to assume.
264
+ */
265
+ export function inForcePolicyText(records, storeDir) {
266
+ let attested = null;
267
+ for (let index = records.length - 1; index >= 0; index -= 1) {
268
+ const sha = attestationSha256(records[index]);
269
+ if (sha !== null) {
270
+ attested = sha;
271
+ break;
272
+ }
273
+ }
274
+ if (attested === null) {
275
+ return { ok: false, reason: "no policy is in force: the log carries no attestation" };
276
+ }
277
+ // Two kinds of record can name the attested bytes, and both are read
278
+ // (APRV-356). A `policy.proposed` binds the whole text so an approver can
279
+ // read the file on a phone; since APRV-356 an ATTESTATION binds it too, so a
280
+ // chain only ever attested at a terminal is recoverable as well. Newest
281
+ // first, and the two are not ranked against each other: both are verified
282
+ // against the same digest from the same verified log, so whichever is found
283
+ // first carries bytes that hash to it or it is skipped.
284
+ for (let index = records.length - 1; index >= 0; index -= 1) {
285
+ const record = records[index];
286
+ if (record.event !== PROPOSAL_EVENT && record.event !== ATTESTATION_EVENT)
287
+ continue;
288
+ const payload = record.payload;
289
+ if (payload === undefined)
290
+ continue;
291
+ if (payload["sha256"] !== attested)
292
+ continue;
293
+ const bound = payload["payload_hash"];
294
+ if (typeof bound !== "string")
295
+ continue;
296
+ const stored = loadPayload(storeDir, bound);
297
+ if (!stored.ok)
298
+ continue;
299
+ const value = stored.value;
300
+ if (typeof value !== "object" || value === null)
301
+ continue;
302
+ const text = value["text"];
303
+ if (typeof text !== "string")
304
+ continue;
305
+ // The verification, and the only reason reading a file beside the log is
306
+ // allowed to answer a question about authority at all.
307
+ if (policyBytesHash(Buffer.from(text, "utf8")) !== attested)
308
+ continue;
309
+ return { ok: true, text, sha256: attested };
310
+ }
311
+ return {
312
+ ok: false,
313
+ reason: `the policy in force hashes ${attested} and its BYTES are not recoverable: no record naming those bytes — neither a policy.proposed nor the attestation itself — binds a payload this log can read beside it. Since APRV-356 every attestation stores the attested text, so this is the ordinary state of a chain last attested BEFORE that landed, where a terminal attestation recorded only the digest.`,
314
+ };
315
+ }
231
316
  /**
232
317
  * Append a `policy.proposed` asking a human to attest `policyPath`'s bytes.
233
318
  *
@@ -258,11 +343,17 @@ export function proposeAttestation(logPath, input, actor, options = {}) {
258
343
  return refuse("policy-not-attested", `policy ${input.policyPath} could not be read: ${detail(cause)}; an unverifiable policy is treated as unattested and nothing was proposed`, { detail: "unreadable" });
259
344
  }
260
345
  const status = checkAttestationOfBytes(read.records, bytes);
261
- if (status.status === "attested") {
346
+ if (status.status === "attested" && input.reaffirm !== true) {
262
347
  return refuse("policy-already-attested", `${input.policyPath} already matches its attestation at seq ${String(status.seq)}; there is no amendment to sign, and a prompt for one would ask a human to re-attest bytes that are already in force`);
263
348
  }
264
349
  const sha256 = policyBytesHash(bytes);
265
- const attestedSha256 = status.status === "hash-mismatch" ? status.attestedSha256 : null;
350
+ // APRV-455: a reaffirmation names the attested hash as its own baseline, so
351
+ // its diff is taken against the verified in-force text like any other.
352
+ const attestedSha256 = status.status === "hash-mismatch"
353
+ ? status.attestedSha256
354
+ : status.status === "attested"
355
+ ? status.sha256
356
+ : null;
266
357
  const diff = summarizeDiff(input.policyPath, input.baseline, bytes, attestedSha256, options.schemaDir);
267
358
  const size = diffSize(diff);
268
359
  if (size.chars > ATTESTATION_DIFF_MAX_CHARS || size.lines > ATTESTATION_DIFF_MAX_LINES) {
@@ -439,6 +530,21 @@ export function decideAttestation(logPath, seq, decision, actor, options = {}) {
439
530
  sha256: derived.sha256,
440
531
  proposed_seq: derived.seq,
441
532
  };
533
+ // APRV-324 follow-up. The account the tap came from, when a surface
534
+ // authenticated one and the policy IN FORCE mapped it to this actor. The
535
+ // resolution is `channels/contract.ts`'s and is deliberately not repeated
536
+ // here: what this function records is which account the answer came from,
537
+ // not which account is allowed to give one.
538
+ if (options.sender !== undefined) {
539
+ payload["sender"] = {
540
+ channel: options.sender.channel,
541
+ id: options.sender.id,
542
+ // APRV-370: only when true, so a raw record does not change shape.
543
+ ...(options.sender.hashed === true ? { hashed: true } : {}),
544
+ };
545
+ if (options.senderSource !== undefined)
546
+ payload["sender_source"] = options.senderSource;
547
+ }
442
548
  if (options.note !== undefined)
443
549
  payload["note"] = options.note;
444
550
  if (options.batchDeliveryId !== undefined && options.batchDeliveryId.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"policy-proposal.js","sourceRoot":"","sources":["../../../src/core/policy-proposal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-proposal.js","sourceRoot":"","sources":["../../../src/core/policy-proposal.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,17 @@
22
22
  * execution. A change with no evidence fails the pull request. Session wiring
23
23
  * is not an input.
24
24
  *
25
+ * ## The unit of judgment: one commit (APRV-375)
26
+ *
27
+ * This file answers about ONE PAIR OF BLOBS, whichever pair the caller hands
28
+ * it, so the caller's choice of pair is where the question is really settled.
29
+ * Both callers choose the same one: for every commit of the range, base is that
30
+ * commit's first parent and head is the commit, because a grant binds one edit
31
+ * and the combined diff of a branch is a change nobody made. `core/commit-guard.ts`
32
+ * enumerates the commits, builds the per-commit inputs, states the argument
33
+ * that nothing goes unjudged, and is shared by the CI script and by
34
+ * `approval doctor`'s dark-session arm A.
35
+ *
25
36
  * ## What counts as evidence
26
37
  *
27
38
  * Evidence is about the CHANGE, not about the path (APRV-202). The guard reads
@@ -53,6 +64,18 @@
53
64
  * match: a digest attested for one organ is not evidence for another, which
54
65
  * is why the organ record carries a whole relative path where the policy
55
66
  * record carries a basename.
67
+ *
68
+ * Since APRV-338 the verdict ALSO covers an ordinary `policy.edit` path on a
69
+ * `gate.path.signed_off` record carrying that path and the digest at head —
70
+ * and it is reached LAST, after every grant search below has failed. That
71
+ * ordering is the whole design. A sign-off is whole-file evidence: it says a
72
+ * human read this file at these bytes, not that they saw a particular line
73
+ * change. A grant binds the hunk. So a change a grant covers passes on the
74
+ * grant and prints the grant as its reason, and the sign-off answers only
75
+ * the case the pending-sign-off suffix was invented for — text a human has
76
+ * read and agrees with, for which no grant was ever taken. The organ's
77
+ * verdict stays first because an organ can have no grant at all, so for one
78
+ * there is nothing weaker to prefer.
56
79
  * 2. `policy-authorized-file` — an exact Edit or Write whose verified
57
80
  * `execution.started` is preceded by its unique matching registration and no
58
81
  * approval request. The registration, start and recomputed stored payload
@@ -60,6 +83,21 @@
60
83
  * change and the recorded class must be the class this path is routed to.
61
84
  * This records authorization to execute, not successful completion; the
62
85
  * exact hunk checks below establish whether those bytes landed.
86
+ *
87
+ * The payload's `file` is the path the hook bound, and the hook binds an
88
+ * ABSOLUTE one: `fileToolGate` resolves the declared target against the
89
+ * session's `cwd`, so an Edit of SPEC.md in a worktree is recorded as
90
+ * `/Users/carter/dev/approval-md/.claude/worktrees/<name>/SPEC.md`. This
91
+ * tier accepts that shape and the bare repository-relative path, matching
92
+ * an absolute one by its trailing segments (see
93
+ * {@link namesProtectedFile}). Until APRV-337 it accepted only the relative
94
+ * shape, which no hook has ever written, so every unsampled
95
+ * supervised-live edit to SPEC.md failed CI (PR #393). Tail matching is
96
+ * sound HERE because the bytes carry the proof: `before` has to occur in
97
+ * the blob at base, `after` in the blob at head, and the replay has to
98
+ * reach HEAD byte-identical, so a scratch copy holding other bytes covers
99
+ * nothing whatever its path says. Verdict 4 below keeps the stricter
100
+ * cwd-join rule, because a command payload describes no bytes.
63
101
  * 3. `granted-file` — a file-tool edit. The hook binds the CHANGE rather than
64
102
  * the touch (APRV-124), so the bound material carries `file` plus the exact
65
103
  * edit: `{before, after}` for an Edit, `{content}` for a Write. That is
@@ -134,6 +172,22 @@
134
172
  * against the head commit would have been theatre. The finding says which of
135
173
  * the two it got, every time.
136
174
  *
175
+ * ## Two anchors, because git keeps two dates (APRV-339)
176
+ *
177
+ * A commit carries an author date and a committer date, and they answer
178
+ * different questions. ORDERING — could this record have written these bytes,
179
+ * or does it come after them — is measured against the COMMITTER date, the
180
+ * moment those bytes were committed: an amend or a rebase only ever moves it
181
+ * later, so it cannot turn a genuine earlier start into a post-hoc one.
182
+ * STALENESS — is this evidence about this change or about some edit months ago
183
+ * — is measured against the AUTHOR date, which a rebase does not move, so
184
+ * replaying history does not expire evidence. Measuring both against the author
185
+ * date is what refused PR #393: `git commit --amend` kept the first author date
186
+ * while the bytes were committed 98 seconds later, and the unattended start
187
+ * that wrote them sat between the two and was read as having happened after the
188
+ * change. A caller that has only one date supplies it alone, and it answers
189
+ * both questions, which is where every caller stood before this.
190
+ *
137
191
  * ## How a hunk is decided to be covered
138
192
  *
139
193
  * The unit is a line of text. `added` is the multiset of lines the head blob
@@ -145,6 +199,18 @@
145
199
  * several approved edits to one file; the finding names every contributing
146
200
  * grant and puts the strongest and nearest at the head.
147
201
  *
202
+ * A bound Edit may describe LESS than a line, because the hook binds exactly
203
+ * what the tool replaced: rewriting part of a long paragraph binds a fragment
204
+ * and covers neither the line it removed nor the line it added. So before the
205
+ * replay below there is a line-local step (APRV-340). A fragment that occurs
206
+ * exactly once in exactly one line of the blob at base has one possible
207
+ * effect — that line, rewritten — and when the line it rewrites is one this
208
+ * change removes and the line it produces is one this change adds, both lines
209
+ * are credited to it. It is a one-step replay that needs no search, and it
210
+ * carries every eligibility condition the replay carries; what it does not
211
+ * carry is the replay's budget, which a 200 KB file with forty naming
212
+ * candidates exhausts before reaching a proof (PR #393).
213
+ *
148
214
  * Three properties of that choice are worth stating, because each is a limit:
149
215
  *
150
216
  * - A blob that differs while its line multiset does not is a REORDERING, and
@@ -328,6 +394,19 @@ export interface ChangeBlobs {
328
394
  /** The blob at head, or `null` when this pull request deletes it. */
329
395
  head: string | null;
330
396
  }
397
+ /**
398
+ * The two dates git carries for the commit that changed a path (APRV-339).
399
+ *
400
+ * They are the same instant on an ordinary commit and they part company on an
401
+ * amended or rebased one, which is why the guard asks its two time questions
402
+ * against different ones. See {@link GuardInput.changeTsFor}.
403
+ */
404
+ export interface ChangeTimestamps {
405
+ /** git's author date (`%aI`): when the change was written. */
406
+ author: string | null;
407
+ /** git's committer date (`%cI`): when those bytes were committed. */
408
+ committer: string | null;
409
+ }
331
410
  /** The window of log the guard could see, for the failure messages. */
332
411
  export interface LogWindow {
333
412
  /** Lowest and highest `seq` in the log at head, or `null` for an empty log. */
@@ -380,16 +459,50 @@ export interface GuardInput {
380
459
  * outside a pull request, not a record about bytes that no longer exist.
381
460
  */
382
461
  organSha256AtHead?: (path: string) => string | null;
462
+ /**
463
+ * SHA-256 of ANY guarded path's bytes at the head commit, or `null` when the
464
+ * head tree does not carry it (APRV-338).
465
+ *
466
+ * The same computation {@link organSha256AtHead} performs and a separate
467
+ * field, because the two answer for different surfaces and a caller wired for
468
+ * one must not silently start answering for the other. Only used for the
469
+ * sign-off half of the `attested` verdict, on `policy.edit` and
470
+ * `policy.edit.*` paths.
471
+ *
472
+ * OPTIONAL and fail-closed in the same direction: a caller that omits it gets
473
+ * no sign-off verdict at all, so a change falls through to the ordinary
474
+ * failure rather than passing on a record nothing was checked against. A
475
+ * DELETED path resolves to `null` here, so removing a protected file cannot
476
+ * pass by sign-off — there are no bytes at head for a human to have read.
477
+ */
478
+ pathSha256AtHead?: (path: string) => string | null;
383
479
  /**
384
480
  * Resolve bound material from the committed payload store, by hash.
385
481
  * Returns `null` when the head tree does not carry that payload.
386
482
  */
387
483
  payloadFor: (hash: string) => unknown | null;
388
484
  /**
389
- * The author timestamp of the newest commit in `base..head` that touched this
390
- * path, as an ISO-8601 instant, or `null` when git could not say.
485
+ * When the newest commit in `base..head` that touched this path landed, as
486
+ * ISO-8601 instants, or `null` when git could not say.
487
+ *
488
+ * Two dates, because git keeps two and they answer different questions
489
+ * (APRV-339). A {@link ChangeTimestamps} pair carries git's author date
490
+ * (`%aI`) and its committer date (`%cI`); a bare string, or a pair with one
491
+ * side missing or unparseable, means the one date the caller has answers
492
+ * both, which is exactly what every caller written before APRV-339 supplies.
493
+ *
494
+ * - The ORDERING question — could this start have written these bytes, or
495
+ * does it come after them — is measured against the COMMITTER date, the
496
+ * moment those bytes were committed. An amend or a rebase only moves it
497
+ * later, so it never turns a genuine earlier start into a post-hoc one,
498
+ * while the author date does exactly that: `git commit --amend` keeps the
499
+ * first author date, so an edit folded into the amend sits AFTER it and was
500
+ * refused as post-hoc (PR #393, commit c03cbb8).
501
+ * - The STALENESS question — is this evidence about this change or about some
502
+ * edit months ago — is measured against the AUTHOR date, which a rebase
503
+ * does not move, so replaying history does not expire evidence.
391
504
  *
392
- * With no anchor — `null`, or a value that does not parse — NO recency bound
505
+ * With no anchor — `null`, or values that do not parse — NO recency bound
393
506
  * is applied to this path, and the finding says so in its own text rather
394
507
  * than reporting a bound it did not enforce.
395
508
  *
@@ -406,7 +519,7 @@ export interface GuardInput {
406
519
  * attacker-reachable one; refusing on it would fire only on that breakage.
407
520
  * The path-level evidence requirement is unaffected and still holds.
408
521
  */
409
- changeTsFor: (path: string) => string | null;
522
+ changeTsFor: (path: string) => string | ChangeTimestamps | null;
410
523
  /**
411
524
  * The path's bytes at base and at head, or `null` when they could not be
412
525
  * read (git could not show them, or the blob is binary).