approval-md 0.3.0 → 0.4.1

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 (270) hide show
  1. package/README.md +83 -914
  2. package/SPEC.md +101 -13
  3. package/cli.js +134 -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 +72 -0
  8. package/dist/src/channels/contract.js +161 -1
  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.d.ts +25 -0
  17. package/dist/src/channels/tagging.js +63 -6
  18. package/dist/src/channels/tagging.js.map +1 -1
  19. package/dist/src/channels/telegram-minimal.d.ts +251 -0
  20. package/dist/src/channels/telegram-minimal.js +618 -0
  21. package/dist/src/channels/telegram-minimal.js.map +1 -0
  22. package/dist/src/channels/telegram-webhook.d.ts +273 -0
  23. package/dist/src/channels/telegram-webhook.js +536 -0
  24. package/dist/src/channels/telegram-webhook.js.map +1 -0
  25. package/dist/src/channels/telegram.d.ts +725 -20
  26. package/dist/src/channels/telegram.js +1332 -123
  27. package/dist/src/channels/telegram.js.map +1 -1
  28. package/dist/src/cli/amend.js +358 -5
  29. package/dist/src/cli/amend.js.map +1 -1
  30. package/dist/src/cli/attest.js +43 -6
  31. package/dist/src/cli/attest.js.map +1 -1
  32. package/dist/src/cli/audit-card.d.ts +1 -1
  33. package/dist/src/cli/audit-card.js +40 -1
  34. package/dist/src/cli/audit-card.js.map +1 -1
  35. package/dist/src/cli/audit.d.ts +7 -5
  36. package/dist/src/cli/audit.js +22 -10
  37. package/dist/src/cli/audit.js.map +1 -1
  38. package/dist/src/cli/channel-relay.d.ts +108 -0
  39. package/dist/src/cli/channel-relay.js +334 -0
  40. package/dist/src/cli/channel-relay.js.map +1 -0
  41. package/dist/src/cli/channel-telegram-webhook.d.ts +275 -0
  42. package/dist/src/cli/channel-telegram-webhook.js +716 -0
  43. package/dist/src/cli/channel-telegram-webhook.js.map +1 -0
  44. package/dist/src/cli/channel-telegram.d.ts +347 -28
  45. package/dist/src/cli/channel-telegram.js +648 -56
  46. package/dist/src/cli/channel-telegram.js.map +1 -1
  47. package/dist/src/cli/channel.d.ts +1 -1
  48. package/dist/src/cli/channel.js +5 -1
  49. package/dist/src/cli/channel.js.map +1 -1
  50. package/dist/src/cli/daemon.js +37 -5
  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 +856 -111
  54. package/dist/src/cli/doctor.js.map +1 -1
  55. package/dist/src/cli/execute.d.ts +29 -1
  56. package/dist/src/cli/execute.js +387 -21
  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 +10 -1
  65. package/dist/src/cli/help.js +283 -54
  66. package/dist/src/cli/help.js.map +1 -1
  67. package/dist/src/cli/hook.d.ts +485 -6
  68. package/dist/src/cli/hook.js +2370 -70
  69. package/dist/src/cli/hook.js.map +1 -1
  70. package/dist/src/cli/init.js +16 -7
  71. package/dist/src/cli/init.js.map +1 -1
  72. package/dist/src/cli/instructions.js +24 -3
  73. package/dist/src/cli/instructions.js.map +1 -1
  74. package/dist/src/cli/log-anchor.d.ts +55 -0
  75. package/dist/src/cli/log-anchor.js +199 -60
  76. package/dist/src/cli/log-anchor.js.map +1 -1
  77. package/dist/src/cli/log-unlock.d.ts +23 -0
  78. package/dist/src/cli/log-unlock.js +109 -0
  79. package/dist/src/cli/log-unlock.js.map +1 -0
  80. package/dist/src/cli/main.d.ts +0 -12
  81. package/dist/src/cli/main.js +72 -4
  82. package/dist/src/cli/main.js.map +1 -1
  83. package/dist/src/cli/muse.d.ts +2 -0
  84. package/dist/src/cli/muse.js +62 -0
  85. package/dist/src/cli/muse.js.map +1 -0
  86. package/dist/src/cli/payload.js +79 -1
  87. package/dist/src/cli/payload.js.map +1 -1
  88. package/dist/src/cli/scaffold.js +6 -0
  89. package/dist/src/cli/scaffold.js.map +1 -1
  90. package/dist/src/cli/serve.d.ts +53 -0
  91. package/dist/src/cli/serve.js +270 -0
  92. package/dist/src/cli/serve.js.map +1 -0
  93. package/dist/src/cli/up.js +26 -2
  94. package/dist/src/cli/up.js.map +1 -1
  95. package/dist/src/cli/verb-registry.d.ts +2 -0
  96. package/dist/src/cli/verb-registry.js +338 -39
  97. package/dist/src/cli/verb-registry.js.map +1 -1
  98. package/dist/src/cli/wordmark.d.ts +2 -2
  99. package/dist/src/cli/wordmark.js +2 -2
  100. package/dist/src/core/attest-bootstrap.d.ts +95 -0
  101. package/dist/src/core/attest-bootstrap.js +135 -0
  102. package/dist/src/core/attest-bootstrap.js.map +1 -0
  103. package/dist/src/core/attest.d.ts +20 -3
  104. package/dist/src/core/attest.js +25 -0
  105. package/dist/src/core/attest.js.map +1 -1
  106. package/dist/src/core/audit.d.ts +153 -12
  107. package/dist/src/core/audit.js +415 -20
  108. package/dist/src/core/audit.js.map +1 -1
  109. package/dist/src/core/channel-lease.d.ts +322 -0
  110. package/dist/src/core/channel-lease.js +663 -0
  111. package/dist/src/core/channel-lease.js.map +1 -0
  112. package/dist/src/core/command-class.d.ts +51 -0
  113. package/dist/src/core/command-class.js +766 -8
  114. package/dist/src/core/command-class.js.map +1 -1
  115. package/dist/src/core/daemon-host.d.ts +178 -0
  116. package/dist/src/core/daemon-host.js +228 -0
  117. package/dist/src/core/daemon-host.js.map +1 -0
  118. package/dist/src/core/daemon-identity.d.ts +238 -0
  119. package/dist/src/core/daemon-identity.js +252 -0
  120. package/dist/src/core/daemon-identity.js.map +1 -0
  121. package/dist/src/core/gate.d.ts +364 -6
  122. package/dist/src/core/gate.js +802 -27
  123. package/dist/src/core/gate.js.map +1 -1
  124. package/dist/src/core/harness-version.d.ts +128 -4
  125. package/dist/src/core/harness-version.js +179 -12
  126. package/dist/src/core/harness-version.js.map +1 -1
  127. package/dist/src/core/harness-wait.d.ts +82 -3
  128. package/dist/src/core/harness-wait.js +89 -3
  129. package/dist/src/core/harness-wait.js.map +1 -1
  130. package/dist/src/core/log-lock.d.ts +435 -0
  131. package/dist/src/core/log-lock.js +1093 -0
  132. package/dist/src/core/log-lock.js.map +1 -0
  133. package/dist/src/core/log-subscribe.d.ts +21 -0
  134. package/dist/src/core/log-subscribe.js +16 -6
  135. package/dist/src/core/log-subscribe.js.map +1 -1
  136. package/dist/src/core/log-write-layer.d.ts +55 -0
  137. package/dist/src/core/log-write-layer.js +91 -0
  138. package/dist/src/core/log-write-layer.js.map +1 -0
  139. package/dist/src/core/log.d.ts +130 -22
  140. package/dist/src/core/log.js +473 -50
  141. package/dist/src/core/log.js.map +1 -1
  142. package/dist/src/core/payload-census.d.ts +51 -0
  143. package/dist/src/core/payload-census.js +125 -2
  144. package/dist/src/core/payload-census.js.map +1 -1
  145. package/dist/src/core/payload-store.d.ts +31 -0
  146. package/dist/src/core/payload-store.js +113 -8
  147. package/dist/src/core/payload-store.js.map +1 -1
  148. package/dist/src/core/payload.d.ts +18 -3
  149. package/dist/src/core/payload.js +20 -4
  150. package/dist/src/core/payload.js.map +1 -1
  151. package/dist/src/core/policy-diff.d.ts +10 -0
  152. package/dist/src/core/policy-diff.js +10 -2
  153. package/dist/src/core/policy-diff.js.map +1 -1
  154. package/dist/src/core/policy-explain.d.ts +7 -1
  155. package/dist/src/core/policy-explain.js +16 -1
  156. package/dist/src/core/policy-explain.js.map +1 -1
  157. package/dist/src/core/policy-load.d.ts +24 -0
  158. package/dist/src/core/policy-load.js.map +1 -1
  159. package/dist/src/core/policy-match.d.ts +38 -0
  160. package/dist/src/core/policy-match.js +35 -0
  161. package/dist/src/core/policy-match.js.map +1 -1
  162. package/dist/src/core/policy-proposal.d.ts +40 -0
  163. package/dist/src/core/policy-proposal.js +37 -16
  164. package/dist/src/core/policy-proposal.js.map +1 -1
  165. package/dist/src/core/prompt-layout.d.ts +186 -1
  166. package/dist/src/core/prompt-layout.js +345 -3
  167. package/dist/src/core/prompt-layout.js.map +1 -1
  168. package/dist/src/core/read-scope.d.ts +10 -0
  169. package/dist/src/core/read-scope.js +4 -0
  170. package/dist/src/core/read-scope.js.map +1 -1
  171. package/dist/src/core/run-payload.d.ts +160 -0
  172. package/dist/src/core/run-payload.js +304 -0
  173. package/dist/src/core/run-payload.js.map +1 -0
  174. package/dist/src/core/sender-identity.d.ts +59 -11
  175. package/dist/src/core/sender-identity.js +79 -11
  176. package/dist/src/core/sender-identity.js.map +1 -1
  177. package/dist/src/core/state.d.ts +52 -1
  178. package/dist/src/core/state.js +52 -6
  179. package/dist/src/core/state.js.map +1 -1
  180. package/dist/src/core/telegram-config.d.ts +79 -0
  181. package/dist/src/core/telegram-config.js +108 -0
  182. package/dist/src/core/telegram-config.js.map +1 -1
  183. package/dist/src/core/validate.d.ts +20 -6
  184. package/dist/src/core/validate.js +0 -0
  185. package/dist/src/core/validate.js.map +1 -1
  186. package/dist/src/core/verify.d.ts +23 -1
  187. package/dist/src/core/verify.js +20 -2
  188. package/dist/src/core/verify.js.map +1 -1
  189. package/dist/src/daemon/audit.d.ts +80 -5
  190. package/dist/src/daemon/audit.js +126 -6
  191. package/dist/src/daemon/audit.js.map +1 -1
  192. package/dist/src/daemon/daemon.d.ts +174 -2
  193. package/dist/src/daemon/daemon.js +298 -7
  194. package/dist/src/daemon/daemon.js.map +1 -1
  195. package/dist/src/daemon/git-evidence.d.ts +2 -2
  196. package/dist/src/daemon/git-evidence.js +1 -1
  197. package/dist/src/daemon/projection.d.ts +13 -2
  198. package/dist/src/daemon/projection.js +39 -6
  199. package/dist/src/daemon/projection.js.map +1 -1
  200. package/dist/src/mcp/server.d.ts +39 -3
  201. package/dist/src/mcp/server.js +22 -3
  202. package/dist/src/mcp/server.js.map +1 -1
  203. package/dist/src/muse/server.d.ts +16 -0
  204. package/dist/src/muse/server.js +238 -0
  205. package/dist/src/muse/server.js.map +1 -0
  206. package/dist/src/serve/archive.d.ts +166 -0
  207. package/dist/src/serve/archive.js +363 -0
  208. package/dist/src/serve/archive.js.map +1 -0
  209. package/dist/src/serve/arguments.d.ts +93 -0
  210. package/dist/src/serve/arguments.js +228 -0
  211. package/dist/src/serve/arguments.js.map +1 -0
  212. package/dist/src/serve/credentials.d.ts +91 -0
  213. package/dist/src/serve/credentials.js +143 -0
  214. package/dist/src/serve/credentials.js.map +1 -0
  215. package/dist/src/serve/follow.d.ts +86 -0
  216. package/dist/src/serve/follow.js +101 -0
  217. package/dist/src/serve/follow.js.map +1 -0
  218. package/dist/src/serve/hook-thread.d.ts +134 -0
  219. package/dist/src/serve/hook-thread.js +333 -0
  220. package/dist/src/serve/hook-thread.js.map +1 -0
  221. package/dist/src/serve/hook-worker.d.ts +134 -0
  222. package/dist/src/serve/hook-worker.js +173 -0
  223. package/dist/src/serve/hook-worker.js.map +1 -0
  224. package/dist/src/serve/server.d.ts +412 -0
  225. package/dist/src/serve/server.js +1251 -0
  226. package/dist/src/serve/server.js.map +1 -0
  227. package/docs/README-extended.md +768 -0
  228. package/docs/cli-reference.md +2139 -67
  229. package/package.json +4 -2
  230. package/schema/event.schema.json +413 -30
  231. package/schema/fixtures/event/invalid/audit-lock-reclaimed-age-without-created.json +19 -0
  232. package/schema/fixtures/event/invalid/audit-lock-reclaimed-agent-actor.json +14 -0
  233. package/schema/fixtures/event/invalid/audit-lock-reclaimed-lockfile-path.json +14 -0
  234. package/schema/fixtures/event/invalid/audit-lock-reclaimed-operator-cleared-system-actor.json +14 -0
  235. package/schema/fixtures/event/invalid/audit-lock-reclaimed-unknown-reason.json +14 -0
  236. package/schema/fixtures/event/invalid/audit-lock-reclaimed-without-age.json +13 -0
  237. package/schema/fixtures/event/invalid/audit-reviewed-agent-actor.json +6 -1
  238. package/schema/fixtures/event/invalid/audit-reviewed-bad-payload-hash.json +21 -0
  239. package/schema/fixtures/event/invalid/audit-reviewed-loved-no-note.json +5 -0
  240. package/schema/fixtures/event/invalid/audit-reviewed-no-subject-hash.json +19 -0
  241. package/schema/fixtures/event/invalid/audit-reviewed-no-subject-seq.json +19 -0
  242. package/schema/fixtures/event/invalid/audit-reviewed-no-verdict-source.json +19 -0
  243. package/schema/fixtures/event/invalid/audit-reviewed-no-verdict.json +19 -0
  244. package/schema/fixtures/event/invalid/audit-reviewed-system-actor.json +6 -1
  245. package/schema/fixtures/event/invalid/audit-sampled-no-policy-hash.json +14 -0
  246. package/schema/fixtures/event/invalid/daemon-id-malformed.json +15 -0
  247. package/schema/fixtures/event/invalid/execution-started-truncated-policy-sha256.json +18 -0
  248. package/schema/fixtures/event/invalid/harness-cap-at-margin.json +16 -0
  249. package/schema/fixtures/event/invalid/harness-cap-fractional.json +16 -0
  250. package/schema/fixtures/event/invalid/harness-cap-negative.json +16 -0
  251. package/schema/fixtures/event/invalid/harness-cap-string.json +16 -0
  252. package/schema/fixtures/event/invalid/harness-cap-without-harness-execution.json +16 -0
  253. package/schema/fixtures/event/invalid/harness-cap-zero.json +16 -0
  254. package/schema/fixtures/event/valid/approval-requested-harness-cap.json +18 -0
  255. package/schema/fixtures/event/valid/audit-lock-reclaimed-implausible-created.json +18 -0
  256. package/schema/fixtures/event/valid/audit-lock-reclaimed-legacy.json +14 -0
  257. package/schema/fixtures/event/valid/audit-lock-reclaimed-unlock.json +19 -0
  258. package/schema/fixtures/event/valid/audit-lock-reclaimed.json +19 -0
  259. package/schema/fixtures/event/valid/audit-reviewed-reaction.json +5 -0
  260. package/schema/fixtures/event/valid/audit-reviewed.json +6 -1
  261. package/schema/fixtures/event/valid/audit-sampled.json +2 -1
  262. package/schema/fixtures/event/valid/daemon-identity-declared.json +17 -0
  263. package/schema/fixtures/event/valid/daemon-identity.json +16 -0
  264. package/schema/fixtures/event/valid/execution-started-policy-sha256.json +18 -0
  265. package/schema/fixtures/event/valid/harness-kind-hermes.json +23 -0
  266. package/schema/fixtures/policy/invalid/daemons-malformed-id.json +10 -0
  267. package/schema/fixtures/policy/valid/daemons-allowlist.json +19 -0
  268. package/schema/fixtures/policy-md/invalid/schema-invalid-agent-may-request.md +21 -0
  269. package/schema/fixtures/policy-md/valid/agent-may-request.md +24 -0
  270. package/schema/policy.schema.json +102 -6
