@coderifts/agent-guard 8.1.1 → 8.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +83 -4
  2. package/dist/cjs/commit-observation.d.ts +50 -0
  3. package/dist/cjs/commit-observation.d.ts.map +1 -0
  4. package/dist/cjs/commit-observation.js +188 -0
  5. package/dist/cjs/commit-observation.js.map +1 -0
  6. package/dist/cjs/conditional-write.d.ts +2 -0
  7. package/dist/cjs/conditional-write.d.ts.map +1 -1
  8. package/dist/cjs/conditional-write.js +15 -4
  9. package/dist/cjs/conditional-write.js.map +1 -1
  10. package/dist/cjs/enforcement-gate.d.ts.map +1 -1
  11. package/dist/cjs/enforcement-gate.js +2 -1
  12. package/dist/cjs/enforcement-gate.js.map +1 -1
  13. package/dist/cjs/execute-tool-call.d.ts.map +1 -1
  14. package/dist/cjs/execute-tool-call.js +16 -0
  15. package/dist/cjs/execute-tool-call.js.map +1 -1
  16. package/dist/cjs/execution-proof.d.ts +11 -0
  17. package/dist/cjs/execution-proof.d.ts.map +1 -1
  18. package/dist/cjs/execution-proof.js +8 -0
  19. package/dist/cjs/execution-proof.js.map +1 -1
  20. package/dist/cjs/final-answer-proof.d.ts.map +1 -1
  21. package/dist/cjs/final-answer-proof.js +19 -0
  22. package/dist/cjs/final-answer-proof.js.map +1 -1
  23. package/dist/cjs/guard.d.ts.map +1 -1
  24. package/dist/cjs/guard.js +61 -28
  25. package/dist/cjs/guard.js.map +1 -1
  26. package/dist/cjs/index.d.ts +2 -1
  27. package/dist/cjs/index.d.ts.map +1 -1
  28. package/dist/cjs/index.js +8 -4
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/read-decision.d.ts +3 -1
  31. package/dist/cjs/read-decision.d.ts.map +1 -1
  32. package/dist/cjs/read-decision.js +44 -23
  33. package/dist/cjs/read-decision.js.map +1 -1
  34. package/dist/cjs/types.d.ts +25 -2
  35. package/dist/cjs/types.d.ts.map +1 -1
  36. package/dist/cjs/with-coderifts.d.ts +9 -2
  37. package/dist/cjs/with-coderifts.d.ts.map +1 -1
  38. package/dist/cjs/with-coderifts.js +6 -0
  39. package/dist/cjs/with-coderifts.js.map +1 -1
  40. package/dist/esm/commit-observation.d.ts +50 -0
  41. package/dist/esm/commit-observation.d.ts.map +1 -0
  42. package/dist/esm/commit-observation.js +185 -0
  43. package/dist/esm/commit-observation.js.map +1 -0
  44. package/dist/esm/conditional-write.d.ts +2 -0
  45. package/dist/esm/conditional-write.d.ts.map +1 -1
  46. package/dist/esm/conditional-write.js +15 -4
  47. package/dist/esm/conditional-write.js.map +1 -1
  48. package/dist/esm/enforcement-gate.d.ts.map +1 -1
  49. package/dist/esm/enforcement-gate.js +2 -1
  50. package/dist/esm/enforcement-gate.js.map +1 -1
  51. package/dist/esm/execute-tool-call.d.ts.map +1 -1
  52. package/dist/esm/execute-tool-call.js +16 -0
  53. package/dist/esm/execute-tool-call.js.map +1 -1
  54. package/dist/esm/execution-proof.d.ts +11 -0
  55. package/dist/esm/execution-proof.d.ts.map +1 -1
  56. package/dist/esm/execution-proof.js +8 -0
  57. package/dist/esm/execution-proof.js.map +1 -1
  58. package/dist/esm/final-answer-proof.d.ts.map +1 -1
  59. package/dist/esm/final-answer-proof.js +19 -0
  60. package/dist/esm/final-answer-proof.js.map +1 -1
  61. package/dist/esm/guard.d.ts.map +1 -1
  62. package/dist/esm/guard.js +61 -28
  63. package/dist/esm/guard.js.map +1 -1
  64. package/dist/esm/index.d.ts +2 -1
  65. package/dist/esm/index.d.ts.map +1 -1
  66. package/dist/esm/index.js +3 -1
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/read-decision.d.ts +3 -1
  69. package/dist/esm/read-decision.d.ts.map +1 -1
  70. package/dist/esm/read-decision.js +44 -23
  71. package/dist/esm/read-decision.js.map +1 -1
  72. package/dist/esm/types.d.ts +25 -2
  73. package/dist/esm/types.d.ts.map +1 -1
  74. package/dist/esm/with-coderifts.d.ts +9 -2
  75. package/dist/esm/with-coderifts.d.ts.map +1 -1
  76. package/dist/esm/with-coderifts.js +6 -0
  77. package/dist/esm/with-coderifts.js.map +1 -1
  78. package/package.json +1 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Fail-closed guard for AI agent tool calls — preflight contract changes before they execute.
