approval-md 0.1.0 → 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/README.md +584 -553
- package/SPEC.md +42 -13
- package/dist/src/adapters/agentmail.d.ts +426 -0
- package/dist/src/adapters/agentmail.js +2 -2
- package/dist/src/adapters/conformance.d.ts +149 -0
- package/dist/src/adapters/contract.d.ts +628 -0
- package/dist/src/adapters/contract.js +110 -16
- package/dist/src/adapters/contract.js.map +1 -1
- package/dist/src/adapters/email.d.ts +324 -0
- package/dist/src/adapters/env-passphrase.d.ts +93 -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 +2 -1
- package/dist/src/adapters/registry.js.map +1 -1
- package/dist/src/adapters/smtp.d.ts +213 -0
- package/dist/src/adapters/vault-provider.d.ts +114 -0
- package/dist/src/adapters/vault-provider.js +3 -3
- 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/cli.d.ts +193 -0
- package/dist/src/channels/conformance.d.ts +92 -0
- package/dist/src/channels/contract.d.ts +623 -0
- package/dist/src/channels/payload-view.d.ts +35 -0
- package/dist/src/channels/render-queue.d.ts +149 -0
- package/dist/src/channels/tagging.d.ts +196 -0
- package/dist/src/channels/telegram.d.ts +1832 -0
- package/dist/src/channels/web.d.ts +341 -0
- package/dist/src/cli/adapter.d.ts +90 -0
- package/dist/src/cli/adapter.js +25 -15
- package/dist/src/cli/adapter.js.map +1 -1
- package/dist/src/cli/amend.d.ts +59 -0
- package/dist/src/cli/args.d.ts +43 -0
- package/dist/src/cli/attest.d.ts +41 -0
- package/dist/src/cli/audit-card.d.ts +62 -0
- package/dist/src/cli/audit.d.ts +59 -0
- package/dist/src/cli/channel-telegram.d.ts +806 -0
- package/dist/src/cli/channel-web.d.ts +131 -0
- package/dist/src/cli/channel.d.ts +71 -0
- package/dist/src/cli/checkpoint-tap.d.ts +169 -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/daemon.d.ts +120 -0
- package/dist/src/cli/doctor.d.ts +129 -0
- package/dist/src/cli/doctor.js +119 -5
- package/dist/src/cli/doctor.js.map +1 -1
- package/dist/src/cli/env.d.ts +65 -0
- package/dist/src/cli/execute.d.ts +202 -0
- package/dist/src/cli/exit-codes.d.ts +73 -0
- package/dist/src/cli/feedback.d.ts +60 -0
- package/dist/src/cli/gate-window.d.ts +40 -0
- package/dist/src/cli/gate.d.ts +68 -0
- package/dist/src/cli/git-scope.d.ts +190 -0
- package/dist/src/cli/gloss-attach.d.ts +85 -0
- package/dist/src/cli/gloss-codex-child.d.ts +9 -0
- package/dist/src/cli/gloss-codex.d.ts +24 -0
- package/dist/src/cli/gloss-options.d.ts +42 -0
- package/dist/src/cli/gloss.d.ts +265 -0
- package/dist/src/cli/help.d.ts +103 -0
- package/dist/src/cli/help.js +173 -51
- package/dist/src/cli/help.js.map +1 -1
- 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 +186 -80
- package/dist/src/cli/hook.js.map +1 -1
- package/dist/src/cli/import.d.ts +35 -0
- package/dist/src/cli/init.d.ts +84 -0
- package/dist/src/cli/init.js +2 -2
- package/dist/src/cli/init.js.map +1 -1
- package/dist/src/cli/instructions.d.ts +23 -0
- package/dist/src/cli/journal.d.ts +41 -0
- package/dist/src/cli/log-advance.d.ts +287 -0
- package/dist/src/cli/log-advance.js +102 -11
- package/dist/src/cli/log-advance.js.map +1 -1
- package/dist/src/cli/log-anchor.d.ts +176 -0
- package/dist/src/cli/log-checkpoint.d.ts +22 -0
- package/dist/src/cli/log-sync.d.ts +243 -0
- package/dist/src/cli/log-verbs.d.ts +16 -0
- package/dist/src/cli/log-verbs.js +7 -1
- package/dist/src/cli/log-verbs.js.map +1 -1
- package/dist/src/cli/long-help.d.ts +70 -0
- package/dist/src/cli/main.d.ts +77 -0
- package/dist/src/cli/main.js +155 -5
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/mcp.d.ts +52 -0
- package/dist/src/cli/paths.d.ts +56 -0
- package/dist/src/cli/payload.d.ts +58 -0
- package/dist/src/cli/policy.d.ts +43 -0
- package/dist/src/cli/preflight.d.ts +363 -0
- package/dist/src/cli/preflight.js +294 -7
- package/dist/src/cli/preflight.js.map +1 -1
- package/dist/src/cli/progress.d.ts +78 -0
- package/dist/src/cli/prompt.d.ts +209 -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/render.d.ts +22 -0
- package/dist/src/cli/sandbox.d.ts +51 -0
- package/dist/src/cli/scaffold.d.ts +79 -0
- package/dist/src/cli/setup-adapter.d.ts +137 -0
- package/dist/src/cli/setup-adapter.js +38 -4
- package/dist/src/cli/setup-adapter.js.map +1 -1
- package/dist/src/cli/setup-channel.d.ts +117 -0
- package/dist/src/cli/setup-checkpoint.d.ts +57 -0
- package/dist/src/cli/setup-common.d.ts +275 -0
- package/dist/src/cli/setup-flow.d.ts +287 -0
- package/dist/src/cli/setup-service.d.ts +96 -0
- package/dist/src/cli/setup.d.ts +202 -0
- package/dist/src/cli/style.d.ts +320 -0
- package/dist/src/cli/token.d.ts +39 -0
- package/dist/src/cli/up.d.ts +155 -0
- package/dist/src/cli/up.js +4 -2
- package/dist/src/cli/up.js.map +1 -1
- package/dist/src/cli/usage.d.ts +37 -0
- package/dist/src/cli/values.d.ts +40 -0
- package/dist/src/cli/vault.d.ts +59 -0
- package/dist/src/cli/vault.js +2 -2
- package/dist/src/cli/vault.js.map +1 -1
- package/dist/src/cli/verb-registry.d.ts +76 -0
- package/dist/src/cli/verb-registry.js +176 -8
- package/dist/src/cli/verb-registry.js.map +1 -1
- package/dist/src/cli/wordmark.d.ts +31 -0
- package/dist/src/cli/wordmark.js +2 -2
- 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/agents-md.d.ts +276 -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 +13 -1
- package/dist/src/core/attest.js.map +1 -1
- package/dist/src/core/audit.d.ts +492 -0
- package/dist/src/core/budgets.d.ts +238 -0
- package/dist/src/core/checkpoint.d.ts +500 -0
- package/dist/src/core/child-env.d.ts +88 -0
- package/dist/src/core/clock.d.ts +52 -0
- package/dist/src/core/command-class.d.ts +543 -0
- package/dist/src/core/command-class.js +43 -8
- package/dist/src/core/command-class.js.map +1 -1
- package/dist/src/core/coverage-sources/adapter.d.ts +40 -0
- package/dist/src/core/coverage-sources/gh.d.ts +48 -0
- package/dist/src/core/coverage-sources/git.d.ts +101 -0
- package/dist/src/core/coverage.d.ts +217 -0
- package/dist/src/core/credential-spec.d.ts +72 -0
- package/dist/src/core/dark-session.d.ts +331 -0
- package/dist/src/core/decision-refusal.d.ts +185 -0
- package/dist/src/core/env-file.d.ts +450 -0
- package/dist/src/core/execute.d.ts +858 -0
- package/dist/src/core/execute.js +44 -6
- package/dist/src/core/execute.js.map +1 -1
- package/dist/src/core/frontmatter.d.ts +78 -0
- package/dist/src/core/gate-window.d.ts +312 -0
- package/dist/src/core/gate.d.ts +1364 -0
- package/dist/src/core/gate.js +68 -13
- package/dist/src/core/gate.js.map +1 -1
- package/dist/src/core/git-run.d.ts +73 -0
- package/dist/src/core/harness-version.d.ts +157 -0
- package/dist/src/core/harness-version.js +2 -1
- package/dist/src/core/harness-version.js.map +1 -1
- package/dist/src/core/harness-wait.d.ts +55 -0
- package/dist/src/core/head-retry.d.ts +107 -0
- package/dist/src/core/instance.d.ts +253 -0
- package/dist/src/core/intake-limits.d.ts +247 -0
- package/dist/src/core/jcs.d.ts +52 -0
- package/dist/src/core/journal.d.ts +144 -0
- package/dist/src/core/live-draw.d.ts +436 -0
- package/dist/src/core/log-reconcile.d.ts +89 -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/loop.d.ts +274 -0
- package/dist/src/core/loop.js +11 -0
- package/dist/src/core/loop.js.map +1 -1
- package/dist/src/core/md-fence.d.ts +41 -0
- package/dist/src/core/money.d.ts +147 -0
- package/dist/src/core/payload-census.d.ts +74 -0
- package/dist/src/core/payload-store.d.ts +175 -0
- package/dist/src/core/payload.d.ts +71 -0
- package/dist/src/core/policy-diff.d.ts +292 -0
- package/dist/src/core/policy-diff.js +27 -4
- package/dist/src/core/policy-diff.js.map +1 -1
- package/dist/src/core/policy-expectations.d.ts +199 -0
- package/dist/src/core/policy-explain.d.ts +150 -0
- package/dist/src/core/policy-explain.js +31 -3
- package/dist/src/core/policy-explain.js.map +1 -1
- package/dist/src/core/policy-load.d.ts +527 -0
- package/dist/src/core/policy-load.js +15 -3
- package/dist/src/core/policy-load.js.map +1 -1
- package/dist/src/core/policy-match.d.ts +281 -0
- package/dist/src/core/policy-match.js +20 -9
- package/dist/src/core/policy-match.js.map +1 -1
- package/dist/src/core/policy-proposal.d.ts +265 -0
- package/dist/src/core/prompt-layout.d.ts +221 -0
- package/dist/src/core/protected-path-guard.d.ts +453 -0
- package/dist/src/core/protected-path-guard.js +514 -35
- package/dist/src/core/protected-path-guard.js.map +1 -1
- package/dist/src/core/registration.d.ts +25 -0
- package/dist/src/core/reindex.d.ts +99 -0
- package/dist/src/core/sampler.d.ts +313 -0
- package/dist/src/core/sandbox.d.ts +290 -0
- package/dist/src/core/seal.d.ts +165 -0
- package/dist/src/core/state.d.ts +505 -0
- package/dist/src/core/task-file.d.ts +185 -0
- package/dist/src/core/telegram-config.d.ts +93 -0
- package/dist/src/core/token.d.ts +409 -0
- package/dist/src/core/token.js +21 -38
- package/dist/src/core/token.js.map +1 -1
- package/dist/src/core/validate.d.ts +138 -0
- package/dist/src/core/values.d.ts +137 -0
- package/dist/src/core/vault.d.ts +291 -0
- package/dist/src/core/verified-snapshot.d.ts +204 -0
- package/dist/src/core/verify.d.ts +336 -0
- package/dist/src/core/version.d.ts +8 -0
- package/dist/src/core/wysiwys.d.ts +370 -0
- package/dist/src/daemon/advance-child.d.ts +39 -0
- package/dist/src/daemon/advance.d.ts +466 -0
- package/dist/src/daemon/audit.d.ts +87 -0
- package/dist/src/daemon/daemon.d.ts +1180 -0
- package/dist/src/daemon/dark-session.d.ts +64 -0
- package/dist/src/daemon/draw-child.d.ts +36 -0
- package/dist/src/daemon/draw.d.ts +154 -0
- package/dist/src/daemon/git-evidence.d.ts +173 -0
- package/dist/src/daemon/git-evidence.js +1 -1
- package/dist/src/daemon/projection.d.ts +180 -0
- package/dist/src/daemon/prune.d.ts +207 -0
- package/dist/src/mcp/http.d.ts +113 -0
- package/dist/src/mcp/server.d.ts +265 -0
- package/dist/src/mcp/server.js +9 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/docs/adapter-api.md +106 -0
- package/docs/cli-reference.md +389 -36
- package/docs/codex-enforced-session.md +30 -0
- package/package.json +12 -2
- package/schema/codex-instance.schema.json +82 -0
- package/schema/event.schema.json +2 -1
- package/schema/fixtures/codex-instance/invalid/unpinned-codex-version.json +40 -0
- package/schema/fixtures/codex-instance/valid/canonical.json +40 -0
- package/schema/policy.schema.json +21 -1
- package/templates/codex/README.md +9 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution tokens (SPEC.md §10.4, §11) — the hard-enforcement primitive.
|
|
3
|
+
*
|
|
4
|
+
* An adapter holds credentials and "MUST require a valid, unexpired, single-use
|
|
5
|
+
* execution token bound to the action's `idempotency_key`" (SPEC.md §10.4).
|
|
6
|
+
* This module mints those tokens, decides whether a presented one is still good,
|
|
7
|
+
* and spends it. Everything it knows it derives from the append-only log.
|
|
8
|
+
*
|
|
9
|
+
* ## The five settled properties (human decision, 2026-08-06)
|
|
10
|
+
*
|
|
11
|
+
* 1. **Minted at grant.** There is exactly one mint site: the grant path of
|
|
12
|
+
* `core/gate.ts`'s {@link import("./gate.js").decide}. No other code path
|
|
13
|
+
* creates a token, so a token's existence *is* a human's yes.
|
|
14
|
+
* 2. **Single-use.** Consumption is an `execution.started` event, so the second
|
|
15
|
+
* attempt is refused by reading the log rather than by remembering anything.
|
|
16
|
+
* Double-spend detection is chain-native: it survives a process restart, a
|
|
17
|
+
* different machine, and a lost in-memory cache, because the evidence is the
|
|
18
|
+
* log itself.
|
|
19
|
+
* 3. **Bound to the request, its `idempotency_key`, and its `payload_hash`**
|
|
20
|
+
* (amended SPEC.md §10, A1). A token is looked up by `action_key` — the
|
|
21
|
+
* envelope's `idempotency_key` — and is compared against the hash on *that*
|
|
22
|
+
* action's grant. A token minted for action A therefore cannot be presented
|
|
23
|
+
* for action B: B's grant carries a different hash (or no grant at all), and
|
|
24
|
+
* the comparison fails. The third binding is to the bytes: a consumer states
|
|
25
|
+
* the hash of the payload it is about to execute, and anything but the hash
|
|
26
|
+
* the grant recorded is refused `payload-mismatch`. A grant approves specific
|
|
27
|
+
* bytes; changing them after grant requires a new request. A grant that
|
|
28
|
+
* recorded *no* bytes is refused too — see {@link consumeToken}.
|
|
29
|
+
* 4. **Hash-only in the log.** `approval.granted` carries
|
|
30
|
+
* `payload.token_sha256`; the raw token is returned to the caller of `decide`
|
|
31
|
+
* and to nothing else. Possession is proven by presenting a preimage. An
|
|
32
|
+
* attacker with a copy of the log — the one artifact this system deliberately
|
|
33
|
+
* makes durable, copyable, and auditable — gains no ability to execute.
|
|
34
|
+
* 5. **No separate token TTL in v0.1.** A token dies exactly three ways:
|
|
35
|
+
* execution ({@link consumeToken}), revocation (`approval.revoked`), and the
|
|
36
|
+
* lapse of the *parent request's* TTL (`defaults.approval_ttl`, measured from
|
|
37
|
+
* the `approval.requested` timestamp). Inventing a second, independent clock
|
|
38
|
+
* would create a state where a request is live and its token is not, which no
|
|
39
|
+
* operator could explain from the log.
|
|
40
|
+
*
|
|
41
|
+
* ## Why the parent TTL bounds a *granted* request
|
|
42
|
+
*
|
|
43
|
+
* `requestState` deliberately stops applying the TTL once a decision lands: an
|
|
44
|
+
* answered request is answered. Token liveness is a stricter question than
|
|
45
|
+
* request state, and the settled design gives an approval a shelf life. So
|
|
46
|
+
* {@link tokenStatus} re-applies `requestTs + approval_ttl` to a *granted*
|
|
47
|
+
* request and refuses with `token-expired` past it. This never mutates the
|
|
48
|
+
* derived request state and never writes anything — an aged-out token is simply
|
|
49
|
+
* not spendable, and re-requesting the action is the repair. (Contrast
|
|
50
|
+
* `core/gate.ts`, which materialises `approval.expired` when it discovers a
|
|
51
|
+
* lapse on an *undecided* request. That branch belongs to the gate and this
|
|
52
|
+
* module does not duplicate it: a granted request's `approval.expired` would
|
|
53
|
+
* claim the human never answered.)
|
|
54
|
+
*
|
|
55
|
+
* ## Where this module sits between APRV-16 and APRV-18
|
|
56
|
+
*
|
|
57
|
+
* `core/gate.ts` deliberately appends no `execution.*` event. {@link
|
|
58
|
+
* consumeToken} is the **only sanctioned appender of `execution.started` on the
|
|
59
|
+
* manual path**, and it appends one only after a live token verifies — closing
|
|
60
|
+
* the gap APRV-16 flagged, where a manual action's start event had no guard at
|
|
61
|
+
* all.
|
|
62
|
+
*
|
|
63
|
+
* The supervised/autonomous paths are **not** this function's business. Under
|
|
64
|
+
* the amended SPEC.md §6.3 they produce no approval events and therefore no
|
|
65
|
+
* token; their `execution.started` is appended by APRV-18's `approval run`
|
|
66
|
+
* wrapper, which is also where their budget is charged (see the consumption
|
|
67
|
+
* contract in `core/budgets.ts`). One rule, stated once: *manual actions spend a
|
|
68
|
+
* token here; non-manual actions start there.*
|
|
69
|
+
*
|
|
70
|
+
* ## The budgets contract
|
|
71
|
+
*
|
|
72
|
+
* The appended `execution.started` carries `payload.class` and
|
|
73
|
+
* `payload.est_cost_usd`, **copied from the grant's payload** rather than
|
|
74
|
+
* re-derived. `core/budgets.ts` counts an `execution.started` only when the
|
|
75
|
+
* window holds no `approval.granted` with the same `action_key`, so a manual
|
|
76
|
+
* action that is granted and then consumed is charged exactly once — the grant.
|
|
77
|
+
* Copying rather than re-deriving keeps the two records agreeing about what was
|
|
78
|
+
* authorized even if the task file changed in between.
|
|
79
|
+
*
|
|
80
|
+
* ## Time
|
|
81
|
+
*
|
|
82
|
+
* {@link tokenStatus} and {@link verifyToken} are pure and take `now` as a
|
|
83
|
+
* parameter: they answer a question and write nothing, so a caller asking "was
|
|
84
|
+
* this token live at time T?" is asking something legitimate. {@link
|
|
85
|
+
* consumeToken} *writes*, and `execution.started` is a gate-typed event, so
|
|
86
|
+
* amended SPEC.md §8 (A2) gives its timestamp to the runtime: no `ts`
|
|
87
|
+
* parameter, one read of {@link TokenOptions.clock} at the top, and a spender
|
|
88
|
+
* that cannot choose the moment its own TTL is judged at.
|
|
89
|
+
*/
|
|
90
|
+
import { type ClockOptions } from "./clock.js";
|
|
91
|
+
import { type AppendError, type AppendOptions, type EventRecord } from "./log.js";
|
|
92
|
+
import { type PolicyLoadResult } from "./policy-load.js";
|
|
93
|
+
import type { SandboxState } from "./sandbox.js";
|
|
94
|
+
import { type RequestState } from "./state.js";
|
|
95
|
+
/** Token entropy. 32 bytes = 256 bits, rendered as 64 lowercase hex chars. */
|
|
96
|
+
export declare const TOKEN_BYTES = 32;
|
|
97
|
+
/** The payload key carrying the token's digest, on both grant and start. */
|
|
98
|
+
export declare const TOKEN_HASH_FIELD = "token_sha256";
|
|
99
|
+
/** The payload key carrying the content binding (amended SPEC.md §6.2, §10). */
|
|
100
|
+
export declare const PAYLOAD_HASH_FIELD = "payload_hash";
|
|
101
|
+
/**
|
|
102
|
+
* Mint a token: 32 cryptographically random bytes as lowercase hex.
|
|
103
|
+
*
|
|
104
|
+
* `randomBytes` (CSPRNG), never `Math.random`. The value is a bearer credential
|
|
105
|
+
* for a real-world side effect; 256 bits makes guessing irrelevant next to every
|
|
106
|
+
* other attack in SPEC.md §11's "not defended" list.
|
|
107
|
+
*/
|
|
108
|
+
export declare function mintToken(): string;
|
|
109
|
+
/** The token's SHA-256, lowercase hex — the only form that ever reaches the log. */
|
|
110
|
+
export declare function tokenHash(token: string): string;
|
|
111
|
+
/**
|
|
112
|
+
* Constant-time comparison of two 64-hex digests.
|
|
113
|
+
*
|
|
114
|
+
* Both operands are digests, so a timing leak reveals a prefix of a *hash*, not
|
|
115
|
+
* of a token — but this CLI runs on a shared developer machine beside the very
|
|
116
|
+
* agents it polices, and an oracle that says "your first N hex digits were
|
|
117
|
+
* right" is the kind of affordance that should not exist at all. `timingSafeEqual`
|
|
118
|
+
* costs nothing here and removes the question.
|
|
119
|
+
*
|
|
120
|
+
* Digests are compared as decoded bytes: a malformed stored digest decodes to a
|
|
121
|
+
* different length, which `timingSafeEqual` rejects by throwing, so the length
|
|
122
|
+
* guard comes first and a malformed digest simply fails to match.
|
|
123
|
+
*/
|
|
124
|
+
export declare function digestsEqual(a: string, b: string): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* The token refusals proper — the closed set an agent branches on to learn *why*
|
|
127
|
+
* a token will not execute. Frozen public API, in the same sense the gate's
|
|
128
|
+
* codes and the exit codes are.
|
|
129
|
+
*
|
|
130
|
+
* The four death conditions are distinguishable on purpose: "you presented the
|
|
131
|
+
* wrong string", "this token was already spent", "a human took it back", and
|
|
132
|
+
* "it aged out" call for four different responses (fix the caller, stop
|
|
133
|
+
* retrying, escalate to the human, re-request).
|
|
134
|
+
*/
|
|
135
|
+
export declare const TOKEN_VERIFY_REFUSAL_CODES: readonly [
|
|
136
|
+
/** No grant governs this action key: never requested, awaiting, or rejected. */
|
|
137
|
+
"not-granted",
|
|
138
|
+
/** A grant exists, but the presented token is not its preimage. */
|
|
139
|
+
"token-mismatch",
|
|
140
|
+
/** The token was already spent: an `execution.started` exists for this key. */
|
|
141
|
+
"token-consumed",
|
|
142
|
+
/** The parent request's TTL lapsed. There is no separate token TTL. */
|
|
143
|
+
"token-expired",
|
|
144
|
+
/** A human withdrew the grant (`approval.revoked`). */
|
|
145
|
+
"token-revoked",
|
|
146
|
+
/**
|
|
147
|
+
* The bytes do not match (amended SPEC.md §10, A1). The grant recorded a
|
|
148
|
+
* `payload_hash` and the consumer presented a different one — or none at all,
|
|
149
|
+
* which is the same fact stated by omission: an executor that cannot say what
|
|
150
|
+
* it is about to run has not shown that it is running what was approved.
|
|
151
|
+
*
|
|
152
|
+
* Distinct from `token-mismatch` on purpose. That one says "you are not the
|
|
153
|
+
* party who was approved"; this one says "you are, but that is not what was
|
|
154
|
+
* approved", and the repair is different: request the new payload rather than
|
|
155
|
+
* hunt for a lost token.
|
|
156
|
+
*/
|
|
157
|
+
"payload-mismatch",
|
|
158
|
+
/**
|
|
159
|
+
* The grant was for a harness-executed request and minted no token
|
|
160
|
+
* (APRV-106). Nothing is wrong: the requesting process runs the command
|
|
161
|
+
* itself and never had a token to spend, so there is nothing to present here
|
|
162
|
+
* and nothing to recover. Distinct from `token-mismatch`, which says a
|
|
163
|
+
* digest exists and does not match, and from `not-granted`, which says no
|
|
164
|
+
* authorization exists at all — this one says the authorization exists, is
|
|
165
|
+
* complete, and is not the kind that is spent.
|
|
166
|
+
*/
|
|
167
|
+
"harness-executed"];
|
|
168
|
+
export type TokenVerifyRefusalCode = (typeof TOKEN_VERIFY_REFUSAL_CODES)[number];
|
|
169
|
+
/**
|
|
170
|
+
* Everything {@link consumeToken} can refuse: the verification codes plus the
|
|
171
|
+
* three log/append failures, whose names and meanings are borrowed verbatim from
|
|
172
|
+
* `core/gate.ts` so the CLI can map them onto the frozen exit table identically.
|
|
173
|
+
*/
|
|
174
|
+
export declare const TOKEN_REFUSAL_CODES: readonly ["not-granted", "token-mismatch", "token-consumed", "token-expired", "token-revoked", "payload-mismatch", "harness-executed", "class-human-only", "log-unreadable", "log-torn-tail", "log-corrupt", "append-failed"];
|
|
175
|
+
export type TokenRefusalCode = (typeof TOKEN_REFUSAL_CODES)[number];
|
|
176
|
+
/** Every token failure is one of these. Nothing here throws. */
|
|
177
|
+
export interface TokenRefusal {
|
|
178
|
+
ok: false;
|
|
179
|
+
code: TokenRefusalCode;
|
|
180
|
+
message: string;
|
|
181
|
+
/** The derived request state at refusal time, when one could be derived. */
|
|
182
|
+
state?: RequestState;
|
|
183
|
+
/** The seq of the record that produced the refusal (grant, start, revoke). */
|
|
184
|
+
seq?: number;
|
|
185
|
+
/** The underlying append error, when `code` is `append-failed`. */
|
|
186
|
+
append?: AppendError;
|
|
187
|
+
}
|
|
188
|
+
/** A live, unspent grant and everything a consumer needs to spend it. */
|
|
189
|
+
export interface TokenStatus {
|
|
190
|
+
ok: true;
|
|
191
|
+
actionKey: string;
|
|
192
|
+
/** The task id the grant names; `execution.started` requires it. */
|
|
193
|
+
task: string | null;
|
|
194
|
+
/** The `approval.granted` record's seq — the mint site, for audit. */
|
|
195
|
+
grantSeq: number;
|
|
196
|
+
/** The digest recorded at mint. The raw token is not stored anywhere. */
|
|
197
|
+
tokenSha256: string;
|
|
198
|
+
/** Copied from the grant payload, per the budgets consumption contract. */
|
|
199
|
+
class: string;
|
|
200
|
+
/**
|
|
201
|
+
* Canonical decimal USD string (APRV-121), copied from the grant and written
|
|
202
|
+
* verbatim onto `execution.started`. The value is hashed material at both
|
|
203
|
+
* ends, so it is carried as the string the grant recorded rather than parsed
|
|
204
|
+
* into a number and reserialized.
|
|
205
|
+
*/
|
|
206
|
+
est_cost_usd: string;
|
|
207
|
+
/**
|
|
208
|
+
* The bytes this grant approved (amended SPEC.md §10), or `null` for a grant
|
|
209
|
+
* that recorded none. Unreachable through the gate for a manual action —
|
|
210
|
+
* `request` refuses `payload-hash-required` — so `null` here means a log
|
|
211
|
+
* written by something other than this runtime, or one predating A1.
|
|
212
|
+
*
|
|
213
|
+
* `null` does not mean "unbound and therefore free": {@link consumeToken}
|
|
214
|
+
* refuses such a grant `payload-mismatch` and it can never be spent. This
|
|
215
|
+
* field is `string | null` so a *reader* (`approval token`, a channel) can
|
|
216
|
+
* report the fact; it is never a permission.
|
|
217
|
+
*/
|
|
218
|
+
payloadHash: string | null;
|
|
219
|
+
/** The `approval.requested` timestamp the TTL is measured from. */
|
|
220
|
+
requestTs: string | null;
|
|
221
|
+
}
|
|
222
|
+
export type TokenStatusResult = TokenStatus | TokenRefusal;
|
|
223
|
+
/**
|
|
224
|
+
* Is there a live, unspent token for `actionKey` — and what is its digest?
|
|
225
|
+
*
|
|
226
|
+
* Pure: no I/O, no clock. `now` is the moment the question is asked; `ttlMs` is
|
|
227
|
+
* `defaults.approval_ttl` as the policy loader parsed it, or `null` for a policy
|
|
228
|
+
* that declares no lapse (in which case a granted token stays spendable until it
|
|
229
|
+
* is used or revoked, exactly as an undecided request stays live).
|
|
230
|
+
*
|
|
231
|
+
* Check order, and why:
|
|
232
|
+
*
|
|
233
|
+
* 1. **Revoked**, then **expired-by-derivation**, then **anything not granted**.
|
|
234
|
+
* A withdrawn authorization and a lapsed one are different facts and get
|
|
235
|
+
* different codes; everything else — never requested, still awaiting,
|
|
236
|
+
* rejected — is `not-granted`, because from a token's point of view they are
|
|
237
|
+
* the same absence.
|
|
238
|
+
* 2. **The parent TTL, re-applied to the grant.** See the module header.
|
|
239
|
+
* 3. **The recorded digest.** A grant with no usable `token_sha256` is a grant
|
|
240
|
+
* minted before this module existed (or by something else); it cannot
|
|
241
|
+
* authenticate anything, so it fails closed as `token-mismatch`.
|
|
242
|
+
* 4. **Consumption.** Any `execution.started` for this action key spends it —
|
|
243
|
+
* matching digest or not. The narrow rule (same digest) is what makes
|
|
244
|
+
* double-spend detection chain-native; the broader rule (same action key)
|
|
245
|
+
* enforces SPEC.md §7's single-use idempotency key even against a start event
|
|
246
|
+
* that named no token, and both answer `token-consumed`.
|
|
247
|
+
*/
|
|
248
|
+
export declare function tokenStatus(records: EventRecord[], actionKey: string, now: string, ttlMs?: number | null): TokenStatusResult;
|
|
249
|
+
/**
|
|
250
|
+
* The raw token for `actionKey`, recovered from the log's `token_sealed` with
|
|
251
|
+
* the private key this machine holds — or `null`.
|
|
252
|
+
*
|
|
253
|
+
* `null` means "no token was delivered here", and it means it for every reason
|
|
254
|
+
* at once: the policy is `manual` and nothing was sealed, this is a different
|
|
255
|
+
* machine from the one that requested, the key file has already been unlinked
|
|
256
|
+
* because the token was spent, or the ciphertext does not authenticate. The
|
|
257
|
+
* caller's response is identical in all four cases — fall back to the raw token
|
|
258
|
+
* the granting surface printed — and distinguishing them would be an oracle for
|
|
259
|
+
* a decryption capability nobody should be probing.
|
|
260
|
+
*
|
|
261
|
+
* Recovering a minted token is not minting one. The token still exists only
|
|
262
|
+
* because a human granted it, still binds to the payload, and is still spendable
|
|
263
|
+
* exactly once; what this function replaces is the human carrying it in a
|
|
264
|
+
* clipboard. Nothing here consults, relaxes, or substitutes for
|
|
265
|
+
* {@link verifyToken}: the value returned goes on to be verified against the
|
|
266
|
+
* log's digest like any pasted one.
|
|
267
|
+
*
|
|
268
|
+
* Pure with respect to the LOG (it appends nothing) and reads exactly one file.
|
|
269
|
+
* Never throws.
|
|
270
|
+
*/
|
|
271
|
+
export declare function deliveredToken(records: readonly EventRecord[], actionKey: string, keyDir: string): string | null;
|
|
272
|
+
/**
|
|
273
|
+
* Does `presentedToken` authorize `actionKey` right now?
|
|
274
|
+
*
|
|
275
|
+
* Accepts **iff** all five hold: the latest cycle for the key derives as
|
|
276
|
+
* `granted`; the parent request's TTL has not lapsed; the grant has not been
|
|
277
|
+
* revoked; no `execution.started` has spent it; and `sha256(presentedToken)`
|
|
278
|
+
* equals the digest recorded on the grant, compared in constant time.
|
|
279
|
+
*
|
|
280
|
+
* `ttlMs` is the parsed `defaults.approval_ttl`. It is a parameter rather than a
|
|
281
|
+
* policy read because this function is pure — {@link consumeToken} and the CLI
|
|
282
|
+
* load the policy and hand it in, so a verification can be replayed from the log
|
|
283
|
+
* plus the policy that was in force.
|
|
284
|
+
*/
|
|
285
|
+
export declare function verifyToken(records: EventRecord[], actionKey: string, presentedToken: string, now: string, ttlMs?: number | null): TokenStatusResult;
|
|
286
|
+
/**
|
|
287
|
+
* Where to find the policy whose `approval_ttl` bounds the token — plus the two
|
|
288
|
+
* things a spend now carries that a status read does not.
|
|
289
|
+
*
|
|
290
|
+
* `ts` is not among them, and no longer a parameter of {@link consumeToken}:
|
|
291
|
+
* `execution.started` is a gate-typed event, so amended SPEC.md §8 gives its
|
|
292
|
+
* timestamp to the runtime at the write boundary ({@link ClockOptions}).
|
|
293
|
+
*/
|
|
294
|
+
export interface TokenOptions extends ClockOptions {
|
|
295
|
+
/** Schema directory, passed to the append's write-boundary validation. */
|
|
296
|
+
schemaDir?: string;
|
|
297
|
+
/** Directory to discover `APPROVAL.md` in. Ignored when `policyFile` is set. */
|
|
298
|
+
policyDir?: string;
|
|
299
|
+
/** An explicit policy file, overriding discovery. */
|
|
300
|
+
policyFile?: string;
|
|
301
|
+
/** Lock tuning for the append path. */
|
|
302
|
+
append?: AppendOptions;
|
|
303
|
+
/**
|
|
304
|
+
* The hash of the payload the caller is **about to execute** (amended
|
|
305
|
+
* SPEC.md §10, A1).
|
|
306
|
+
*
|
|
307
|
+
* "Adapters and `approval run` MUST recompute the hash of the payload they
|
|
308
|
+
* are about to execute and MUST refuse, with a distinct machine-readable
|
|
309
|
+
* reason (`payload-mismatch`), when it differs from the hash the grant
|
|
310
|
+
* recorded." That is this field: it is not read from the log, because a value
|
|
311
|
+
* read from the log would prove nothing — the point is that the executor
|
|
312
|
+
* states, independently, what it holds, and the runtime compares.
|
|
313
|
+
*
|
|
314
|
+
* REQUIRED for every spend. Under A1 every manual grant this runtime mints
|
|
315
|
+
* records a `payload_hash`, and a grant that somehow records none is refused
|
|
316
|
+
* outright rather than treated as unbound — so there is no case in which
|
|
317
|
+
* omitting this field succeeds. Omitting it is a mismatch.
|
|
318
|
+
*/
|
|
319
|
+
presentedPayloadHash?: string;
|
|
320
|
+
/**
|
|
321
|
+
* How many credential-bearing variables the executor withheld from the child
|
|
322
|
+
* it is about to spawn (APRV-205), recorded on the `execution.started` this
|
|
323
|
+
* spend appends.
|
|
324
|
+
*
|
|
325
|
+
* The manual path's copy of `ExecuteOptions.envStripped`, and it exists
|
|
326
|
+
* because the manual path's `execution.started` is written HERE rather than
|
|
327
|
+
* in `core/execute.ts`. A count recorded on one of the two start events and
|
|
328
|
+
* not the other would be a field an auditor could not rely on. A count, never
|
|
329
|
+
* a name and never a value.
|
|
330
|
+
*/
|
|
331
|
+
envStripped?: number;
|
|
332
|
+
/**
|
|
333
|
+
* The room the child ran in (APRV-193), recorded on the `execution.started`
|
|
334
|
+
* this spend appends. The manual path's copy of `ExecuteOptions.sandbox`, for
|
|
335
|
+
* the same reason the count above is: a field recorded on one of the two
|
|
336
|
+
* start events and not the other is a field an auditor cannot rely on.
|
|
337
|
+
*/
|
|
338
|
+
sandbox?: SandboxState;
|
|
339
|
+
}
|
|
340
|
+
export type ConsumeResult = {
|
|
341
|
+
ok: true;
|
|
342
|
+
record: EventRecord;
|
|
343
|
+
tokenSha256: string;
|
|
344
|
+
grantSeq: number;
|
|
345
|
+
} | TokenRefusal;
|
|
346
|
+
/** The parsed TTL, or `null` when the policy declares (or can declare) none. */
|
|
347
|
+
export declare function tokenTtlMs(options: TokenOptions): number | null;
|
|
348
|
+
/** The policy this module reads, loaded once per operation. */
|
|
349
|
+
export declare function tokenPolicy(options: TokenOptions): PolicyLoadResult;
|
|
350
|
+
/**
|
|
351
|
+
* Is `actionClass` reserved to human hands under `load` (APRV-185)?
|
|
352
|
+
*
|
|
353
|
+
* Returns the refusal to emit, or `null`. Shared by {@link consumeToken} and by
|
|
354
|
+
* the `approval token` verb, which report the same fact about the same class
|
|
355
|
+
* and must not word it two ways.
|
|
356
|
+
*
|
|
357
|
+
* The §7 irreversibility floor is deliberately not consulted: it raises to
|
|
358
|
+
* `manual` at most and can neither produce `human-only` nor remove it, so the
|
|
359
|
+
* grant's declared `reversible` — which this module does not carry anyway —
|
|
360
|
+
* cannot change this answer.
|
|
361
|
+
*/
|
|
362
|
+
export declare function humanOnlyClassRefusal(load: PolicyLoadResult, actionClass: string | null, whatWasRefused: string): TokenRefusal | null;
|
|
363
|
+
/**
|
|
364
|
+
* Verify every read-only condition of a token spend.
|
|
365
|
+
*
|
|
366
|
+
* Shared by {@link consumeToken} and adapter execution preflight. It appends
|
|
367
|
+
* nothing and grants no authority to act; `consumeToken` re-reads and repeats
|
|
368
|
+
* this check immediately before its compare-and-append.
|
|
369
|
+
*/
|
|
370
|
+
export type TokenSpendStatus = TokenStatus & {
|
|
371
|
+
task: string;
|
|
372
|
+
payloadHash: string;
|
|
373
|
+
};
|
|
374
|
+
export declare function verifyTokenSpend(records: EventRecord[], actionKey: string, presentedToken: string, now: string, load: PolicyLoadResult, presentedPayloadHash?: string): TokenSpendStatus | TokenRefusal;
|
|
375
|
+
/**
|
|
376
|
+
* Spend a token: verify it, then append `execution.started`.
|
|
377
|
+
*
|
|
378
|
+
* **This is the only sanctioned way to append `execution.started` for a manual
|
|
379
|
+
* action.** APRV-16 left that gap open deliberately — the gate appends no
|
|
380
|
+
* execution events — and this function closes it: on the manual path a start
|
|
381
|
+
* event now requires a live, verified, unspent token, so an agent cannot record
|
|
382
|
+
* an execution the human never authorized. Supervised and autonomous actions
|
|
383
|
+
* have no grant and therefore no token; their start event is APRV-18's `approval
|
|
384
|
+
* run` wrapper's job, and calling this for them correctly refuses `not-granted`.
|
|
385
|
+
*
|
|
386
|
+
* The payload is exactly `{class, est_cost_usd, token_sha256, payload_hash}`:
|
|
387
|
+
* the first two because `core/budgets.ts` meters authorization from them, the
|
|
388
|
+
* third because it is what makes the second consumption attempt refusable from
|
|
389
|
+
* the log alone, and the fourth because an auditor should be able to see from
|
|
390
|
+
* the log that what ran is what was approved. All four are copied from the
|
|
391
|
+
* grant, never re-derived. `payload_hash` is unconditional because a grant
|
|
392
|
+
* carrying none is refused (see below) rather than spent.
|
|
393
|
+
*
|
|
394
|
+
* Verification and append are made atomic by compare-and-append (APRV-20 finding
|
|
395
|
+
* B1): this function reads the log itself — never records handed in by a caller —
|
|
396
|
+
* and passes the head it read as `appendEvent`'s `expectedHead`. Two genuinely
|
|
397
|
+
* concurrent consumers of one token therefore cannot both start. Whichever takes
|
|
398
|
+
* the lockfile first appends `execution.started`; the loser finds the head moved
|
|
399
|
+
* under the lock and is refused `append-failed`/`head-moved` with nothing
|
|
400
|
+
* written. The loser is **not** retried here: re-reading would report
|
|
401
|
+
* `token-consumed`, but deciding to look again is the caller's call, and a core
|
|
402
|
+
* that silently retried would hide a double-spend attempt behind a tidy error.
|
|
403
|
+
*
|
|
404
|
+
* `actor` is not pre-validated: the event schema is the authority on actor
|
|
405
|
+
* shape, and a malformed one is refused at the write boundary as
|
|
406
|
+
* `append-failed`, with the schema's own error attached. One rule about actors,
|
|
407
|
+
* enforced in one place.
|
|
408
|
+
*/
|
|
409
|
+
export declare function consumeToken(logPath: string, actionKey: string, presentedToken: string, actor: string, options?: TokenOptions): ConsumeResult;
|
package/dist/src/core/token.js
CHANGED
|
@@ -449,6 +449,26 @@ export function humanOnlyClassRefusal(load, actionClass, whatWasRefused) {
|
|
|
449
449
|
return null;
|
|
450
450
|
return refuse("class-human-only", humanOnlyRefusal(actionClass, whatWasRefused));
|
|
451
451
|
}
|
|
452
|
+
export function verifyTokenSpend(records, actionKey, presentedToken, now, load, presentedPayloadHash) {
|
|
453
|
+
const verified = verifyToken(records, actionKey, presentedToken, now, load.ok ? load.durations.approvalTtlMs : null);
|
|
454
|
+
if (!verified.ok)
|
|
455
|
+
return verified;
|
|
456
|
+
const reserved = humanOnlyClassRefusal(load, verified.class, `the token for action ${actionKey}, granted at seq ${verified.grantSeq}, may not be spent and no execution.started was written`);
|
|
457
|
+
if (reserved !== null)
|
|
458
|
+
return reserved;
|
|
459
|
+
if (verified.payloadHash === null) {
|
|
460
|
+
return refuse("payload-mismatch", `the approval.granted record for ${actionKey} at seq ${verified.grantSeq} carries no payload_hash: it predates content binding, or was written by something other than this gate. Amended SPEC.md §6.2 makes the hash MUST for manual actions and §10 binds the token to it, so there is nothing here for an execution to be checked against and nothing that can be shown to be the approved bytes. This grant cannot be spent — revoke it and request the action again, which will bind to the payload.`, { state: "granted", seq: verified.grantSeq });
|
|
461
|
+
}
|
|
462
|
+
if (!isPayloadHash(presentedPayloadHash) || !digestsEqual(presentedPayloadHash, verified.payloadHash)) {
|
|
463
|
+
return refuse("payload-mismatch", presentedPayloadHash === undefined
|
|
464
|
+
? `the grant for ${actionKey} at seq ${verified.grantSeq} binds to payload_hash ${verified.payloadHash} and this consumer presented none. Amended SPEC.md §10: an executor MUST recompute the hash of the payload it is about to execute; a spend that cannot state its bytes cannot be shown to be executing the approved ones.`
|
|
465
|
+
: `the payload presented for ${actionKey} is not the one approved: the grant at seq ${verified.grantSeq} binds to ${verified.payloadHash}, this consumer presented ${JSON.stringify(presentedPayloadHash)}. A grant approves specific bytes; changing the payload after grant requires a new request. Nothing was appended and the token is still live.`, { state: "granted", seq: verified.grantSeq });
|
|
466
|
+
}
|
|
467
|
+
if (verified.task === null) {
|
|
468
|
+
return refuse("not-granted", `action ${actionKey} has a grant but no task id in its request cycle; execution.started requires one`, { state: "granted", seq: verified.grantSeq });
|
|
469
|
+
}
|
|
470
|
+
return { ...verified, task: verified.task, payloadHash: verified.payloadHash };
|
|
471
|
+
}
|
|
452
472
|
/**
|
|
453
473
|
* Spend a token: verify it, then append `execution.started`.
|
|
454
474
|
*
|
|
@@ -491,46 +511,9 @@ export function consumeToken(logPath, actionKey, presentedToken, actor, options
|
|
|
491
511
|
// One read of the policy for the whole spend: the TTL the verification
|
|
492
512
|
// applies and the class check below come from the same bytes.
|
|
493
513
|
const load = tokenPolicy(options);
|
|
494
|
-
const verified =
|
|
514
|
+
const verified = verifyTokenSpend(read.records, actionKey, presentedToken, ts, load, options.presentedPayloadHash);
|
|
495
515
|
if (!verified.ok)
|
|
496
516
|
return verified;
|
|
497
|
-
// APRV-185, amended SPEC.md §5.2. The grant exists and the token is the right
|
|
498
|
-
// one; the class it authorizes is one the policy now reserves to human hands,
|
|
499
|
-
// so it may not be spent. Checked immediately after verification and before
|
|
500
|
-
// the binding, because a token that cannot be spent at all should not send its
|
|
501
|
-
// holder off to reconcile payload hashes. Nothing is appended.
|
|
502
|
-
const reserved = humanOnlyClassRefusal(load, verified.class, `the token for action ${actionKey}, granted at seq ${verified.grantSeq}, may not be spent and no execution.started was written`);
|
|
503
|
-
if (reserved !== null)
|
|
504
|
-
return reserved;
|
|
505
|
-
// Content binding (amended SPEC.md §10, A1). A grant approves specific bytes,
|
|
506
|
-
// so the executor must say which bytes it holds and they must be the ones the
|
|
507
|
-
// human saw. Checked before the append and after token verification: a
|
|
508
|
-
// mismatch spends nothing, appends nothing, and leaves the token live — the
|
|
509
|
-
// repair is to request the new payload, not to hunt for the token.
|
|
510
|
-
//
|
|
511
|
-
// A grant that recorded NO binding is refused outright, not waved through.
|
|
512
|
-
// The current gate cannot produce one — `request` refuses
|
|
513
|
-
// `payload-hash-required` for every manual action — so such a record reached
|
|
514
|
-
// the log some other way: a hand-built line, or a log predating A1. Accepting
|
|
515
|
-
// it would make content binding bypassable by log construction, which is the
|
|
516
|
-
// one attack the binding exists to stop. Ambiguity resolves to the stricter
|
|
517
|
-
// path: the grant is permanently unspendable, and that is correct for an
|
|
518
|
-
// authorization this runtime could not have issued.
|
|
519
|
-
const presented = options.presentedPayloadHash;
|
|
520
|
-
if (verified.payloadHash === null) {
|
|
521
|
-
return refuse("payload-mismatch", `the approval.granted record for ${actionKey} at seq ${verified.grantSeq} carries no payload_hash: it predates content binding, or was written by something other than this gate. Amended SPEC.md §6.2 makes the hash MUST for manual actions and §10 binds the token to it, so there is nothing here for an execution to be checked against and nothing that can be shown to be the approved bytes. This grant cannot be spent — revoke it and request the action again, which will bind to the payload.`, { state: "granted", seq: verified.grantSeq });
|
|
522
|
-
}
|
|
523
|
-
if (!isPayloadHash(presented) || !digestsEqual(presented, verified.payloadHash)) {
|
|
524
|
-
return refuse("payload-mismatch", presented === undefined
|
|
525
|
-
? `the grant for ${actionKey} at seq ${verified.grantSeq} binds to payload_hash ${verified.payloadHash} and this consumer presented none. Amended SPEC.md §10: an executor MUST recompute the hash of the payload it is about to execute; a spend that cannot state its bytes cannot be shown to be executing the approved ones.`
|
|
526
|
-
: `the payload presented for ${actionKey} is not the one approved: the grant at seq ${verified.grantSeq} binds to ${verified.payloadHash}, this consumer presented ${JSON.stringify(presented)}. A grant approves specific bytes; changing the payload after grant requires a new request. Nothing was appended and the token is still live.`, { state: "granted", seq: verified.grantSeq });
|
|
527
|
-
}
|
|
528
|
-
if (verified.task === null) {
|
|
529
|
-
// `execution.started` requires `task` (event.schema.json). A granted action
|
|
530
|
-
// whose cycle names no task cannot produce a valid start event; refusing
|
|
531
|
-
// here says so in this module's vocabulary rather than as a schema failure.
|
|
532
|
-
return refuse("not-granted", `action ${actionKey} has a grant but no task id in its request cycle; execution.started requires one`, { state: "granted", seq: verified.grantSeq });
|
|
533
|
-
}
|
|
534
517
|
const appended = appendEvent(logPath, {
|
|
535
518
|
ts,
|
|
536
519
|
event: "execution.started",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/core/token.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/core/token.ts"],"names":[],"mappings":"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"}
|