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