-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproof-snapshot.json
More file actions
348 lines (348 loc) · 14.7 KB
/
Copy pathproof-snapshot.json
File metadata and controls
348 lines (348 loc) · 14.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
{
"schema": "atrib-google-stack-chain.visual.v1",
"title": "Google stack proof chain",
"status": "reference snapshot ready",
"strategy": "atrib-google-stack-chain-proof-v3",
"command": "pnpm --filter @atrib/integration google-stack-chain-proof",
"snapshot": {
"schema": "atrib-google-stack-chain.snapshot.v1",
"timestamp_seconds": 1779840000,
"stable_inputs": {
"timestamp_seconds": 1779840000,
"a2a_request_message_id": "google-stack-a2a-request-0001",
"a2a_response_message_id": "google-stack-a2a-response-0001",
"a2a_task_id": "google-stack-a2a-task-0001",
"a2a_context_id": "google-stack-a2a-context-0001"
}
},
"nodes": [
{
"id": "ap2",
"label": "AP2 transaction",
"protocol": "AP2",
"actor": "ap2-local-participant",
"event_type": "atrib.ap2.transaction_verified",
"record_hash": "sha256:e5f103d959cbb1e316e6d658b35fabc547b6b9b3bd530d0165cfbe48155cc6db",
"parents": [],
"verifier": "@atrib/verify",
"checks": [
"AP2 detected",
"VI evidence valid",
"transaction accepted",
"counterparty attestation required"
],
"evidence": "AP2 / Verifiable Intent receipt evidence creates a signed atrib transaction record.",
"value": "The authorization surface becomes a record that later agents can cite without copying the payment payload."
},
{
"id": "a2a-remote",
"label": "A2A remote evidence",
"protocol": "A2A",
"actor": "a2a-specialist-agent",
"event_type": "atrib.a2a.remote_evidence_accepted",
"record_hash": "sha256:23e25fd31fc81cf8f6d668cf68454d05c6018451f3a7467fc15f2649277e42f9",
"parents": [
"sha256:e5f103d959cbb1e316e6d658b35fabc547b6b9b3bd530d0165cfbe48155cc6db"
],
"verifier": "@atrib/verify",
"checks": [
"signed Agent Card valid",
"remote informed_by resolved",
"no dangling AP2 parent"
],
"evidence": "A2A handoff evidence accepts the AP2 transaction as the verified parent.",
"value": "The handoff carries proof of what authorized the remote work."
},
{
"id": "a2a-receiver",
"label": "A2A receiver follow-up",
"protocol": "A2A",
"actor": "a2a-receiving-agent",
"event_type": "atrib.a2a.receiver_followup_signed",
"record_hash": "sha256:1225fb6849cab06d9bec936abdf28f5ff1a4e2872ea8f5a87c1b469c54c18fb2",
"parents": [
"sha256:23e25fd31fc81cf8f6d668cf68454d05c6018451f3a7467fc15f2649277e42f9"
],
"verifier": "@atrib/verify",
"checks": [
"handoff accepted",
"receiver follow-up signed",
"remote record parent resolved"
],
"evidence": "The receiving agent signs its follow-up after verifier-gated A2A evidence acceptance.",
"value": "The receiver can continue from a verified handoff instead of a chat transcript."
},
{
"id": "adk-decision",
"label": "ADK allow decision",
"protocol": "ADK Python",
"actor": "google_adk_python_decision_allow_agent",
"event_type": "atrib.adk_python.decision_allowed",
"record_hash": "sha256:f52b375c72747cb07a26fd9ed0038b12803a2beee2b8104bc2a34a43b65aa34f",
"parents": [
"sha256:1225fb6849cab06d9bec936abdf28f5ff1a4e2872ea8f5a87c1b469c54c18fb2"
],
"verifier": "@atrib/verify",
"checks": [
"BasePlugin before_tool_callback reached",
"decision state allowed",
"A2A parent resolved"
],
"evidence": "The Google ADK Python plugin signs an allow decision before the FunctionTool callback runs.",
"value": "The runtime action starts from a signed authority decision, not only a later audit record."
},
{
"id": "adk-python",
"label": "ADK Python callback",
"protocol": "ADK Python",
"actor": "google_adk_python_decision_allow_agent",
"event_type": "atrib.adk_python.tool_callback_signed",
"record_hash": "sha256:b68851adcf913713f2eba14e2dce27abd3212ebee7f52c87ad44ca77aed1f3af",
"parents": [
"sha256:f52b375c72747cb07a26fd9ed0038b12803a2beee2b8104bc2a34a43b65aa34f"
],
"verifier": "@atrib/verify",
"checks": [
"FunctionTool callback reached",
"hash-only public record",
"ADK decision parent resolved"
],
"evidence": "The Google ADK Python callback signs its own hash-only record after the allow decision.",
"value": "The callback record cites the decision record that authorized it to run."
},
{
"id": "adk-error-decision",
"label": "ADK error-path decision",
"protocol": "ADK Python",
"actor": "google_adk_python_decision_handler_error_agent",
"event_type": "atrib.adk_python.handler_error_decision_allowed",
"record_hash": "sha256:49e8f7c207bcea047601dab8a5bdce53777bc559b20c99ab1ec357fb9b425d24",
"parents": [
"sha256:1225fb6849cab06d9bec936abdf28f5ff1a4e2872ea8f5a87c1b469c54c18fb2"
],
"verifier": "@atrib/verify",
"checks": [
"BasePlugin before_tool_callback reached",
"decision state allowed",
"A2A parent resolved"
],
"evidence": "The Google ADK Python plugin signs an allow decision for a FunctionTool path that will raise.",
"value": "The failure path still starts from a signed authority decision tied to the A2A parent."
},
{
"id": "adk-error-outcome",
"label": "ADK terminal error outcome",
"protocol": "ADK Python",
"actor": "google_adk_python_decision_handler_error_agent",
"event_type": "atrib.adk_python.handler_error_terminal_outcome_signed",
"record_hash": "sha256:192d8c403e65a34ae37d184c4f9dacc4c1b6a84c1eb4b0270426737f5570e9c0",
"parents": [
"sha256:49e8f7c207bcea047601dab8a5bdce53777bc559b20c99ab1ec357fb9b425d24"
],
"verifier": "@atrib/verify",
"checks": [
"FunctionTool raised after allow",
"on_tool_error_callback signed outcome",
"decision parent resolved"
],
"evidence": "The ADK FunctionTool body raises after an allow decision, and on_tool_error_callback signs the terminal error outcome.",
"value": "The record chain shows both why the call was allowed and how it ended when the handler failed."
}
],
"edges": [
{
"from": "ap2",
"to": "a2a-remote",
"relation": "informed_by",
"verifier": "@atrib/verify"
},
{
"from": "a2a-remote",
"to": "a2a-receiver",
"relation": "informed_by",
"verifier": "@atrib/verify"
},
{
"from": "a2a-receiver",
"to": "adk-decision",
"relation": "informed_by",
"verifier": "@atrib/verify"
},
{
"from": "adk-decision",
"to": "adk-python",
"relation": "informed_by",
"verifier": "@atrib/verify"
},
{
"from": "a2a-receiver",
"to": "adk-error-decision",
"relation": "informed_by",
"verifier": "@atrib/verify"
},
{
"from": "adk-error-decision",
"to": "adk-error-outcome",
"relation": "informed_by",
"verifier": "@atrib/verify"
}
],
"analytics": {
"schema": "atrib-google-stack-chain.bigquery-agent-analytics.fixture.v1",
"source": "local-fixture",
"rows": [
{
"node_id": "ap2",
"timestamp": "2026-05-27T00:00:00.000Z",
"event_type": "atrib.ap2.transaction_verified",
"agent": "ap2-local-participant",
"session_id": null,
"invocation_id": null,
"user_id": null,
"trace_id": null,
"span_id": null,
"parent_span_id": null,
"status": "OK",
"error_message": null,
"is_truncated": false,
"atrib_record_hash": "sha256:e5f103d959cbb1e316e6d658b35fabc547b6b9b3bd530d0165cfbe48155cc6db",
"atrib_parent_record_hashes": [],
"protocol": "AP2"
},
{
"node_id": "a2a-remote",
"timestamp": "2026-05-27T00:00:01.000Z",
"event_type": "atrib.a2a.remote_evidence_accepted",
"agent": "a2a-specialist-agent",
"session_id": "google-stack-a2a-context-0001",
"invocation_id": "google-stack-a2a-request-0001",
"user_id": null,
"trace_id": "4f22c9bdbeaaf460f4aca6fd8fa817ef",
"span_id": "b115b227841db8e4",
"parent_span_id": null,
"status": "OK",
"error_message": null,
"is_truncated": false,
"atrib_record_hash": "sha256:23e25fd31fc81cf8f6d668cf68454d05c6018451f3a7467fc15f2649277e42f9",
"atrib_parent_record_hashes": [
"sha256:e5f103d959cbb1e316e6d658b35fabc547b6b9b3bd530d0165cfbe48155cc6db"
],
"protocol": "A2A"
},
{
"node_id": "a2a-receiver",
"timestamp": "2026-05-27T00:00:01.000Z",
"event_type": "atrib.a2a.receiver_followup_signed",
"agent": "a2a-receiving-agent",
"session_id": "google-stack-a2a-context-0001",
"invocation_id": "google-stack-a2a-response-0001",
"user_id": null,
"trace_id": "4f22c9bdbeaaf460f4aca6fd8fa817ef",
"span_id": "1d6154dbc8bded9a",
"parent_span_id": "b115b227841db8e4",
"status": "OK",
"error_message": null,
"is_truncated": false,
"atrib_record_hash": "sha256:1225fb6849cab06d9bec936abdf28f5ff1a4e2872ea8f5a87c1b469c54c18fb2",
"atrib_parent_record_hashes": [
"sha256:23e25fd31fc81cf8f6d668cf68454d05c6018451f3a7467fc15f2649277e42f9"
],
"protocol": "A2A"
},
{
"node_id": "adk-decision",
"timestamp": "2026-05-27T00:00:02.000Z",
"event_type": "atrib.adk_python.decision_allowed",
"agent": "google_adk_python_decision_allow_agent",
"session_id": "google-stack-adk-python-session-0001",
"invocation_id": "e-b7ca2de9-6454-413a-93f7-14d9e12d6dc6",
"user_id": null,
"trace_id": "4f22c9bdbeaaf460f4aca6fd8fa817ef",
"span_id": "e434f38575bf4688",
"parent_span_id": "1d6154dbc8bded9a",
"status": "OK",
"error_message": null,
"is_truncated": false,
"atrib_record_hash": "sha256:f52b375c72747cb07a26fd9ed0038b12803a2beee2b8104bc2a34a43b65aa34f",
"atrib_parent_record_hashes": [
"sha256:1225fb6849cab06d9bec936abdf28f5ff1a4e2872ea8f5a87c1b469c54c18fb2"
],
"protocol": "ADK Python"
},
{
"node_id": "adk-python",
"timestamp": "2026-05-27T00:00:02.001Z",
"event_type": "atrib.adk_python.tool_callback_signed",
"agent": "google_adk_python_decision_allow_agent",
"session_id": "google-stack-adk-python-session-0001",
"invocation_id": "e-b7ca2de9-6454-413a-93f7-14d9e12d6dc6",
"user_id": null,
"trace_id": "4f22c9bdbeaaf460f4aca6fd8fa817ef",
"span_id": "2a7b24b6f52f9a1f",
"parent_span_id": "e434f38575bf4688",
"status": "OK",
"error_message": null,
"is_truncated": false,
"atrib_record_hash": "sha256:b68851adcf913713f2eba14e2dce27abd3212ebee7f52c87ad44ca77aed1f3af",
"atrib_parent_record_hashes": [
"sha256:f52b375c72747cb07a26fd9ed0038b12803a2beee2b8104bc2a34a43b65aa34f"
],
"protocol": "ADK Python"
},
{
"node_id": "adk-error-decision",
"timestamp": "2026-05-27T00:00:04.000Z",
"event_type": "atrib.adk_python.handler_error_decision_allowed",
"agent": "google_adk_python_decision_handler_error_agent",
"session_id": "google-stack-adk-python-handler-error-session-0001",
"invocation_id": "e-8cc41729-ac2e-4efb-b69a-6a4730752319",
"user_id": null,
"trace_id": "849166752a8d0fcda4ae6b3e4640c1c6",
"span_id": "788caf2ee5867281",
"parent_span_id": "1d6154dbc8bded9a",
"status": "OK",
"error_message": null,
"is_truncated": false,
"atrib_record_hash": "sha256:49e8f7c207bcea047601dab8a5bdce53777bc559b20c99ab1ec357fb9b425d24",
"atrib_parent_record_hashes": [
"sha256:1225fb6849cab06d9bec936abdf28f5ff1a4e2872ea8f5a87c1b469c54c18fb2"
],
"protocol": "ADK Python"
},
{
"node_id": "adk-error-outcome",
"timestamp": "2026-05-27T00:00:04.001Z",
"event_type": "atrib.adk_python.handler_error_terminal_outcome_signed",
"agent": "google_adk_python_decision_handler_error_agent",
"session_id": "google-stack-adk-python-handler-error-session-0001",
"invocation_id": "e-8cc41729-ac2e-4efb-b69a-6a4730752319",
"user_id": null,
"trace_id": "849166752a8d0fcda4ae6b3e4640c1c6",
"span_id": "b2c05cce8c854872",
"parent_span_id": "788caf2ee5867281",
"status": "ERROR",
"error_message": "quote_price handler failed after ADK allowed the call",
"is_truncated": false,
"atrib_record_hash": "sha256:192d8c403e65a34ae37d184c4f9dacc4c1b6a84c1eb4b0270426737f5570e9c0",
"atrib_parent_record_hashes": [
"sha256:49e8f7c207bcea047601dab8a5bdce53777bc559b20c99ab1ec357fb9b425d24"
],
"protocol": "ADK Python"
}
],
"caveat": "This is a local BigQuery Agent Analytics-shaped fixture, not a BigQuery Storage Write API export or a managed Google Cloud run."
},
"value_add": [
"AP2 authorization evidence, A2A handoff evidence, ADK decision evidence, ADK runtime evidence, and ADK terminal-error evidence are linked through verifier-resolved informed_by records.",
"Each layer produces verifier-readable facts: AP2 receipt and VI checks, A2A accepted handoff records, ADK decision records, ADK hash-only tool callback records, and an ADK handler-error terminal outcome.",
"Public records expose hashes and record metadata while local artifacts or sidecars keep payment, task, and tool payload material inspectable by the host.",
"A support reviewer can see what was authorized, what was handed off, and what runtime action was signed before resolving a support or counterparty decision."
],
"caveats": [
"Boundary: atrib is the trust-transfer layer here. AP2 evidence is accepted first, A2A receives that signed parent, and ADK signs an allow decision before the tool callback cites that decision.",
"AP2 source: committed AP2 / VI fixtures or merchant-supplied packet JSON. This proof does not use live payment credentials or move funds.",
"A2A source: in-process JSON-RPC with signed receiving-agent follow-up. It proves verifier-gated handoff, not an A2A TCK result or public server deployment.",
"ADK source: google-adk Python InMemoryRunner proof. The claim is decision, callback, and handler-error terminal-outcome signing, not managed Agent Platform Runtime, Gemini Enterprise, BigQuery Storage Write API export, or Memory Bank coverage.",
"ADK handler-error coverage proves a real FunctionTool exception path. Timeout, cancellation, and process-crash completeness still need ADK-owned terminal emission semantics."
]
}