@@ -0,0 +1,21 @@
1
+ {
2
+ "seq": 16,
3
+ "ts": "2026-08-04T09:26:02Z",
4
+ "event": "audit.reviewed",
5
+ "task": "task-049",
6
+ "action_key": "task-049:archive:2026-08-04",
7
+ "actor": "human:carter",
8
+ "channel": "cli",
9
+ "payload": {
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
14
+ "verdict": "ok",
15
+ "verdict_source": "explicit",
16
+ "payload_hash": "6C1D3F0B"
17
+ },
18
+ "alg": "sha256/jcs",
19
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
20
+ "hash": "6752e6617b2b810c1cc0cf09c51678c78891ff6fdfd8bb9399aecbdfca00dd5b"
21
+ }
@@ -7,7 +7,12 @@
7
7
  "actor": "human:carter",
8
8
  "channel": "cli",
9
9
  "payload": {
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
10
14
  "verdict": "ok",
15
+ "verdict_source": "explicit",
11
16
  "reaction": "loved"
12
17
  },
13
18
  "alg": "sha256/jcs",
@@ -0,0 +1,19 @@
1
+ {
2
+ "seq": 16,
3
+ "ts": "2026-08-04T09:26:02Z",
4
+ "event": "audit.reviewed",
5
+ "task": "task-049",
6
+ "action_key": "task-049:archive:2026-08-04",
7
+ "actor": "human:carter",
8
+ "channel": "cli",
9
+ "payload": {
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "verdict": "ok",
14
+ "verdict_source": "explicit"
15
+ },
16
+ "alg": "sha256/jcs",
17
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
18
+ "hash": "6752e6617b2b810c1cc0cf09c51678c78891ff6fdfd8bb9399aecbdfca00dd5b"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "seq": 16,
3
+ "ts": "2026-08-04T09:26:02Z",
4
+ "event": "audit.reviewed",
5
+ "task": "task-049",
6
+ "action_key": "task-049:archive:2026-08-04",
7
+ "actor": "human:carter",
8
+ "channel": "cli",
9
+ "payload": {
10
+ "subject_event": "audit.sampled",
11
+ "reviewed": true,
12
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
13
+ "verdict": "ok",
14
+ "verdict_source": "explicit"
15
+ },
16
+ "alg": "sha256/jcs",
17
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
18
+ "hash": "6752e6617b2b810c1cc0cf09c51678c78891ff6fdfd8bb9399aecbdfca00dd5b"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "seq": 16,
3
+ "ts": "2026-08-04T09:26:02Z",
4
+ "event": "audit.reviewed",
5
+ "task": "task-049",
6
+ "action_key": "task-049:archive:2026-08-04",
7
+ "actor": "human:carter",
8
+ "channel": "cli",
9
+ "payload": {
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
14
+ "verdict": "ok"
15
+ },
16
+ "alg": "sha256/jcs",
17
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
18
+ "hash": "6752e6617b2b810c1cc0cf09c51678c78891ff6fdfd8bb9399aecbdfca00dd5b"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "seq": 16,
3
+ "ts": "2026-08-04T09:26:02Z",
4
+ "event": "audit.reviewed",
5
+ "task": "task-049",
6
+ "action_key": "task-049:archive:2026-08-04",
7
+ "actor": "human:carter",
8
+ "channel": "cli",
9
+ "payload": {
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
14
+ "verdict_source": "explicit"
15
+ },
16
+ "alg": "sha256/jcs",
17
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
18
+ "hash": "6752e6617b2b810c1cc0cf09c51678c78891ff6fdfd8bb9399aecbdfca00dd5b"
19
+ }
@@ -7,7 +7,12 @@
7
7
  "actor": "system:daemon",
