@sanning/proof 0.19.1 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +30 -29
  2. package/dist/agent-record.d.ts +62 -0
  3. package/dist/agent-record.js +527 -0
  4. package/dist/agent-schemas.generated.d.ts +15 -0
  5. package/dist/agent-schemas.generated.js +5759 -0
  6. package/dist/case-file.d.ts +32 -89
  7. package/dist/case-file.js +41 -93
  8. package/dist/case.d.ts +339 -822
  9. package/dist/case.js +667 -1160
  10. package/dist/chain.d.ts +19 -47
  11. package/dist/chain.js +78 -205
  12. package/dist/claims.d.ts +211 -0
  13. package/dist/claims.js +1081 -0
  14. package/dist/cli.d.ts +45 -68
  15. package/dist/cli.js +618 -1022
  16. package/dist/compose.js +23 -65
  17. package/dist/crypto.d.ts +7 -8
  18. package/dist/crypto.js +60 -147
  19. package/dist/declaration.d.ts +68 -194
  20. package/dist/declaration.js +175 -518
  21. package/dist/environment.d.ts +9 -30
  22. package/dist/environment.js +17 -66
  23. package/dist/evidence.d.ts +119 -160
  24. package/dist/evidence.js +744 -1103
  25. package/dist/exit-codes.d.ts +11 -27
  26. package/dist/exit-codes.js +24 -59
  27. package/dist/file-match.d.ts +33 -79
  28. package/dist/file-match.js +33 -69
  29. package/dist/grading.d.ts +98 -135
  30. package/dist/grading.js +224 -380
  31. package/dist/handoff.d.ts +62 -160
  32. package/dist/handoff.js +153 -393
  33. package/dist/index.d.ts +14 -10
  34. package/dist/index.js +60 -167
  35. package/dist/json-schema.d.ts +29 -0
  36. package/dist/json-schema.js +298 -0
  37. package/dist/merkle.js +16 -28
  38. package/dist/message-parts.d.ts +56 -212
  39. package/dist/message-parts.js +142 -502
  40. package/dist/side-content.d.ts +11 -22
  41. package/dist/side-content.js +22 -65
  42. package/dist/types.d.ts +17 -0
  43. package/dist/types.js +19 -5
  44. package/dist/verifier.d.ts +40 -114
  45. package/dist/verifier.js +196 -535
  46. package/dist/witness-cache.d.ts +24 -45
  47. package/dist/witness-cache.js +38 -81
  48. package/dist/witness-lookup.d.ts +36 -57
  49. package/dist/witness-lookup.js +89 -139
  50. package/dist/zip-reader.d.ts +18 -33
  51. package/dist/zip-reader.js +19 -34
  52. package/package.json +11 -3
  53. package/src/agent-record.ts +608 -0
  54. package/src/agent-schemas.generated.ts +5764 -0
  55. package/src/case-file.ts +45 -109
  56. package/src/case.ts +814 -1328
  57. package/src/chain.ts +85 -224
  58. package/src/claims.ts +1253 -0
  59. package/src/cli.ts +714 -1176
  60. package/src/compose.ts +33 -79
  61. package/src/crypto.ts +60 -147
  62. package/src/declaration.ts +219 -656
  63. package/src/environment.ts +17 -65
  64. package/src/evidence.ts +958 -1381
  65. package/src/exit-codes.ts +24 -63
  66. package/src/file-match.ts +40 -89
  67. package/src/grading.ts +287 -421
  68. package/src/handoff.ts +175 -427
  69. package/src/index.ts +131 -177
  70. package/src/json-schema.ts +295 -0
  71. package/src/merkle.ts +16 -28
  72. package/src/message-parts.ts +155 -533
  73. package/src/side-content.ts +25 -68
  74. package/src/types.ts +55 -36
  75. package/src/verifier.ts +202 -526
  76. package/src/witness-cache.ts +45 -94
  77. package/src/witness-lookup.ts +107 -177
  78. package/src/zip-reader.ts +20 -38
  79. package/vectors/README.md +52 -34
  80. package/vectors/agent-record.json +2175 -0
  81. package/vectors/case-file-index.json +1 -1
  82. package/vectors/case-split.json +2 -2
  83. package/vectors/chain-reading.json +3 -3
  84. package/vectors/file-match.json +285 -148
  85. package/vectors/jcs-reader.json +6 -6
  86. package/vectors/pack-grading.json +102 -25
  87. package/vectors/sandbox-evidence.json +573 -581
  88. package/vectors/stamp-on-chain.json +18 -18
  89. package/vectors/witness-cache.json +49 -49
  90. package/dist/agent-proof.d.ts +0 -28
  91. package/dist/agent-proof.js +0 -226
  92. package/dist/run-adapters.d.ts +0 -10
  93. package/dist/run-adapters.js +0 -35
  94. package/dist/run.d.ts +0 -209
  95. package/dist/run.js +0 -1405
  96. package/src/agent-proof.ts +0 -264
  97. package/src/run-adapters.ts +0 -44
  98. package/src/run.ts +0 -1598