4
4
 
5
- Security core **FROZEN** (agent-guard-api v1.0). Built on [`@coderifts/sdk`](https://www.npmjs.com/package/@coderifts/sdk) `^1.1.1`.
5
+ Security core **FROZEN** (agent-guard-api v1.0). Built on [`@coderifts/sdk`](https://www.npmjs.com/package/@coderifts/sdk) `^3.0.0`.
6
6
 
7
7
  ```bash
8
8
  npm install @coderifts/agent-guard @coderifts/sdk
@@ -123,6 +123,44 @@ Honesty: default enforce **refuses on observed execution-state drift**. It does
123
123
  close TOCTOU proper — measurement-to-commit and host-side unconditional writes remain;
124
124
  see Guarantees.
125
125
 
126
+ #### `requireCommitObservation` — T3 post-commit observation (guard@8.2 default ON)
127
+
128
+ T2 looks at the target immediately **before** the write. T3 looks at it **after**. Once the host
129
+ write returns, the guard re-reads the target and compares it to the authorized `after`:
130
+
131
+ - **filesystem adapters** — re-read the file through `node:fs`, sha256 it, compare to the
132
+ authorized `after` content.
133
+ - **API / DB / Registry adapters** — call the same `current_token()` reader that
134
+ `executeIfUnchanged` already requires, and compare it to the intended post-write token.
135
+
136
+ The result lands on every `GuardOutcome` arm and on `GuardExecutionProof` as
137
+ `commit_observation`, with one of four statuses:
138
+
139
+ | `status` | Meaning |
140
+ | --- | --- |
141
+ | `not_observed` | No reader was available, or observation was switched off. |
142
+ | `observed_match` | Content re-read after the write matched the authorized `after`. |
143
+ | `observed_drift` | What is there now is not what was authorized. |
144
+ | `observed_token_match` | Token-only adapter: the version token matched. Content was not compared. |
145
+
146
+ On content drift the guard re-runs preflight against the **observed** state and reports the
147
+ result under `commit_observation.blast`. `host_attestation` (`absent`,
148
+ `host_attested_committed`, `host_attested_refused`, `conflict`) is a **label the host supplies
149
+ on top of** the measurement — a host that says `committed` while the guard observed drift is
150
+ recorded as `conflict`, not as a pass.
151
+
152
+ **`enforced` is unchanged by T3.** `enforced` remains a pre-write fact: receipt-verified
153
+ `ALLOW`/`MONITOR` plus the T2 recheck. The drift event `commit_observed_drift` is
154
+ **report-only — it is not a permission gate.**
155
+
156
+ Default ON. Opt out with `requireCommitObservation: false`, which emits
157
+ `commit_observation_check_disabled`. Measured cost: **+0.087 ms/call** on filesystem adapters;
158
+ preflight re-runs only on drift.
159
+
160
+ Honesty (verbatim, and also on the machine proof as
161
+ `limits.commit_observation_is_observed_at_t3_not_atomic: true`):
162
+ `commit_observation is observed at T3, not atomic: another writer may act between write and observation; token-only adapters compare version token not content; host attestation is a host claim layered on the measurement`.
163
+
126
164
  > **Supply `artifacts[]` with content.** If the guard detects a contract change (e.g. from
127
165
  > `filesTouched`/`diff`) but you did **not** supply `artifacts[]` with `before`/`after`, it fails
128
166
  > closed **locally** with `outcome.verdict.cause === 'MISSING_ARTIFACT_CONTENT'` — the tool does not
@@ -165,6 +203,12 @@ const { tools, registry_report, composition_assurance } = withCodeRifts({
165
203
  // the guard — the composition can only protect the table it returns.
166
204
  ```
167
205
 
206
+ > **An absent `profile` is not `ENFORCING_STRICT`.** This entry-point call runs today's
207
+ > defaults: freshness, conditional-write and complete-coverage stay **opt-in**. Nothing here
208
+ > locks the fail-closed conjunction — see
209
+ > [Production enforcement](#production-enforcement-enforcing_strict--freshness--cas) for
210
+ > `profile: 'ENFORCING_STRICT'`, which locks those flags and aborts on a conflicting opt-down.
211
+
168
212
  Optional guard-policy fields on the same input are forwarded **unchanged** onto `GuardConfig` when
169
213
  present (absent = today’s defaults — no behavior change): `onEvent`, `monitoringSinkWired`,
170
214
  `resolvePriorContent`, `requireFreshness`, `allowStaleContext`, `requireConditionalWrite`, and
@@ -174,12 +218,47 @@ opt-down. Not TOCTOU closure (see **`requireExecutionStateMatch`** above).
174
218
 
175
219
  **`profile?: 'ENFORCING_STRICT'`** (guard@8.1, opt-in). Locks the fail-closed conjunction
176
220
  (`requireCoverage: 'COMPLETE'`, `requireFreshness: true`, `requireExecutionStateMatch: true`,
177
- `requireConditionalWrite: true`, `failOnUnguardedMutator: true`, `unknownToolPolicy: 'mutating'`).
221
+ `requireConditionalWrite: true`, `requireCommitObservation: true`, `failOnUnguardedMutator: true`,
222
+ `unknownToolPolicy: 'mutating'`).
178
223
  A conflicting opt-down **aborts construction** (`ENFORCING_STRICT cannot be weakened: <flag> conflicts`).
179
224
  Requires `resolvePriorContent` at construction. Does **not** claim host cannot register raw tools
180
225
  outside the returned table — residual `calls_outside_guarded_path_invisible`. Adapters
181
226
  (`withCodeRiftsOpenAI` / Anthropic / Gemini / LangGraph) still emit only the guarded list.
182
227
 
228
+ ### Production enforcement (`ENFORCING_STRICT` + freshness / CAS)
229
+
230
+ The `withCodeRifts` example above is the **entry point** (absent profile: freshness and
231
+ conditional-write stay opt-in). For production, lock the fail-closed conjunction with
232
+ `profile: 'ENFORCING_STRICT'` (shipped guard@8.1.0; current package 8.2.0). Construction
233
+ **aborts** if you opt down any locked flag or omit `resolvePriorContent`.
234
+
235
+ ```typescript
236
+ import { withCodeRifts } from '@coderifts/agent-guard';
237
+
238
+ const { tools, registry_report, composition_assurance, receipt_thread } = withCodeRifts({
239
+ tools: rawTools,
240
+ client,
241
+ operation: 'merge',
242
+ profile: 'ENFORCING_STRICT',
243
+ // Required under STRICT (abort at construction if missing). Host measures prior
244
+ // bytes for write-style freshness. The composition core does not read the filesystem;
245
+ // the FS token resolver and the T3 commit-observation adapters do (node:fs).
246
+ resolvePriorContent: ({ artifactId }) => readPrior(artifactId),
247
+ });
248
+ // register ONLY `tools`. Receipt carry-forward is default-on (`receipt_thread`).
249
+ ```
250
+
251
+ Honesty (do not over-claim):
252
+
253
+ - **Freshness** is ACTIVE only because STRICT sets `requireFreshness` **and** you supplied
254
+ `resolvePriorContent`. A resolver that returns stale or empty bytes is still your measurement.
255
+ - **CAS / conditional write** is a **host assertion** (`conditional_write: true` on the write).
256
+ This package never writes and cannot verify the swap. `requireConditionalWrite` refuses
257
+ `enforced: true` when the host does not report it. No atomic CAS at commit; T3 observes the
258
+ result after the write (not atomic).
259
+ - Host-invoked raw tools outside the returned table remain invisible
260
+ (`calls_outside_guarded_path_invisible`). `composition_assurance.inescapable_runtime` stays false.
261
+
183
262
  ### Final-answer proof block (ID645)
184
263
 
185
264
  When a call produces a machine `GuardExecutionProof` (`outcome.proof`), you can embed a
@@ -773,8 +852,8 @@ Pass both on `withCodeRifts({ …, onEvent, monitoringSinkWired: true })`, or on
773
852
  token) — this package never writes, and reports `conditional_write` as a host assertion it
774
853
  cannot verify. **`requireExecutionStateMatch`** (default `true`) refuses on observed
775
854
  execution-state drift (`EXECUTION_STATE_DRIFT`) or unmeasurable T2
776
- (`EXECUTION_STATE_UNMEASURABLE`). Opt-down: `'warn'` / `false`. Not a full TOCTOU
777
- closure (no `observed_token_at_commit` CAS). See the subsection above.
855
+ (`EXECUTION_STATE_UNMEASURABLE`). Opt-down: `'warn'` / `false`. No atomic CAS at commit;
856
+ T3 observes the result after the write (not atomic). See the subsection above.
778
857
  - **Retry-safe** — `executionAttempted` is the only safe-to-retry signal; a post-authorization throw
779
858
  is `executionAttempted:true` (the remote side effect may have landed).
780
859
  - **`enforced:true` only on a LIVE, receipt-verified `ALLOW`/`MONITOR`** — never on cached/LKG,
@@ -0,0 +1,50 @@
1
+ export declare function hashObservedContent(v: unknown): string;
2
+ export type CommitObservationStatus = 'not_observed' | 'observed_match' | 'observed_drift' | 'observed_token_match';
3
+ export type CommitHostAttestation = 'absent' | 'host_attested_committed' | 'host_attested_refused' | 'conflict';
4
+ export type CommitObservationBlast = {
5
+ compared: 'content' | 'token';
6
+ decision?: string;
7
+ execution_action?: string;
8
+ decision_id?: string | null;
9
+ unavailable?: boolean;
10
+ cause?: string;
11
+ };
12
+ export type CommitObservation = {
13
+ status: CommitObservationStatus;
14
+ observed_fp?: string;
15
+ expected_fp?: string;
16
+ token?: string;
17
+ observed_at: string;
18
+ host_attestation?: CommitHostAttestation;
19
+ blast?: CommitObservationBlast;
20
+ };
21
+ export type ObserveCommitCall = {
22
+ arguments?: unknown;
23
+ artifacts?: ReadonlyArray<{
24
+ id?: string;
25
+ after?: unknown;
26
+ }>;
27
+ filesTouched?: string[];
28
+ };
29
+ export type ObserveCommitPreflight = (artifacts: Array<{
30
+ id?: string;
31
+ type?: string;
32
+ before?: unknown;
33
+ after?: unknown;
34
+ }>) => Promise<{
35
+ ok: true;
36
+ response: unknown;
37
+ } | {
38
+ ok: false;
39
+ cause: string;
40
+ }>;
41
+ export type ObserveCommitInput = {
42
+ enabled: boolean;
43
+ call: ObserveCommitCall;
44
+ result?: unknown;
45
+ now: string;
46
+ preflightOnObserved?: ObserveCommitPreflight;
47
+ };
48
+ /** T3 measurement. Never throws. Does not write. Does not flip enforced. */
49
+ export declare function observeCommit(input: ObserveCommitInput): Promise<CommitObservation>;
50
+ //# sourceMappingURL=commit-observation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-observation.d.ts","sourceRoot":"","sources":["../../src/commit-observation.ts"],"names":[],"mappings":"AAqBA,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,MAAM,MAAM,uBAAuB,GAC/B,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;AAClF,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GAAG,yBAAyB,GAAG,uBAAuB,GAAG,UAAU,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,CACnC,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,KAChF,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC7E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IACzE,mBAAmB,CAAC,EAAE,sBAAsB,CAAC;CAC9C,CAAC;AAkEF,4EAA4E;AAC5E,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CASzF"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * T3 post-commit observation (ID781). Re-read after the host write; compare to
3
+ * authorized `after` (content) or intended post token (token-only adapters).
4
+ * OBSERVED — never verified/atomic. Does not change `enforced`. Host attestation
5
+ * is a label on the measurement, never a substitute.
6
+ */
7
+ 'use strict';
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.hashObservedContent = hashObservedContent;
10
+ exports.observeCommit = observeCommit;
11
+ const node_crypto_1 = require("node:crypto");
12
+ const node_fs_1 = require("node:fs");
13
+ const fs_js_1 = require("./cas-adapters/fs.js");
14
+ const api_js_1 = require("./cas-adapters/api.js");
15
+ const db_js_1 = require("./cas-adapters/db.js");
16
+ const registry_js_1 = require("./cas-adapters/registry.js");
17
+ const conditional_write_js_1 = require("./conditional-write.js");
18
+ /** Same specStr as execution-time-fingerprint.ts:25 (crbundle.v1 after-slot). */
19
+ function specStr(v) {
20
+ if (v == null)
21
+ return '';
22
+ return typeof v === 'string' ? v : JSON.stringify(v);
23
+ }
24
+ function hashObservedContent(v) {
25
+ return 'sha256:' + (0, node_crypto_1.createHash)('sha256').update(specStr(v), 'utf8').digest('hex');
26
+ }
27
+ function unobserved(now, host = 'absent') {
28
+ return { status: 'not_observed', observed_at: now, host_attestation: host };
29
+ }
30
+ function casStatus(result) {
31
+ const s = result && typeof result === 'object' ? result.status : null;
32
+ return s === 'committed' || s === 'refused' || s === 'committed_stale_detected' ? s : null;
33
+ }
34
+ function hostLabel(cas, drifted) {
35
+ if (cas == null)
36
+ return 'absent';
37
+ if (cas === 'refused')
38
+ return 'host_attested_refused';
39
+ if (cas === 'committed' && drifted)
40
+ return 'conflict';
41
+ if (cas === 'committed_stale_detected')
42
+ return drifted ? 'conflict' : 'host_attested_committed';
43
+ return 'host_attested_committed';
44
+ }
45
+ function casInner(result) {
46
+ if (!result || typeof result !== 'object')
47
+ return null;
48
+ const o = result;
49
+ if (o.status === 'committed' || o.status === 'committed_stale_detected') {
50
+ return o.result && typeof o.result === 'object' ? o.result : null;
51
+ }
52
+ return o;
53
+ }
54
+ function inferPath(call, result) {
55
+ const args = call.arguments && typeof call.arguments === 'object'
56
+ ? call.arguments : {};
57
+ if (typeof args.path === 'string' && args.path)
58
+ return args.path;
59
+ if (Array.isArray(call.filesTouched) && typeof call.filesTouched[0] === 'string' && call.filesTouched[0]) {
60
+ return call.filesTouched[0];
61
+ }
62
+ const inner = casInner(result);
63
+ return inner && typeof inner.path === 'string' && inner.path ? inner.path : null;
64
+ }
65
+ function casObservedToken(result) {
66
+ if (!result || typeof result !== 'object')
67
+ return null;
68
+ const o = result;
69
+ if (typeof o.observed_token === 'string' && o.observed_token)
70
+ return o.observed_token;
71
+ if (typeof o.post_commit_token === 'string' && o.post_commit_token)
72
+ return o.post_commit_token;
73
+ return null;
74
+ }
75
+ function intendedPostToken(result) {
76
+ const inner = casInner(result);
77
+ if (!inner)
78
+ return null;
79
+ if (typeof inner.new_etag === 'string' && inner.new_etag.trim())
80
+ return (0, api_js_1.createApiVersionToken)(inner.new_etag);
81
+ if (inner.new_version != null && String(inner.new_version).trim()) {
82
+ return (0, db_js_1.createDbVersionToken)(inner.new_version);
83
+ }
84
+ if (inner.new_token != null && String(inner.new_token).trim()) {
85
+ return (0, registry_js_1.createRegistryVersionToken)(inner.new_token);
86
+ }
87
+ if (typeof inner.written_content_hash === 'string' && /^[a-f0-9]{64}$/.test(inner.written_content_hash)) {
88
+ return inner.written_content_hash;
89
+ }
90
+ return null;
91
+ }
92
+ function authorizedAfter(artifacts) {
93
+ if (!Array.isArray(artifacts))
94
+ return undefined;
95
+ for (const a of artifacts) {
96
+ if (a && a.after !== undefined && a.after !== null)
97
+ return a.after;
98
+ }
99
+ return undefined;
100
+ }
101
+ /** T3 measurement. Never throws. Does not write. Does not flip enforced. */
102
+ async function observeCommit(input) {
103
+ const cas = casStatus(input.result);
104
+ const host0 = hostLabel(cas, false);
105
+ if (input.enabled !== true)
106
+ return unobserved(input.now, 'absent');
107
+ try {
108
+ return await observeInner(input, cas, host0);
109
+ }
110
+ catch {
111
+ return unobserved(input.now, host0);
112
+ }
113
+ }
114
+ async function observeInner(input, cas, host0) {
115
+ const now = input.now;
116
+ const expectedAfter = authorizedAfter(input.call.artifacts);
117
+ const filePath = inferPath(input.call, input.result);
118
+ let observedContent = null;
119
+ let token;
120
+ if (filePath && expectedAfter !== undefined) {
121
+ const fsTok = await (0, fs_js_1.createFsVersionToken)(filePath);
122
+ token = fsTok;
123
+ observedContent = fsTok === fs_js_1.FS_ABSENT_TOKEN ? '' : await node_fs_1.promises.readFile(filePath, 'utf8');
124
+ }
125
+ if (observedContent !== null && expectedAfter !== undefined) {
126
+ const observed_fp = hashObservedContent(observedContent);
127
+ const expected_fp = hashObservedContent(expectedAfter);
128
+ const match = observed_fp === expected_fp;
129
+ const obs = {
130
+ status: match ? 'observed_match' : 'observed_drift',
131
+ observed_fp, expected_fp, token, observed_at: now,
132
+ host_attestation: hostLabel(cas, !match),
133
+ };
134
+ if (!match)
135
+ obs.blast = await contentBlast(input, observedContent);
136
+ return obs;
137
+ }
138
+ const observedTok = casObservedToken(input.result);
139
+ const intended = intendedPostToken(input.result);
140
+ if (observedTok && intended) {
141
+ const tokenMatch = intended.length === 64 && !intended.includes(':')
142
+ ? (0, fs_js_1.fsTokenContentHash)(observedTok) === intended
143
+ : (0, conditional_write_js_1.tokensEqual)(observedTok, intended);
144
+ const obs = {
145
+ status: tokenMatch ? 'observed_token_match' : 'observed_drift',
146
+ token: observedTok, observed_at: now, host_attestation: hostLabel(cas, !tokenMatch),
147
+ };
148
+ if (!tokenMatch) {
149
+ obs.observed_fp = observedTok;
150
+ obs.expected_fp = intended;
151
+ obs.blast = { compared: 'token' };
152
+ }
153
+ return obs;
154
+ }
155
+ if (observedTok)
156
+ return { status: 'not_observed', token: observedTok, observed_at: now, host_attestation: host0 };
157
+ return unobserved(now, host0);
158
+ }
159
+ async function contentBlast(input, observedContent) {
160
+ const pf = input.preflightOnObserved;
161
+ if (typeof pf !== 'function')
162
+ return { compared: 'content' };
163
+ const arts = Array.isArray(input.call.artifacts)
164
+ ? input.call.artifacts.map((a) => ({ ...a, after: observedContent }))
165
+ : [{ after: observedContent }];
166
+ try {
167
+ const r = await pf(arts);
168
+ if (!r.ok)
169
+ return { compared: 'content', unavailable: true, cause: r.cause };
170
+ const raw = r.response;
171
+ const env = raw && typeof raw === 'object' && raw.decision_result
172
+ && typeof raw.decision_result === 'object'
173
+ ? raw.decision_result
174
+ : (raw && typeof raw === 'object' ? raw : null);
175
+ if (!env)
176
+ return { compared: 'content', unavailable: true };
177
+ return {
178
+ compared: 'content',
179
+ decision: typeof env.decision === 'string' ? env.decision : undefined,
180
+ execution_action: typeof env.execution_action === 'string' ? env.execution_action : undefined,
181
+ decision_id: typeof env.decision_id === 'string' ? env.decision_id : null,
182
+ };
183
+ }
184
+ catch (err) {
185
+ return { compared: 'content', unavailable: true, cause: err instanceof Error ? err.message : 'preflight_threw' };
186
+ }
187
+ }
188
+ //# sourceMappingURL=commit-observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-observation.js","sourceRoot":"","sources":["../../src/commit-observation.ts"],"names":[],"mappings":"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"}
@@ -101,6 +101,7 @@ export type ExecuteIfUnchangedOutcome<T> = {
101
101
  status: 'committed';
102
102
  result: T;
103
103
  version_token: VersionToken;
104
+ observed_token?: VersionToken | null;
104
105
  } | {
105
106
  status: 'refused';
106
107
  reason: 'stale_version_token';
@@ -112,6 +113,7 @@ export type ExecuteIfUnchangedOutcome<T> = {
112
113
  result: T;
113
114
  expected_token: VersionToken;
114
115
  post_commit_token: VersionToken | null;
116
+ observed_token?: VersionToken | null;
115
117
  };
116
118
  /**
117
119
  * Thrown from write() when the adapter aborts BEFORE applying the mutation
@@ -1 +1 @@
1
- {"version":3,"file":"conditional-write.d.ts","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditional-write.d.ts","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"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"}
@@ -148,20 +148,31 @@ async function executeIfUnchanged(args) {
148
148
  }
149
149
  throw err;
150
150
  }
151
+ // T3: always re-read current_token after write (same host reader executeIfUnchanged already required).
152
+ // Detection (opt-in) reuses this read — not a second I/O. Observation failure must not fail the write.
153
+ let observed_token = null;
154
+ try {
155
+ observed_token = await args.current_token();
156
+ }
157
+ catch (err) {
158
+ if (args.detect_stale_during_commit === true)
159
+ throw err;
160
+ observed_token = null;
161
+ }
151
162
  // Post-commit detection (best-effort honesty, not prevention).
152
163
  if (args.detect_stale_during_commit === true && typeof args.expected_after_commit === 'function') {
153
164
  const want = await args.expected_after_commit(result);
154
- const post = await args.current_token();
155
- if (!tokensEqual(want, post)) {
165
+ if (!tokensEqual(want, observed_token)) {
156
166
  return {
157
167
  status: 'committed_stale_detected',
158
168
  reason: 'stale_during_commit',
159
169
  result,
160
170
  expected_token: expected,
161
- post_commit_token: post == null ? null : post,
171
+ post_commit_token: observed_token,
172
+ observed_token,
162
173
  };
163
174
  }
164
175
  }
165
- return { status: 'committed', result, version_token: expected };
176
+ return { status: 'committed', result, version_token: expected, observed_token };
166
177
  }
167
178
  //# sourceMappingURL=conditional-write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conditional-write.js","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,YAAY,CAAC;;;AAkDb,kCAOC;AAkBD,gEAwCC;AASD,4DASC;AA+ED,gDAqDC;AAxND,0EAA0E;AAC1E,SAAgB,WAAW,CACzB,CAAkC,EAClC,CAAkC;IAElC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,GAAG,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IAClD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,0BAA0B,CAAC,KAI1C;IAKC,MAAM,yBAAyB,GAAG,KAAK,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEjE,MAAM,KAAK,GAA0B;QACnC,iBAAiB;QACjB,yBAAyB;QACzB,WAAW;KACZ,CAAC;IAEF,2FAA2F;IAC3F,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAG,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YACjD,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,CAAC;QACxD,CAAC;aAAM,IACL,GAAG,CAAC,iBAAiB;eAClB,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;eACzC,OAAO,GAAG,CAAC,iBAAiB,CAAC,aAAa,KAAK,QAAQ,EAC1D,CAAC;YACD,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC;QACnE,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAC7C,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,WAAW,IAAI,yBAAyB,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,4BAA4B,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,yFAAyF;AAC5E,QAAA,4BAA4B,GAAG,8CAA8C,CAAC;AAE3F;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,KAIxC;IACC,IAAI,KAAK,CAAC,uBAAuB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,oCAA4B,CAAC;AACtC,CAAC;AA8BD;;;;GAIG;AACH,MAAa,sBAAuB,SAAQ,KAAK;IACtC,aAAa,CAAsB;IAC5C,YAAY,aAAkC;QAC5C,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAPD,wDAOC;AA+BD;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CACtC,IAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,qBAAqB;YAC7B,cAAc,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC5D,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC3C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,qBAAqB;YAC7B,cAAc,EAAE,QAAQ;YACxB,aAAa,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;SAChD,CAAC;IACJ,CAAC;IAED,IAAI,MAAS,CAAC;IACd,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;YAC1C,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,qBAAqB;gBAC7B,cAAc,EAAE,QAAQ;gBACxB,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,+DAA+D;IAC/D,IAAI,IAAI,CAAC,0BAA0B,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACjG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,MAAM,EAAE,0BAA0B;gBAClC,MAAM,EAAE,qBAAqB;gBAC7B,MAAM;gBACN,cAAc,EAAE,QAAQ;gBACxB,iBAAiB,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;aAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"conditional-write.js","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,YAAY,CAAC;;;AAkDb,kCAOC;AAkBD,gEAwCC;AASD,4DASC;AAgFD,gDA+DC;AAnOD,0EAA0E;AAC1E,SAAgB,WAAW,CACzB,CAAkC,EAClC,CAAkC;IAElC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,GAAG,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IAClD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,0BAA0B,CAAC,KAI1C;IAKC,MAAM,yBAAyB,GAAG,KAAK,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEjE,MAAM,KAAK,GAA0B;QACnC,iBAAiB;QACjB,yBAAyB;QACzB,WAAW;KACZ,CAAC;IAEF,2FAA2F;IAC3F,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAG,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YACjD,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,CAAC;QACxD,CAAC;aAAM,IACL,GAAG,CAAC,iBAAiB;eAClB,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;eACzC,OAAO,GAAG,CAAC,iBAAiB,CAAC,aAAa,KAAK,QAAQ,EAC1D,CAAC;YACD,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC;QACnE,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAC7C,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,WAAW,IAAI,yBAAyB,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,4BAA4B,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,yFAAyF;AAC5E,QAAA,4BAA4B,GAAG,8CAA8C,CAAC;AAE3F;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,KAIxC;IACC,IAAI,KAAK,CAAC,uBAAuB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,oCAA4B,CAAC;AACtC,CAAC;AA+BD;;;;GAIG;AACH,MAAa,sBAAuB,SAAQ,KAAK;IACtC,aAAa,CAAsB;IAC5C,YAAY,aAAkC;QAC5C,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAPD,wDAOC;AA+BD;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CACtC,IAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,qBAAqB;YAC7B,cAAc,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC5D,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC3C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,qBAAqB;YAC7B,cAAc,EAAE,QAAQ;YACxB,aAAa,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;SAChD,CAAC;IACJ,CAAC;IAED,IAAI,MAAS,CAAC;IACd,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;YAC1C,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,qBAAqB;gBAC7B,cAAc,EAAE,QAAQ;gBACxB,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,uGAAuG;IACvG,uGAAuG;IACvG,IAAI,cAAc,GAAwB,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,0BAA0B,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC;QACxD,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,+DAA+D;IAC/D,IAAI,IAAI,CAAC,0BAA0B,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACjG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;YACvC,OAAO;gBACL,MAAM,EAAE,0BAA0B;gBAClC,MAAM,EAAE,qBAAqB;gBAC7B,MAAM;gBACN,cAAc,EAAE,QAAQ;gBACxB,iBAAiB,EAAE,cAAc;gBACjC,cAAc;aACf,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AAClF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"enforcement-gate.d.ts","sourceRoot":"","sources":["../../src/enforcement-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3D,KAAK,MAAM,GAAG,UAAU,GAAG,0BAA0B,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAoBpF,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAMnE;AAED,6FAA6F;AAC7F,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAKtE;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC/C;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,CAAA;CAAE,GACnE;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,eAAe,EAAE,MAAM,GAAG,MAAM,EAChC,aAAa,EAAE,QAAQ,EAAE,GACxB,UAAU,CAoEZ"}
1
+ {"version":3,"file":"enforcement-gate.d.ts","sourceRoot":"","sources":["../../src/enforcement-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3D,KAAK,MAAM,GAAG,UAAU,GAAG,0BAA0B,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAoBpF,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAMnE;AAED,6FAA6F;AAC7F,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAKtE;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC/C;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,CAAA;CAAE,GACnE;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,eAAe,EAAE,MAAM,GAAG,MAAM,EAChC,aAAa,EAAE,QAAQ,EAAE,GACxB,UAAU,CAqEZ"}
@@ -69,7 +69,8 @@ function computeBundleFingerprint(artifacts) {
69
69
  function evaluateEnvelope(response, envelope, executionAction, sentArtifacts) {
70
70
  const top = (response && typeof response === 'object') ? response : {};
71
71
  // 0. PRESENT-but-unrecognised action — before any decision map or reconciliation.
72
- // Missing action is not handled here (readDecision maps legacy missing → closed Action).
72
+ // Missing action is not handled here (readDecision maps legacy 1.0 missing → closed Action;
73
+ // v2 / unspecified missing EA is UNREADABLE_DECISION in readDecision, before this gate).
73
74
  const candidates = [executionAction, envelope.execution_action, top.execution_action];
74
75
  for (const cand of candidates) {
75
76
  if (cand === undefined || cand === null || cand === '')
@@ -1 +1 @@
1
- {"version":3,"file":"enforcement-gate.js","sourceRoot":"","sources":["../../src/enforcement-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enforcement-gate.js","sourceRoot":"","sources":["../../src/enforcement-gate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute-tool-call.d.ts","sourceRoot":"","sources":["../../src/execute-tool-call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute-tool-call.d.ts","sourceRoot":"","sources":["../../src/execute-tool-call.ts"],"names":[],"mappings":"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"}
@@ -79,6 +79,13 @@ const CW_NOT_REPORTED = Object.freeze({
79
79
  require_conditional_write: false,
80
80
  write_style: false,
81
81
  });
82
+ function notObserved() {
83
+ return {
84
+ status: 'not_observed',
85
+ observed_at: new Date().toISOString(),
86
+ host_attestation: 'absent',
87
+ };
88
+ }
82
89
  /**
83
90
  * Unknown tool name — typed refusal via binder no-result path.
84
91
  * Uses CONFIG_ERROR integrity UNAVAILABLE (not a fabricated ALLOW).
@@ -94,12 +101,14 @@ function unknownToolOutcome(toolName) {
94
101
  decisionMissing: true,
95
102
  unavailableCount: 1,
96
103
  };
104
+ const commit_observation = notObserved();
97
105
  const proof = (0, execution_proof_js_1.buildExecutionProof)({
98
106
  preflighted: false,
99
107
  executionAttempted: false,
100
108
  executed: false,
101
109
  enforced: false,
102
110
  verdict,
111
+ commitObservation: commit_observation,
103
112
  });
104
113
  // Annotate verdict for body text; proof already has verdict_kind.
105
114
  void toolName;
@@ -112,6 +121,7 @@ function unknownToolOutcome(toolName) {
112
121
  proof,
113
122
  freshness: FRESHNESS_NOT_CONFIGURED,
114
123
  conditional_write: CW_NOT_REPORTED,
124
+ commit_observation,
115
125
  };
116
126
  }
117
127
  /**
@@ -125,6 +135,7 @@ function wrapRawAsOutcome(result) {
125
135
  signals: ['dispatcher_passthrough'],
126
136
  detectorVersion: 'execute-tool-call',
127
137
  };
138
+ const commit_observation = notObserved();
128
139
  const proof = (0, execution_proof_js_1.buildExecutionProof)({
129
140
  preflighted: false,
130
141
  executionAttempted: true,
@@ -132,6 +143,7 @@ function wrapRawAsOutcome(result) {
132
143
  enforced: false,
133
144
  verdict,
134
145
  result,
146
+ commitObservation: commit_observation,
135
147
  });
136
148
  return {
137
149
  executionAttempted: true,
@@ -143,6 +155,7 @@ function wrapRawAsOutcome(result) {
143
155
  proof,
144
156
  freshness: FRESHNESS_NOT_CONFIGURED,
145
157
  conditional_write: CW_NOT_REPORTED,
158
+ commit_observation,
146
159
  };
147
160
  }
148
161
  function wrapThrownAsOutcome(error) {
@@ -152,6 +165,7 @@ function wrapThrownAsOutcome(error) {
152
165
  signals: ['dispatcher_passthrough_throw'],
153
166
  detectorVersion: 'execute-tool-call',
154
167
  };
168
+ const commit_observation = notObserved();
155
169
  const proof = (0, execution_proof_js_1.buildExecutionProof)({
156
170
  preflighted: false,
157
171
  executionAttempted: true,
@@ -159,6 +173,7 @@ function wrapThrownAsOutcome(error) {
159
173
  enforced: false,
160
174
  verdict,
161
175
  error,
176
+ commitObservation: commit_observation,
162
177
  });
163
178
  return {
164
179
  executionAttempted: true,
@@ -170,6 +185,7 @@ function wrapThrownAsOutcome(error) {
170
185
  proof,
171
186
  freshness: FRESHNESS_NOT_CONFIGURED,
172
187
  conditional_write: CW_NOT_REPORTED,
188
+ commit_observation,
173
189
  };
174
190
  }
175
191
  // ── Core: execute through table → GuardOutcome ───────────────────────────────