8
8
  "channel": "cli",
9
9
  "payload": {
10
- "verdict": "ok"
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
14
+ "verdict": "ok",
15
+ "verdict_source": "explicit"
11
16
  },
12
17
  "alg": "sha256/jcs",
13
18
  "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
@@ -0,0 +1,14 @@
1
+ {
2
+ "seq": 15,
3
+ "ts": "2026-08-04T09:25:02Z",
4
+ "event": "audit.sampled",
5
+ "task": "task-049",
6
+ "action_key": "task-049:archive:2026-08-04",
7
+ "actor": "system:auditor",
8
+ "payload": {
9
+ "rate": 0.1
10
+ },
11
+ "alg": "sha256/jcs",
12
+ "prev": "07453feb30c2b0b1a2806398cdd17b38d98f9abf52b8a75ca42878c9101d8264",
13
+ "hash": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30"
14
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "seq": 63,
3
+ "ts": "2026-09-20T11:06:02Z",
4
+ "event": "audit.sampled",
5
+ "task": "task-311",
6
+ "action_key": "task-311:digest:2026-09-20",
7
+ "actor": "system:auditor",
8
+ "daemon": "Village Goa 1\nrate: 1.0",
9
+ "payload": {
10
+ "rate": 0.1
11
+ },
12
+ "alg": "sha256/jcs",
13
+ "prev": "07453feb30c2b0b1a2806398cdd17b38d98f9abf52b8a75ca42878c9101d8264",
14
+ "hash": "9d4c0be1a7fb25308c6ef4a1d0b39724ce85f16a2b0d7c39e8145af62b0c73d8"
15
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "seq": 9,
3
+ "ts": "2026-10-04T09:19:02Z",
4
+ "event": "execution.started",
5
+ "task": "hook:sess-1:tu-1",
6
+ "action_key": "hook:sess-1:tu-1:files.write.workspace",
7
+ "actor": "agent:claude-code",
8
+ "payload": {
9
+ "class": "files.write.workspace",
10
+ "est_cost_usd": "0",
11
+ "execution": "harness",
12
+ "payload_hash": "9f2b1c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f809",
13
+ "policy_sha256": "5f1c0de9a3b7"
14
+ },
15
+ "alg": "sha256/jcs",
16
+ "prev": "d973375d6aeec5e6cd2de3a0f7dc8f5bc1d9be77225f9af0f851e7fc519a07c3",
17
+ "hash": "707b79cfa14ec43224c8f71a4fee3ddbff52369f82525aab19bec18c369d5cad"
18
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "seq": 76,
3
+ "ts": "2026-09-22T08:34:20Z",
4
+ "event": "approval.requested",
5
+ "task": "hook:hermes-sess-1:tool-12",
6
+ "action_key": "hook:hermes-sess-1:tool-12:deps.add",
7
+ "actor": "agent:hermes",
8
+ "payload": {
9
+ "class": "deps.add",
10
+ "execution": "harness",
11
+ "harness_cap_ms": 60000
12
+ },
13
+ "alg": "sha256/jcs",
14
+ "prev": "1515151515151515151515151515151515151515151515151515151515151515",
15
+ "hash": "1616161616161616161616161616161616161616161616161616161616161616"
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "seq": 74,
3
+ "ts": "2026-09-22T08:33:19Z",
4
+ "event": "approval.requested",
5
+ "task": "hook:hermes-sess-1:tool-10",
6
+ "action_key": "hook:hermes-sess-1:tool-10:deps.add",
7
+ "actor": "agent:hermes",
8
+ "payload": {
9
+ "class": "deps.add",
10
+ "execution": "harness",
11
+ "harness_cap_ms": 299999.5
12
+ },
13
+ "alg": "sha256/jcs",
14
+ "prev": "1313131313131313131313131313131313131313131313131313131313131313",
15
+ "hash": "1414141414141414141414141414141414141414141414141414141414141414"
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "seq": 73,
3
+ "ts": "2026-09-22T08:32:44Z",
4
+ "event": "approval.requested",
5
+ "task": "hook:hermes-sess-1:tool-9",
6
+ "action_key": "hook:hermes-sess-1:tool-9:deps.add",
7
+ "actor": "agent:hermes",
8
+ "payload": {
9
+ "class": "deps.add",
10
+ "execution": "harness",
11
+ "harness_cap_ms": -300000
12
+ },
13
+ "alg": "sha256/jcs",
14
+ "prev": "1212121212121212121212121212121212121212121212121212121212121212",
15
+ "hash": "1313131313131313131313131313131313131313131313131313131313131313"
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "seq": 75,
3
+ "ts": "2026-09-22T08:33:52Z",
4
+ "event": "approval.requested",
5
+ "task": "hook:hermes-sess-1:tool-11",
6
+ "action_key": "hook:hermes-sess-1:tool-11:deps.add",
7
+ "actor": "agent:hermes",
8
+ "payload": {
9
+ "class": "deps.add",
10
+ "execution": "harness",
11
+ "harness_cap_ms": "300s"
12
+ },
13
+ "alg": "sha256/jcs",
14
+ "prev": "1414141414141414141414141414141414141414141414141414141414141414",
15
+ "hash": "1515151515151515151515151515151515151515151515151515151515151515"
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "seq": 77,
3
+ "ts": "2026-09-22T08:34:51Z",
4
+ "event": "approval.requested",
5
+ "task": "hook:hermes-sess-1:tool-13",
6
+ "action_key": "hook:hermes-sess-1:tool-13:deps.add",
7
+ "actor": "agent:hermes",
8
+ "payload": {
9
+ "class": "deps.add",
10
+ "harness_cap_ms": 300000,
11
+ "payload_hash": "5f1c2a6f3e9d4b8a7c0e1d2b3a4958677889aabbccddeeff0011223344556677"
12
+ },
13
+ "alg": "sha256/jcs",
14
+ "prev": "1616161616161616161616161616161616161616161616161616161616161616",
15
+ "hash": "1717171717171717171717171717171717171717171717171717171717171717"
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "seq": 72,
3
+ "ts": "2026-09-22T08:32:01Z",
4
+ "event": "approval.requested",
5
+ "task": "hook:hermes-sess-1:tool-8",
6
+ "action_key": "hook:hermes-sess-1:tool-8:deps.add",
7
+ "actor": "agent:hermes",
8
+ "payload": {
9
+ "class": "deps.add",
10
+ "execution": "harness",
11
+ "harness_cap_ms": 0
12
+ },
13
+ "alg": "sha256/jcs",
14
+ "prev": "1111111111111111111111111111111111111111111111111111111111111111",
15
+ "hash": "1212121212121212121212121212121212121212121212121212121212121212"
16
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "seq": 71,
3
+ "ts": "2026-09-22T08:31:14Z",
4
+ "event": "approval.requested",
5
+ "task": "hook:hermes-sess-1:tool-7",
6
+ "action_key": "hook:hermes-sess-1:tool-7:deps.add",
7
+ "actor": "agent:hermes",
8
+ "channel": "telegram",
9
+ "payload": {
10
+ "class": "deps.add",
11
+ "execution": "harness",
12
+ "harness_cap_ms": 300000,
13
+ "payload_hash": "5f1c2a6f3e9d4b8a7c0e1d2b3a4958677889aabbccddeeff0011223344556677"
14
+ },
15
+ "alg": "sha256/jcs",
16
+ "prev": "1010101010101010101010101010101010101010101010101010101010101010",
17
+ "hash": "1111111111111111111111111111111111111111111111111111111111111111"
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "seq": 216,
3
+ "ts": "2026-10-05T07:41:12.408Z",
4
+ "event": "audit.lock_reclaimed",
5
+ "actor": "system:log",
6
+ "payload": {
7
+ "lockfile": "events.jsonl.lock",
8
+ "reason": "holder-dead",
9
+ "holder": {
10
+ "pid": 48213,
11
+ "op": "append",
12
+ "created": null
13
+ }
14
+ },
15
+ "alg": "sha256/jcs",
16
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
17
+ "hash": "2e9b7c1a4d6f08213b5c7e9a0d2f416385a7c9e1b3d5f70921a3c5e7092b4d6f"
18
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "seq": 215,
3
+ "ts": "2026-10-05T07:52:03.010Z",
4
+ "event": "audit.lock_reclaimed",
5
+ "actor": "system:log",
6
+ "payload": {
7
+ "lockfile": "events.jsonl.lock",
8
+ "reason": "legacy-aged",
9
+ "age_ms": 612000
10
+ },
11
+ "alg": "sha256/jcs",
12
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
13
+ "hash": "2e9b7c1a4d6f08213b5c7e9a0d2f416385a7c9e1b3d5f70921a3c5e7092b4d6f"
14
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "seq": 216,
3
+ "ts": "2026-10-05T11:02:40.115Z",
4
+ "event": "audit.lock_reclaimed",
5
+ "actor": "human:carter",
6
+ "payload": {
7
+ "lockfile": "events.jsonl.lock",
8
+ "reason": "operator-cleared",
9
+ "age_ms": 4021877,
10
+ "holder": {
11
+ "pid": 31,
12
+ "op": "append",
13
+ "created": "2026-10-05T09:55:38.238Z"
14
+ }
15
+ },
16
+ "alg": "sha256/jcs",
17
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
18
+ "hash": "2e9b7c1a4d6f08213b5c7e9a0d2f416385a7c9e1b3d5f70921a3c5e7092b4d6f"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "seq": 214,
3
+ "ts": "2026-10-05T07:41:12.408Z",
4
+ "event": "audit.lock_reclaimed",
5
+ "actor": "system:log",
6
+ "payload": {
7
+ "lockfile": "events.jsonl.lock",
8
+ "reason": "holder-dead",
9
+ "age_ms": 734211,
10
+ "holder": {
11
+ "pid": 48213,
12
+ "op": "append",
13
+ "created": "2026-10-05T07:28:58.197Z"
14
+ }
15
+ },
16
+ "alg": "sha256/jcs",
17
+ "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
18
+ "hash": "2e9b7c1a4d6f08213b5c7e9a0d2f416385a7c9e1b3d5f70921a3c5e7092b4d6f"
19
+ }
@@ -7,7 +7,12 @@
7
7
  "actor": "human:carter",