@@ -0,0 +1,2175 @@
1
+ {
2
+ "rule": "agent-record",
3
+ "ruleVersion": 5,
4
+ "statement": "How a kernel reads one agent.* record on its own: agent-events.md section 10, steps 1 to 6. The type's namespace, where a record of one of the seven types outside the vocabulary reads failed only for a misplaced event_schema or a context.salt that is not 32 lowercase hex characters, then the version in extras.event_schema, then the type in that version's closed set, then the pinned schema, then the rules the schema cannot state. A version the kernel does not know reads incomplete and never verified. A record that breaks its vocabulary reads failed, with one reason. Each row gives the record and the reading.",
5
+ "cases": [
6
+ {
7
+ "name": "required-only",
8
+ "note": "Only the required fields.",
9
+ "record": {
10
+ "payload_version": 1,
11
+ "spec_version": "sanning.events/v2",
12
+ "event_type": "agent.tool_call.started",
13
+ "subject": {
14
+ "type": "agent",
15
+ "agent_id": "agent-a"
16
+ },
17
+ "previous_hash": "GENESIS",
18
+ "event": {
19
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
20
+ },
21
+ "context": {
22
+ "data_mode": "private",
23
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
24
+ },
25
+ "metadata": {
26
+ "run": {
27
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
28
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
29
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
30
+ "seq": 6,
31
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
32
+ },
33
+ "otel": {
34
+ "scope": {
35
+ "name": "@sanning/anchor-langchain",
36
+ "version": "1.0.0",
37
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
38
+ }
39
+ },
40
+ "gen_ai": {
41
+ "operation": {
42
+ "name": "execute_tool"
43
+ },
44
+ "tool": {
45
+ "call": {
46
+ "id": "call_0001"
47
+ }
48
+ }
49
+ }
50
+ },
51
+ "extras": {
52
+ "event_schema": "sanning.agent/1"
53
+ }
54
+ },
55
+ "expect": {
56
+ "verdict": "verified",
57
+ "findings": []
58
+ }
59
+ },
60
+ {
61
+ "name": "every-field",
62
+ "note": "Every field; the record declares a credential scrub, which a reader shows.",
63
+ "record": {
64
+ "payload_version": 1,
65
+ "spec_version": "sanning.events/v2",
66
+ "event_type": "agent.tool_call.started",
67
+ "subject": {
68
+ "type": "agent",
69
+ "agent_id": "agent-a",
70
+ "name": "quote-agent"
71
+ },
72
+ "previous_hash": "71547e237559add83f6c9279fdb5762eafee857a1060e2d97c0316a70cefb6ba",
73
+ "event": {
74
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a",
75
+ "content_length": 61,
76
+ "ref": "s3+opaque:f65487ec7519bf312794e8c07df739a958cb089be77c136111c6d87a8e639004"
77
+ },
78
+ "context": {
79
+ "data_mode": "private",
80
+ "salt": "688f84f8cdfc0700f6bfdf16aaf0daa7",
81
+ "case_id": "case-0001",
82
+ "chain_key": "chain-quote-agent",
83
+ "content_scrubbed": true,
84
+ "revealed": [
85
+ "gen_ai.tool.call.arguments"
86
+ ]
87
+ },
88
+ "metadata": {
89
+ "run": {
90
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
91
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
92
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
93
+ "seq": 6,
94
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4",
95
+ "source_type": "tool",
96
+ "name": "lookup_rate"
97
+ },
98
+ "otel": {
99
+ "scope": {
100
+ "name": "@sanning/anchor-langchain",
101
+ "version": "1.0.0",
102
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
103
+ },
104
+ "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
105
+ "span_id": "00f067aa0ba902b7"
106
+ },
107
+ "gen_ai": {
108
+ "operation": {
109
+ "name": "execute_tool"
110
+ },
111
+ "agent": {
112
+ "version": "2.3.0"
113
+ },
114
+ "conversation": {
115
+ "id": "thread-0001"
116
+ },
117
+ "tool": {
118
+ "name": "lookup_rate",
119
+ "call": {
120
+ "id": "call_0001",
121
+ "arguments": {
122
+ "currency": "EUR"
123
+ }
124
+ }
125
+ }
126
+ }
127
+ },
128
+ "extras": {
129
+ "event_schema": "sanning.agent/1"
130
+ }
131
+ },
132
+ "expect": {
133
+ "verdict": "verified",
134
+ "findings": [
135
+ "content_scrubbed"
136
+ ]
137
+ }
138
+ },
139
+ {
140
+ "name": "unknown-minor",
141
+ "note": "sanning.agent/1.1.",
142
+ "record": {
143
+ "payload_version": 1,
144
+ "spec_version": "sanning.events/v2",
145
+ "event_type": "agent.tool_call.started",
146
+ "subject": {
147
+ "type": "agent",
148
+ "agent_id": "agent-a"
149
+ },
150
+ "previous_hash": "GENESIS",
151
+ "event": {
152
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
153
+ },
154
+ "context": {
155
+ "data_mode": "private",
156
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
157
+ },
158
+ "metadata": {
159
+ "run": {
160
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
161
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
162
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
163
+ "seq": 6,
164
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
165
+ },
166
+ "otel": {
167
+ "scope": {
168
+ "name": "@sanning/anchor-langchain",
169
+ "version": "1.0.0",
170
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
171
+ }
172
+ },
173
+ "gen_ai": {
174
+ "operation": {
175
+ "name": "execute_tool"
176
+ },
177
+ "tool": {
178
+ "call": {
179
+ "id": "call_0001"
180
+ }
181
+ }
182
+ }
183
+ },
184
+ "extras": {
185
+ "event_schema": "sanning.agent/1.1"
186
+ }
187
+ },
188
+ "expect": {
189
+ "verdict": "incomplete",
190
+ "reason": "event_schema_unknown",
191
+ "at": "/extras/event_schema",
192
+ "reasons": [
193
+ {
194
+ "reason": "event_schema_unknown",
195
+ "at": "/extras/event_schema"
196
+ }
197
+ ],
198
+ "findings": []
199
+ }
200
+ },
201
+ {
202
+ "name": "unknown-major",
203
+ "note": "sanning.agent/2.",
204
+ "record": {
205
+ "payload_version": 1,
206
+ "spec_version": "sanning.events/v2",
207
+ "event_type": "agent.tool_call.started",
208
+ "subject": {
209
+ "type": "agent",
210
+ "agent_id": "agent-a"
211
+ },
212
+ "previous_hash": "GENESIS",
213
+ "event": {
214
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
215
+ },
216
+ "context": {
217
+ "data_mode": "private",
218
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
219
+ },
220
+ "metadata": {
221
+ "run": {
222
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
223
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
224
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
225
+ "seq": 6,
226
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
227
+ },
228
+ "otel": {
229
+ "scope": {
230
+ "name": "@sanning/anchor-langchain",
231
+ "version": "1.0.0",
232
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
233
+ }
234
+ },
235
+ "gen_ai": {
236
+ "operation": {
237
+ "name": "execute_tool"
238
+ },
239
+ "tool": {
240
+ "call": {
241
+ "id": "call_0001"
242
+ }
243
+ }
244
+ }
245
+ },
246
+ "extras": {
247
+ "event_schema": "sanning.agent/2"
248
+ }
249
+ },
250
+ "expect": {
251
+ "verdict": "incomplete",
252
+ "reason": "event_schema_unknown",
253
+ "at": "/extras/event_schema",
254
+ "reasons": [
255
+ {
256
+ "reason": "event_schema_unknown",
257
+ "at": "/extras/event_schema"
258
+ }
259
+ ],
260
+ "findings": []
261
+ }
262
+ },
263
+ {
264
+ "name": "unknown-major-unknown-type",
265
+ "note": "A version this kernel does not know, with a type it does not know: the version is read first.",
266
+ "record": {
267
+ "payload_version": 1,
268
+ "spec_version": "sanning.events/v2",
269
+ "event_type": "agent.plan.started",
270
+ "subject": {
271
+ "type": "agent",
272
+ "agent_id": "agent-a"
273
+ },
274
+ "previous_hash": "GENESIS",
275
+ "event": {
276
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
277
+ },
278
+ "context": {
279
+ "data_mode": "private",
280
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
281
+ },
282
+ "metadata": {
283
+ "run": {
284
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
285
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
286
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
287
+ "seq": 6,
288
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
289
+ },
290
+ "otel": {
291
+ "scope": {
292
+ "name": "@sanning/anchor-langchain",
293
+ "version": "1.0.0",
294
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
295
+ }
296
+ },
297
+ "gen_ai": {
298
+ "operation": {
299
+ "name": "execute_tool"
300
+ },
301
+ "tool": {
302
+ "call": {
303
+ "id": "call_0001"
304
+ }
305
+ }
306
+ }
307
+ },
308
+ "extras": {
309
+ "event_schema": "sanning.agent/2"
310
+ }
311
+ },
312
+ "expect": {
313
+ "verdict": "incomplete",
314
+ "reason": "event_schema_unknown",
315
+ "at": "/extras/event_schema",
316
+ "reasons": [
317
+ {
318
+ "reason": "event_schema_unknown",
319
+ "at": "/extras/event_schema"
320
+ }
321
+ ],
322
+ "findings": []
323
+ }
324
+ },
325
+ {
326
+ "name": "version-minor-zero",
327
+ "note": "sanning.agent/1.0 is not a spelling of sanning.agent/1.",
328
+ "record": {
329
+ "payload_version": 1,
330
+ "spec_version": "sanning.events/v2",
331
+ "event_type": "agent.tool_call.started",
332
+ "subject": {
333
+ "type": "agent",
334
+ "agent_id": "agent-a"
335
+ },
336
+ "previous_hash": "GENESIS",
337
+ "event": {
338
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
339
+ },
340
+ "context": {
341
+ "data_mode": "private",
342
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
343
+ },
344
+ "metadata": {
345
+ "run": {
346
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
347
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
348
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
349
+ "seq": 6,
350
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
351
+ },
352
+ "otel": {
353
+ "scope": {
354
+ "name": "@sanning/anchor-langchain",
355
+ "version": "1.0.0",
356
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
357
+ }
358
+ },
359
+ "gen_ai": {
360
+ "operation": {
361
+ "name": "execute_tool"
362
+ },
363
+ "tool": {
364
+ "call": {
365
+ "id": "call_0001"
366
+ }
367
+ }
368
+ }
369
+ },
370
+ "extras": {
371
+ "event_schema": "sanning.agent/1.0"
372
+ }
373
+ },
374
+ "expect": {
375
+ "verdict": "failed",
376
+ "reason": "event_schema_invalid",
377
+ "at": "/extras/event_schema",
378
+ "reasons": [
379
+ {
380
+ "reason": "event_schema_invalid",
381
+ "at": "/extras/event_schema"
382
+ }
383
+ ],
384
+ "findings": []
385
+ }
386
+ },
387
+ {
388
+ "name": "version-trailing-newline",
389
+ "note": "The whole string is the version: a final newline is not ignored.",
390
+ "record": {
391
+ "payload_version": 1,
392
+ "spec_version": "sanning.events/v2",
393
+ "event_type": "agent.tool_call.started",
394
+ "subject": {
395
+ "type": "agent",
396
+ "agent_id": "agent-a"
397
+ },
398
+ "previous_hash": "GENESIS",
399
+ "event": {
400
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
401
+ },
402
+ "context": {
403
+ "data_mode": "private",
404
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
405
+ },
406
+ "metadata": {
407
+ "run": {
408
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
409
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
410
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
411
+ "seq": 6,
412
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
413
+ },
414
+ "otel": {
415
+ "scope": {
416
+ "name": "@sanning/anchor-langchain",
417
+ "version": "1.0.0",
418
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
419
+ }
420
+ },
421
+ "gen_ai": {
422
+ "operation": {
423
+ "name": "execute_tool"
424
+ },
425
+ "tool": {
426
+ "call": {
427
+ "id": "call_0001"
428
+ }
429
+ }
430
+ }
431
+ },
432
+ "extras": {
433
+ "event_schema": "sanning.agent/1\n"
434
+ }
435
+ },
436
+ "expect": {
437
+ "verdict": "failed",
438
+ "reason": "event_schema_invalid",
439
+ "at": "/extras/event_schema",
440
+ "reasons": [
441
+ {
442
+ "reason": "event_schema_invalid",
443
+ "at": "/extras/event_schema"
444
+ }
445
+ ],
446
+ "findings": []
447
+ }
448
+ },
449
+ {
450
+ "name": "version-non-ascii-digit",
451
+ "note": "ARABIC-INDIC DIGIT ONE is not a digit of the version.",
452
+ "record": {
453
+ "payload_version": 1,
454
+ "spec_version": "sanning.events/v2",
455
+ "event_type": "agent.tool_call.started",
456
+ "subject": {
457
+ "type": "agent",
458
+ "agent_id": "agent-a"
459
+ },
460
+ "previous_hash": "GENESIS",
461
+ "event": {
462
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
463
+ },
464
+ "context": {
465
+ "data_mode": "private",
466
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
467
+ },
468
+ "metadata": {
469
+ "run": {
470
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
471
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
472
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
473
+ "seq": 6,
474
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
475
+ },
476
+ "otel": {
477
+ "scope": {
478
+ "name": "@sanning/anchor-langchain",
479
+ "version": "1.0.0",
480
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
481
+ }
482
+ },
483
+ "gen_ai": {
484
+ "operation": {
485
+ "name": "execute_tool"
486
+ },
487
+ "tool": {
488
+ "call": {
489
+ "id": "call_0001"
490
+ }
491
+ }
492
+ }
493
+ },
494
+ "extras": {
495
+ "event_schema": "sanning.agent/\u0661"
496
+ }
497
+ },
498
+ "expect": {
499
+ "verdict": "failed",
500
+ "reason": "event_schema_invalid",
501
+ "at": "/extras/event_schema",
502
+ "reasons": [
503
+ {
504
+ "reason": "event_schema_invalid",
505
+ "at": "/extras/event_schema"
506
+ }
507
+ ],
508
+ "findings": []
509
+ }
510
+ },
511
+ {
512
+ "name": "version-missing",
513
+ "note": "An agent.* record names its version.",
514
+ "record": {
515
+ "payload_version": 1,
516
+ "spec_version": "sanning.events/v2",
517
+ "event_type": "agent.tool_call.started",
518
+ "subject": {
519
+ "type": "agent",
520
+ "agent_id": "agent-a"
521
+ },
522
+ "previous_hash": "GENESIS",
523
+ "event": {
524
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
525
+ },
526
+ "context": {
527
+ "data_mode": "private",
528
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
529
+ },
530
+ "metadata": {
531
+ "run": {
532
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
533
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
534
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
535
+ "seq": 6,
536
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
537
+ },
538
+ "otel": {
539
+ "scope": {
540
+ "name": "@sanning/anchor-langchain",
541
+ "version": "1.0.0",
542
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
543
+ }
544
+ },
545
+ "gen_ai": {
546
+ "operation": {
547
+ "name": "execute_tool"
548
+ },
549
+ "tool": {
550
+ "call": {
551
+ "id": "call_0001"
552
+ }
553
+ }
554
+ }
555
+ },
556
+ "extras": {}
557
+ },
558
+ "expect": {
559
+ "verdict": "failed",
560
+ "reason": "event_schema_missing",
561
+ "at": "/extras/event_schema",
562
+ "reasons": [
563
+ {
564
+ "reason": "event_schema_missing",
565
+ "at": "/extras/event_schema"
566
+ }
567
+ ],
568
+ "findings": []
569
+ }
570
+ },
571
+ {
572
+ "name": "type-builder-defined",
573
+ "note": "A type no version defines, outside the agent namespace.",
574
+ "record": {
575
+ "payload_version": 1,
576
+ "spec_version": "sanning.events/v2",
577
+ "event_type": "myapp.tool_call",
578
+ "subject": {
579
+ "type": "agent",
580
+ "agent_id": "agent-a"
581
+ },
582
+ "previous_hash": "GENESIS",
583
+ "event": {
584
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
585
+ },
586
+ "context": {
587
+ "data_mode": "private",
588
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
589
+ },
590
+ "metadata": {
591
+ "run": {
592
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
593
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
594
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
595
+ "seq": 6,
596
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
597
+ },
598
+ "otel": {
599
+ "scope": {
600
+ "name": "@sanning/anchor-langchain",
601
+ "version": "1.0.0",
602
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
603
+ }
604
+ },
605
+ "gen_ai": {
606
+ "operation": {
607
+ "name": "execute_tool"
608
+ },
609
+ "tool": {
610
+ "call": {
611
+ "id": "call_0001"
612
+ }
613
+ }
614
+ }
615
+ },
616
+ "extras": {
617
+ "event_schema": "sanning.agent/1"
618
+ }
619
+ },
620
+ "expect": {
621
+ "verdict": "failed",
622
+ "reason": "event_type_not_in_set",
623
+ "at": "/event_type",
624
+ "reasons": [
625
+ {
626
+ "reason": "event_type_not_in_set",
627
+ "at": "/event_type"
628
+ }
629
+ ],
630
+ "findings": []
631
+ }
632
+ },
633
+ {
634
+ "name": "type-retired-handoff",
635
+ "note": "handoff.sent left the set: its name is agent.handoff.sent.",
636
+ "record": {
637
+ "payload_version": 1,
638
+ "spec_version": "sanning.events/v2",
639
+ "event_type": "handoff.sent",
640
+ "subject": {
641
+ "type": "agent",
642
+ "agent_id": "agent-a"
643
+ },
644
+ "previous_hash": "GENESIS",
645
+ "event": {
646
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
647
+ },
648
+ "context": {
649
+ "data_mode": "private",
650
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
651
+ },
652
+ "metadata": {
653
+ "run": {
654
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
655
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
656
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
657
+ "seq": 6,
658
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
659
+ },
660
+ "otel": {
661
+ "scope": {
662
+ "name": "@sanning/anchor-langchain",
663
+ "version": "1.0.0",
664
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
665
+ }
666
+ },
667
+ "gen_ai": {
668
+ "operation": {
669
+ "name": "execute_tool"
670
+ },
671
+ "tool": {
672
+ "call": {
673
+ "id": "call_0001"
674
+ }
675
+ }
676
+ }
677
+ },
678
+ "extras": {
679
+ "event_schema": "sanning.agent/1"
680
+ }
681
+ },
682
+ "expect": {
683
+ "verdict": "failed",
684
+ "reason": "event_type_not_in_set",
685
+ "at": "/event_type",
686
+ "reasons": [
687
+ {
688
+ "reason": "event_type_not_in_set",
689
+ "at": "/event_type"
690
+ }
691
+ ],
692
+ "findings": []
693
+ }
694
+ },
695
+ {
696
+ "name": "type-unknown-agent",
697
+ "note": "An agent.* type sanning.agent/1 does not define.",
698
+ "record": {
699
+ "payload_version": 1,
700
+ "spec_version": "sanning.events/v2",
701
+ "event_type": "agent.plan.started",
702
+ "subject": {
703
+ "type": "agent",
704
+ "agent_id": "agent-a"
705
+ },
706
+ "previous_hash": "GENESIS",
707
+ "event": {
708
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
709
+ },
710
+ "context": {
711
+ "data_mode": "private",
712
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
713
+ },
714
+ "metadata": {
715
+ "run": {
716
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
717
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
718
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
719
+ "seq": 6,
720
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
721
+ },
722
+ "otel": {
723
+ "scope": {
724
+ "name": "@sanning/anchor-langchain",
725
+ "version": "1.0.0",
726
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
727
+ }
728
+ },
729
+ "gen_ai": {
730
+ "operation": {
731
+ "name": "execute_tool"
732
+ },
733
+ "tool": {
734
+ "call": {
735
+ "id": "call_0001"
736
+ }
737
+ }
738
+ }
739
+ },
740
+ "extras": {
741
+ "event_schema": "sanning.agent/1"
742
+ }
743
+ },
744
+ "expect": {
745
+ "verdict": "failed",
746
+ "reason": "event_type_not_in_set",
747
+ "at": "/event_type",
748
+ "reasons": [
749
+ {
750
+ "reason": "event_type_not_in_set",
751
+ "at": "/event_type"
752
+ }
753
+ ],
754
+ "findings": []
755
+ }
756
+ },
757
+ {
758
+ "name": "type-trailing-space",
759
+ "note": "Names compare exactly.",
760
+ "record": {
761
+ "payload_version": 1,
762
+ "spec_version": "sanning.events/v2",
763
+ "event_type": "agent.tool_call.started ",
764
+ "subject": {
765
+ "type": "agent",
766
+ "agent_id": "agent-a"
767
+ },
768
+ "previous_hash": "GENESIS",
769
+ "event": {
770
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
771
+ },
772
+ "context": {
773
+ "data_mode": "private",
774
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
775
+ },
776
+ "metadata": {
777
+ "run": {
778
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
779
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
780
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
781
+ "seq": 6,
782
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
783
+ },
784
+ "otel": {
785
+ "scope": {
786
+ "name": "@sanning/anchor-langchain",
787
+ "version": "1.0.0",
788
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
789
+ }
790
+ },
791
+ "gen_ai": {
792
+ "operation": {
793
+ "name": "execute_tool"
794
+ },
795
+ "tool": {
796
+ "call": {
797
+ "id": "call_0001"
798
+ }
799
+ }
800
+ }
801
+ },
802
+ "extras": {
803
+ "event_schema": "sanning.agent/1"
804
+ }
805
+ },
806
+ "expect": {
807
+ "verdict": "failed",
808
+ "reason": "event_type_not_in_set",
809
+ "at": "/event_type",
810
+ "reasons": [
811
+ {
812
+ "reason": "event_type_not_in_set",
813
+ "at": "/event_type"
814
+ }
815
+ ],
816
+ "findings": []
817
+ }
818
+ },
819
+ {
820
+ "name": "outside-the-vocabulary",
821
+ "note": "A runner record is read by run-records.md: no verdict here.",
822
+ "record": {
823
+ "payload_version": 1,
824
+ "spec_version": "sanning.events/v2",
825
+ "event_type": "runner.run_opened",
826
+ "subject": {
827
+ "type": "agent",
828
+ "agent_id": "agent-a"
829
+ },
830
+ "previous_hash": "GENESIS",
831
+ "event": {
832
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
833
+ },
834
+ "context": {
835
+ "data_mode": "private",
836
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
837
+ },
838
+ "metadata": {
839
+ "run": {
840
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
841
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
842
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
843
+ "seq": 6,
844
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
845
+ },
846
+ "otel": {
847
+ "scope": {
848
+ "name": "@sanning/anchor-langchain",
849
+ "version": "1.0.0",
850
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
851
+ }
852
+ },
853
+ "gen_ai": {
854
+ "operation": {
855
+ "name": "execute_tool"
856
+ },
857
+ "tool": {
858
+ "call": {
859
+ "id": "call_0001"
860
+ }
861
+ }
862
+ }
863
+ }
864
+ },
865
+ "expect": {
866
+ "verdict": null,
867
+ "findings": [
868
+ "not_an_agent_record"
869
+ ]
870
+ }
871
+ },
872
+ {
873
+ "name": "outside-salt-well-formed",
874
+ "note": "A runner record whose salt is 32 lowercase hex characters: no verdict here.",
875
+ "record": {
876
+ "payload_version": 1,
877
+ "spec_version": "sanning.events/v2",
878
+ "event_type": "runner.egress",
879
+ "subject": {
880
+ "type": "agent",
881
+ "agent_id": "agent-a"
882
+ },
883
+ "previous_hash": "GENESIS",
884
+ "event": {
885
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
886
+ },
887
+ "context": {
888
+ "salt": "0123456789abcdef0123456789abcdef"
889
+ },
890
+ "metadata": {
891
+ "run": {
892
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
893
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
894
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
895
+ "seq": 6,
896
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
897
+ },
898
+ "otel": {
899
+ "scope": {
900
+ "name": "@sanning/anchor-langchain",
901
+ "version": "1.0.0",
902
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
903
+ }
904
+ },
905
+ "gen_ai": {
906
+ "operation": {
907
+ "name": "execute_tool"
908
+ },
909
+ "tool": {
910
+ "call": {
911
+ "id": "call_0001"
912
+ }
913
+ }
914
+ }
915
+ }
916
+ },
917
+ "expect": {
918
+ "verdict": null,
919
+ "findings": [
920
+ "not_an_agent_record"
921
+ ]
922
+ }
923
+ },
924
+ {
925
+ "name": "outside-salt-null",
926
+ "note": "A salt written as null is present, and in the wrong form.",
927
+ "record": {
928
+ "payload_version": 1,
929
+ "spec_version": "sanning.events/v2",
930
+ "event_type": "runner.egress",
931
+ "subject": {
932
+ "type": "agent",
933
+ "agent_id": "agent-a"
934
+ },
935
+ "previous_hash": "GENESIS",
936
+ "event": {
937
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
938
+ },
939
+ "context": {
940
+ "salt": null
941
+ },
942
+ "metadata": {
943
+ "run": {
944
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
945
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
946
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
947
+ "seq": 6,
948
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
949
+ },
950
+ "otel": {
951
+ "scope": {
952
+ "name": "@sanning/anchor-langchain",
953
+ "version": "1.0.0",
954
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
955
+ }
956
+ },
957
+ "gen_ai": {
958
+ "operation": {
959
+ "name": "execute_tool"
960
+ },
961
+ "tool": {
962
+ "call": {
963
+ "id": "call_0001"
964
+ }
965
+ }
966
+ }
967
+ }
968
+ },
969
+ "expect": {
970
+ "verdict": "failed",
971
+ "reason": "bad_value",
972
+ "at": "/context/salt",
973
+ "reasons": [
974
+ {
975
+ "reason": "bad_value",
976
+ "at": "/context/salt"
977
+ }
978
+ ],
979
+ "findings": []
980
+ }
981
+ },
982
+ {
983
+ "name": "outside-salt-number",
984
+ "note": "A salt is a string.",
985
+ "record": {
986
+ "payload_version": 1,
987
+ "spec_version": "sanning.events/v2",
988
+ "event_type": "runner.egress",
989
+ "subject": {
990
+ "type": "agent",
991
+ "agent_id": "agent-a"
992
+ },
993
+ "previous_hash": "GENESIS",
994
+ "event": {
995
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
996
+ },
997
+ "context": {
998
+ "salt": 1
999
+ },
1000
+ "metadata": {
1001
+ "run": {
1002
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1003
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1004
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1005
+ "seq": 6,
1006
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1007
+ },
1008
+ "otel": {
1009
+ "scope": {
1010
+ "name": "@sanning/anchor-langchain",
1011
+ "version": "1.0.0",
1012
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1013
+ }
1014
+ },
1015
+ "gen_ai": {
1016
+ "operation": {
1017
+ "name": "execute_tool"
1018
+ },
1019
+ "tool": {
1020
+ "call": {
1021
+ "id": "call_0001"
1022
+ }
1023
+ }
1024
+ }
1025
+ }
1026
+ },
1027
+ "expect": {
1028
+ "verdict": "failed",
1029
+ "reason": "bad_value",
1030
+ "at": "/context/salt",
1031
+ "reasons": [
1032
+ {
1033
+ "reason": "bad_value",
1034
+ "at": "/context/salt"
1035
+ }
1036
+ ],
1037
+ "findings": []
1038
+ }
1039
+ },
1040
+ {
1041
+ "name": "outside-salt-upper-case",
1042
+ "note": "A salt is lowercase hex.",
1043
+ "record": {
1044
+ "payload_version": 1,
1045
+ "spec_version": "sanning.events/v2",
1046
+ "event_type": "runner.egress",
1047
+ "subject": {
1048
+ "type": "agent",
1049
+ "agent_id": "agent-a"
1050
+ },
1051
+ "previous_hash": "GENESIS",
1052
+ "event": {
1053
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1054
+ },
1055
+ "context": {
1056
+ "salt": "0123456789ABCDEF0123456789ABCDEF"
1057
+ },
1058
+ "metadata": {
1059
+ "run": {
1060
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1061
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1062
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1063
+ "seq": 6,
1064
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1065
+ },
1066
+ "otel": {
1067
+ "scope": {
1068
+ "name": "@sanning/anchor-langchain",
1069
+ "version": "1.0.0",
1070
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1071
+ }
1072
+ },
1073
+ "gen_ai": {
1074
+ "operation": {
1075
+ "name": "execute_tool"
1076
+ },
1077
+ "tool": {
1078
+ "call": {
1079
+ "id": "call_0001"
1080
+ }
1081
+ }
1082
+ }
1083
+ }
1084
+ },
1085
+ "expect": {
1086
+ "verdict": "failed",
1087
+ "reason": "bad_value",
1088
+ "at": "/context/salt",
1089
+ "reasons": [
1090
+ {
1091
+ "reason": "bad_value",
1092
+ "at": "/context/salt"
1093
+ }
1094
+ ],
1095
+ "findings": []
1096
+ }
1097
+ },
1098
+ {
1099
+ "name": "outside-salt-trailing-newline",
1100
+ "note": "The pattern matches the whole string: a salt with a final newline is not a salt.",
1101
+ "record": {
1102
+ "payload_version": 1,
1103
+ "spec_version": "sanning.events/v2",
1104
+ "event_type": "runner.egress",
1105
+ "subject": {
1106
+ "type": "agent",
1107
+ "agent_id": "agent-a"
1108
+ },
1109
+ "previous_hash": "GENESIS",
1110
+ "event": {
1111
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1112
+ },
1113
+ "context": {
1114
+ "salt": "0123456789abcdef0123456789abcdef\n"
1115
+ },
1116
+ "metadata": {
1117
+ "run": {
1118
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1119
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1120
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1121
+ "seq": 6,
1122
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1123
+ },
1124
+ "otel": {
1125
+ "scope": {
1126
+ "name": "@sanning/anchor-langchain",
1127
+ "version": "1.0.0",
1128
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1129
+ }
1130
+ },
1131
+ "gen_ai": {
1132
+ "operation": {
1133
+ "name": "execute_tool"
1134
+ },
1135
+ "tool": {
1136
+ "call": {
1137
+ "id": "call_0001"
1138
+ }
1139
+ }
1140
+ }
1141
+ }
1142
+ },
1143
+ "expect": {
1144
+ "verdict": "failed",
1145
+ "reason": "bad_value",
1146
+ "at": "/context/salt",
1147
+ "reasons": [
1148
+ {
1149
+ "reason": "bad_value",
1150
+ "at": "/context/salt"
1151
+ }
1152
+ ],
1153
+ "findings": []
1154
+ }
1155
+ },
1156
+ {
1157
+ "name": "outside-salt-31-characters",
1158
+ "note": "A salt is exactly 32 characters.",
1159
+ "record": {
1160
+ "payload_version": 1,
1161
+ "spec_version": "sanning.events/v2",
1162
+ "event_type": "runner.egress",
1163
+ "subject": {
1164
+ "type": "agent",
1165
+ "agent_id": "agent-a"
1166
+ },
1167
+ "previous_hash": "GENESIS",
1168
+ "event": {
1169
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1170
+ },
1171
+ "context": {
1172
+ "salt": "0123456789abcdef0123456789abcde"
1173
+ },
1174
+ "metadata": {
1175
+ "run": {
1176
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1177
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1178
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1179
+ "seq": 6,
1180
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1181
+ },
1182
+ "otel": {
1183
+ "scope": {
1184
+ "name": "@sanning/anchor-langchain",
1185
+ "version": "1.0.0",
1186
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1187
+ }
1188
+ },
1189
+ "gen_ai": {
1190
+ "operation": {
1191
+ "name": "execute_tool"
1192
+ },
1193
+ "tool": {
1194
+ "call": {
1195
+ "id": "call_0001"
1196
+ }
1197
+ }
1198
+ }
1199
+ }
1200
+ },
1201
+ "expect": {
1202
+ "verdict": "failed",
1203
+ "reason": "bad_value",
1204
+ "at": "/context/salt",
1205
+ "reasons": [
1206
+ {
1207
+ "reason": "bad_value",
1208
+ "at": "/context/salt"
1209
+ }
1210
+ ],
1211
+ "findings": []
1212
+ }
1213
+ },
1214
+ {
1215
+ "name": "outside-salt-after-misplaced-version",
1216
+ "note": "event_schema is read before the salt.",
1217
+ "record": {
1218
+ "payload_version": 1,
1219
+ "spec_version": "sanning.events/v2",
1220
+ "event_type": "runner.egress",
1221
+ "subject": {
1222
+ "type": "agent",
1223
+ "agent_id": "agent-a"
1224
+ },
1225
+ "previous_hash": "GENESIS",
1226
+ "event": {
1227
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1228
+ },
1229
+ "context": {
1230
+ "salt": null
1231
+ },
1232
+ "metadata": {
1233
+ "run": {
1234
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1235
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1236
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1237
+ "seq": 6,
1238
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1239
+ },
1240
+ "otel": {
1241
+ "scope": {
1242
+ "name": "@sanning/anchor-langchain",
1243
+ "version": "1.0.0",
1244
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1245
+ }
1246
+ },
1247
+ "gen_ai": {
1248
+ "operation": {
1249
+ "name": "execute_tool"
1250
+ },
1251
+ "tool": {
1252
+ "call": {
1253
+ "id": "call_0001"
1254
+ }
1255
+ }
1256
+ }
1257
+ },
1258
+ "extras": {
1259
+ "event_schema": "sanning.agent/1"
1260
+ }
1261
+ },
1262
+ "expect": {
1263
+ "verdict": "failed",
1264
+ "reason": "event_schema_misplaced",
1265
+ "at": "/extras/event_schema",
1266
+ "reasons": [
1267
+ {
1268
+ "reason": "event_schema_misplaced",
1269
+ "at": "/extras/event_schema"
1270
+ }
1271
+ ],
1272
+ "findings": []
1273
+ }
1274
+ },
1275
+ {
1276
+ "name": "outside-context-not-an-object",
1277
+ "note": "A context that is not an object carries no salt: no verdict here.",
1278
+ "record": {
1279
+ "payload_version": 1,
1280
+ "spec_version": "sanning.events/v2",
1281
+ "event_type": "runner.egress",
1282
+ "subject": {
1283
+ "type": "agent",
1284
+ "agent_id": "agent-a"
1285
+ },
1286
+ "previous_hash": "GENESIS",
1287
+ "event": {
1288
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1289
+ },
1290
+ "context": "salt",
1291
+ "metadata": {
1292
+ "run": {
1293
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1294
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1295
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1296
+ "seq": 6,
1297
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1298
+ },
1299
+ "otel": {
1300
+ "scope": {
1301
+ "name": "@sanning/anchor-langchain",
1302
+ "version": "1.0.0",
1303
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1304
+ }
1305
+ },
1306
+ "gen_ai": {
1307
+ "operation": {
1308
+ "name": "execute_tool"
1309
+ },
1310
+ "tool": {
1311
+ "call": {
1312
+ "id": "call_0001"
1313
+ }
1314
+ }
1315
+ }
1316
+ }
1317
+ },
1318
+ "expect": {
1319
+ "verdict": null,
1320
+ "findings": [
1321
+ "not_an_agent_record"
1322
+ ]
1323
+ }
1324
+ },
1325
+ {
1326
+ "name": "unknown-field-three-levels-down",
1327
+ "note": "A member no schema names, at metadata.gen_ai.tool.call.",
1328
+ "record": {
1329
+ "payload_version": 1,
1330
+ "spec_version": "sanning.events/v2",
1331
+ "event_type": "agent.tool_call.started",
1332
+ "subject": {
1333
+ "type": "agent",
1334
+ "agent_id": "agent-a"
1335
+ },
1336
+ "previous_hash": "GENESIS",
1337
+ "event": {
1338
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1339
+ },
1340
+ "context": {
1341
+ "data_mode": "private",
1342
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
1343
+ },
1344
+ "metadata": {
1345
+ "run": {
1346
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1347
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1348
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1349
+ "seq": 6,
1350
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1351
+ },
1352
+ "otel": {
1353
+ "scope": {
1354
+ "name": "@sanning/anchor-langchain",
1355
+ "version": "1.0.0",
1356
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1357
+ }
1358
+ },
1359
+ "gen_ai": {
1360
+ "operation": {
1361
+ "name": "execute_tool"
1362
+ },
1363
+ "tool": {
1364
+ "call": {
1365
+ "id": "call_0001",
1366
+ "note": "x"
1367
+ }
1368
+ }
1369
+ }
1370
+ },
1371
+ "extras": {
1372
+ "event_schema": "sanning.agent/1"
1373
+ }
1374
+ },
1375
+ "expect": {
1376
+ "verdict": "failed",
1377
+ "reason": "unknown_field",
1378
+ "at": "/metadata/gen_ai/tool/call/note",
1379
+ "reasons": [
1380
+ {
1381
+ "reason": "unknown_field",
1382
+ "at": "/metadata/gen_ai/tool/call/note"
1383
+ }
1384
+ ],
1385
+ "findings": []
1386
+ }
1387
+ },
1388
+ {
1389
+ "name": "missing-field",
1390
+ "note": "metadata.run is required.",
1391
+ "record": {
1392
+ "payload_version": 1,
1393
+ "spec_version": "sanning.events/v2",
1394
+ "event_type": "agent.tool_call.started",
1395
+ "subject": {
1396
+ "type": "agent",
1397
+ "agent_id": "agent-a"
1398
+ },
1399
+ "previous_hash": "GENESIS",
1400
+ "event": {
1401
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1402
+ },
1403
+ "context": {
1404
+ "data_mode": "private",
1405
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
1406
+ },
1407
+ "metadata": {
1408
+ "otel": {
1409
+ "scope": {
1410
+ "name": "@sanning/anchor-langchain",
1411
+ "version": "1.0.0",
1412
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1413
+ }
1414
+ },
1415
+ "gen_ai": {
1416
+ "operation": {
1417
+ "name": "execute_tool"
1418
+ },
1419
+ "tool": {
1420
+ "call": {
1421
+ "id": "call_0001"
1422
+ }
1423
+ }
1424
+ }
1425
+ },
1426
+ "extras": {
1427
+ "event_schema": "sanning.agent/1"
1428
+ }
1429
+ },
1430
+ "expect": {
1431
+ "verdict": "failed",
1432
+ "reason": "missing_field",
1433
+ "at": "/metadata/run",
1434
+ "reasons": [
1435
+ {
1436
+ "reason": "missing_field",
1437
+ "at": "/metadata/run"
1438
+ }
1439
+ ],
1440
+ "findings": []
1441
+ }
1442
+ },
1443
+ {
1444
+ "name": "null-for-an-object",
1445
+ "note": "A member written as null is present, and run does not admit null.",
1446
+ "record": {
1447
+ "payload_version": 1,
1448
+ "spec_version": "sanning.events/v2",
1449
+ "event_type": "agent.tool_call.started",
1450
+ "subject": {
1451
+ "type": "agent",
1452
+ "agent_id": "agent-a"
1453
+ },
1454
+ "previous_hash": "GENESIS",
1455
+ "event": {
1456
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1457
+ },
1458
+ "context": {
1459
+ "data_mode": "private",
1460
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
1461
+ },
1462
+ "metadata": {
1463
+ "run": null,
1464
+ "otel": {
1465
+ "scope": {
1466
+ "name": "@sanning/anchor-langchain",
1467
+ "version": "1.0.0",
1468
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1469
+ }
1470
+ },
1471
+ "gen_ai": {
1472
+ "operation": {
1473
+ "name": "execute_tool"
1474
+ },
1475
+ "tool": {
1476
+ "call": {
1477
+ "id": "call_0001"
1478
+ }
1479
+ }
1480
+ }
1481
+ },
1482
+ "extras": {
1483
+ "event_schema": "sanning.agent/1"
1484
+ }
1485
+ },
1486
+ "expect": {
1487
+ "verdict": "failed",
1488
+ "reason": "bad_value",
1489
+ "at": "/metadata/run",
1490
+ "reasons": [
1491
+ {
1492
+ "reason": "bad_value",
1493
+ "at": "/metadata/run"
1494
+ }
1495
+ ],
1496
+ "findings": []
1497
+ }
1498
+ },
1499
+ {
1500
+ "name": "id-trailing-newline",
1501
+ "note": "A pattern matches the whole string: an id with a final newline is not an id.",
1502
+ "record": {
1503
+ "payload_version": 1,
1504
+ "spec_version": "sanning.events/v2",
1505
+ "event_type": "agent.tool_call.started",
1506
+ "subject": {
1507
+ "type": "agent",
1508
+ "agent_id": "agent-a",
1509
+ "name": "quote-agent"
1510
+ },
1511
+ "previous_hash": "71547e237559add83f6c9279fdb5762eafee857a1060e2d97c0316a70cefb6ba",
1512
+ "event": {
1513
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a",
1514
+ "content_length": 61,
1515
+ "ref": "s3+opaque:f65487ec7519bf312794e8c07df739a958cb089be77c136111c6d87a8e639004"
1516
+ },
1517
+ "context": {
1518
+ "data_mode": "private",
1519
+ "salt": "688f84f8cdfc0700f6bfdf16aaf0daa7",
1520
+ "case_id": "case-0001\n",
1521
+ "chain_key": "chain-quote-agent",
1522
+ "content_scrubbed": true,
1523
+ "revealed": [
1524
+ "gen_ai.tool.call.arguments"
1525
+ ]
1526
+ },
1527
+ "metadata": {
1528
+ "run": {
1529
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1530
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1531
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1532
+ "seq": 6,
1533
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4",
1534
+ "source_type": "tool",
1535
+ "name": "lookup_rate"
1536
+ },
1537
+ "otel": {
1538
+ "scope": {
1539
+ "name": "@sanning/anchor-langchain",
1540
+ "version": "1.0.0",
1541
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1542
+ },
1543
+ "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
1544
+ "span_id": "00f067aa0ba902b7"
1545
+ },
1546
+ "gen_ai": {
1547
+ "operation": {
1548
+ "name": "execute_tool"
1549
+ },
1550
+ "agent": {
1551
+ "version": "2.3.0"
1552
+ },
1553
+ "conversation": {
1554
+ "id": "thread-0001"
1555
+ },
1556
+ "tool": {
1557
+ "name": "lookup_rate",
1558
+ "call": {
1559
+ "id": "call_0001",
1560
+ "arguments": {
1561
+ "currency": "EUR"
1562
+ }
1563
+ }
1564
+ }
1565
+ }
1566
+ },
1567
+ "extras": {
1568
+ "event_schema": "sanning.agent/1"
1569
+ }
1570
+ },
1571
+ "expect": {
1572
+ "verdict": "failed",
1573
+ "reason": "bad_value",
1574
+ "at": "/context/case_id",
1575
+ "reasons": [
1576
+ {
1577
+ "reason": "bad_value",
1578
+ "at": "/context/case_id"
1579
+ }
1580
+ ],
1581
+ "findings": []
1582
+ }
1583
+ },
1584
+ {
1585
+ "name": "id-non-ascii-digit",
1586
+ "note": "[0-9] is the ASCII digits.",
1587
+ "record": {
1588
+ "payload_version": 1,
1589
+ "spec_version": "sanning.events/v2",
1590
+ "event_type": "agent.tool_call.started",
1591
+ "subject": {
1592
+ "type": "agent",
1593
+ "agent_id": "agent-a",
1594
+ "name": "quote-agent"
1595
+ },
1596
+ "previous_hash": "71547e237559add83f6c9279fdb5762eafee857a1060e2d97c0316a70cefb6ba",
1597
+ "event": {
1598
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a",
1599
+ "content_length": 61,
1600
+ "ref": "s3+opaque:f65487ec7519bf312794e8c07df739a958cb089be77c136111c6d87a8e639004"
1601
+ },
1602
+ "context": {
1603
+ "data_mode": "private",
1604
+ "salt": "688f84f8cdfc0700f6bfdf16aaf0daa7",
1605
+ "case_id": "case-000\u0661",
1606
+ "chain_key": "chain-quote-agent",
1607
+ "content_scrubbed": true,
1608
+ "revealed": [
1609
+ "gen_ai.tool.call.arguments"
1610
+ ]
1611
+ },
1612
+ "metadata": {
1613
+ "run": {
1614
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1615
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1616
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1617
+ "seq": 6,
1618
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4",
1619
+ "source_type": "tool",
1620
+ "name": "lookup_rate"
1621
+ },
1622
+ "otel": {
1623
+ "scope": {
1624
+ "name": "@sanning/anchor-langchain",
1625
+ "version": "1.0.0",
1626
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1627
+ },
1628
+ "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
1629
+ "span_id": "00f067aa0ba902b7"
1630
+ },
1631
+ "gen_ai": {
1632
+ "operation": {
1633
+ "name": "execute_tool"
1634
+ },
1635
+ "agent": {
1636
+ "version": "2.3.0"
1637
+ },
1638
+ "conversation": {
1639
+ "id": "thread-0001"
1640
+ },
1641
+ "tool": {
1642
+ "name": "lookup_rate",
1643
+ "call": {
1644
+ "id": "call_0001",
1645
+ "arguments": {
1646
+ "currency": "EUR"
1647
+ }
1648
+ }
1649
+ }
1650
+ }
1651
+ },
1652
+ "extras": {
1653
+ "event_schema": "sanning.agent/1"
1654
+ }
1655
+ },
1656
+ "expect": {
1657
+ "verdict": "failed",
1658
+ "reason": "bad_value",
1659
+ "at": "/context/case_id",
1660
+ "reasons": [
1661
+ {
1662
+ "reason": "bad_value",
1663
+ "at": "/context/case_id"
1664
+ }
1665
+ ],
1666
+ "findings": []
1667
+ }
1668
+ },
1669
+ {
1670
+ "name": "label-128-astral-characters",
1671
+ "note": "A label is at most 128 characters, counted as code points: 128 astral characters fit.",
1672
+ "record": {
1673
+ "payload_version": 1,
1674
+ "spec_version": "sanning.events/v2",
1675
+ "event_type": "agent.tool_call.started",
1676
+ "subject": {
1677
+ "type": "agent",
1678
+ "agent_id": "agent-a"
1679
+ },
1680
+ "previous_hash": "GENESIS",
1681
+ "event": {
1682
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1683
+ },
1684
+ "context": {
1685
+ "data_mode": "private",
1686
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
1687
+ },
1688
+ "metadata": {
1689
+ "run": {
1690
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1691
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1692
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1693
+ "seq": 6,
1694
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4",
1695
+ "source_type": "\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00"
1696
+ },
1697
+ "otel": {
1698
+ "scope": {
1699
+ "name": "@sanning/anchor-langchain",
1700
+ "version": "1.0.0",
1701
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1702
+ }
1703
+ },
1704
+ "gen_ai": {
1705
+ "operation": {
1706
+ "name": "execute_tool"
1707
+ },
1708
+ "tool": {
1709
+ "call": {
1710
+ "id": "call_0001"
1711
+ }
1712
+ }
1713
+ }
1714
+ },
1715
+ "extras": {
1716
+ "event_schema": "sanning.agent/1"
1717
+ }
1718
+ },
1719
+ "expect": {
1720
+ "verdict": "verified",
1721
+ "findings": []
1722
+ }
1723
+ },
1724
+ {
1725
+ "name": "label-129-astral-characters",
1726
+ "note": "129 code points is one past the label's bound.",
1727
+ "record": {
1728
+ "payload_version": 1,
1729
+ "spec_version": "sanning.events/v2",
1730
+ "event_type": "agent.tool_call.started",
1731
+ "subject": {
1732
+ "type": "agent",
1733
+ "agent_id": "agent-a"
1734
+ },
1735
+ "previous_hash": "GENESIS",
1736
+ "event": {
1737
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1738
+ },
1739
+ "context": {
1740
+ "data_mode": "private",
1741
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
1742
+ },
1743
+ "metadata": {
1744
+ "run": {
1745
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1746
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1747
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1748
+ "seq": 6,
1749
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4",
1750
+ "source_type": "\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00\ud83d\ude00"
1751
+ },
1752
+ "otel": {
1753
+ "scope": {
1754
+ "name": "@sanning/anchor-langchain",
1755
+ "version": "1.0.0",
1756
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1757
+ }
1758
+ },
1759
+ "gen_ai": {
1760
+ "operation": {
1761
+ "name": "execute_tool"
1762
+ },
1763
+ "tool": {
1764
+ "call": {
1765
+ "id": "call_0001"
1766
+ }
1767
+ }
1768
+ }
1769
+ },
1770
+ "extras": {
1771
+ "event_schema": "sanning.agent/1"
1772
+ }
1773
+ },
1774
+ "expect": {
1775
+ "verdict": "failed",
1776
+ "reason": "bad_value",
1777
+ "at": "/metadata/run/source_type",
1778
+ "reasons": [
1779
+ {
1780
+ "reason": "bad_value",
1781
+ "at": "/metadata/run/source_type"
1782
+ }
1783
+ ],
1784
+ "findings": []
1785
+ }
1786
+ },
1787
+ {
1788
+ "name": "hidden-empty",
1789
+ "note": "context.hidden lists at least one field.",
1790
+ "record": {
1791
+ "payload_version": 1,
1792
+ "spec_version": "sanning.events/v2",
1793
+ "event_type": "agent.tool_call.started",
1794
+ "subject": {
1795
+ "type": "agent",
1796
+ "agent_id": "agent-a"
1797
+ },
1798
+ "previous_hash": "GENESIS",
1799
+ "event": {
1800
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1801
+ },
1802
+ "context": {
1803
+ "data_mode": "private",
1804
+ "salt": "f2d23549f158a77987d40cdb54fdf20c",
1805
+ "hidden": {}
1806
+ },
1807
+ "metadata": {
1808
+ "run": {
1809
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1810
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1811
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1812
+ "seq": 6,
1813
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1814
+ },
1815
+ "otel": {
1816
+ "scope": {
1817
+ "name": "@sanning/anchor-langchain",
1818
+ "version": "1.0.0",
1819
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1820
+ }
1821
+ },
1822
+ "gen_ai": {
1823
+ "operation": {
1824
+ "name": "execute_tool"
1825
+ },
1826
+ "tool": {
1827
+ "call": {
1828
+ "id": "call_0001"
1829
+ }
1830
+ }
1831
+ }
1832
+ },
1833
+ "extras": {
1834
+ "event_schema": "sanning.agent/1"
1835
+ }
1836
+ },
1837
+ "expect": {
1838
+ "verdict": "failed",
1839
+ "reason": "bad_value",
1840
+ "at": "/context/hidden",
1841
+ "reasons": [
1842
+ {
1843
+ "reason": "bad_value",
1844
+ "at": "/context/hidden"
1845
+ }
1846
+ ],
1847
+ "findings": []
1848
+ }
1849
+ },
1850
+ {
1851
+ "name": "not-captured-empty",
1852
+ "note": "capture.not_captured lists at least one type: the schema reads before the head rule of step 5.",
1853
+ "record": {
1854
+ "payload_version": 1,
1855
+ "spec_version": "sanning.events/v2",
1856
+ "event_type": "agent.tool_call.started",
1857
+ "subject": {
1858
+ "type": "agent",
1859
+ "agent_id": "agent-a"
1860
+ },
1861
+ "previous_hash": "GENESIS",
1862
+ "event": {
1863
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1864
+ },
1865
+ "context": {
1866
+ "data_mode": "private",
1867
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
1868
+ },
1869
+ "metadata": {
1870
+ "run": {
1871
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
1872
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1873
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1874
+ "seq": 6,
1875
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
1876
+ },
1877
+ "otel": {
1878
+ "scope": {
1879
+ "name": "@sanning/anchor-langchain",
1880
+ "version": "1.0.0",
1881
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1882
+ }
1883
+ },
1884
+ "gen_ai": {
1885
+ "operation": {
1886
+ "name": "execute_tool"
1887
+ },
1888
+ "tool": {
1889
+ "call": {
1890
+ "id": "call_0001"
1891
+ }
1892
+ }
1893
+ },
1894
+ "capture": {
1895
+ "not_captured": []
1896
+ }
1897
+ },
1898
+ "extras": {
1899
+ "event_schema": "sanning.agent/1"
1900
+ }
1901
+ },
1902
+ "expect": {
1903
+ "verdict": "failed",
1904
+ "reason": "bad_value",
1905
+ "at": "/metadata/capture/not_captured",
1906
+ "reasons": [
1907
+ {
1908
+ "reason": "bad_value",
1909
+ "at": "/metadata/capture/not_captured"
1910
+ }
1911
+ ],
1912
+ "findings": []
1913
+ }
1914
+ },
1915
+ {
1916
+ "name": "record-ids-duplicate",
1917
+ "note": "closing.record_ids names each record once.",
1918
+ "record": {
1919
+ "payload_version": 1,
1920
+ "spec_version": "sanning.events/v2",
1921
+ "event_type": "agent.run_closed",
1922
+ "subject": {
1923
+ "type": "agent",
1924
+ "agent_id": "agent-a"
1925
+ },
1926
+ "previous_hash": "GENESIS",
1927
+ "event": {
1928
+ "content_hash": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
1929
+ },
1930
+ "context": {
1931
+ "data_mode": "private",
1932
+ "salt": "75845a01698f1ea14fc63040fdfc4b8a"
1933
+ },
1934
+ "metadata": {
1935
+ "run": {
1936
+ "run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1937
+ "parent_run_id": null,
1938
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
1939
+ "seq": 1,
1940
+ "prev_event_id": "3697dc06-dafb-446e-b795-b9c217c6585f"
1941
+ },
1942
+ "otel": {
1943
+ "scope": {
1944
+ "name": "@sanning/anchor-langchain",
1945
+ "version": "1.0.0",
1946
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
1947
+ }
1948
+ },
1949
+ "gen_ai": {
1950
+ "operation": {
1951
+ "name": "invoke_agent"
1952
+ }
1953
+ },
1954
+ "closing": {
1955
+ "record_count": 2,
1956
+ "record_ids": [
1957
+ "9cb3e98e-9337-40fe-bfa4-974b81dc930e",
1958
+ "9cb3e98e-9337-40fe-bfa4-974b81dc930e"
1959
+ ],
1960
+ "outcome": {
1961
+ "observed": {
1962
+ "status": "completed"
1963
+ }
1964
+ }
1965
+ }
1966
+ },
1967
+ "extras": {
1968
+ "event_schema": "sanning.agent/1"
1969
+ }
1970
+ },
1971
+ "expect": {
1972
+ "verdict": "failed",
1973
+ "reason": "bad_value",
1974
+ "at": "/metadata/closing/record_ids",
1975
+ "reasons": [
1976
+ {
1977
+ "reason": "bad_value",
1978
+ "at": "/metadata/closing/record_ids"
1979
+ }
1980
+ ],
1981
+ "findings": []
1982
+ }
1983
+ },
1984
+ {
1985
+ "name": "count-2-to-the-53",
1986
+ "note": "A count is at most 2^53 - 1.",
1987
+ "record": {
1988
+ "payload_version": 1,
1989
+ "spec_version": "sanning.events/v2",
1990
+ "event_type": "agent.tool_call.started",
1991
+ "subject": {
1992
+ "type": "agent",
1993
+ "agent_id": "agent-a"
1994
+ },
1995
+ "previous_hash": "GENESIS",
1996
+ "event": {
1997
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
1998
+ },
1999
+ "context": {
2000
+ "data_mode": "private",
2001
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
2002
+ },
2003
+ "metadata": {
2004
+ "run": {
2005
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
2006
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
2007
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
2008
+ "seq": 9007199254740992,
2009
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
2010
+ },
2011
+ "otel": {
2012
+ "scope": {
2013
+ "name": "@sanning/anchor-langchain",
2014
+ "version": "1.0.0",
2015
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
2016
+ }
2017
+ },
2018
+ "gen_ai": {
2019
+ "operation": {
2020
+ "name": "execute_tool"
2021
+ },
2022
+ "tool": {
2023
+ "call": {
2024
+ "id": "call_0001"
2025
+ }
2026
+ }
2027
+ }
2028
+ },
2029
+ "extras": {
2030
+ "event_schema": "sanning.agent/1"
2031
+ }
2032
+ },
2033
+ "expect": {
2034
+ "verdict": "failed",
2035
+ "reason": "bad_value",
2036
+ "at": "/metadata/run/seq",
2037
+ "reasons": [
2038
+ {
2039
+ "reason": "bad_value",
2040
+ "at": "/metadata/run/seq"
2041
+ }
2042
+ ],
2043
+ "findings": []
2044
+ }
2045
+ },
2046
+ {
2047
+ "name": "count-not-an-integer",
2048
+ "note": "A count is an integer.",
2049
+ "record": {
2050
+ "payload_version": 1,
2051
+ "spec_version": "sanning.events/v2",
2052
+ "event_type": "agent.tool_call.started",
2053
+ "subject": {
2054
+ "type": "agent",
2055
+ "agent_id": "agent-a"
2056
+ },
2057
+ "previous_hash": "GENESIS",
2058
+ "event": {
2059
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
2060
+ },
2061
+ "context": {
2062
+ "data_mode": "private",
2063
+ "salt": "f2d23549f158a77987d40cdb54fdf20c"
2064
+ },
2065
+ "metadata": {
2066
+ "run": {
2067
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
2068
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
2069
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
2070
+ "seq": 1.5,
2071
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
2072
+ },
2073
+ "otel": {
2074
+ "scope": {
2075
+ "name": "@sanning/anchor-langchain",
2076
+ "version": "1.0.0",
2077
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
2078
+ }
2079
+ },
2080
+ "gen_ai": {
2081
+ "operation": {
2082
+ "name": "execute_tool"
2083
+ },
2084
+ "tool": {
2085
+ "call": {
2086
+ "id": "call_0001"
2087
+ }
2088
+ }
2089
+ }
2090
+ },
2091
+ "extras": {
2092
+ "event_schema": "sanning.agent/1"
2093
+ }
2094
+ },
2095
+ "expect": {
2096
+ "verdict": "failed",
2097
+ "reason": "bad_value",
2098
+ "at": "/metadata/run/seq",
2099
+ "reasons": [
2100
+ {
2101
+ "reason": "bad_value",
2102
+ "at": "/metadata/run/seq"
2103
+ }
2104
+ ],
2105
+ "findings": []
2106
+ }
2107
+ },
2108
+ {
2109
+ "name": "pointer-before-its-extensions",
2110
+ "note": "Errors at /context/revealed and at its items: a pointer comes before every pointer it is a prefix of.",
2111
+ "record": {
2112
+ "payload_version": 1,
2113
+ "spec_version": "sanning.events/v2",
2114
+ "event_type": "agent.tool_call.started",
2115
+ "subject": {
2116
+ "type": "agent",
2117
+ "agent_id": "agent-a"
2118
+ },
2119
+ "previous_hash": "GENESIS",
2120
+ "event": {
2121
+ "content_hash": "2ea7689b5c81d028dd080b4cd06c37001fccf393bc9992e73d2a81ccaafee98a"
2122
+ },
2123
+ "context": {
2124
+ "data_mode": "private",
2125
+ "salt": "f2d23549f158a77987d40cdb54fdf20c",
2126
+ "revealed": [
2127
+ 1,
2128
+ 1
2129
+ ]
2130
+ },
2131
+ "metadata": {
2132
+ "run": {
2133
+ "run_id": "094f235f-b634-4ae7-a212-ee0b7557272c",
2134
+ "parent_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
2135
+ "root_run_id": "de0630dd-5fa5-40de-af8d-d84cbbdc7440",
2136
+ "seq": 6,
2137
+ "prev_event_id": "c2a6da2f-8851-4a4d-b39c-27b0b62f86c4"
2138
+ },
2139
+ "otel": {
2140
+ "scope": {
2141
+ "name": "@sanning/anchor-langchain",
2142
+ "version": "1.0.0",
2143
+ "schema_url": "https://opentelemetry.io/schemas/1.41.0"
2144
+ }
2145
+ },
2146
+ "gen_ai": {
2147
+ "operation": {
2148
+ "name": "execute_tool"
2149
+ },
2150
+ "tool": {
2151
+ "call": {
2152
+ "id": "call_0001"
2153
+ }
2154
+ }
2155
+ }
2156
+ },
2157
+ "extras": {
2158
+ "event_schema": "sanning.agent/1"
2159
+ }
2160
+ },
2161
+ "expect": {
2162
+ "verdict": "failed",
2163
+ "reason": "bad_value",
2164
+ "at": "/context/revealed",
2165
+ "reasons": [
2166
+ {
2167
+ "reason": "bad_value",
2168
+ "at": "/context/revealed"
2169
+ }
2170
+ ],
2171
+ "findings": []
2172
+ }
2173
+ }
2174
+ ]
2175
+ }