8
8
  "channel": "cli",
9
9
  "payload": {
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
10
14
  "verdict": "ok",
15
+ "verdict_source": "explicit",
11
16
  "reaction": "loved",
12
17
  "note": "exactly the archive I would have written by hand"
13
18
  },
@@ -7,7 +7,12 @@
7
7
  "actor": "human:carter",
8
8
  "channel": "cli",
9
9
  "payload": {
10
- "verdict": "ok"
10
+ "subject_seq": 15,
11
+ "subject_event": "audit.sampled",
12
+ "reviewed": true,
13
+ "sampled_subject_hash": "6c1d3f0b9a8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a392817060504",
14
+ "verdict": "ok",
15
+ "verdict_source": "explicit"
11
16
  },
12
17
  "alg": "sha256/jcs",
13
18
  "prev": "7f625051c176f2f260a1f7e25c9a933717ebb49917a8788ac25ae7a4614ebb30",
@@ -6,7 +6,8 @@
6
6
  "action_key": "task-049:archive:2026-08-04",
7
7
  "actor": "system:auditor",
8
8
  "payload": {
9
- "rate": 0.1
9
+ "rate": 0.1,
10
+ "policy_sha256": "3b1f0c9d8e7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c"
10
11
  },
11
12
  "alg": "sha256/jcs",
12
13
  "prev": "07453feb30c2b0b1a2806398cdd17b38d98f9abf52b8a75ca42878c9101d8264",
@@ -0,0 +1,17 @@
1
+ {
2
+ "seq": 62,
3
+ "ts": "2026-09-20T11:05:44Z",
4
+ "event": "envelope.drift",
5
+ "task": "task-311",
6
+ "actor": "system:daemon",
7
+ "daemon": "village-goa-1",
8
+ "payload": {
9
+ "file": "backlog/tasks/task-311.md",
10
+ "declared_state": "requested",
11
+ "derived_state": "granted",
12
+ "reason": "state-mismatch"
13
+ },
14
+ "alg": "sha256/jcs",
15
+ "prev": "c0a1dd6b0f5a9b7fe7cf7d90cbb4aa4cf0a1eb2d5c7318cbbbd7a2b9efc33150",
16
+ "hash": "5b2f0c8419a7dd3e6f0b4a1c93de8027f5cbb1a40de92f7c3ab6051d8e4f29c7"
17
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "seq": 61,
3
+ "ts": "2026-09-20T11:04:19Z",
4
+ "event": "audit.sampled",
5
+ "task": "task-311",
6
+ "action_key": "task-311:digest:2026-09-20",
7
+ "actor": "system:auditor",
8
+ "daemon": "daemon-3f2a9c11",
9
+ "payload": {
10
+ "rate": 0.1,
11
+ "policy_sha256": "3b1f0c9d8e7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c"
12
+ },
13
+ "alg": "sha256/jcs",
14
+ "prev": "07453feb30c2b0b1a2806398cdd17b38d98f9abf52b8a75ca42878c9101d8264",
15
+ "hash": "c0a1dd6b0f5a9b7fe7cf7d90cbb4aa4cf0a1eb2d5c7318cbbbd7a2b9efc33150"
16
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "seq": 9,
3
+ "ts": "2026-10-04T09:19:02Z",
4
+ "event": "execution.started",
5
+ "task": "hook:sess-1:tu-1",
6
+ "action_key": "hook:sess-1:tu-1:files.write.workspace",
7
+ "actor": "agent:claude-code",
8
+ "payload": {
9
+ "class": "files.write.workspace",
10
+ "est_cost_usd": "0",
11
+ "execution": "harness",
12
+ "payload_hash": "9f2b1c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f809",
13
+ "policy_sha256": "5f1c0de9a3b7e2d4c6f8091a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e"
14
+ },
15
+ "alg": "sha256/jcs",
16
+ "prev": "d973375d6aeec5e6cd2de3a0f7dc8f5bc1d9be77225f9af0f851e7fc519a07c3",
17
+ "hash": "707b79cfa14ec43224c8f71a4fee3ddbff52369f82525aab19bec18c369d5cad"
18
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "seq": 56,
3
+ "ts": "2026-09-20T09:41:12Z",
4
+ "event": "task.registered",
5
+ "task": "hook:hermes-sess-1:toolu-16",
6
+ "actor": "agent:hermes",
7
+ "payload": {
8
+ "state": "proposed",
9
+ "actions": [
10
+ {
11
+ "class": "deps.add",
12
+ "summary": "npm install --save-dev oxlint",
13
+ "idempotency_key": "hook:hermes-sess-1:toolu-16:deps.add",
14
+ "payload_hash": "4d0a9c2b7e5f13860ad4c9b217e3f508cc61a7d2394b8e05f7ca61d3b8092e4f"
15
+ }
16
+ ],
17
+ "harness": "hermes",
18
+ "harness_version": "hermes 0.21.3"
19
+ },
20
+ "alg": "sha256/jcs",
21
+ "prev": "7d925ec380b14fa6c05e971b3d4287ac6fb015e93c2a480df6b1e7c05a83942f",
22
+ "hash": "e1f6a30c4d7b92815ac0fe43b6d258907cb14fe2839a5d07f4cb62e1a9350b7d"
23
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": "0.1",
3
+ "defaults": {
4
+ "autonomy": "manual"
5
+ },
6
+ "daemons": ["Village-Goa-1"],
7
+ "classes": {
8
+ "communicate.email.external": { "autonomy": "manual" }
9
+ }
10
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "version": "0.1",
3
+ "defaults": {
4
+ "autonomy": "manual",
5
+ "channel": "telegram",
6
+ "approval_ttl": "30m",
7
+ "on_expiry": "reject"
8
+ },
9
+ "approvers": {
10
+ "carter": {
11
+ "channels": ["telegram", "cli"],
12
+ "senders": { "telegram": "5551234567" }
13
+ }
14
+ },
15
+ "daemons": ["daemon-3f2a9c11", "village-goa-1"],
16
+ "classes": {
17
+ "communicate.email.external": { "autonomy": "manual" }
18
+ }
19
+ }
@@ -0,0 +1,21 @@
1
+ # Approval Policy
2
+
3
+ Two invalid spellings of `agent_may_request` (APRV-445): a string where a
4
+ boolean belongs, and `true` on a `human-only` rule, which is inert to agents
5
+ and may not be opened to them. Either alone fails the whole policy closed:
6
+ `schema-invalid`.
7
+
8
+ ```yaml approval-policy
9
+ version: "0.1"
10
+
11
+ defaults:
12
+ autonomy: manual
13
+
14
+ classes:
15
+ intent.publish.inferred.index:
16
+ autonomy: manual
17
+ agent_may_request: "yes"
18
+ account.credential:
19
+ autonomy: human-only
20
+ agent_may_request: true
21
+ ```
@@ -0,0 +1,24 @@
1
+ # Approval Policy
2
+
3
+ `agent_may_request` (APRV-445) opens `approval propose` to classes the operator
4
+ declares by name. The family line opens the branch; each member is still a line
5
+ of its own, and the closed member says no for itself.
6
+
7
+ ```yaml approval-policy
8
+ version: "0.1"
9
+
10
+ defaults:
11
+ autonomy: manual
12
+ approval_ttl: 72h
13
+
14
+ classes:
15
+ intent.publish.*:
16
+ autonomy: manual
17
+ agent_may_request: true
18
+ intent.publish.inferred.index: { autonomy: manual }
19
+ intent.publish.stated.index: { autonomy: autonomous }
20
+ intent.publish.closed:
21
+ autonomy: manual
22
+ agent_may_request: false
23
+ communicate.email.external: { autonomy: manual }
24
+ ```