@crawlcheck/sdk 1.0.9 → 1.1.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.
@@ -0,0 +1,4694 @@
1
+ {
2
+ "kind": "crawlcheck-guard-acceptance",
3
+ "v": 1,
4
+ "suite_version": "1.0.0",
5
+ "built_at": "2026-10-10T16:05:00.994Z",
6
+ "now": "2026-10-10T16:00:00.000Z",
7
+ "nonce": "ccguard-acceptance-0001",
8
+ "spec": "https://crawlcheck.io/spec/guard",
9
+ "lifetimes_s": {
10
+ "read": 86400,
11
+ "cite": 86400,
12
+ "connect": 3600,
13
+ "transact": 300,
14
+ "administer": 300
15
+ },
16
+ "max_clock_skew_s": 300,
17
+ "directory": {
18
+ "keys": [
19
+ {
20
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
21
+ "kty": "OKP",
22
+ "crv": "Ed25519",
23
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
24
+ }
25
+ ]
26
+ },
27
+ "how": "For each case: serve directory at /.well-known/http-message-signatures-directory and answer POST /api/v1/preflight with crawlcheck (status + body or text; unreachable = refuse the connection; by_domain = the receipt for the domain asked). Call the guard with request (pin nonce and now). A fetch case also serves sites (url -> status, location, body) and records each URL the guard requested and which domain got the CrawlCheck-Receipt header. expect.proceed must match; for fetch cases, fetched must match exactly.",
28
+ "cases": [
29
+ {
30
+ "id": "allow",
31
+ "title": "allow proceeds",
32
+ "why": "positive control",
33
+ "request": {
34
+ "domain": "good.example",
35
+ "action": "read",
36
+ "allow_warn": false,
37
+ "confirm": null,
38
+ "nonce": "ccguard-acceptance-0001",
39
+ "now": "2026-10-10T16:00:00.000Z"
40
+ },
41
+ "crawlcheck": {
42
+ "status": 200,
43
+ "body": {
44
+ "kind": "crawlcheck-decision",
45
+ "v": 1,
46
+ "decided_at": "2026-10-10T15:59:00.000Z",
47
+ "expires_at": "2026-10-11T15:59:00.000Z",
48
+ "clock_skew_s": 300,
49
+ "nonce": "ccguard-acceptance-0001",
50
+ "domain": "good.example",
51
+ "action": "read",
52
+ "agent": null,
53
+ "template": null,
54
+ "policy": {
55
+ "max_age_hours": null,
56
+ "on_warn": "warn",
57
+ "require_entity": false,
58
+ "human_approval": [],
59
+ "allow": [],
60
+ "deny": []
61
+ },
62
+ "policy_id": null,
63
+ "engine": {
64
+ "version": "pf4",
65
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
66
+ },
67
+ "decision": "allow",
68
+ "base_decision": "allow",
69
+ "human_confirmation_required": false,
70
+ "reason_codes": [
71
+ "resolve.actions.read"
72
+ ],
73
+ "steps": [
74
+ {
75
+ "rule": "resolve.actions.read",
76
+ "effect": "allow",
77
+ "why": "suite fixture"
78
+ }
79
+ ],
80
+ "alternatives": [],
81
+ "evidence": {
82
+ "report": "https://crawlcheck.io/r/suitefixture",
83
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
84
+ },
85
+ "resolve": {
86
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
87
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
88
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
89
+ },
90
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
91
+ "signature": {
92
+ "v": 1,
93
+ "alg": "Ed25519",
94
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
95
+ "over": "sha256",
96
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
97
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
98
+ "signed_at": "2026-10-10T15:59:00.000Z",
99
+ "key": {
100
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
101
+ "jwk": {
102
+ "kty": "OKP",
103
+ "crv": "Ed25519",
104
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
105
+ },
106
+ "published_in": "the suite's directory"
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "expect": {
112
+ "proceed": true
113
+ }
114
+ },
115
+ {
116
+ "id": "warn-default",
117
+ "title": "warn does not proceed by default",
118
+ "why": "warn means a stated doubt; the caller must opt in",
119
+ "request": {
120
+ "domain": "good.example",
121
+ "action": "read",
122
+ "allow_warn": false,
123
+ "confirm": null,
124
+ "nonce": "ccguard-acceptance-0001",
125
+ "now": "2026-10-10T16:00:00.000Z"
126
+ },
127
+ "crawlcheck": {
128
+ "status": 200,
129
+ "body": {
130
+ "kind": "crawlcheck-decision",
131
+ "v": 1,
132
+ "decided_at": "2026-10-10T15:59:00.000Z",
133
+ "expires_at": "2026-10-11T15:59:00.000Z",
134
+ "clock_skew_s": 300,
135
+ "nonce": "ccguard-acceptance-0001",
136
+ "domain": "good.example",
137
+ "action": "read",
138
+ "agent": null,
139
+ "template": null,
140
+ "policy": {
141
+ "max_age_hours": null,
142
+ "on_warn": "warn",
143
+ "require_entity": false,
144
+ "human_approval": [],
145
+ "allow": [],
146
+ "deny": []
147
+ },
148
+ "policy_id": null,
149
+ "engine": {
150
+ "version": "pf4",
151
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
152
+ },
153
+ "decision": "warn",
154
+ "base_decision": "warn",
155
+ "human_confirmation_required": false,
156
+ "reason_codes": [
157
+ "resolve.actions.read"
158
+ ],
159
+ "steps": [
160
+ {
161
+ "rule": "resolve.actions.read",
162
+ "effect": "warn",
163
+ "why": "suite fixture"
164
+ }
165
+ ],
166
+ "alternatives": [],
167
+ "evidence": {
168
+ "report": "https://crawlcheck.io/r/suitefixture",
169
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
170
+ },
171
+ "resolve": {
172
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
173
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
174
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
175
+ },
176
+ "sha256": "4087deff63f28d80ab6e74f5f97e4071ded917926040b6218ba473d2c70e37a4",
177
+ "signature": {
178
+ "v": 1,
179
+ "alg": "Ed25519",
180
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
181
+ "over": "sha256",
182
+ "message": "crawlcheck-data-v1\n4087deff63f28d80ab6e74f5f97e4071ded917926040b6218ba473d2c70e37a4",
183
+ "sig": "-23BwyFV-Yo7YSFv56muqpu_15ByScrYC4zFvAwnP_6V9mkBNmF8_MSbl58B1XijAdlfLHuP4mH_CMf0qqHmAQ",
184
+ "signed_at": "2026-10-10T15:59:00.000Z",
185
+ "key": {
186
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
187
+ "jwk": {
188
+ "kty": "OKP",
189
+ "crv": "Ed25519",
190
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
191
+ },
192
+ "published_in": "the suite's directory"
193
+ }
194
+ }
195
+ }
196
+ },
197
+ "expect": {
198
+ "proceed": false
199
+ }
200
+ },
201
+ {
202
+ "id": "warn-allowed",
203
+ "title": "warn proceeds when the caller allows warn",
204
+ "why": "positive control",
205
+ "request": {
206
+ "domain": "good.example",
207
+ "action": "read",
208
+ "allow_warn": true,
209
+ "confirm": null,
210
+ "nonce": "ccguard-acceptance-0001",
211
+ "now": "2026-10-10T16:00:00.000Z"
212
+ },
213
+ "crawlcheck": {
214
+ "status": 200,
215
+ "body": {
216
+ "kind": "crawlcheck-decision",
217
+ "v": 1,
218
+ "decided_at": "2026-10-10T15:59:00.000Z",
219
+ "expires_at": "2026-10-11T15:59:00.000Z",
220
+ "clock_skew_s": 300,
221
+ "nonce": "ccguard-acceptance-0001",
222
+ "domain": "good.example",
223
+ "action": "read",
224
+ "agent": null,
225
+ "template": null,
226
+ "policy": {
227
+ "max_age_hours": null,
228
+ "on_warn": "warn",
229
+ "require_entity": false,
230
+ "human_approval": [],
231
+ "allow": [],
232
+ "deny": []
233
+ },
234
+ "policy_id": null,
235
+ "engine": {
236
+ "version": "pf4",
237
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
238
+ },
239
+ "decision": "warn",
240
+ "base_decision": "warn",
241
+ "human_confirmation_required": false,
242
+ "reason_codes": [
243
+ "resolve.actions.read"
244
+ ],
245
+ "steps": [
246
+ {
247
+ "rule": "resolve.actions.read",
248
+ "effect": "warn",
249
+ "why": "suite fixture"
250
+ }
251
+ ],
252
+ "alternatives": [],
253
+ "evidence": {
254
+ "report": "https://crawlcheck.io/r/suitefixture",
255
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
256
+ },
257
+ "resolve": {
258
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
259
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
260
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
261
+ },
262
+ "sha256": "4087deff63f28d80ab6e74f5f97e4071ded917926040b6218ba473d2c70e37a4",
263
+ "signature": {
264
+ "v": 1,
265
+ "alg": "Ed25519",
266
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
267
+ "over": "sha256",
268
+ "message": "crawlcheck-data-v1\n4087deff63f28d80ab6e74f5f97e4071ded917926040b6218ba473d2c70e37a4",
269
+ "sig": "-23BwyFV-Yo7YSFv56muqpu_15ByScrYC4zFvAwnP_6V9mkBNmF8_MSbl58B1XijAdlfLHuP4mH_CMf0qqHmAQ",
270
+ "signed_at": "2026-10-10T15:59:00.000Z",
271
+ "key": {
272
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
273
+ "jwk": {
274
+ "kty": "OKP",
275
+ "crv": "Ed25519",
276
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
277
+ },
278
+ "published_in": "the suite's directory"
279
+ }
280
+ }
281
+ }
282
+ },
283
+ "expect": {
284
+ "proceed": true
285
+ }
286
+ },
287
+ {
288
+ "id": "confirm-missing",
289
+ "title": "require_confirmation without a confirm callback",
290
+ "why": "no human, no action",
291
+ "request": {
292
+ "domain": "good.example",
293
+ "action": "read",
294
+ "allow_warn": false,
295
+ "confirm": null,
296
+ "nonce": "ccguard-acceptance-0001",
297
+ "now": "2026-10-10T16:00:00.000Z"
298
+ },
299
+ "crawlcheck": {
300
+ "status": 200,
301
+ "body": {
302
+ "kind": "crawlcheck-decision",
303
+ "v": 1,
304
+ "decided_at": "2026-10-10T15:59:00.000Z",
305
+ "expires_at": "2026-10-10T16:04:00.000Z",
306
+ "clock_skew_s": 300,
307
+ "nonce": "ccguard-acceptance-0001",
308
+ "domain": "good.example",
309
+ "action": "transact",
310
+ "agent": null,
311
+ "template": null,
312
+ "policy": {
313
+ "max_age_hours": null,
314
+ "on_warn": "warn",
315
+ "require_entity": false,
316
+ "human_approval": [],
317
+ "allow": [],
318
+ "deny": []
319
+ },
320
+ "policy_id": null,
321
+ "engine": {
322
+ "version": "pf4",
323
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
324
+ },
325
+ "decision": "require_confirmation",
326
+ "base_decision": "require_confirmation",
327
+ "human_confirmation_required": true,
328
+ "reason_codes": [
329
+ "resolve.actions.transact"
330
+ ],
331
+ "steps": [
332
+ {
333
+ "rule": "resolve.actions.transact",
334
+ "effect": "require_confirmation",
335
+ "why": "suite fixture"
336
+ }
337
+ ],
338
+ "alternatives": [],
339
+ "evidence": {
340
+ "report": "https://crawlcheck.io/r/suitefixture",
341
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
342
+ },
343
+ "resolve": {
344
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
345
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
346
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
347
+ },
348
+ "sha256": "52816e2c02e27246c3e4dd9e7b09990105fa05de6a45f0a1af19b333a471fc67",
349
+ "signature": {
350
+ "v": 1,
351
+ "alg": "Ed25519",
352
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
353
+ "over": "sha256",
354
+ "message": "crawlcheck-data-v1\n52816e2c02e27246c3e4dd9e7b09990105fa05de6a45f0a1af19b333a471fc67",
355
+ "sig": "tnsyDHKS55oKRw2VYB4uEJMNoMadfDzLrBHK1ZcXwTj3k0BKJVnkec04UlLvTgZy7g3XuWXLCQT1P7fSewwHCQ",
356
+ "signed_at": "2026-10-10T15:59:00.000Z",
357
+ "key": {
358
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
359
+ "jwk": {
360
+ "kty": "OKP",
361
+ "crv": "Ed25519",
362
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
363
+ },
364
+ "published_in": "the suite's directory"
365
+ }
366
+ }
367
+ }
368
+ },
369
+ "expect": {
370
+ "proceed": false
371
+ }
372
+ },
373
+ {
374
+ "id": "confirm-no",
375
+ "title": "require_confirmation, human says no",
376
+ "why": "",
377
+ "request": {
378
+ "domain": "good.example",
379
+ "action": "transact",
380
+ "allow_warn": false,
381
+ "confirm": false,
382
+ "nonce": "ccguard-acceptance-0001",
383
+ "now": "2026-10-10T16:00:00.000Z"
384
+ },
385
+ "crawlcheck": {
386
+ "status": 200,
387
+ "body": {
388
+ "kind": "crawlcheck-decision",
389
+ "v": 1,
390
+ "decided_at": "2026-10-10T15:59:00.000Z",
391
+ "expires_at": "2026-10-10T16:04:00.000Z",
392
+ "clock_skew_s": 300,
393
+ "nonce": "ccguard-acceptance-0001",
394
+ "domain": "good.example",
395
+ "action": "transact",
396
+ "agent": null,
397
+ "template": null,
398
+ "policy": {
399
+ "max_age_hours": null,
400
+ "on_warn": "warn",
401
+ "require_entity": false,
402
+ "human_approval": [],
403
+ "allow": [],
404
+ "deny": []
405
+ },
406
+ "policy_id": null,
407
+ "engine": {
408
+ "version": "pf4",
409
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
410
+ },
411
+ "decision": "require_confirmation",
412
+ "base_decision": "require_confirmation",
413
+ "human_confirmation_required": true,
414
+ "reason_codes": [
415
+ "resolve.actions.transact"
416
+ ],
417
+ "steps": [
418
+ {
419
+ "rule": "resolve.actions.transact",
420
+ "effect": "require_confirmation",
421
+ "why": "suite fixture"
422
+ }
423
+ ],
424
+ "alternatives": [],
425
+ "evidence": {
426
+ "report": "https://crawlcheck.io/r/suitefixture",
427
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
428
+ },
429
+ "resolve": {
430
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
431
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
432
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
433
+ },
434
+ "sha256": "52816e2c02e27246c3e4dd9e7b09990105fa05de6a45f0a1af19b333a471fc67",
435
+ "signature": {
436
+ "v": 1,
437
+ "alg": "Ed25519",
438
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
439
+ "over": "sha256",
440
+ "message": "crawlcheck-data-v1\n52816e2c02e27246c3e4dd9e7b09990105fa05de6a45f0a1af19b333a471fc67",
441
+ "sig": "tnsyDHKS55oKRw2VYB4uEJMNoMadfDzLrBHK1ZcXwTj3k0BKJVnkec04UlLvTgZy7g3XuWXLCQT1P7fSewwHCQ",
442
+ "signed_at": "2026-10-10T15:59:00.000Z",
443
+ "key": {
444
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
445
+ "jwk": {
446
+ "kty": "OKP",
447
+ "crv": "Ed25519",
448
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
449
+ },
450
+ "published_in": "the suite's directory"
451
+ }
452
+ }
453
+ }
454
+ },
455
+ "expect": {
456
+ "proceed": false
457
+ }
458
+ },
459
+ {
460
+ "id": "confirm-yes",
461
+ "title": "require_confirmation, human says yes",
462
+ "why": "positive control",
463
+ "request": {
464
+ "domain": "good.example",
465
+ "action": "transact",
466
+ "allow_warn": false,
467
+ "confirm": true,
468
+ "nonce": "ccguard-acceptance-0001",
469
+ "now": "2026-10-10T16:00:00.000Z"
470
+ },
471
+ "crawlcheck": {
472
+ "status": 200,
473
+ "body": {
474
+ "kind": "crawlcheck-decision",
475
+ "v": 1,
476
+ "decided_at": "2026-10-10T15:59:00.000Z",
477
+ "expires_at": "2026-10-10T16:04:00.000Z",
478
+ "clock_skew_s": 300,
479
+ "nonce": "ccguard-acceptance-0001",
480
+ "domain": "good.example",
481
+ "action": "transact",
482
+ "agent": null,
483
+ "template": null,
484
+ "policy": {
485
+ "max_age_hours": null,
486
+ "on_warn": "warn",
487
+ "require_entity": false,
488
+ "human_approval": [],
489
+ "allow": [],
490
+ "deny": []
491
+ },
492
+ "policy_id": null,
493
+ "engine": {
494
+ "version": "pf4",
495
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
496
+ },
497
+ "decision": "require_confirmation",
498
+ "base_decision": "require_confirmation",
499
+ "human_confirmation_required": true,
500
+ "reason_codes": [
501
+ "resolve.actions.transact"
502
+ ],
503
+ "steps": [
504
+ {
505
+ "rule": "resolve.actions.transact",
506
+ "effect": "require_confirmation",
507
+ "why": "suite fixture"
508
+ }
509
+ ],
510
+ "alternatives": [],
511
+ "evidence": {
512
+ "report": "https://crawlcheck.io/r/suitefixture",
513
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
514
+ },
515
+ "resolve": {
516
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
517
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
518
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
519
+ },
520
+ "sha256": "52816e2c02e27246c3e4dd9e7b09990105fa05de6a45f0a1af19b333a471fc67",
521
+ "signature": {
522
+ "v": 1,
523
+ "alg": "Ed25519",
524
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
525
+ "over": "sha256",
526
+ "message": "crawlcheck-data-v1\n52816e2c02e27246c3e4dd9e7b09990105fa05de6a45f0a1af19b333a471fc67",
527
+ "sig": "tnsyDHKS55oKRw2VYB4uEJMNoMadfDzLrBHK1ZcXwTj3k0BKJVnkec04UlLvTgZy7g3XuWXLCQT1P7fSewwHCQ",
528
+ "signed_at": "2026-10-10T15:59:00.000Z",
529
+ "key": {
530
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
531
+ "jwk": {
532
+ "kty": "OKP",
533
+ "crv": "Ed25519",
534
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
535
+ },
536
+ "published_in": "the suite's directory"
537
+ }
538
+ }
539
+ }
540
+ },
541
+ "expect": {
542
+ "proceed": true
543
+ }
544
+ },
545
+ {
546
+ "id": "block",
547
+ "title": "block never proceeds, whatever the options",
548
+ "why": "",
549
+ "request": {
550
+ "domain": "good.example",
551
+ "action": "read",
552
+ "allow_warn": true,
553
+ "confirm": true,
554
+ "nonce": "ccguard-acceptance-0001",
555
+ "now": "2026-10-10T16:00:00.000Z"
556
+ },
557
+ "crawlcheck": {
558
+ "status": 200,
559
+ "body": {
560
+ "kind": "crawlcheck-decision",
561
+ "v": 1,
562
+ "decided_at": "2026-10-10T15:59:00.000Z",
563
+ "expires_at": "2026-10-11T15:59:00.000Z",
564
+ "clock_skew_s": 300,
565
+ "nonce": "ccguard-acceptance-0001",
566
+ "domain": "good.example",
567
+ "action": "read",
568
+ "agent": null,
569
+ "template": null,
570
+ "policy": {
571
+ "max_age_hours": null,
572
+ "on_warn": "warn",
573
+ "require_entity": false,
574
+ "human_approval": [],
575
+ "allow": [],
576
+ "deny": []
577
+ },
578
+ "policy_id": null,
579
+ "engine": {
580
+ "version": "pf4",
581
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
582
+ },
583
+ "decision": "block",
584
+ "base_decision": "block",
585
+ "human_confirmation_required": false,
586
+ "reason_codes": [
587
+ "resolve.actions.read"
588
+ ],
589
+ "steps": [
590
+ {
591
+ "rule": "resolve.actions.read",
592
+ "effect": "block",
593
+ "why": "suite fixture"
594
+ }
595
+ ],
596
+ "alternatives": [],
597
+ "evidence": {
598
+ "report": "https://crawlcheck.io/r/suitefixture",
599
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
600
+ },
601
+ "resolve": {
602
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
603
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
604
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
605
+ },
606
+ "sha256": "522e43a3fa2a7497609711ac336e5b39c2031731959e416a6093b16e40545e6a",
607
+ "signature": {
608
+ "v": 1,
609
+ "alg": "Ed25519",
610
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
611
+ "over": "sha256",
612
+ "message": "crawlcheck-data-v1\n522e43a3fa2a7497609711ac336e5b39c2031731959e416a6093b16e40545e6a",
613
+ "sig": "xiGho7xFzvBn12O6p0b6CvtET7ffAlSJpiUoX01BA3MazC69jlf7CghIEtJ8RmNoHzxYMiE4719AmRVHhsYnAg",
614
+ "signed_at": "2026-10-10T15:59:00.000Z",
615
+ "key": {
616
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
617
+ "jwk": {
618
+ "kty": "OKP",
619
+ "crv": "Ed25519",
620
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
621
+ },
622
+ "published_in": "the suite's directory"
623
+ }
624
+ }
625
+ }
626
+ },
627
+ "expect": {
628
+ "proceed": false
629
+ }
630
+ },
631
+ {
632
+ "id": "unsupported",
633
+ "title": "unsupported never proceeds",
634
+ "why": "",
635
+ "request": {
636
+ "domain": "good.example",
637
+ "action": "read",
638
+ "allow_warn": true,
639
+ "confirm": true,
640
+ "nonce": "ccguard-acceptance-0001",
641
+ "now": "2026-10-10T16:00:00.000Z"
642
+ },
643
+ "crawlcheck": {
644
+ "status": 200,
645
+ "body": {
646
+ "kind": "crawlcheck-decision",
647
+ "v": 1,
648
+ "decided_at": "2026-10-10T15:59:00.000Z",
649
+ "expires_at": "2026-10-11T15:59:00.000Z",
650
+ "clock_skew_s": 300,
651
+ "nonce": "ccguard-acceptance-0001",
652
+ "domain": "good.example",
653
+ "action": "read",
654
+ "agent": null,
655
+ "template": null,
656
+ "policy": {
657
+ "max_age_hours": null,
658
+ "on_warn": "warn",
659
+ "require_entity": false,
660
+ "human_approval": [],
661
+ "allow": [],
662
+ "deny": []
663
+ },
664
+ "policy_id": null,
665
+ "engine": {
666
+ "version": "pf4",
667
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
668
+ },
669
+ "decision": "unsupported",
670
+ "base_decision": "unsupported",
671
+ "human_confirmation_required": false,
672
+ "reason_codes": [
673
+ "resolve.actions.read"
674
+ ],
675
+ "steps": [
676
+ {
677
+ "rule": "resolve.actions.read",
678
+ "effect": "unsupported",
679
+ "why": "suite fixture"
680
+ }
681
+ ],
682
+ "alternatives": [],
683
+ "evidence": {
684
+ "report": "https://crawlcheck.io/r/suitefixture",
685
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
686
+ },
687
+ "resolve": {
688
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
689
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
690
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
691
+ },
692
+ "sha256": "c7fd52aca25a133afdd65b866ad34523c411fc064c7a40e647a2f1247028c406",
693
+ "signature": {
694
+ "v": 1,
695
+ "alg": "Ed25519",
696
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
697
+ "over": "sha256",
698
+ "message": "crawlcheck-data-v1\nc7fd52aca25a133afdd65b866ad34523c411fc064c7a40e647a2f1247028c406",
699
+ "sig": "inLocrxYkAYJLWcAr-c5wqxRGX-t7wt9j8Cie1XlTDzfZTlDDzhoo0_chdABkpkrYyLpEVazO9S2F4Y6Oee6CA",
700
+ "signed_at": "2026-10-10T15:59:00.000Z",
701
+ "key": {
702
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
703
+ "jwk": {
704
+ "kty": "OKP",
705
+ "crv": "Ed25519",
706
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
707
+ },
708
+ "published_in": "the suite's directory"
709
+ }
710
+ }
711
+ }
712
+ },
713
+ "expect": {
714
+ "proceed": false
715
+ }
716
+ },
717
+ {
718
+ "id": "decision-unknown",
719
+ "title": "an unknown decision value (signed) never proceeds",
720
+ "why": "fail closed on values this guard does not know",
721
+ "request": {
722
+ "domain": "good.example",
723
+ "action": "read",
724
+ "allow_warn": true,
725
+ "confirm": true,
726
+ "nonce": "ccguard-acceptance-0001",
727
+ "now": "2026-10-10T16:00:00.000Z"
728
+ },
729
+ "crawlcheck": {
730
+ "status": 200,
731
+ "body": {
732
+ "kind": "crawlcheck-decision",
733
+ "v": 1,
734
+ "decided_at": "2026-10-10T15:59:00.000Z",
735
+ "expires_at": "2026-10-11T15:59:00.000Z",
736
+ "clock_skew_s": 300,
737
+ "nonce": "ccguard-acceptance-0001",
738
+ "domain": "good.example",
739
+ "action": "read",
740
+ "agent": null,
741
+ "template": null,
742
+ "policy": {
743
+ "max_age_hours": null,
744
+ "on_warn": "warn",
745
+ "require_entity": false,
746
+ "human_approval": [],
747
+ "allow": [],
748
+ "deny": []
749
+ },
750
+ "policy_id": null,
751
+ "engine": {
752
+ "version": "pf4",
753
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
754
+ },
755
+ "decision": "maybe",
756
+ "base_decision": "maybe",
757
+ "human_confirmation_required": false,
758
+ "reason_codes": [
759
+ "resolve.actions.read"
760
+ ],
761
+ "steps": [
762
+ {
763
+ "rule": "resolve.actions.read",
764
+ "effect": "maybe",
765
+ "why": "suite fixture"
766
+ }
767
+ ],
768
+ "alternatives": [],
769
+ "evidence": {
770
+ "report": "https://crawlcheck.io/r/suitefixture",
771
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
772
+ },
773
+ "resolve": {
774
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
775
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
776
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
777
+ },
778
+ "sha256": "3b88ee12d02e097b2dd0eaa9a20359263cddf3e63755f6dae48dfa334b43ab07",
779
+ "signature": {
780
+ "v": 1,
781
+ "alg": "Ed25519",
782
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
783
+ "over": "sha256",
784
+ "message": "crawlcheck-data-v1\n3b88ee12d02e097b2dd0eaa9a20359263cddf3e63755f6dae48dfa334b43ab07",
785
+ "sig": "nuSF6k8YHSlWF5klhgGZ_-XFkP4rvxszED9WzFM2n54qY3i_du4R69yks6xyClK3nRoPO4j6_nWap2Cm40ucDg",
786
+ "signed_at": "2026-10-10T15:59:00.000Z",
787
+ "key": {
788
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
789
+ "jwk": {
790
+ "kty": "OKP",
791
+ "crv": "Ed25519",
792
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
793
+ },
794
+ "published_in": "the suite's directory"
795
+ }
796
+ }
797
+ }
798
+ },
799
+ "expect": {
800
+ "proceed": false
801
+ }
802
+ },
803
+ {
804
+ "id": "other-domain",
805
+ "title": "a valid allow for another domain",
806
+ "why": "a receipt is valid only for the domain it names",
807
+ "request": {
808
+ "domain": "good.example",
809
+ "action": "read",
810
+ "allow_warn": false,
811
+ "confirm": null,
812
+ "nonce": "ccguard-acceptance-0001",
813
+ "now": "2026-10-10T16:00:00.000Z"
814
+ },
815
+ "crawlcheck": {
816
+ "status": 200,
817
+ "body": {
818
+ "kind": "crawlcheck-decision",
819
+ "v": 1,
820
+ "decided_at": "2026-10-10T15:59:00.000Z",
821
+ "expires_at": "2026-10-11T15:59:00.000Z",
822
+ "clock_skew_s": 300,
823
+ "nonce": "ccguard-acceptance-0001",
824
+ "domain": "evil.example",
825
+ "action": "read",
826
+ "agent": null,
827
+ "template": null,
828
+ "policy": {
829
+ "max_age_hours": null,
830
+ "on_warn": "warn",
831
+ "require_entity": false,
832
+ "human_approval": [],
833
+ "allow": [],
834
+ "deny": []
835
+ },
836
+ "policy_id": null,
837
+ "engine": {
838
+ "version": "pf4",
839
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
840
+ },
841
+ "decision": "allow",
842
+ "base_decision": "allow",
843
+ "human_confirmation_required": false,
844
+ "reason_codes": [
845
+ "resolve.actions.read"
846
+ ],
847
+ "steps": [
848
+ {
849
+ "rule": "resolve.actions.read",
850
+ "effect": "allow",
851
+ "why": "suite fixture"
852
+ }
853
+ ],
854
+ "alternatives": [],
855
+ "evidence": {
856
+ "report": "https://crawlcheck.io/r/suitefixture",
857
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
858
+ },
859
+ "resolve": {
860
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
861
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
862
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
863
+ },
864
+ "sha256": "29687918f0a949ebb8789fe718613a18698adfd5ae3162d828d0bb7174bc6626",
865
+ "signature": {
866
+ "v": 1,
867
+ "alg": "Ed25519",
868
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
869
+ "over": "sha256",
870
+ "message": "crawlcheck-data-v1\n29687918f0a949ebb8789fe718613a18698adfd5ae3162d828d0bb7174bc6626",
871
+ "sig": "Qjr9IICsAsyxgc_oEvzg6LpiU2cDCHOujMLuJaM6x_4tFeT9nj2Axv1KslWwph9fjnPTFzw3yhl4iHTJD561CA",
872
+ "signed_at": "2026-10-10T15:59:00.000Z",
873
+ "key": {
874
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
875
+ "jwk": {
876
+ "kty": "OKP",
877
+ "crv": "Ed25519",
878
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
879
+ },
880
+ "published_in": "the suite's directory"
881
+ }
882
+ }
883
+ }
884
+ },
885
+ "expect": {
886
+ "proceed": false
887
+ }
888
+ },
889
+ {
890
+ "id": "subdomain",
891
+ "title": "a valid allow for the parent domain, asked for a subdomain",
892
+ "why": "no inheritance across hosts",
893
+ "request": {
894
+ "domain": "api.good.example",
895
+ "action": "read",
896
+ "allow_warn": false,
897
+ "confirm": null,
898
+ "nonce": "ccguard-acceptance-0001",
899
+ "now": "2026-10-10T16:00:00.000Z"
900
+ },
901
+ "crawlcheck": {
902
+ "status": 200,
903
+ "body": {
904
+ "kind": "crawlcheck-decision",
905
+ "v": 1,
906
+ "decided_at": "2026-10-10T15:59:00.000Z",
907
+ "expires_at": "2026-10-11T15:59:00.000Z",
908
+ "clock_skew_s": 300,
909
+ "nonce": "ccguard-acceptance-0001",
910
+ "domain": "good.example",
911
+ "action": "read",
912
+ "agent": null,
913
+ "template": null,
914
+ "policy": {
915
+ "max_age_hours": null,
916
+ "on_warn": "warn",
917
+ "require_entity": false,
918
+ "human_approval": [],
919
+ "allow": [],
920
+ "deny": []
921
+ },
922
+ "policy_id": null,
923
+ "engine": {
924
+ "version": "pf4",
925
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
926
+ },
927
+ "decision": "allow",
928
+ "base_decision": "allow",
929
+ "human_confirmation_required": false,
930
+ "reason_codes": [
931
+ "resolve.actions.read"
932
+ ],
933
+ "steps": [
934
+ {
935
+ "rule": "resolve.actions.read",
936
+ "effect": "allow",
937
+ "why": "suite fixture"
938
+ }
939
+ ],
940
+ "alternatives": [],
941
+ "evidence": {
942
+ "report": "https://crawlcheck.io/r/suitefixture",
943
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
944
+ },
945
+ "resolve": {
946
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
947
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
948
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
949
+ },
950
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
951
+ "signature": {
952
+ "v": 1,
953
+ "alg": "Ed25519",
954
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
955
+ "over": "sha256",
956
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
957
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
958
+ "signed_at": "2026-10-10T15:59:00.000Z",
959
+ "key": {
960
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
961
+ "jwk": {
962
+ "kty": "OKP",
963
+ "crv": "Ed25519",
964
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
965
+ },
966
+ "published_in": "the suite's directory"
967
+ }
968
+ }
969
+ }
970
+ },
971
+ "expect": {
972
+ "proceed": false
973
+ }
974
+ },
975
+ {
976
+ "id": "www-same",
977
+ "title": "www. is the same site",
978
+ "why": "CrawlCheck stores a site without www.",
979
+ "request": {
980
+ "domain": "www.good.example",
981
+ "action": "read",
982
+ "allow_warn": false,
983
+ "confirm": null,
984
+ "nonce": "ccguard-acceptance-0001",
985
+ "now": "2026-10-10T16:00:00.000Z"
986
+ },
987
+ "crawlcheck": {
988
+ "status": 200,
989
+ "body": {
990
+ "kind": "crawlcheck-decision",
991
+ "v": 1,
992
+ "decided_at": "2026-10-10T15:59:00.000Z",
993
+ "expires_at": "2026-10-11T15:59:00.000Z",
994
+ "clock_skew_s": 300,
995
+ "nonce": "ccguard-acceptance-0001",
996
+ "domain": "good.example",
997
+ "action": "read",
998
+ "agent": null,
999
+ "template": null,
1000
+ "policy": {
1001
+ "max_age_hours": null,
1002
+ "on_warn": "warn",
1003
+ "require_entity": false,
1004
+ "human_approval": [],
1005
+ "allow": [],
1006
+ "deny": []
1007
+ },
1008
+ "policy_id": null,
1009
+ "engine": {
1010
+ "version": "pf4",
1011
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1012
+ },
1013
+ "decision": "allow",
1014
+ "base_decision": "allow",
1015
+ "human_confirmation_required": false,
1016
+ "reason_codes": [
1017
+ "resolve.actions.read"
1018
+ ],
1019
+ "steps": [
1020
+ {
1021
+ "rule": "resolve.actions.read",
1022
+ "effect": "allow",
1023
+ "why": "suite fixture"
1024
+ }
1025
+ ],
1026
+ "alternatives": [],
1027
+ "evidence": {
1028
+ "report": "https://crawlcheck.io/r/suitefixture",
1029
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1030
+ },
1031
+ "resolve": {
1032
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1033
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1034
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1035
+ },
1036
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
1037
+ "signature": {
1038
+ "v": 1,
1039
+ "alg": "Ed25519",
1040
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1041
+ "over": "sha256",
1042
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
1043
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
1044
+ "signed_at": "2026-10-10T15:59:00.000Z",
1045
+ "key": {
1046
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1047
+ "jwk": {
1048
+ "kty": "OKP",
1049
+ "crv": "Ed25519",
1050
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1051
+ },
1052
+ "published_in": "the suite's directory"
1053
+ }
1054
+ }
1055
+ }
1056
+ },
1057
+ "expect": {
1058
+ "proceed": true
1059
+ }
1060
+ },
1061
+ {
1062
+ "id": "other-action",
1063
+ "title": "a valid read allow, used to transact",
1064
+ "why": "a receipt is valid only for its action",
1065
+ "request": {
1066
+ "domain": "good.example",
1067
+ "action": "transact",
1068
+ "allow_warn": false,
1069
+ "confirm": null,
1070
+ "nonce": "ccguard-acceptance-0001",
1071
+ "now": "2026-10-10T16:00:00.000Z"
1072
+ },
1073
+ "crawlcheck": {
1074
+ "status": 200,
1075
+ "body": {
1076
+ "kind": "crawlcheck-decision",
1077
+ "v": 1,
1078
+ "decided_at": "2026-10-10T15:59:00.000Z",
1079
+ "expires_at": "2026-10-11T15:59:00.000Z",
1080
+ "clock_skew_s": 300,
1081
+ "nonce": "ccguard-acceptance-0001",
1082
+ "domain": "good.example",
1083
+ "action": "read",
1084
+ "agent": null,
1085
+ "template": null,
1086
+ "policy": {
1087
+ "max_age_hours": null,
1088
+ "on_warn": "warn",
1089
+ "require_entity": false,
1090
+ "human_approval": [],
1091
+ "allow": [],
1092
+ "deny": []
1093
+ },
1094
+ "policy_id": null,
1095
+ "engine": {
1096
+ "version": "pf4",
1097
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1098
+ },
1099
+ "decision": "allow",
1100
+ "base_decision": "allow",
1101
+ "human_confirmation_required": false,
1102
+ "reason_codes": [
1103
+ "resolve.actions.read"
1104
+ ],
1105
+ "steps": [
1106
+ {
1107
+ "rule": "resolve.actions.read",
1108
+ "effect": "allow",
1109
+ "why": "suite fixture"
1110
+ }
1111
+ ],
1112
+ "alternatives": [],
1113
+ "evidence": {
1114
+ "report": "https://crawlcheck.io/r/suitefixture",
1115
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1116
+ },
1117
+ "resolve": {
1118
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1119
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1120
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1121
+ },
1122
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
1123
+ "signature": {
1124
+ "v": 1,
1125
+ "alg": "Ed25519",
1126
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1127
+ "over": "sha256",
1128
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
1129
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
1130
+ "signed_at": "2026-10-10T15:59:00.000Z",
1131
+ "key": {
1132
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1133
+ "jwk": {
1134
+ "kty": "OKP",
1135
+ "crv": "Ed25519",
1136
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1137
+ },
1138
+ "published_in": "the suite's directory"
1139
+ }
1140
+ }
1141
+ }
1142
+ },
1143
+ "expect": {
1144
+ "proceed": false
1145
+ }
1146
+ },
1147
+ {
1148
+ "id": "expired",
1149
+ "title": "expired an hour ago",
1150
+ "why": "",
1151
+ "request": {
1152
+ "domain": "good.example",
1153
+ "action": "read",
1154
+ "allow_warn": false,
1155
+ "confirm": null,
1156
+ "nonce": "ccguard-acceptance-0001",
1157
+ "now": "2026-10-10T16:00:00.000Z"
1158
+ },
1159
+ "crawlcheck": {
1160
+ "status": 200,
1161
+ "body": {
1162
+ "kind": "crawlcheck-decision",
1163
+ "v": 1,
1164
+ "decided_at": "2026-10-09T15:00:00.000Z",
1165
+ "expires_at": "2026-10-10T15:00:00.000Z",
1166
+ "clock_skew_s": 300,
1167
+ "nonce": "ccguard-acceptance-0001",
1168
+ "domain": "good.example",
1169
+ "action": "read",
1170
+ "agent": null,
1171
+ "template": null,
1172
+ "policy": {
1173
+ "max_age_hours": null,
1174
+ "on_warn": "warn",
1175
+ "require_entity": false,
1176
+ "human_approval": [],
1177
+ "allow": [],
1178
+ "deny": []
1179
+ },
1180
+ "policy_id": null,
1181
+ "engine": {
1182
+ "version": "pf4",
1183
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1184
+ },
1185
+ "decision": "allow",
1186
+ "base_decision": "allow",
1187
+ "human_confirmation_required": false,
1188
+ "reason_codes": [
1189
+ "resolve.actions.read"
1190
+ ],
1191
+ "steps": [
1192
+ {
1193
+ "rule": "resolve.actions.read",
1194
+ "effect": "allow",
1195
+ "why": "suite fixture"
1196
+ }
1197
+ ],
1198
+ "alternatives": [],
1199
+ "evidence": {
1200
+ "report": "https://crawlcheck.io/r/suitefixture",
1201
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1202
+ },
1203
+ "resolve": {
1204
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1205
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1206
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1207
+ },
1208
+ "sha256": "4e16cdc5805460543702342938398e334ba33cf094bad8634736518264ef9a63",
1209
+ "signature": {
1210
+ "v": 1,
1211
+ "alg": "Ed25519",
1212
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1213
+ "over": "sha256",
1214
+ "message": "crawlcheck-data-v1\n4e16cdc5805460543702342938398e334ba33cf094bad8634736518264ef9a63",
1215
+ "sig": "eS7gUq43ulFerBhaVvsahhid8KJfSxy8FSJZUtrSAqig08HLteuLZXFUeOVKU2hYBxmqxg2R-mFFelnKV6GfBQ",
1216
+ "signed_at": "2026-10-09T15:00:00.000Z",
1217
+ "key": {
1218
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1219
+ "jwk": {
1220
+ "kty": "OKP",
1221
+ "crv": "Ed25519",
1222
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1223
+ },
1224
+ "published_in": "the suite's directory"
1225
+ }
1226
+ }
1227
+ }
1228
+ },
1229
+ "expect": {
1230
+ "proceed": false
1231
+ }
1232
+ },
1233
+ {
1234
+ "id": "expired-in-skew",
1235
+ "title": "expired 60 s ago, inside the stated 300 s clock skew",
1236
+ "why": "the skew is part of the receipt",
1237
+ "request": {
1238
+ "domain": "good.example",
1239
+ "action": "read",
1240
+ "allow_warn": false,
1241
+ "confirm": null,
1242
+ "nonce": "ccguard-acceptance-0001",
1243
+ "now": "2026-10-10T16:00:00.000Z"
1244
+ },
1245
+ "crawlcheck": {
1246
+ "status": 200,
1247
+ "body": {
1248
+ "kind": "crawlcheck-decision",
1249
+ "v": 1,
1250
+ "decided_at": "2026-10-09T15:59:00.000Z",
1251
+ "expires_at": "2026-10-10T15:59:00.000Z",
1252
+ "clock_skew_s": 300,
1253
+ "nonce": "ccguard-acceptance-0001",
1254
+ "domain": "good.example",
1255
+ "action": "read",
1256
+ "agent": null,
1257
+ "template": null,
1258
+ "policy": {
1259
+ "max_age_hours": null,
1260
+ "on_warn": "warn",
1261
+ "require_entity": false,
1262
+ "human_approval": [],
1263
+ "allow": [],
1264
+ "deny": []
1265
+ },
1266
+ "policy_id": null,
1267
+ "engine": {
1268
+ "version": "pf4",
1269
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1270
+ },
1271
+ "decision": "allow",
1272
+ "base_decision": "allow",
1273
+ "human_confirmation_required": false,
1274
+ "reason_codes": [
1275
+ "resolve.actions.read"
1276
+ ],
1277
+ "steps": [
1278
+ {
1279
+ "rule": "resolve.actions.read",
1280
+ "effect": "allow",
1281
+ "why": "suite fixture"
1282
+ }
1283
+ ],
1284
+ "alternatives": [],
1285
+ "evidence": {
1286
+ "report": "https://crawlcheck.io/r/suitefixture",
1287
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1288
+ },
1289
+ "resolve": {
1290
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1291
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1292
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1293
+ },
1294
+ "sha256": "bd9113e82fca1f8acd901cf549ba5d6f92ff2196b6eb95b2a1891e52bd6bc9fd",
1295
+ "signature": {
1296
+ "v": 1,
1297
+ "alg": "Ed25519",
1298
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1299
+ "over": "sha256",
1300
+ "message": "crawlcheck-data-v1\nbd9113e82fca1f8acd901cf549ba5d6f92ff2196b6eb95b2a1891e52bd6bc9fd",
1301
+ "sig": "FmOn2Uq2mvo38_JMySChVp8yGsmTJl4It5glmhYGqpql4Vo2cOzXtJbXLBENeWaV3jmVjjusCJpoFuYO8EHpCA",
1302
+ "signed_at": "2026-10-09T15:59:00.000Z",
1303
+ "key": {
1304
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1305
+ "jwk": {
1306
+ "kty": "OKP",
1307
+ "crv": "Ed25519",
1308
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1309
+ },
1310
+ "published_in": "the suite's directory"
1311
+ }
1312
+ }
1313
+ }
1314
+ },
1315
+ "expect": {
1316
+ "proceed": true
1317
+ }
1318
+ },
1319
+ {
1320
+ "id": "skew-inflated",
1321
+ "title": "claims a 1-day clock skew to stay alive",
1322
+ "why": "skew is capped at 300 s",
1323
+ "request": {
1324
+ "domain": "good.example",
1325
+ "action": "read",
1326
+ "allow_warn": false,
1327
+ "confirm": null,
1328
+ "nonce": "ccguard-acceptance-0001",
1329
+ "now": "2026-10-10T16:00:00.000Z"
1330
+ },
1331
+ "crawlcheck": {
1332
+ "status": 200,
1333
+ "body": {
1334
+ "kind": "crawlcheck-decision",
1335
+ "v": 1,
1336
+ "decided_at": "2026-10-09T10:00:00.000Z",
1337
+ "expires_at": "2026-10-10T10:00:00.000Z",
1338
+ "clock_skew_s": 86400,
1339
+ "nonce": "ccguard-acceptance-0001",
1340
+ "domain": "good.example",
1341
+ "action": "read",
1342
+ "agent": null,
1343
+ "template": null,
1344
+ "policy": {
1345
+ "max_age_hours": null,
1346
+ "on_warn": "warn",
1347
+ "require_entity": false,
1348
+ "human_approval": [],
1349
+ "allow": [],
1350
+ "deny": []
1351
+ },
1352
+ "policy_id": null,
1353
+ "engine": {
1354
+ "version": "pf4",
1355
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1356
+ },
1357
+ "decision": "allow",
1358
+ "base_decision": "allow",
1359
+ "human_confirmation_required": false,
1360
+ "reason_codes": [
1361
+ "resolve.actions.read"
1362
+ ],
1363
+ "steps": [
1364
+ {
1365
+ "rule": "resolve.actions.read",
1366
+ "effect": "allow",
1367
+ "why": "suite fixture"
1368
+ }
1369
+ ],
1370
+ "alternatives": [],
1371
+ "evidence": {
1372
+ "report": "https://crawlcheck.io/r/suitefixture",
1373
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1374
+ },
1375
+ "resolve": {
1376
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1377
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1378
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1379
+ },
1380
+ "sha256": "e7f4b304881647523514b6da29349bf10de4bf7fb646b7f262628dcc92243733",
1381
+ "signature": {
1382
+ "v": 1,
1383
+ "alg": "Ed25519",
1384
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1385
+ "over": "sha256",
1386
+ "message": "crawlcheck-data-v1\ne7f4b304881647523514b6da29349bf10de4bf7fb646b7f262628dcc92243733",
1387
+ "sig": "cyyPmF-ogSRi1FwoP3YkWtjiyAwvKpwOSZP7Yg7XBkk6Dk_ElaWpsrG_7iFwL4HCCsNu_yaXlHL9Y2jR0SD5AA",
1388
+ "signed_at": "2026-10-09T10:00:00.000Z",
1389
+ "key": {
1390
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1391
+ "jwk": {
1392
+ "kty": "OKP",
1393
+ "crv": "Ed25519",
1394
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1395
+ },
1396
+ "published_in": "the suite's directory"
1397
+ }
1398
+ }
1399
+ }
1400
+ },
1401
+ "expect": {
1402
+ "proceed": false
1403
+ }
1404
+ },
1405
+ {
1406
+ "id": "future",
1407
+ "title": "decided an hour in the future",
1408
+ "why": "a clock that far off cannot be trusted",
1409
+ "request": {
1410
+ "domain": "good.example",
1411
+ "action": "read",
1412
+ "allow_warn": false,
1413
+ "confirm": null,
1414
+ "nonce": "ccguard-acceptance-0001",
1415
+ "now": "2026-10-10T16:00:00.000Z"
1416
+ },
1417
+ "crawlcheck": {
1418
+ "status": 200,
1419
+ "body": {
1420
+ "kind": "crawlcheck-decision",
1421
+ "v": 1,
1422
+ "decided_at": "2026-10-10T17:00:00.000Z",
1423
+ "expires_at": "2026-10-11T17:00:00.000Z",
1424
+ "clock_skew_s": 300,
1425
+ "nonce": "ccguard-acceptance-0001",
1426
+ "domain": "good.example",
1427
+ "action": "read",
1428
+ "agent": null,
1429
+ "template": null,
1430
+ "policy": {
1431
+ "max_age_hours": null,
1432
+ "on_warn": "warn",
1433
+ "require_entity": false,
1434
+ "human_approval": [],
1435
+ "allow": [],
1436
+ "deny": []
1437
+ },
1438
+ "policy_id": null,
1439
+ "engine": {
1440
+ "version": "pf4",
1441
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1442
+ },
1443
+ "decision": "allow",
1444
+ "base_decision": "allow",
1445
+ "human_confirmation_required": false,
1446
+ "reason_codes": [
1447
+ "resolve.actions.read"
1448
+ ],
1449
+ "steps": [
1450
+ {
1451
+ "rule": "resolve.actions.read",
1452
+ "effect": "allow",
1453
+ "why": "suite fixture"
1454
+ }
1455
+ ],
1456
+ "alternatives": [],
1457
+ "evidence": {
1458
+ "report": "https://crawlcheck.io/r/suitefixture",
1459
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1460
+ },
1461
+ "resolve": {
1462
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1463
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1464
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1465
+ },
1466
+ "sha256": "5ed156bb141263c98315b8bfb7d64b7930f618028c42afee2ec7a330f046432e",
1467
+ "signature": {
1468
+ "v": 1,
1469
+ "alg": "Ed25519",
1470
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1471
+ "over": "sha256",
1472
+ "message": "crawlcheck-data-v1\n5ed156bb141263c98315b8bfb7d64b7930f618028c42afee2ec7a330f046432e",
1473
+ "sig": "sRrKuSXcSvHmuPcfWHXG1LIurqafnNtE4AB8gFNCrBq9u0Ng9p5FrovvhMdVkBoqWL23b1oq_EQoZg3nE4rxCw",
1474
+ "signed_at": "2026-10-10T17:00:00.000Z",
1475
+ "key": {
1476
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1477
+ "jwk": {
1478
+ "kty": "OKP",
1479
+ "crv": "Ed25519",
1480
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1481
+ },
1482
+ "published_in": "the suite's directory"
1483
+ }
1484
+ }
1485
+ }
1486
+ },
1487
+ "expect": {
1488
+ "proceed": false
1489
+ }
1490
+ },
1491
+ {
1492
+ "id": "lifetime-transact",
1493
+ "title": "a transact allow valid for 24 hours",
1494
+ "why": "transact receipts last at most 300 s",
1495
+ "request": {
1496
+ "domain": "good.example",
1497
+ "action": "transact",
1498
+ "allow_warn": false,
1499
+ "confirm": null,
1500
+ "nonce": "ccguard-acceptance-0001",
1501
+ "now": "2026-10-10T16:00:00.000Z"
1502
+ },
1503
+ "crawlcheck": {
1504
+ "status": 200,
1505
+ "body": {
1506
+ "kind": "crawlcheck-decision",
1507
+ "v": 1,
1508
+ "decided_at": "2026-10-10T15:59:00.000Z",
1509
+ "expires_at": "2026-10-11T15:59:00.000Z",
1510
+ "clock_skew_s": 300,
1511
+ "nonce": "ccguard-acceptance-0001",
1512
+ "domain": "good.example",
1513
+ "action": "transact",
1514
+ "agent": null,
1515
+ "template": null,
1516
+ "policy": {
1517
+ "max_age_hours": null,
1518
+ "on_warn": "warn",
1519
+ "require_entity": false,
1520
+ "human_approval": [],
1521
+ "allow": [],
1522
+ "deny": []
1523
+ },
1524
+ "policy_id": null,
1525
+ "engine": {
1526
+ "version": "pf4",
1527
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1528
+ },
1529
+ "decision": "allow",
1530
+ "base_decision": "allow",
1531
+ "human_confirmation_required": false,
1532
+ "reason_codes": [
1533
+ "resolve.actions.transact"
1534
+ ],
1535
+ "steps": [
1536
+ {
1537
+ "rule": "resolve.actions.transact",
1538
+ "effect": "allow",
1539
+ "why": "suite fixture"
1540
+ }
1541
+ ],
1542
+ "alternatives": [],
1543
+ "evidence": {
1544
+ "report": "https://crawlcheck.io/r/suitefixture",
1545
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1546
+ },
1547
+ "resolve": {
1548
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1549
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1550
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1551
+ },
1552
+ "sha256": "518e63f730cfa51ef8c7b6f92b277d42d337e86c531b2c66601d0124e6b28ebf",
1553
+ "signature": {
1554
+ "v": 1,
1555
+ "alg": "Ed25519",
1556
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1557
+ "over": "sha256",
1558
+ "message": "crawlcheck-data-v1\n518e63f730cfa51ef8c7b6f92b277d42d337e86c531b2c66601d0124e6b28ebf",
1559
+ "sig": "dMQH-IMugStO8ZrjpO1VMgYcV82YQVAxeiZCfOUOGrLFAahPjjbQMJg4c97VUvae2wTqqjU8dqPycDbom_o3BQ",
1560
+ "signed_at": "2026-10-10T15:59:00.000Z",
1561
+ "key": {
1562
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1563
+ "jwk": {
1564
+ "kty": "OKP",
1565
+ "crv": "Ed25519",
1566
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1567
+ },
1568
+ "published_in": "the suite's directory"
1569
+ }
1570
+ }
1571
+ }
1572
+ },
1573
+ "expect": {
1574
+ "proceed": false
1575
+ }
1576
+ },
1577
+ {
1578
+ "id": "lifetime-connect",
1579
+ "title": "a connect allow valid for 24 hours",
1580
+ "why": "connect receipts last at most 3600 s",
1581
+ "request": {
1582
+ "domain": "good.example",
1583
+ "action": "connect",
1584
+ "allow_warn": false,
1585
+ "confirm": null,
1586
+ "nonce": "ccguard-acceptance-0001",
1587
+ "now": "2026-10-10T16:00:00.000Z"
1588
+ },
1589
+ "crawlcheck": {
1590
+ "status": 200,
1591
+ "body": {
1592
+ "kind": "crawlcheck-decision",
1593
+ "v": 1,
1594
+ "decided_at": "2026-10-10T15:59:00.000Z",
1595
+ "expires_at": "2026-10-11T15:59:00.000Z",
1596
+ "clock_skew_s": 300,
1597
+ "nonce": "ccguard-acceptance-0001",
1598
+ "domain": "good.example",
1599
+ "action": "connect",
1600
+ "agent": null,
1601
+ "template": null,
1602
+ "policy": {
1603
+ "max_age_hours": null,
1604
+ "on_warn": "warn",
1605
+ "require_entity": false,
1606
+ "human_approval": [],
1607
+ "allow": [],
1608
+ "deny": []
1609
+ },
1610
+ "policy_id": null,
1611
+ "engine": {
1612
+ "version": "pf4",
1613
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1614
+ },
1615
+ "decision": "allow",
1616
+ "base_decision": "allow",
1617
+ "human_confirmation_required": false,
1618
+ "reason_codes": [
1619
+ "resolve.actions.connect"
1620
+ ],
1621
+ "steps": [
1622
+ {
1623
+ "rule": "resolve.actions.connect",
1624
+ "effect": "allow",
1625
+ "why": "suite fixture"
1626
+ }
1627
+ ],
1628
+ "alternatives": [],
1629
+ "evidence": {
1630
+ "report": "https://crawlcheck.io/r/suitefixture",
1631
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1632
+ },
1633
+ "resolve": {
1634
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1635
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1636
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1637
+ },
1638
+ "sha256": "38cbaa157d99a121b7739ce6180609667a9ea80878b4f1d048a24fefd8226662",
1639
+ "signature": {
1640
+ "v": 1,
1641
+ "alg": "Ed25519",
1642
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1643
+ "over": "sha256",
1644
+ "message": "crawlcheck-data-v1\n38cbaa157d99a121b7739ce6180609667a9ea80878b4f1d048a24fefd8226662",
1645
+ "sig": "WOPwEQkLD30kLCHpA5eVx-Lqcbl--FPA2ET69eeNxAKTIbNlTtjyHDgavdFWfumAR_6JFaEL1NVhppqDijy0Bg",
1646
+ "signed_at": "2026-10-10T15:59:00.000Z",
1647
+ "key": {
1648
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1649
+ "jwk": {
1650
+ "kty": "OKP",
1651
+ "crv": "Ed25519",
1652
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1653
+ },
1654
+ "published_in": "the suite's directory"
1655
+ }
1656
+ }
1657
+ }
1658
+ },
1659
+ "expect": {
1660
+ "proceed": false
1661
+ }
1662
+ },
1663
+ {
1664
+ "id": "no-expiry",
1665
+ "title": "no expires_at",
1666
+ "why": "",
1667
+ "request": {
1668
+ "domain": "good.example",
1669
+ "action": "read",
1670
+ "allow_warn": false,
1671
+ "confirm": null,
1672
+ "nonce": "ccguard-acceptance-0001",
1673
+ "now": "2026-10-10T16:00:00.000Z"
1674
+ },
1675
+ "crawlcheck": {
1676
+ "status": 200,
1677
+ "body": {
1678
+ "kind": "crawlcheck-decision",
1679
+ "v": 1,
1680
+ "decided_at": "2026-10-10T15:59:00.000Z",
1681
+ "clock_skew_s": 300,
1682
+ "nonce": "ccguard-acceptance-0001",
1683
+ "domain": "good.example",
1684
+ "action": "read",
1685
+ "agent": null,
1686
+ "template": null,
1687
+ "policy": {
1688
+ "max_age_hours": null,
1689
+ "on_warn": "warn",
1690
+ "require_entity": false,
1691
+ "human_approval": [],
1692
+ "allow": [],
1693
+ "deny": []
1694
+ },
1695
+ "policy_id": null,
1696
+ "engine": {
1697
+ "version": "pf4",
1698
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1699
+ },
1700
+ "decision": "allow",
1701
+ "base_decision": "allow",
1702
+ "human_confirmation_required": false,
1703
+ "reason_codes": [
1704
+ "resolve.actions.read"
1705
+ ],
1706
+ "steps": [
1707
+ {
1708
+ "rule": "resolve.actions.read",
1709
+ "effect": "allow",
1710
+ "why": "suite fixture"
1711
+ }
1712
+ ],
1713
+ "alternatives": [],
1714
+ "evidence": {
1715
+ "report": "https://crawlcheck.io/r/suitefixture",
1716
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1717
+ },
1718
+ "resolve": {
1719
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1720
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1721
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1722
+ },
1723
+ "sha256": "175b9ab45f76068da08b83cda4729043ca2765372671fa4066da4edaf0f76c47",
1724
+ "signature": {
1725
+ "v": 1,
1726
+ "alg": "Ed25519",
1727
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1728
+ "over": "sha256",
1729
+ "message": "crawlcheck-data-v1\n175b9ab45f76068da08b83cda4729043ca2765372671fa4066da4edaf0f76c47",
1730
+ "sig": "74Nx196-TvUaHI3if-OR2IqjdYj4rxbtNJ2A69LCXw9-XGrUSVsadWjrtkMsvFMCvspGDWzSCI9RC8zL9pBiDA",
1731
+ "signed_at": "2026-10-10T15:59:00.000Z",
1732
+ "key": {
1733
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1734
+ "jwk": {
1735
+ "kty": "OKP",
1736
+ "crv": "Ed25519",
1737
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1738
+ },
1739
+ "published_in": "the suite's directory"
1740
+ }
1741
+ }
1742
+ }
1743
+ },
1744
+ "expect": {
1745
+ "proceed": false
1746
+ }
1747
+ },
1748
+ {
1749
+ "id": "nonce-other",
1750
+ "title": "a receipt carrying another request's nonce",
1751
+ "why": "replayed receipt",
1752
+ "request": {
1753
+ "domain": "good.example",
1754
+ "action": "read",
1755
+ "allow_warn": false,
1756
+ "confirm": null,
1757
+ "nonce": "ccguard-acceptance-0001",
1758
+ "now": "2026-10-10T16:00:00.000Z"
1759
+ },
1760
+ "crawlcheck": {
1761
+ "status": 200,
1762
+ "body": {
1763
+ "kind": "crawlcheck-decision",
1764
+ "v": 1,
1765
+ "decided_at": "2026-10-10T15:59:00.000Z",
1766
+ "expires_at": "2026-10-11T15:59:00.000Z",
1767
+ "clock_skew_s": 300,
1768
+ "nonce": "someone-elses-nonce-99",
1769
+ "domain": "good.example",
1770
+ "action": "read",
1771
+ "agent": null,
1772
+ "template": null,
1773
+ "policy": {
1774
+ "max_age_hours": null,
1775
+ "on_warn": "warn",
1776
+ "require_entity": false,
1777
+ "human_approval": [],
1778
+ "allow": [],
1779
+ "deny": []
1780
+ },
1781
+ "policy_id": null,
1782
+ "engine": {
1783
+ "version": "pf4",
1784
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1785
+ },
1786
+ "decision": "allow",
1787
+ "base_decision": "allow",
1788
+ "human_confirmation_required": false,
1789
+ "reason_codes": [
1790
+ "resolve.actions.read"
1791
+ ],
1792
+ "steps": [
1793
+ {
1794
+ "rule": "resolve.actions.read",
1795
+ "effect": "allow",
1796
+ "why": "suite fixture"
1797
+ }
1798
+ ],
1799
+ "alternatives": [],
1800
+ "evidence": {
1801
+ "report": "https://crawlcheck.io/r/suitefixture",
1802
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1803
+ },
1804
+ "resolve": {
1805
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1806
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1807
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1808
+ },
1809
+ "sha256": "c10b5197019d39ccdc280e381611cc39fecb4599b3caaf054f2933f61617cce4",
1810
+ "signature": {
1811
+ "v": 1,
1812
+ "alg": "Ed25519",
1813
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1814
+ "over": "sha256",
1815
+ "message": "crawlcheck-data-v1\nc10b5197019d39ccdc280e381611cc39fecb4599b3caaf054f2933f61617cce4",
1816
+ "sig": "JMniM_hoBzoqjk5lxsZ_ZPOKE5jOs0X8veal7KukmwldWuVcf1iJNOtU8shwhPBSd1NiEJrVu1tsNz_F-DgDDQ",
1817
+ "signed_at": "2026-10-10T15:59:00.000Z",
1818
+ "key": {
1819
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1820
+ "jwk": {
1821
+ "kty": "OKP",
1822
+ "crv": "Ed25519",
1823
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1824
+ },
1825
+ "published_in": "the suite's directory"
1826
+ }
1827
+ }
1828
+ }
1829
+ },
1830
+ "expect": {
1831
+ "proceed": false
1832
+ }
1833
+ },
1834
+ {
1835
+ "id": "nonce-missing",
1836
+ "title": "the request sent a nonce, the receipt has none",
1837
+ "why": "",
1838
+ "request": {
1839
+ "domain": "good.example",
1840
+ "action": "read",
1841
+ "allow_warn": false,
1842
+ "confirm": null,
1843
+ "nonce": "ccguard-acceptance-0001",
1844
+ "now": "2026-10-10T16:00:00.000Z"
1845
+ },
1846
+ "crawlcheck": {
1847
+ "status": 200,
1848
+ "body": {
1849
+ "kind": "crawlcheck-decision",
1850
+ "v": 1,
1851
+ "decided_at": "2026-10-10T15:59:00.000Z",
1852
+ "expires_at": "2026-10-11T15:59:00.000Z",
1853
+ "clock_skew_s": 300,
1854
+ "domain": "good.example",
1855
+ "action": "read",
1856
+ "agent": null,
1857
+ "template": null,
1858
+ "policy": {
1859
+ "max_age_hours": null,
1860
+ "on_warn": "warn",
1861
+ "require_entity": false,
1862
+ "human_approval": [],
1863
+ "allow": [],
1864
+ "deny": []
1865
+ },
1866
+ "policy_id": null,
1867
+ "engine": {
1868
+ "version": "pf4",
1869
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1870
+ },
1871
+ "decision": "allow",
1872
+ "base_decision": "allow",
1873
+ "human_confirmation_required": false,
1874
+ "reason_codes": [
1875
+ "resolve.actions.read"
1876
+ ],
1877
+ "steps": [
1878
+ {
1879
+ "rule": "resolve.actions.read",
1880
+ "effect": "allow",
1881
+ "why": "suite fixture"
1882
+ }
1883
+ ],
1884
+ "alternatives": [],
1885
+ "evidence": {
1886
+ "report": "https://crawlcheck.io/r/suitefixture",
1887
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1888
+ },
1889
+ "resolve": {
1890
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1891
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1892
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1893
+ },
1894
+ "sha256": "a945f42028e11abc9c38c03935e08e5173d67531b115e51d134d7a6a2a4d6995",
1895
+ "signature": {
1896
+ "v": 1,
1897
+ "alg": "Ed25519",
1898
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1899
+ "over": "sha256",
1900
+ "message": "crawlcheck-data-v1\na945f42028e11abc9c38c03935e08e5173d67531b115e51d134d7a6a2a4d6995",
1901
+ "sig": "lG3TABXmWO05i83q31YHtt8VI50Hpn8U93R-cdhgpE-yYSCC3dmSuPilc0HMqjO9IKzpDprwzAakxXlDF4nCAw",
1902
+ "signed_at": "2026-10-10T15:59:00.000Z",
1903
+ "key": {
1904
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1905
+ "jwk": {
1906
+ "kty": "OKP",
1907
+ "crv": "Ed25519",
1908
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1909
+ },
1910
+ "published_in": "the suite's directory"
1911
+ }
1912
+ }
1913
+ }
1914
+ },
1915
+ "expect": {
1916
+ "proceed": false
1917
+ }
1918
+ },
1919
+ {
1920
+ "id": "tampered",
1921
+ "title": "a block receipt edited to allow",
1922
+ "why": "the digest no longer matches",
1923
+ "request": {
1924
+ "domain": "good.example",
1925
+ "action": "read",
1926
+ "allow_warn": false,
1927
+ "confirm": null,
1928
+ "nonce": "ccguard-acceptance-0001",
1929
+ "now": "2026-10-10T16:00:00.000Z"
1930
+ },
1931
+ "crawlcheck": {
1932
+ "status": 200,
1933
+ "body": {
1934
+ "kind": "crawlcheck-decision",
1935
+ "v": 1,
1936
+ "decided_at": "2026-10-10T15:59:00.000Z",
1937
+ "expires_at": "2026-10-11T15:59:00.000Z",
1938
+ "clock_skew_s": 300,
1939
+ "nonce": "ccguard-acceptance-0001",
1940
+ "domain": "good.example",
1941
+ "action": "read",
1942
+ "agent": null,
1943
+ "template": null,
1944
+ "policy": {
1945
+ "max_age_hours": null,
1946
+ "on_warn": "warn",
1947
+ "require_entity": false,
1948
+ "human_approval": [],
1949
+ "allow": [],
1950
+ "deny": []
1951
+ },
1952
+ "policy_id": null,
1953
+ "engine": {
1954
+ "version": "pf4",
1955
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
1956
+ },
1957
+ "decision": "allow",
1958
+ "base_decision": "block",
1959
+ "human_confirmation_required": false,
1960
+ "reason_codes": [
1961
+ "resolve.actions.read"
1962
+ ],
1963
+ "steps": [
1964
+ {
1965
+ "rule": "resolve.actions.read",
1966
+ "effect": "block",
1967
+ "why": "suite fixture"
1968
+ }
1969
+ ],
1970
+ "alternatives": [],
1971
+ "evidence": {
1972
+ "report": "https://crawlcheck.io/r/suitefixture",
1973
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1974
+ },
1975
+ "resolve": {
1976
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1977
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1978
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
1979
+ },
1980
+ "sha256": "522e43a3fa2a7497609711ac336e5b39c2031731959e416a6093b16e40545e6a",
1981
+ "signature": {
1982
+ "v": 1,
1983
+ "alg": "Ed25519",
1984
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1985
+ "over": "sha256",
1986
+ "message": "crawlcheck-data-v1\n522e43a3fa2a7497609711ac336e5b39c2031731959e416a6093b16e40545e6a",
1987
+ "sig": "xiGho7xFzvBn12O6p0b6CvtET7ffAlSJpiUoX01BA3MazC69jlf7CghIEtJ8RmNoHzxYMiE4719AmRVHhsYnAg",
1988
+ "signed_at": "2026-10-10T15:59:00.000Z",
1989
+ "key": {
1990
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
1991
+ "jwk": {
1992
+ "kty": "OKP",
1993
+ "crv": "Ed25519",
1994
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
1995
+ },
1996
+ "published_in": "the suite's directory"
1997
+ }
1998
+ }
1999
+ }
2000
+ },
2001
+ "expect": {
2002
+ "proceed": false
2003
+ }
2004
+ },
2005
+ {
2006
+ "id": "tampered-unsigned-field",
2007
+ "title": "a field added after signing",
2008
+ "why": "every field is signed",
2009
+ "request": {
2010
+ "domain": "good.example",
2011
+ "action": "read",
2012
+ "allow_warn": false,
2013
+ "confirm": null,
2014
+ "nonce": "ccguard-acceptance-0001",
2015
+ "now": "2026-10-10T16:00:00.000Z"
2016
+ },
2017
+ "crawlcheck": {
2018
+ "status": 200,
2019
+ "body": {
2020
+ "kind": "crawlcheck-decision",
2021
+ "v": 1,
2022
+ "decided_at": "2026-10-10T15:59:00.000Z",
2023
+ "expires_at": "2026-10-11T15:59:00.000Z",
2024
+ "clock_skew_s": 300,
2025
+ "nonce": "ccguard-acceptance-0001",
2026
+ "domain": "good.example",
2027
+ "action": "read",
2028
+ "agent": null,
2029
+ "template": null,
2030
+ "policy": {
2031
+ "max_age_hours": null,
2032
+ "on_warn": "warn",
2033
+ "require_entity": false,
2034
+ "human_approval": [],
2035
+ "allow": [],
2036
+ "deny": []
2037
+ },
2038
+ "policy_id": null,
2039
+ "engine": {
2040
+ "version": "pf4",
2041
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2042
+ },
2043
+ "decision": "allow",
2044
+ "base_decision": "allow",
2045
+ "human_confirmation_required": false,
2046
+ "reason_codes": [
2047
+ "resolve.actions.read"
2048
+ ],
2049
+ "steps": [
2050
+ {
2051
+ "rule": "resolve.actions.read",
2052
+ "effect": "allow",
2053
+ "why": "suite fixture"
2054
+ }
2055
+ ],
2056
+ "alternatives": [],
2057
+ "evidence": {
2058
+ "report": "https://crawlcheck.io/r/suitefixture",
2059
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2060
+ },
2061
+ "resolve": {
2062
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2063
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2064
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2065
+ },
2066
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2067
+ "signature": {
2068
+ "v": 1,
2069
+ "alg": "Ed25519",
2070
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2071
+ "over": "sha256",
2072
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2073
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
2074
+ "signed_at": "2026-10-10T15:59:00.000Z",
2075
+ "key": {
2076
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2077
+ "jwk": {
2078
+ "kty": "OKP",
2079
+ "crv": "Ed25519",
2080
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
2081
+ },
2082
+ "published_in": "the suite's directory"
2083
+ }
2084
+ },
2085
+ "x_note": "added later"
2086
+ }
2087
+ },
2088
+ "expect": {
2089
+ "proceed": false
2090
+ }
2091
+ },
2092
+ {
2093
+ "id": "unknown-signed-field",
2094
+ "title": "an unknown field that was signed",
2095
+ "why": "forward compatible: ignore unknown fields, but only signed ones",
2096
+ "request": {
2097
+ "domain": "good.example",
2098
+ "action": "read",
2099
+ "allow_warn": false,
2100
+ "confirm": null,
2101
+ "nonce": "ccguard-acceptance-0001",
2102
+ "now": "2026-10-10T16:00:00.000Z"
2103
+ },
2104
+ "crawlcheck": {
2105
+ "status": 200,
2106
+ "body": {
2107
+ "kind": "crawlcheck-decision",
2108
+ "v": 1,
2109
+ "decided_at": "2026-10-10T15:59:00.000Z",
2110
+ "expires_at": "2026-10-11T15:59:00.000Z",
2111
+ "clock_skew_s": 300,
2112
+ "nonce": "ccguard-acceptance-0001",
2113
+ "domain": "good.example",
2114
+ "action": "read",
2115
+ "agent": null,
2116
+ "template": null,
2117
+ "policy": {
2118
+ "max_age_hours": null,
2119
+ "on_warn": "warn",
2120
+ "require_entity": false,
2121
+ "human_approval": [],
2122
+ "allow": [],
2123
+ "deny": []
2124
+ },
2125
+ "policy_id": null,
2126
+ "engine": {
2127
+ "version": "pf4",
2128
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2129
+ },
2130
+ "decision": "allow",
2131
+ "base_decision": "allow",
2132
+ "human_confirmation_required": false,
2133
+ "reason_codes": [
2134
+ "resolve.actions.read"
2135
+ ],
2136
+ "steps": [
2137
+ {
2138
+ "rule": "resolve.actions.read",
2139
+ "effect": "allow",
2140
+ "why": "suite fixture"
2141
+ }
2142
+ ],
2143
+ "alternatives": [],
2144
+ "evidence": {
2145
+ "report": "https://crawlcheck.io/r/suitefixture",
2146
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2147
+ },
2148
+ "resolve": {
2149
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2150
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2151
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2152
+ },
2153
+ "x_future_field": {
2154
+ "a": 1
2155
+ },
2156
+ "sha256": "487bebaef655eb80fbd3a2a40a37175ac7400593f469f55624a4be7340c91d43",
2157
+ "signature": {
2158
+ "v": 1,
2159
+ "alg": "Ed25519",
2160
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2161
+ "over": "sha256",
2162
+ "message": "crawlcheck-data-v1\n487bebaef655eb80fbd3a2a40a37175ac7400593f469f55624a4be7340c91d43",
2163
+ "sig": "HkbhFMAmngLxT7qDoJiC5iMaTWI3c-VzEZyOJstCDZTwxzM0JvpsJcKHrx1bAhfyq1SfN6BfrdYi06n3I3CqCg",
2164
+ "signed_at": "2026-10-10T15:59:00.000Z",
2165
+ "key": {
2166
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2167
+ "jwk": {
2168
+ "kty": "OKP",
2169
+ "crv": "Ed25519",
2170
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
2171
+ },
2172
+ "published_in": "the suite's directory"
2173
+ }
2174
+ }
2175
+ }
2176
+ },
2177
+ "expect": {
2178
+ "proceed": true
2179
+ }
2180
+ },
2181
+ {
2182
+ "id": "foreign-key",
2183
+ "title": "a valid signature by a key CrawlCheck does not publish",
2184
+ "why": "integrity is not trust",
2185
+ "request": {
2186
+ "domain": "good.example",
2187
+ "action": "read",
2188
+ "allow_warn": false,
2189
+ "confirm": null,
2190
+ "nonce": "ccguard-acceptance-0001",
2191
+ "now": "2026-10-10T16:00:00.000Z"
2192
+ },
2193
+ "crawlcheck": {
2194
+ "status": 200,
2195
+ "body": {
2196
+ "kind": "crawlcheck-decision",
2197
+ "v": 1,
2198
+ "decided_at": "2026-10-10T15:59:00.000Z",
2199
+ "expires_at": "2026-10-11T15:59:00.000Z",
2200
+ "clock_skew_s": 300,
2201
+ "nonce": "ccguard-acceptance-0001",
2202
+ "domain": "good.example",
2203
+ "action": "read",
2204
+ "agent": null,
2205
+ "template": null,
2206
+ "policy": {
2207
+ "max_age_hours": null,
2208
+ "on_warn": "warn",
2209
+ "require_entity": false,
2210
+ "human_approval": [],
2211
+ "allow": [],
2212
+ "deny": []
2213
+ },
2214
+ "policy_id": null,
2215
+ "engine": {
2216
+ "version": "pf4",
2217
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2218
+ },
2219
+ "decision": "allow",
2220
+ "base_decision": "allow",
2221
+ "human_confirmation_required": false,
2222
+ "reason_codes": [
2223
+ "resolve.actions.read"
2224
+ ],
2225
+ "steps": [
2226
+ {
2227
+ "rule": "resolve.actions.read",
2228
+ "effect": "allow",
2229
+ "why": "suite fixture"
2230
+ }
2231
+ ],
2232
+ "alternatives": [],
2233
+ "evidence": {
2234
+ "report": "https://crawlcheck.io/r/suitefixture",
2235
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2236
+ },
2237
+ "resolve": {
2238
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2239
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2240
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2241
+ },
2242
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2243
+ "signature": {
2244
+ "v": 1,
2245
+ "alg": "Ed25519",
2246
+ "kid": "hiz1BvdOLd02B_tacU8Ps3pnx-QPuaZiI7DrU-_BMqo",
2247
+ "over": "sha256",
2248
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2249
+ "sig": "hSzvxKW0rwKP83tqJyzp-dQF0TJ55Z9dl9FLuwmXemOeuaXqmTTji5EpWr5w-g24O4Qzhrtp0p1TMSAMflF9AQ",
2250
+ "signed_at": "2026-10-10T15:59:00.000Z",
2251
+ "key": {
2252
+ "kid": "hiz1BvdOLd02B_tacU8Ps3pnx-QPuaZiI7DrU-_BMqo",
2253
+ "jwk": {
2254
+ "kty": "OKP",
2255
+ "crv": "Ed25519",
2256
+ "x": "6MBlSJe5bf02wl5uX3c01ubBjBTQLR4wDnu08DytZYU"
2257
+ },
2258
+ "published_in": "the suite's directory"
2259
+ }
2260
+ }
2261
+ }
2262
+ },
2263
+ "expect": {
2264
+ "proceed": false
2265
+ }
2266
+ },
2267
+ {
2268
+ "id": "kid-mismatch",
2269
+ "title": "a published kid on a signature by another key",
2270
+ "why": "the key id must be the key's thumbprint",
2271
+ "request": {
2272
+ "domain": "good.example",
2273
+ "action": "read",
2274
+ "allow_warn": false,
2275
+ "confirm": null,
2276
+ "nonce": "ccguard-acceptance-0001",
2277
+ "now": "2026-10-10T16:00:00.000Z"
2278
+ },
2279
+ "crawlcheck": {
2280
+ "status": 200,
2281
+ "body": {
2282
+ "kind": "crawlcheck-decision",
2283
+ "v": 1,
2284
+ "decided_at": "2026-10-10T15:59:00.000Z",
2285
+ "expires_at": "2026-10-11T15:59:00.000Z",
2286
+ "clock_skew_s": 300,
2287
+ "nonce": "ccguard-acceptance-0001",
2288
+ "domain": "good.example",
2289
+ "action": "read",
2290
+ "agent": null,
2291
+ "template": null,
2292
+ "policy": {
2293
+ "max_age_hours": null,
2294
+ "on_warn": "warn",
2295
+ "require_entity": false,
2296
+ "human_approval": [],
2297
+ "allow": [],
2298
+ "deny": []
2299
+ },
2300
+ "policy_id": null,
2301
+ "engine": {
2302
+ "version": "pf4",
2303
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2304
+ },
2305
+ "decision": "allow",
2306
+ "base_decision": "allow",
2307
+ "human_confirmation_required": false,
2308
+ "reason_codes": [
2309
+ "resolve.actions.read"
2310
+ ],
2311
+ "steps": [
2312
+ {
2313
+ "rule": "resolve.actions.read",
2314
+ "effect": "allow",
2315
+ "why": "suite fixture"
2316
+ }
2317
+ ],
2318
+ "alternatives": [],
2319
+ "evidence": {
2320
+ "report": "https://crawlcheck.io/r/suitefixture",
2321
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2322
+ },
2323
+ "resolve": {
2324
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2325
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2326
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2327
+ },
2328
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2329
+ "signature": {
2330
+ "v": 1,
2331
+ "alg": "Ed25519",
2332
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2333
+ "over": "sha256",
2334
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2335
+ "sig": "hSzvxKW0rwKP83tqJyzp-dQF0TJ55Z9dl9FLuwmXemOeuaXqmTTji5EpWr5w-g24O4Qzhrtp0p1TMSAMflF9AQ",
2336
+ "signed_at": "2026-10-10T15:59:00.000Z",
2337
+ "key": {
2338
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2339
+ "jwk": {
2340
+ "kty": "OKP",
2341
+ "crv": "Ed25519",
2342
+ "x": "6MBlSJe5bf02wl5uX3c01ubBjBTQLR4wDnu08DytZYU"
2343
+ },
2344
+ "published_in": "the suite's directory"
2345
+ }
2346
+ }
2347
+ }
2348
+ },
2349
+ "expect": {
2350
+ "proceed": false
2351
+ }
2352
+ },
2353
+ {
2354
+ "id": "unsigned",
2355
+ "title": "no signature",
2356
+ "why": "",
2357
+ "request": {
2358
+ "domain": "good.example",
2359
+ "action": "read",
2360
+ "allow_warn": false,
2361
+ "confirm": null,
2362
+ "nonce": "ccguard-acceptance-0001",
2363
+ "now": "2026-10-10T16:00:00.000Z"
2364
+ },
2365
+ "crawlcheck": {
2366
+ "status": 200,
2367
+ "body": {
2368
+ "kind": "crawlcheck-decision",
2369
+ "v": 1,
2370
+ "decided_at": "2026-10-10T15:59:00.000Z",
2371
+ "expires_at": "2026-10-11T15:59:00.000Z",
2372
+ "clock_skew_s": 300,
2373
+ "nonce": "ccguard-acceptance-0001",
2374
+ "domain": "good.example",
2375
+ "action": "read",
2376
+ "agent": null,
2377
+ "template": null,
2378
+ "policy": {
2379
+ "max_age_hours": null,
2380
+ "on_warn": "warn",
2381
+ "require_entity": false,
2382
+ "human_approval": [],
2383
+ "allow": [],
2384
+ "deny": []
2385
+ },
2386
+ "policy_id": null,
2387
+ "engine": {
2388
+ "version": "pf4",
2389
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2390
+ },
2391
+ "decision": "allow",
2392
+ "base_decision": "allow",
2393
+ "human_confirmation_required": false,
2394
+ "reason_codes": [
2395
+ "resolve.actions.read"
2396
+ ],
2397
+ "steps": [
2398
+ {
2399
+ "rule": "resolve.actions.read",
2400
+ "effect": "allow",
2401
+ "why": "suite fixture"
2402
+ }
2403
+ ],
2404
+ "alternatives": [],
2405
+ "evidence": {
2406
+ "report": "https://crawlcheck.io/r/suitefixture",
2407
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2408
+ },
2409
+ "resolve": {
2410
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2411
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2412
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2413
+ },
2414
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72"
2415
+ }
2416
+ },
2417
+ "expect": {
2418
+ "proceed": false
2419
+ }
2420
+ },
2421
+ {
2422
+ "id": "resolve-unbound",
2423
+ "title": "no resolve answer named",
2424
+ "why": "a decision must name the answer it was made from",
2425
+ "request": {
2426
+ "domain": "good.example",
2427
+ "action": "read",
2428
+ "allow_warn": false,
2429
+ "confirm": null,
2430
+ "nonce": "ccguard-acceptance-0001",
2431
+ "now": "2026-10-10T16:00:00.000Z"
2432
+ },
2433
+ "crawlcheck": {
2434
+ "status": 200,
2435
+ "body": {
2436
+ "kind": "crawlcheck-decision",
2437
+ "v": 1,
2438
+ "decided_at": "2026-10-10T15:59:00.000Z",
2439
+ "expires_at": "2026-10-11T15:59:00.000Z",
2440
+ "clock_skew_s": 300,
2441
+ "nonce": "ccguard-acceptance-0001",
2442
+ "domain": "good.example",
2443
+ "action": "read",
2444
+ "agent": null,
2445
+ "template": null,
2446
+ "policy": {
2447
+ "max_age_hours": null,
2448
+ "on_warn": "warn",
2449
+ "require_entity": false,
2450
+ "human_approval": [],
2451
+ "allow": [],
2452
+ "deny": []
2453
+ },
2454
+ "policy_id": null,
2455
+ "engine": {
2456
+ "version": "pf4",
2457
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2458
+ },
2459
+ "decision": "allow",
2460
+ "base_decision": "allow",
2461
+ "human_confirmation_required": false,
2462
+ "reason_codes": [
2463
+ "resolve.actions.read"
2464
+ ],
2465
+ "steps": [
2466
+ {
2467
+ "rule": "resolve.actions.read",
2468
+ "effect": "allow",
2469
+ "why": "suite fixture"
2470
+ }
2471
+ ],
2472
+ "alternatives": [],
2473
+ "evidence": {
2474
+ "report": "https://crawlcheck.io/r/suitefixture",
2475
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2476
+ },
2477
+ "sha256": "5cb17bb16c0e5575318767d9c4a85b881a347c18e25976a90862e791061517c5",
2478
+ "signature": {
2479
+ "v": 1,
2480
+ "alg": "Ed25519",
2481
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2482
+ "over": "sha256",
2483
+ "message": "crawlcheck-data-v1\n5cb17bb16c0e5575318767d9c4a85b881a347c18e25976a90862e791061517c5",
2484
+ "sig": "iY3dfYatdpJrXKlAjNv_BQql91IT-1_DldVn06ZHXgq6cqnzW2J8pL4Ff_5-n-Ga1Y_QEbau58MrSqbBAxchAQ",
2485
+ "signed_at": "2026-10-10T15:59:00.000Z",
2486
+ "key": {
2487
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2488
+ "jwk": {
2489
+ "kty": "OKP",
2490
+ "crv": "Ed25519",
2491
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
2492
+ },
2493
+ "published_in": "the suite's directory"
2494
+ }
2495
+ }
2496
+ }
2497
+ },
2498
+ "expect": {
2499
+ "proceed": false
2500
+ }
2501
+ },
2502
+ {
2503
+ "id": "wrong-kind",
2504
+ "title": "a signed document of another kind",
2505
+ "why": "only a decision receipt decides",
2506
+ "request": {
2507
+ "domain": "good.example",
2508
+ "action": "read",
2509
+ "allow_warn": false,
2510
+ "confirm": null,
2511
+ "nonce": "ccguard-acceptance-0001",
2512
+ "now": "2026-10-10T16:00:00.000Z"
2513
+ },
2514
+ "crawlcheck": {
2515
+ "status": 200,
2516
+ "body": {
2517
+ "kind": "crawlcheck-resolve",
2518
+ "v": 1,
2519
+ "decided_at": "2026-10-10T15:59:00.000Z",
2520
+ "expires_at": "2026-10-11T15:59:00.000Z",
2521
+ "clock_skew_s": 300,
2522
+ "nonce": "ccguard-acceptance-0001",
2523
+ "domain": "good.example",
2524
+ "action": "read",
2525
+ "agent": null,
2526
+ "template": null,
2527
+ "policy": {
2528
+ "max_age_hours": null,
2529
+ "on_warn": "warn",
2530
+ "require_entity": false,
2531
+ "human_approval": [],
2532
+ "allow": [],
2533
+ "deny": []
2534
+ },
2535
+ "policy_id": null,
2536
+ "engine": {
2537
+ "version": "pf4",
2538
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2539
+ },
2540
+ "decision": "allow",
2541
+ "base_decision": "allow",
2542
+ "human_confirmation_required": false,
2543
+ "reason_codes": [
2544
+ "resolve.actions.read"
2545
+ ],
2546
+ "steps": [
2547
+ {
2548
+ "rule": "resolve.actions.read",
2549
+ "effect": "allow",
2550
+ "why": "suite fixture"
2551
+ }
2552
+ ],
2553
+ "alternatives": [],
2554
+ "evidence": {
2555
+ "report": "https://crawlcheck.io/r/suitefixture",
2556
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2557
+ },
2558
+ "resolve": {
2559
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2560
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2561
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2562
+ },
2563
+ "sha256": "4d0cdf12eddf6dc14b7997eda8e9b5645105c2826a6fd8e5863cae562c83f122",
2564
+ "signature": {
2565
+ "v": 1,
2566
+ "alg": "Ed25519",
2567
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2568
+ "over": "sha256",
2569
+ "message": "crawlcheck-data-v1\n4d0cdf12eddf6dc14b7997eda8e9b5645105c2826a6fd8e5863cae562c83f122",
2570
+ "sig": "zdiF4ay6wGDX8I8BTE0KWlhPVyzWs6xvxYFQZwFJ6wTetVclirqVmuwz-SN6IzXo29LlQqYd_HDgQuoVDR_ABw",
2571
+ "signed_at": "2026-10-10T15:59:00.000Z",
2572
+ "key": {
2573
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2574
+ "jwk": {
2575
+ "kty": "OKP",
2576
+ "crv": "Ed25519",
2577
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
2578
+ },
2579
+ "published_in": "the suite's directory"
2580
+ }
2581
+ }
2582
+ }
2583
+ },
2584
+ "expect": {
2585
+ "proceed": false
2586
+ }
2587
+ },
2588
+ {
2589
+ "id": "wrong-version",
2590
+ "title": "a decision of an unknown version",
2591
+ "why": "",
2592
+ "request": {
2593
+ "domain": "good.example",
2594
+ "action": "read",
2595
+ "allow_warn": false,
2596
+ "confirm": null,
2597
+ "nonce": "ccguard-acceptance-0001",
2598
+ "now": "2026-10-10T16:00:00.000Z"
2599
+ },
2600
+ "crawlcheck": {
2601
+ "status": 200,
2602
+ "body": {
2603
+ "kind": "crawlcheck-decision",
2604
+ "v": 2,
2605
+ "decided_at": "2026-10-10T15:59:00.000Z",
2606
+ "expires_at": "2026-10-11T15:59:00.000Z",
2607
+ "clock_skew_s": 300,
2608
+ "nonce": "ccguard-acceptance-0001",
2609
+ "domain": "good.example",
2610
+ "action": "read",
2611
+ "agent": null,
2612
+ "template": null,
2613
+ "policy": {
2614
+ "max_age_hours": null,
2615
+ "on_warn": "warn",
2616
+ "require_entity": false,
2617
+ "human_approval": [],
2618
+ "allow": [],
2619
+ "deny": []
2620
+ },
2621
+ "policy_id": null,
2622
+ "engine": {
2623
+ "version": "pf4",
2624
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2625
+ },
2626
+ "decision": "allow",
2627
+ "base_decision": "allow",
2628
+ "human_confirmation_required": false,
2629
+ "reason_codes": [
2630
+ "resolve.actions.read"
2631
+ ],
2632
+ "steps": [
2633
+ {
2634
+ "rule": "resolve.actions.read",
2635
+ "effect": "allow",
2636
+ "why": "suite fixture"
2637
+ }
2638
+ ],
2639
+ "alternatives": [],
2640
+ "evidence": {
2641
+ "report": "https://crawlcheck.io/r/suitefixture",
2642
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2643
+ },
2644
+ "resolve": {
2645
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2646
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2647
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2648
+ },
2649
+ "sha256": "6f7d751e54530891cae051857199c1318e01ac672be9688b15d3ac8f4d2bbc67",
2650
+ "signature": {
2651
+ "v": 1,
2652
+ "alg": "Ed25519",
2653
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2654
+ "over": "sha256",
2655
+ "message": "crawlcheck-data-v1\n6f7d751e54530891cae051857199c1318e01ac672be9688b15d3ac8f4d2bbc67",
2656
+ "sig": "BPPmNlTUjYlrHFU3ibHC250cynzfS9KSTa5tkTs-2-zGMtRXKaTfyd_Iejed1E55DsDGoiq-21xy-se9-g67Dw",
2657
+ "signed_at": "2026-10-10T15:59:00.000Z",
2658
+ "key": {
2659
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2660
+ "jwk": {
2661
+ "kty": "OKP",
2662
+ "crv": "Ed25519",
2663
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
2664
+ },
2665
+ "published_in": "the suite's directory"
2666
+ }
2667
+ }
2668
+ }
2669
+ },
2670
+ "expect": {
2671
+ "proceed": false
2672
+ }
2673
+ },
2674
+ {
2675
+ "id": "malformed-empty",
2676
+ "title": "an empty object",
2677
+ "why": "",
2678
+ "request": {
2679
+ "domain": "good.example",
2680
+ "action": "read",
2681
+ "allow_warn": false,
2682
+ "confirm": null,
2683
+ "nonce": "ccguard-acceptance-0001",
2684
+ "now": "2026-10-10T16:00:00.000Z"
2685
+ },
2686
+ "crawlcheck": {
2687
+ "status": 200,
2688
+ "body": {}
2689
+ },
2690
+ "expect": {
2691
+ "proceed": false
2692
+ }
2693
+ },
2694
+ {
2695
+ "id": "malformed-array",
2696
+ "title": "a JSON array",
2697
+ "why": "",
2698
+ "request": {
2699
+ "domain": "good.example",
2700
+ "action": "read",
2701
+ "allow_warn": false,
2702
+ "confirm": null,
2703
+ "nonce": "ccguard-acceptance-0001",
2704
+ "now": "2026-10-10T16:00:00.000Z"
2705
+ },
2706
+ "crawlcheck": {
2707
+ "status": 200,
2708
+ "body": []
2709
+ },
2710
+ "expect": {
2711
+ "proceed": false
2712
+ }
2713
+ },
2714
+ {
2715
+ "id": "malformed-text",
2716
+ "title": "not JSON",
2717
+ "why": "",
2718
+ "request": {
2719
+ "domain": "good.example",
2720
+ "action": "read",
2721
+ "allow_warn": false,
2722
+ "confirm": null,
2723
+ "nonce": "ccguard-acceptance-0001",
2724
+ "now": "2026-10-10T16:00:00.000Z"
2725
+ },
2726
+ "crawlcheck": {
2727
+ "status": 200,
2728
+ "text": "<html>maintenance</html>"
2729
+ },
2730
+ "expect": {
2731
+ "proceed": false
2732
+ }
2733
+ },
2734
+ {
2735
+ "id": "http-500",
2736
+ "title": "CrawlCheck answers 500",
2737
+ "why": "fail closed",
2738
+ "request": {
2739
+ "domain": "good.example",
2740
+ "action": "read",
2741
+ "allow_warn": false,
2742
+ "confirm": null,
2743
+ "nonce": "ccguard-acceptance-0001",
2744
+ "now": "2026-10-10T16:00:00.000Z"
2745
+ },
2746
+ "crawlcheck": {
2747
+ "status": 500,
2748
+ "text": "{\"error\":\"internal\"}"
2749
+ },
2750
+ "expect": {
2751
+ "proceed": false
2752
+ }
2753
+ },
2754
+ {
2755
+ "id": "http-429",
2756
+ "title": "CrawlCheck answers 429",
2757
+ "why": "fail closed",
2758
+ "request": {
2759
+ "domain": "good.example",
2760
+ "action": "read",
2761
+ "allow_warn": false,
2762
+ "confirm": null,
2763
+ "nonce": "ccguard-acceptance-0001",
2764
+ "now": "2026-10-10T16:00:00.000Z"
2765
+ },
2766
+ "crawlcheck": {
2767
+ "status": 429,
2768
+ "text": "{\"error\":\"slow down\"}"
2769
+ },
2770
+ "expect": {
2771
+ "proceed": false
2772
+ }
2773
+ },
2774
+ {
2775
+ "id": "unreachable",
2776
+ "title": "CrawlCheck cannot be reached",
2777
+ "why": "fail closed",
2778
+ "request": {
2779
+ "domain": "good.example",
2780
+ "action": "read",
2781
+ "allow_warn": false,
2782
+ "confirm": null,
2783
+ "nonce": "ccguard-acceptance-0001",
2784
+ "now": "2026-10-10T16:00:00.000Z"
2785
+ },
2786
+ "crawlcheck": {
2787
+ "unreachable": true
2788
+ },
2789
+ "expect": {
2790
+ "proceed": false
2791
+ }
2792
+ },
2793
+ {
2794
+ "id": "fetch-ok",
2795
+ "title": "a guarded fetch with no redirect",
2796
+ "why": "positive control",
2797
+ "request": {
2798
+ "url": "https://good.example/page",
2799
+ "action": "read",
2800
+ "allow_warn": false,
2801
+ "confirm": null,
2802
+ "nonce": "ccguard-acceptance-0001",
2803
+ "now": "2026-10-10T16:00:00.000Z",
2804
+ "max_hops": 10
2805
+ },
2806
+ "crawlcheck": {
2807
+ "by_domain": {
2808
+ "good.example": {
2809
+ "kind": "crawlcheck-decision",
2810
+ "v": 1,
2811
+ "decided_at": "2026-10-10T15:59:00.000Z",
2812
+ "expires_at": "2026-10-11T15:59:00.000Z",
2813
+ "clock_skew_s": 300,
2814
+ "nonce": "ccguard-acceptance-0001",
2815
+ "domain": "good.example",
2816
+ "action": "read",
2817
+ "agent": null,
2818
+ "template": null,
2819
+ "policy": {
2820
+ "max_age_hours": null,
2821
+ "on_warn": "warn",
2822
+ "require_entity": false,
2823
+ "human_approval": [],
2824
+ "allow": [],
2825
+ "deny": []
2826
+ },
2827
+ "policy_id": null,
2828
+ "engine": {
2829
+ "version": "pf4",
2830
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2831
+ },
2832
+ "decision": "allow",
2833
+ "base_decision": "allow",
2834
+ "human_confirmation_required": false,
2835
+ "reason_codes": [
2836
+ "resolve.actions.read"
2837
+ ],
2838
+ "steps": [
2839
+ {
2840
+ "rule": "resolve.actions.read",
2841
+ "effect": "allow",
2842
+ "why": "suite fixture"
2843
+ }
2844
+ ],
2845
+ "alternatives": [],
2846
+ "evidence": {
2847
+ "report": "https://crawlcheck.io/r/suitefixture",
2848
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2849
+ },
2850
+ "resolve": {
2851
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2852
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2853
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2854
+ },
2855
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2856
+ "signature": {
2857
+ "v": 1,
2858
+ "alg": "Ed25519",
2859
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2860
+ "over": "sha256",
2861
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
2862
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
2863
+ "signed_at": "2026-10-10T15:59:00.000Z",
2864
+ "key": {
2865
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2866
+ "jwk": {
2867
+ "kty": "OKP",
2868
+ "crv": "Ed25519",
2869
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
2870
+ },
2871
+ "published_in": "the suite's directory"
2872
+ }
2873
+ }
2874
+ },
2875
+ "also-good.example": {
2876
+ "kind": "crawlcheck-decision",
2877
+ "v": 1,
2878
+ "decided_at": "2026-10-10T15:59:00.000Z",
2879
+ "expires_at": "2026-10-11T15:59:00.000Z",
2880
+ "clock_skew_s": 300,
2881
+ "nonce": "ccguard-acceptance-0001",
2882
+ "domain": "also-good.example",
2883
+ "action": "read",
2884
+ "agent": null,
2885
+ "template": null,
2886
+ "policy": {
2887
+ "max_age_hours": null,
2888
+ "on_warn": "warn",
2889
+ "require_entity": false,
2890
+ "human_approval": [],
2891
+ "allow": [],
2892
+ "deny": []
2893
+ },
2894
+ "policy_id": null,
2895
+ "engine": {
2896
+ "version": "pf4",
2897
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2898
+ },
2899
+ "decision": "allow",
2900
+ "base_decision": "allow",
2901
+ "human_confirmation_required": false,
2902
+ "reason_codes": [
2903
+ "resolve.actions.read"
2904
+ ],
2905
+ "steps": [
2906
+ {
2907
+ "rule": "resolve.actions.read",
2908
+ "effect": "allow",
2909
+ "why": "suite fixture"
2910
+ }
2911
+ ],
2912
+ "alternatives": [],
2913
+ "evidence": {
2914
+ "report": "https://crawlcheck.io/r/suitefixture",
2915
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2916
+ },
2917
+ "resolve": {
2918
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2919
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2920
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2921
+ },
2922
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
2923
+ "signature": {
2924
+ "v": 1,
2925
+ "alg": "Ed25519",
2926
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2927
+ "over": "sha256",
2928
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
2929
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
2930
+ "signed_at": "2026-10-10T15:59:00.000Z",
2931
+ "key": {
2932
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2933
+ "jwk": {
2934
+ "kty": "OKP",
2935
+ "crv": "Ed25519",
2936
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
2937
+ },
2938
+ "published_in": "the suite's directory"
2939
+ }
2940
+ }
2941
+ },
2942
+ "evil.example": {
2943
+ "kind": "crawlcheck-decision",
2944
+ "v": 1,
2945
+ "decided_at": "2026-10-10T15:59:00.000Z",
2946
+ "expires_at": "2026-10-11T15:59:00.000Z",
2947
+ "clock_skew_s": 300,
2948
+ "nonce": "ccguard-acceptance-0001",
2949
+ "domain": "evil.example",
2950
+ "action": "read",
2951
+ "agent": null,
2952
+ "template": null,
2953
+ "policy": {
2954
+ "max_age_hours": null,
2955
+ "on_warn": "warn",
2956
+ "require_entity": false,
2957
+ "human_approval": [],
2958
+ "allow": [],
2959
+ "deny": []
2960
+ },
2961
+ "policy_id": null,
2962
+ "engine": {
2963
+ "version": "pf4",
2964
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
2965
+ },
2966
+ "decision": "block",
2967
+ "base_decision": "block",
2968
+ "human_confirmation_required": false,
2969
+ "reason_codes": [
2970
+ "resolve.actions.read"
2971
+ ],
2972
+ "steps": [
2973
+ {
2974
+ "rule": "resolve.actions.read",
2975
+ "effect": "block",
2976
+ "why": "suite fixture"
2977
+ }
2978
+ ],
2979
+ "alternatives": [],
2980
+ "evidence": {
2981
+ "report": "https://crawlcheck.io/r/suitefixture",
2982
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2983
+ },
2984
+ "resolve": {
2985
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
2986
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2987
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
2988
+ },
2989
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
2990
+ "signature": {
2991
+ "v": 1,
2992
+ "alg": "Ed25519",
2993
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
2994
+ "over": "sha256",
2995
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
2996
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
2997
+ "signed_at": "2026-10-10T15:59:00.000Z",
2998
+ "key": {
2999
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3000
+ "jwk": {
3001
+ "kty": "OKP",
3002
+ "crv": "Ed25519",
3003
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3004
+ },
3005
+ "published_in": "the suite's directory"
3006
+ }
3007
+ }
3008
+ }
3009
+ }
3010
+ },
3011
+ "sites": {
3012
+ "https://good.example/page": {
3013
+ "status": 200,
3014
+ "body": "ok"
3015
+ }
3016
+ },
3017
+ "expect": {
3018
+ "proceed": true,
3019
+ "fetched": [
3020
+ "https://good.example/page"
3021
+ ],
3022
+ "receipt_header_to": [
3023
+ "good.example"
3024
+ ]
3025
+ }
3026
+ },
3027
+ {
3028
+ "id": "fetch-blocked",
3029
+ "title": "a blocked domain is never contacted",
3030
+ "why": "the check runs before the request",
3031
+ "request": {
3032
+ "url": "https://evil.example/",
3033
+ "action": "read",
3034
+ "allow_warn": false,
3035
+ "confirm": null,
3036
+ "nonce": "ccguard-acceptance-0001",
3037
+ "now": "2026-10-10T16:00:00.000Z",
3038
+ "max_hops": 10
3039
+ },
3040
+ "crawlcheck": {
3041
+ "by_domain": {
3042
+ "good.example": {
3043
+ "kind": "crawlcheck-decision",
3044
+ "v": 1,
3045
+ "decided_at": "2026-10-10T15:59:00.000Z",
3046
+ "expires_at": "2026-10-11T15:59:00.000Z",
3047
+ "clock_skew_s": 300,
3048
+ "nonce": "ccguard-acceptance-0001",
3049
+ "domain": "good.example",
3050
+ "action": "read",
3051
+ "agent": null,
3052
+ "template": null,
3053
+ "policy": {
3054
+ "max_age_hours": null,
3055
+ "on_warn": "warn",
3056
+ "require_entity": false,
3057
+ "human_approval": [],
3058
+ "allow": [],
3059
+ "deny": []
3060
+ },
3061
+ "policy_id": null,
3062
+ "engine": {
3063
+ "version": "pf4",
3064
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3065
+ },
3066
+ "decision": "allow",
3067
+ "base_decision": "allow",
3068
+ "human_confirmation_required": false,
3069
+ "reason_codes": [
3070
+ "resolve.actions.read"
3071
+ ],
3072
+ "steps": [
3073
+ {
3074
+ "rule": "resolve.actions.read",
3075
+ "effect": "allow",
3076
+ "why": "suite fixture"
3077
+ }
3078
+ ],
3079
+ "alternatives": [],
3080
+ "evidence": {
3081
+ "report": "https://crawlcheck.io/r/suitefixture",
3082
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3083
+ },
3084
+ "resolve": {
3085
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3086
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3087
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3088
+ },
3089
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3090
+ "signature": {
3091
+ "v": 1,
3092
+ "alg": "Ed25519",
3093
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3094
+ "over": "sha256",
3095
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3096
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
3097
+ "signed_at": "2026-10-10T15:59:00.000Z",
3098
+ "key": {
3099
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3100
+ "jwk": {
3101
+ "kty": "OKP",
3102
+ "crv": "Ed25519",
3103
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3104
+ },
3105
+ "published_in": "the suite's directory"
3106
+ }
3107
+ }
3108
+ },
3109
+ "also-good.example": {
3110
+ "kind": "crawlcheck-decision",
3111
+ "v": 1,
3112
+ "decided_at": "2026-10-10T15:59:00.000Z",
3113
+ "expires_at": "2026-10-11T15:59:00.000Z",
3114
+ "clock_skew_s": 300,
3115
+ "nonce": "ccguard-acceptance-0001",
3116
+ "domain": "also-good.example",
3117
+ "action": "read",
3118
+ "agent": null,
3119
+ "template": null,
3120
+ "policy": {
3121
+ "max_age_hours": null,
3122
+ "on_warn": "warn",
3123
+ "require_entity": false,
3124
+ "human_approval": [],
3125
+ "allow": [],
3126
+ "deny": []
3127
+ },
3128
+ "policy_id": null,
3129
+ "engine": {
3130
+ "version": "pf4",
3131
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3132
+ },
3133
+ "decision": "allow",
3134
+ "base_decision": "allow",
3135
+ "human_confirmation_required": false,
3136
+ "reason_codes": [
3137
+ "resolve.actions.read"
3138
+ ],
3139
+ "steps": [
3140
+ {
3141
+ "rule": "resolve.actions.read",
3142
+ "effect": "allow",
3143
+ "why": "suite fixture"
3144
+ }
3145
+ ],
3146
+ "alternatives": [],
3147
+ "evidence": {
3148
+ "report": "https://crawlcheck.io/r/suitefixture",
3149
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3150
+ },
3151
+ "resolve": {
3152
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3153
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3154
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3155
+ },
3156
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3157
+ "signature": {
3158
+ "v": 1,
3159
+ "alg": "Ed25519",
3160
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3161
+ "over": "sha256",
3162
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3163
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
3164
+ "signed_at": "2026-10-10T15:59:00.000Z",
3165
+ "key": {
3166
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3167
+ "jwk": {
3168
+ "kty": "OKP",
3169
+ "crv": "Ed25519",
3170
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3171
+ },
3172
+ "published_in": "the suite's directory"
3173
+ }
3174
+ }
3175
+ },
3176
+ "evil.example": {
3177
+ "kind": "crawlcheck-decision",
3178
+ "v": 1,
3179
+ "decided_at": "2026-10-10T15:59:00.000Z",
3180
+ "expires_at": "2026-10-11T15:59:00.000Z",
3181
+ "clock_skew_s": 300,
3182
+ "nonce": "ccguard-acceptance-0001",
3183
+ "domain": "evil.example",
3184
+ "action": "read",
3185
+ "agent": null,
3186
+ "template": null,
3187
+ "policy": {
3188
+ "max_age_hours": null,
3189
+ "on_warn": "warn",
3190
+ "require_entity": false,
3191
+ "human_approval": [],
3192
+ "allow": [],
3193
+ "deny": []
3194
+ },
3195
+ "policy_id": null,
3196
+ "engine": {
3197
+ "version": "pf4",
3198
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3199
+ },
3200
+ "decision": "block",
3201
+ "base_decision": "block",
3202
+ "human_confirmation_required": false,
3203
+ "reason_codes": [
3204
+ "resolve.actions.read"
3205
+ ],
3206
+ "steps": [
3207
+ {
3208
+ "rule": "resolve.actions.read",
3209
+ "effect": "block",
3210
+ "why": "suite fixture"
3211
+ }
3212
+ ],
3213
+ "alternatives": [],
3214
+ "evidence": {
3215
+ "report": "https://crawlcheck.io/r/suitefixture",
3216
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3217
+ },
3218
+ "resolve": {
3219
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3220
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3221
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3222
+ },
3223
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3224
+ "signature": {
3225
+ "v": 1,
3226
+ "alg": "Ed25519",
3227
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3228
+ "over": "sha256",
3229
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3230
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
3231
+ "signed_at": "2026-10-10T15:59:00.000Z",
3232
+ "key": {
3233
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3234
+ "jwk": {
3235
+ "kty": "OKP",
3236
+ "crv": "Ed25519",
3237
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3238
+ },
3239
+ "published_in": "the suite's directory"
3240
+ }
3241
+ }
3242
+ }
3243
+ }
3244
+ },
3245
+ "sites": {},
3246
+ "expect": {
3247
+ "proceed": false,
3248
+ "fetched": []
3249
+ }
3250
+ },
3251
+ {
3252
+ "id": "redirect-to-blocked",
3253
+ "title": "an allowed page redirects to a blocked domain",
3254
+ "why": "every hop is re-checked; the blocked hop is never requested",
3255
+ "request": {
3256
+ "url": "https://good.example/go",
3257
+ "action": "read",
3258
+ "allow_warn": false,
3259
+ "confirm": null,
3260
+ "nonce": "ccguard-acceptance-0001",
3261
+ "now": "2026-10-10T16:00:00.000Z",
3262
+ "max_hops": 10
3263
+ },
3264
+ "crawlcheck": {
3265
+ "by_domain": {
3266
+ "good.example": {
3267
+ "kind": "crawlcheck-decision",
3268
+ "v": 1,
3269
+ "decided_at": "2026-10-10T15:59:00.000Z",
3270
+ "expires_at": "2026-10-11T15:59:00.000Z",
3271
+ "clock_skew_s": 300,
3272
+ "nonce": "ccguard-acceptance-0001",
3273
+ "domain": "good.example",
3274
+ "action": "read",
3275
+ "agent": null,
3276
+ "template": null,
3277
+ "policy": {
3278
+ "max_age_hours": null,
3279
+ "on_warn": "warn",
3280
+ "require_entity": false,
3281
+ "human_approval": [],
3282
+ "allow": [],
3283
+ "deny": []
3284
+ },
3285
+ "policy_id": null,
3286
+ "engine": {
3287
+ "version": "pf4",
3288
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3289
+ },
3290
+ "decision": "allow",
3291
+ "base_decision": "allow",
3292
+ "human_confirmation_required": false,
3293
+ "reason_codes": [
3294
+ "resolve.actions.read"
3295
+ ],
3296
+ "steps": [
3297
+ {
3298
+ "rule": "resolve.actions.read",
3299
+ "effect": "allow",
3300
+ "why": "suite fixture"
3301
+ }
3302
+ ],
3303
+ "alternatives": [],
3304
+ "evidence": {
3305
+ "report": "https://crawlcheck.io/r/suitefixture",
3306
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3307
+ },
3308
+ "resolve": {
3309
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3310
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3311
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3312
+ },
3313
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3314
+ "signature": {
3315
+ "v": 1,
3316
+ "alg": "Ed25519",
3317
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3318
+ "over": "sha256",
3319
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3320
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
3321
+ "signed_at": "2026-10-10T15:59:00.000Z",
3322
+ "key": {
3323
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3324
+ "jwk": {
3325
+ "kty": "OKP",
3326
+ "crv": "Ed25519",
3327
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3328
+ },
3329
+ "published_in": "the suite's directory"
3330
+ }
3331
+ }
3332
+ },
3333
+ "also-good.example": {
3334
+ "kind": "crawlcheck-decision",
3335
+ "v": 1,
3336
+ "decided_at": "2026-10-10T15:59:00.000Z",
3337
+ "expires_at": "2026-10-11T15:59:00.000Z",
3338
+ "clock_skew_s": 300,
3339
+ "nonce": "ccguard-acceptance-0001",
3340
+ "domain": "also-good.example",
3341
+ "action": "read",
3342
+ "agent": null,
3343
+ "template": null,
3344
+ "policy": {
3345
+ "max_age_hours": null,
3346
+ "on_warn": "warn",
3347
+ "require_entity": false,
3348
+ "human_approval": [],
3349
+ "allow": [],
3350
+ "deny": []
3351
+ },
3352
+ "policy_id": null,
3353
+ "engine": {
3354
+ "version": "pf4",
3355
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3356
+ },
3357
+ "decision": "allow",
3358
+ "base_decision": "allow",
3359
+ "human_confirmation_required": false,
3360
+ "reason_codes": [
3361
+ "resolve.actions.read"
3362
+ ],
3363
+ "steps": [
3364
+ {
3365
+ "rule": "resolve.actions.read",
3366
+ "effect": "allow",
3367
+ "why": "suite fixture"
3368
+ }
3369
+ ],
3370
+ "alternatives": [],
3371
+ "evidence": {
3372
+ "report": "https://crawlcheck.io/r/suitefixture",
3373
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3374
+ },
3375
+ "resolve": {
3376
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3377
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3378
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3379
+ },
3380
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3381
+ "signature": {
3382
+ "v": 1,
3383
+ "alg": "Ed25519",
3384
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3385
+ "over": "sha256",
3386
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3387
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
3388
+ "signed_at": "2026-10-10T15:59:00.000Z",
3389
+ "key": {
3390
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3391
+ "jwk": {
3392
+ "kty": "OKP",
3393
+ "crv": "Ed25519",
3394
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3395
+ },
3396
+ "published_in": "the suite's directory"
3397
+ }
3398
+ }
3399
+ },
3400
+ "evil.example": {
3401
+ "kind": "crawlcheck-decision",
3402
+ "v": 1,
3403
+ "decided_at": "2026-10-10T15:59:00.000Z",
3404
+ "expires_at": "2026-10-11T15:59:00.000Z",
3405
+ "clock_skew_s": 300,
3406
+ "nonce": "ccguard-acceptance-0001",
3407
+ "domain": "evil.example",
3408
+ "action": "read",
3409
+ "agent": null,
3410
+ "template": null,
3411
+ "policy": {
3412
+ "max_age_hours": null,
3413
+ "on_warn": "warn",
3414
+ "require_entity": false,
3415
+ "human_approval": [],
3416
+ "allow": [],
3417
+ "deny": []
3418
+ },
3419
+ "policy_id": null,
3420
+ "engine": {
3421
+ "version": "pf4",
3422
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3423
+ },
3424
+ "decision": "block",
3425
+ "base_decision": "block",
3426
+ "human_confirmation_required": false,
3427
+ "reason_codes": [
3428
+ "resolve.actions.read"
3429
+ ],
3430
+ "steps": [
3431
+ {
3432
+ "rule": "resolve.actions.read",
3433
+ "effect": "block",
3434
+ "why": "suite fixture"
3435
+ }
3436
+ ],
3437
+ "alternatives": [],
3438
+ "evidence": {
3439
+ "report": "https://crawlcheck.io/r/suitefixture",
3440
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3441
+ },
3442
+ "resolve": {
3443
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3444
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3445
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3446
+ },
3447
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3448
+ "signature": {
3449
+ "v": 1,
3450
+ "alg": "Ed25519",
3451
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3452
+ "over": "sha256",
3453
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3454
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
3455
+ "signed_at": "2026-10-10T15:59:00.000Z",
3456
+ "key": {
3457
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3458
+ "jwk": {
3459
+ "kty": "OKP",
3460
+ "crv": "Ed25519",
3461
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3462
+ },
3463
+ "published_in": "the suite's directory"
3464
+ }
3465
+ }
3466
+ }
3467
+ }
3468
+ },
3469
+ "sites": {
3470
+ "https://good.example/go": {
3471
+ "status": 302,
3472
+ "location": "https://evil.example/x"
3473
+ }
3474
+ },
3475
+ "expect": {
3476
+ "proceed": false,
3477
+ "fetched": [
3478
+ "https://good.example/go"
3479
+ ]
3480
+ }
3481
+ },
3482
+ {
3483
+ "id": "redirect-to-allowed",
3484
+ "title": "an allowed page redirects to another allowed domain",
3485
+ "why": "each domain gets its own receipt",
3486
+ "request": {
3487
+ "url": "https://good.example/go",
3488
+ "action": "read",
3489
+ "allow_warn": false,
3490
+ "confirm": null,
3491
+ "nonce": "ccguard-acceptance-0001",
3492
+ "now": "2026-10-10T16:00:00.000Z",
3493
+ "max_hops": 10
3494
+ },
3495
+ "crawlcheck": {
3496
+ "by_domain": {
3497
+ "good.example": {
3498
+ "kind": "crawlcheck-decision",
3499
+ "v": 1,
3500
+ "decided_at": "2026-10-10T15:59:00.000Z",
3501
+ "expires_at": "2026-10-11T15:59:00.000Z",
3502
+ "clock_skew_s": 300,
3503
+ "nonce": "ccguard-acceptance-0001",
3504
+ "domain": "good.example",
3505
+ "action": "read",
3506
+ "agent": null,
3507
+ "template": null,
3508
+ "policy": {
3509
+ "max_age_hours": null,
3510
+ "on_warn": "warn",
3511
+ "require_entity": false,
3512
+ "human_approval": [],
3513
+ "allow": [],
3514
+ "deny": []
3515
+ },
3516
+ "policy_id": null,
3517
+ "engine": {
3518
+ "version": "pf4",
3519
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3520
+ },
3521
+ "decision": "allow",
3522
+ "base_decision": "allow",
3523
+ "human_confirmation_required": false,
3524
+ "reason_codes": [
3525
+ "resolve.actions.read"
3526
+ ],
3527
+ "steps": [
3528
+ {
3529
+ "rule": "resolve.actions.read",
3530
+ "effect": "allow",
3531
+ "why": "suite fixture"
3532
+ }
3533
+ ],
3534
+ "alternatives": [],
3535
+ "evidence": {
3536
+ "report": "https://crawlcheck.io/r/suitefixture",
3537
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3538
+ },
3539
+ "resolve": {
3540
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3541
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3542
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3543
+ },
3544
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3545
+ "signature": {
3546
+ "v": 1,
3547
+ "alg": "Ed25519",
3548
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3549
+ "over": "sha256",
3550
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3551
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
3552
+ "signed_at": "2026-10-10T15:59:00.000Z",
3553
+ "key": {
3554
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3555
+ "jwk": {
3556
+ "kty": "OKP",
3557
+ "crv": "Ed25519",
3558
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3559
+ },
3560
+ "published_in": "the suite's directory"
3561
+ }
3562
+ }
3563
+ },
3564
+ "also-good.example": {
3565
+ "kind": "crawlcheck-decision",
3566
+ "v": 1,
3567
+ "decided_at": "2026-10-10T15:59:00.000Z",
3568
+ "expires_at": "2026-10-11T15:59:00.000Z",
3569
+ "clock_skew_s": 300,
3570
+ "nonce": "ccguard-acceptance-0001",
3571
+ "domain": "also-good.example",
3572
+ "action": "read",
3573
+ "agent": null,
3574
+ "template": null,
3575
+ "policy": {
3576
+ "max_age_hours": null,
3577
+ "on_warn": "warn",
3578
+ "require_entity": false,
3579
+ "human_approval": [],
3580
+ "allow": [],
3581
+ "deny": []
3582
+ },
3583
+ "policy_id": null,
3584
+ "engine": {
3585
+ "version": "pf4",
3586
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3587
+ },
3588
+ "decision": "allow",
3589
+ "base_decision": "allow",
3590
+ "human_confirmation_required": false,
3591
+ "reason_codes": [
3592
+ "resolve.actions.read"
3593
+ ],
3594
+ "steps": [
3595
+ {
3596
+ "rule": "resolve.actions.read",
3597
+ "effect": "allow",
3598
+ "why": "suite fixture"
3599
+ }
3600
+ ],
3601
+ "alternatives": [],
3602
+ "evidence": {
3603
+ "report": "https://crawlcheck.io/r/suitefixture",
3604
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3605
+ },
3606
+ "resolve": {
3607
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3608
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3609
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3610
+ },
3611
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3612
+ "signature": {
3613
+ "v": 1,
3614
+ "alg": "Ed25519",
3615
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3616
+ "over": "sha256",
3617
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3618
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
3619
+ "signed_at": "2026-10-10T15:59:00.000Z",
3620
+ "key": {
3621
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3622
+ "jwk": {
3623
+ "kty": "OKP",
3624
+ "crv": "Ed25519",
3625
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3626
+ },
3627
+ "published_in": "the suite's directory"
3628
+ }
3629
+ }
3630
+ },
3631
+ "evil.example": {
3632
+ "kind": "crawlcheck-decision",
3633
+ "v": 1,
3634
+ "decided_at": "2026-10-10T15:59:00.000Z",
3635
+ "expires_at": "2026-10-11T15:59:00.000Z",
3636
+ "clock_skew_s": 300,
3637
+ "nonce": "ccguard-acceptance-0001",
3638
+ "domain": "evil.example",
3639
+ "action": "read",
3640
+ "agent": null,
3641
+ "template": null,
3642
+ "policy": {
3643
+ "max_age_hours": null,
3644
+ "on_warn": "warn",
3645
+ "require_entity": false,
3646
+ "human_approval": [],
3647
+ "allow": [],
3648
+ "deny": []
3649
+ },
3650
+ "policy_id": null,
3651
+ "engine": {
3652
+ "version": "pf4",
3653
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3654
+ },
3655
+ "decision": "block",
3656
+ "base_decision": "block",
3657
+ "human_confirmation_required": false,
3658
+ "reason_codes": [
3659
+ "resolve.actions.read"
3660
+ ],
3661
+ "steps": [
3662
+ {
3663
+ "rule": "resolve.actions.read",
3664
+ "effect": "block",
3665
+ "why": "suite fixture"
3666
+ }
3667
+ ],
3668
+ "alternatives": [],
3669
+ "evidence": {
3670
+ "report": "https://crawlcheck.io/r/suitefixture",
3671
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3672
+ },
3673
+ "resolve": {
3674
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3675
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3676
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3677
+ },
3678
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3679
+ "signature": {
3680
+ "v": 1,
3681
+ "alg": "Ed25519",
3682
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3683
+ "over": "sha256",
3684
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3685
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
3686
+ "signed_at": "2026-10-10T15:59:00.000Z",
3687
+ "key": {
3688
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3689
+ "jwk": {
3690
+ "kty": "OKP",
3691
+ "crv": "Ed25519",
3692
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3693
+ },
3694
+ "published_in": "the suite's directory"
3695
+ }
3696
+ }
3697
+ }
3698
+ }
3699
+ },
3700
+ "sites": {
3701
+ "https://good.example/go": {
3702
+ "status": 301,
3703
+ "location": "https://also-good.example/y"
3704
+ },
3705
+ "https://also-good.example/y": {
3706
+ "status": 200,
3707
+ "body": "ok"
3708
+ }
3709
+ },
3710
+ "expect": {
3711
+ "proceed": true,
3712
+ "fetched": [
3713
+ "https://good.example/go",
3714
+ "https://also-good.example/y"
3715
+ ],
3716
+ "receipt_header_to": [
3717
+ "good.example",
3718
+ "also-good.example"
3719
+ ]
3720
+ }
3721
+ },
3722
+ {
3723
+ "id": "redirect-relative",
3724
+ "title": "a relative redirect stays on the checked domain",
3725
+ "why": "",
3726
+ "request": {
3727
+ "url": "https://good.example/a",
3728
+ "action": "read",
3729
+ "allow_warn": false,
3730
+ "confirm": null,
3731
+ "nonce": "ccguard-acceptance-0001",
3732
+ "now": "2026-10-10T16:00:00.000Z",
3733
+ "max_hops": 10
3734
+ },
3735
+ "crawlcheck": {
3736
+ "by_domain": {
3737
+ "good.example": {
3738
+ "kind": "crawlcheck-decision",
3739
+ "v": 1,
3740
+ "decided_at": "2026-10-10T15:59:00.000Z",
3741
+ "expires_at": "2026-10-11T15:59:00.000Z",
3742
+ "clock_skew_s": 300,
3743
+ "nonce": "ccguard-acceptance-0001",
3744
+ "domain": "good.example",
3745
+ "action": "read",
3746
+ "agent": null,
3747
+ "template": null,
3748
+ "policy": {
3749
+ "max_age_hours": null,
3750
+ "on_warn": "warn",
3751
+ "require_entity": false,
3752
+ "human_approval": [],
3753
+ "allow": [],
3754
+ "deny": []
3755
+ },
3756
+ "policy_id": null,
3757
+ "engine": {
3758
+ "version": "pf4",
3759
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3760
+ },
3761
+ "decision": "allow",
3762
+ "base_decision": "allow",
3763
+ "human_confirmation_required": false,
3764
+ "reason_codes": [
3765
+ "resolve.actions.read"
3766
+ ],
3767
+ "steps": [
3768
+ {
3769
+ "rule": "resolve.actions.read",
3770
+ "effect": "allow",
3771
+ "why": "suite fixture"
3772
+ }
3773
+ ],
3774
+ "alternatives": [],
3775
+ "evidence": {
3776
+ "report": "https://crawlcheck.io/r/suitefixture",
3777
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3778
+ },
3779
+ "resolve": {
3780
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3781
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3782
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3783
+ },
3784
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3785
+ "signature": {
3786
+ "v": 1,
3787
+ "alg": "Ed25519",
3788
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3789
+ "over": "sha256",
3790
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
3791
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
3792
+ "signed_at": "2026-10-10T15:59:00.000Z",
3793
+ "key": {
3794
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3795
+ "jwk": {
3796
+ "kty": "OKP",
3797
+ "crv": "Ed25519",
3798
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3799
+ },
3800
+ "published_in": "the suite's directory"
3801
+ }
3802
+ }
3803
+ },
3804
+ "also-good.example": {
3805
+ "kind": "crawlcheck-decision",
3806
+ "v": 1,
3807
+ "decided_at": "2026-10-10T15:59:00.000Z",
3808
+ "expires_at": "2026-10-11T15:59:00.000Z",
3809
+ "clock_skew_s": 300,
3810
+ "nonce": "ccguard-acceptance-0001",
3811
+ "domain": "also-good.example",
3812
+ "action": "read",
3813
+ "agent": null,
3814
+ "template": null,
3815
+ "policy": {
3816
+ "max_age_hours": null,
3817
+ "on_warn": "warn",
3818
+ "require_entity": false,
3819
+ "human_approval": [],
3820
+ "allow": [],
3821
+ "deny": []
3822
+ },
3823
+ "policy_id": null,
3824
+ "engine": {
3825
+ "version": "pf4",
3826
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3827
+ },
3828
+ "decision": "allow",
3829
+ "base_decision": "allow",
3830
+ "human_confirmation_required": false,
3831
+ "reason_codes": [
3832
+ "resolve.actions.read"
3833
+ ],
3834
+ "steps": [
3835
+ {
3836
+ "rule": "resolve.actions.read",
3837
+ "effect": "allow",
3838
+ "why": "suite fixture"
3839
+ }
3840
+ ],
3841
+ "alternatives": [],
3842
+ "evidence": {
3843
+ "report": "https://crawlcheck.io/r/suitefixture",
3844
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3845
+ },
3846
+ "resolve": {
3847
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3848
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3849
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3850
+ },
3851
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3852
+ "signature": {
3853
+ "v": 1,
3854
+ "alg": "Ed25519",
3855
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3856
+ "over": "sha256",
3857
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
3858
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
3859
+ "signed_at": "2026-10-10T15:59:00.000Z",
3860
+ "key": {
3861
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3862
+ "jwk": {
3863
+ "kty": "OKP",
3864
+ "crv": "Ed25519",
3865
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3866
+ },
3867
+ "published_in": "the suite's directory"
3868
+ }
3869
+ }
3870
+ },
3871
+ "evil.example": {
3872
+ "kind": "crawlcheck-decision",
3873
+ "v": 1,
3874
+ "decided_at": "2026-10-10T15:59:00.000Z",
3875
+ "expires_at": "2026-10-11T15:59:00.000Z",
3876
+ "clock_skew_s": 300,
3877
+ "nonce": "ccguard-acceptance-0001",
3878
+ "domain": "evil.example",
3879
+ "action": "read",
3880
+ "agent": null,
3881
+ "template": null,
3882
+ "policy": {
3883
+ "max_age_hours": null,
3884
+ "on_warn": "warn",
3885
+ "require_entity": false,
3886
+ "human_approval": [],
3887
+ "allow": [],
3888
+ "deny": []
3889
+ },
3890
+ "policy_id": null,
3891
+ "engine": {
3892
+ "version": "pf4",
3893
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3894
+ },
3895
+ "decision": "block",
3896
+ "base_decision": "block",
3897
+ "human_confirmation_required": false,
3898
+ "reason_codes": [
3899
+ "resolve.actions.read"
3900
+ ],
3901
+ "steps": [
3902
+ {
3903
+ "rule": "resolve.actions.read",
3904
+ "effect": "block",
3905
+ "why": "suite fixture"
3906
+ }
3907
+ ],
3908
+ "alternatives": [],
3909
+ "evidence": {
3910
+ "report": "https://crawlcheck.io/r/suitefixture",
3911
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3912
+ },
3913
+ "resolve": {
3914
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3915
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3916
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
3917
+ },
3918
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3919
+ "signature": {
3920
+ "v": 1,
3921
+ "alg": "Ed25519",
3922
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3923
+ "over": "sha256",
3924
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
3925
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
3926
+ "signed_at": "2026-10-10T15:59:00.000Z",
3927
+ "key": {
3928
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
3929
+ "jwk": {
3930
+ "kty": "OKP",
3931
+ "crv": "Ed25519",
3932
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
3933
+ },
3934
+ "published_in": "the suite's directory"
3935
+ }
3936
+ }
3937
+ }
3938
+ }
3939
+ },
3940
+ "sites": {
3941
+ "https://good.example/a": {
3942
+ "status": 307,
3943
+ "location": "/b"
3944
+ },
3945
+ "https://good.example/b": {
3946
+ "status": 200,
3947
+ "body": "ok"
3948
+ }
3949
+ },
3950
+ "expect": {
3951
+ "proceed": true,
3952
+ "fetched": [
3953
+ "https://good.example/a",
3954
+ "https://good.example/b"
3955
+ ]
3956
+ }
3957
+ },
3958
+ {
3959
+ "id": "redirect-scheme",
3960
+ "title": "a redirect to a file: URL",
3961
+ "why": "only http(s)",
3962
+ "request": {
3963
+ "url": "https://good.example/a",
3964
+ "action": "read",
3965
+ "allow_warn": false,
3966
+ "confirm": null,
3967
+ "nonce": "ccguard-acceptance-0001",
3968
+ "now": "2026-10-10T16:00:00.000Z",
3969
+ "max_hops": 10
3970
+ },
3971
+ "crawlcheck": {
3972
+ "by_domain": {
3973
+ "good.example": {
3974
+ "kind": "crawlcheck-decision",
3975
+ "v": 1,
3976
+ "decided_at": "2026-10-10T15:59:00.000Z",
3977
+ "expires_at": "2026-10-11T15:59:00.000Z",
3978
+ "clock_skew_s": 300,
3979
+ "nonce": "ccguard-acceptance-0001",
3980
+ "domain": "good.example",
3981
+ "action": "read",
3982
+ "agent": null,
3983
+ "template": null,
3984
+ "policy": {
3985
+ "max_age_hours": null,
3986
+ "on_warn": "warn",
3987
+ "require_entity": false,
3988
+ "human_approval": [],
3989
+ "allow": [],
3990
+ "deny": []
3991
+ },
3992
+ "policy_id": null,
3993
+ "engine": {
3994
+ "version": "pf4",
3995
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
3996
+ },
3997
+ "decision": "allow",
3998
+ "base_decision": "allow",
3999
+ "human_confirmation_required": false,
4000
+ "reason_codes": [
4001
+ "resolve.actions.read"
4002
+ ],
4003
+ "steps": [
4004
+ {
4005
+ "rule": "resolve.actions.read",
4006
+ "effect": "allow",
4007
+ "why": "suite fixture"
4008
+ }
4009
+ ],
4010
+ "alternatives": [],
4011
+ "evidence": {
4012
+ "report": "https://crawlcheck.io/r/suitefixture",
4013
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4014
+ },
4015
+ "resolve": {
4016
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4017
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4018
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4019
+ },
4020
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
4021
+ "signature": {
4022
+ "v": 1,
4023
+ "alg": "Ed25519",
4024
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4025
+ "over": "sha256",
4026
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
4027
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
4028
+ "signed_at": "2026-10-10T15:59:00.000Z",
4029
+ "key": {
4030
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4031
+ "jwk": {
4032
+ "kty": "OKP",
4033
+ "crv": "Ed25519",
4034
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4035
+ },
4036
+ "published_in": "the suite's directory"
4037
+ }
4038
+ }
4039
+ },
4040
+ "also-good.example": {
4041
+ "kind": "crawlcheck-decision",
4042
+ "v": 1,
4043
+ "decided_at": "2026-10-10T15:59:00.000Z",
4044
+ "expires_at": "2026-10-11T15:59:00.000Z",
4045
+ "clock_skew_s": 300,
4046
+ "nonce": "ccguard-acceptance-0001",
4047
+ "domain": "also-good.example",
4048
+ "action": "read",
4049
+ "agent": null,
4050
+ "template": null,
4051
+ "policy": {
4052
+ "max_age_hours": null,
4053
+ "on_warn": "warn",
4054
+ "require_entity": false,
4055
+ "human_approval": [],
4056
+ "allow": [],
4057
+ "deny": []
4058
+ },
4059
+ "policy_id": null,
4060
+ "engine": {
4061
+ "version": "pf4",
4062
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4063
+ },
4064
+ "decision": "allow",
4065
+ "base_decision": "allow",
4066
+ "human_confirmation_required": false,
4067
+ "reason_codes": [
4068
+ "resolve.actions.read"
4069
+ ],
4070
+ "steps": [
4071
+ {
4072
+ "rule": "resolve.actions.read",
4073
+ "effect": "allow",
4074
+ "why": "suite fixture"
4075
+ }
4076
+ ],
4077
+ "alternatives": [],
4078
+ "evidence": {
4079
+ "report": "https://crawlcheck.io/r/suitefixture",
4080
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4081
+ },
4082
+ "resolve": {
4083
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4084
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4085
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4086
+ },
4087
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
4088
+ "signature": {
4089
+ "v": 1,
4090
+ "alg": "Ed25519",
4091
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4092
+ "over": "sha256",
4093
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
4094
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
4095
+ "signed_at": "2026-10-10T15:59:00.000Z",
4096
+ "key": {
4097
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4098
+ "jwk": {
4099
+ "kty": "OKP",
4100
+ "crv": "Ed25519",
4101
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4102
+ },
4103
+ "published_in": "the suite's directory"
4104
+ }
4105
+ }
4106
+ },
4107
+ "evil.example": {
4108
+ "kind": "crawlcheck-decision",
4109
+ "v": 1,
4110
+ "decided_at": "2026-10-10T15:59:00.000Z",
4111
+ "expires_at": "2026-10-11T15:59:00.000Z",
4112
+ "clock_skew_s": 300,
4113
+ "nonce": "ccguard-acceptance-0001",
4114
+ "domain": "evil.example",
4115
+ "action": "read",
4116
+ "agent": null,
4117
+ "template": null,
4118
+ "policy": {
4119
+ "max_age_hours": null,
4120
+ "on_warn": "warn",
4121
+ "require_entity": false,
4122
+ "human_approval": [],
4123
+ "allow": [],
4124
+ "deny": []
4125
+ },
4126
+ "policy_id": null,
4127
+ "engine": {
4128
+ "version": "pf4",
4129
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4130
+ },
4131
+ "decision": "block",
4132
+ "base_decision": "block",
4133
+ "human_confirmation_required": false,
4134
+ "reason_codes": [
4135
+ "resolve.actions.read"
4136
+ ],
4137
+ "steps": [
4138
+ {
4139
+ "rule": "resolve.actions.read",
4140
+ "effect": "block",
4141
+ "why": "suite fixture"
4142
+ }
4143
+ ],
4144
+ "alternatives": [],
4145
+ "evidence": {
4146
+ "report": "https://crawlcheck.io/r/suitefixture",
4147
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4148
+ },
4149
+ "resolve": {
4150
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4151
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4152
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4153
+ },
4154
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
4155
+ "signature": {
4156
+ "v": 1,
4157
+ "alg": "Ed25519",
4158
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4159
+ "over": "sha256",
4160
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
4161
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
4162
+ "signed_at": "2026-10-10T15:59:00.000Z",
4163
+ "key": {
4164
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4165
+ "jwk": {
4166
+ "kty": "OKP",
4167
+ "crv": "Ed25519",
4168
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4169
+ },
4170
+ "published_in": "the suite's directory"
4171
+ }
4172
+ }
4173
+ }
4174
+ }
4175
+ },
4176
+ "sites": {
4177
+ "https://good.example/a": {
4178
+ "status": 302,
4179
+ "location": "file:///etc/passwd"
4180
+ }
4181
+ },
4182
+ "expect": {
4183
+ "proceed": false,
4184
+ "fetched": [
4185
+ "https://good.example/a"
4186
+ ]
4187
+ }
4188
+ },
4189
+ {
4190
+ "id": "redirect-loop",
4191
+ "title": "more than the hop limit",
4192
+ "why": "at most 10 redirects",
4193
+ "request": {
4194
+ "url": "https://good.example/l0",
4195
+ "action": "read",
4196
+ "allow_warn": false,
4197
+ "confirm": null,
4198
+ "nonce": "ccguard-acceptance-0001",
4199
+ "now": "2026-10-10T16:00:00.000Z",
4200
+ "max_hops": 10
4201
+ },
4202
+ "crawlcheck": {
4203
+ "by_domain": {
4204
+ "good.example": {
4205
+ "kind": "crawlcheck-decision",
4206
+ "v": 1,
4207
+ "decided_at": "2026-10-10T15:59:00.000Z",
4208
+ "expires_at": "2026-10-11T15:59:00.000Z",
4209
+ "clock_skew_s": 300,
4210
+ "nonce": "ccguard-acceptance-0001",
4211
+ "domain": "good.example",
4212
+ "action": "read",
4213
+ "agent": null,
4214
+ "template": null,
4215
+ "policy": {
4216
+ "max_age_hours": null,
4217
+ "on_warn": "warn",
4218
+ "require_entity": false,
4219
+ "human_approval": [],
4220
+ "allow": [],
4221
+ "deny": []
4222
+ },
4223
+ "policy_id": null,
4224
+ "engine": {
4225
+ "version": "pf4",
4226
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4227
+ },
4228
+ "decision": "allow",
4229
+ "base_decision": "allow",
4230
+ "human_confirmation_required": false,
4231
+ "reason_codes": [
4232
+ "resolve.actions.read"
4233
+ ],
4234
+ "steps": [
4235
+ {
4236
+ "rule": "resolve.actions.read",
4237
+ "effect": "allow",
4238
+ "why": "suite fixture"
4239
+ }
4240
+ ],
4241
+ "alternatives": [],
4242
+ "evidence": {
4243
+ "report": "https://crawlcheck.io/r/suitefixture",
4244
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4245
+ },
4246
+ "resolve": {
4247
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4248
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4249
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4250
+ },
4251
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
4252
+ "signature": {
4253
+ "v": 1,
4254
+ "alg": "Ed25519",
4255
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4256
+ "over": "sha256",
4257
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
4258
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
4259
+ "signed_at": "2026-10-10T15:59:00.000Z",
4260
+ "key": {
4261
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4262
+ "jwk": {
4263
+ "kty": "OKP",
4264
+ "crv": "Ed25519",
4265
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4266
+ },
4267
+ "published_in": "the suite's directory"
4268
+ }
4269
+ }
4270
+ },
4271
+ "also-good.example": {
4272
+ "kind": "crawlcheck-decision",
4273
+ "v": 1,
4274
+ "decided_at": "2026-10-10T15:59:00.000Z",
4275
+ "expires_at": "2026-10-11T15:59:00.000Z",
4276
+ "clock_skew_s": 300,
4277
+ "nonce": "ccguard-acceptance-0001",
4278
+ "domain": "also-good.example",
4279
+ "action": "read",
4280
+ "agent": null,
4281
+ "template": null,
4282
+ "policy": {
4283
+ "max_age_hours": null,
4284
+ "on_warn": "warn",
4285
+ "require_entity": false,
4286
+ "human_approval": [],
4287
+ "allow": [],
4288
+ "deny": []
4289
+ },
4290
+ "policy_id": null,
4291
+ "engine": {
4292
+ "version": "pf4",
4293
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4294
+ },
4295
+ "decision": "allow",
4296
+ "base_decision": "allow",
4297
+ "human_confirmation_required": false,
4298
+ "reason_codes": [
4299
+ "resolve.actions.read"
4300
+ ],
4301
+ "steps": [
4302
+ {
4303
+ "rule": "resolve.actions.read",
4304
+ "effect": "allow",
4305
+ "why": "suite fixture"
4306
+ }
4307
+ ],
4308
+ "alternatives": [],
4309
+ "evidence": {
4310
+ "report": "https://crawlcheck.io/r/suitefixture",
4311
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4312
+ },
4313
+ "resolve": {
4314
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4315
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4316
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4317
+ },
4318
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
4319
+ "signature": {
4320
+ "v": 1,
4321
+ "alg": "Ed25519",
4322
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4323
+ "over": "sha256",
4324
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
4325
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
4326
+ "signed_at": "2026-10-10T15:59:00.000Z",
4327
+ "key": {
4328
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4329
+ "jwk": {
4330
+ "kty": "OKP",
4331
+ "crv": "Ed25519",
4332
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4333
+ },
4334
+ "published_in": "the suite's directory"
4335
+ }
4336
+ }
4337
+ },
4338
+ "evil.example": {
4339
+ "kind": "crawlcheck-decision",
4340
+ "v": 1,
4341
+ "decided_at": "2026-10-10T15:59:00.000Z",
4342
+ "expires_at": "2026-10-11T15:59:00.000Z",
4343
+ "clock_skew_s": 300,
4344
+ "nonce": "ccguard-acceptance-0001",
4345
+ "domain": "evil.example",
4346
+ "action": "read",
4347
+ "agent": null,
4348
+ "template": null,
4349
+ "policy": {
4350
+ "max_age_hours": null,
4351
+ "on_warn": "warn",
4352
+ "require_entity": false,
4353
+ "human_approval": [],
4354
+ "allow": [],
4355
+ "deny": []
4356
+ },
4357
+ "policy_id": null,
4358
+ "engine": {
4359
+ "version": "pf4",
4360
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4361
+ },
4362
+ "decision": "block",
4363
+ "base_decision": "block",
4364
+ "human_confirmation_required": false,
4365
+ "reason_codes": [
4366
+ "resolve.actions.read"
4367
+ ],
4368
+ "steps": [
4369
+ {
4370
+ "rule": "resolve.actions.read",
4371
+ "effect": "block",
4372
+ "why": "suite fixture"
4373
+ }
4374
+ ],
4375
+ "alternatives": [],
4376
+ "evidence": {
4377
+ "report": "https://crawlcheck.io/r/suitefixture",
4378
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4379
+ },
4380
+ "resolve": {
4381
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4382
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4383
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4384
+ },
4385
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
4386
+ "signature": {
4387
+ "v": 1,
4388
+ "alg": "Ed25519",
4389
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4390
+ "over": "sha256",
4391
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
4392
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
4393
+ "signed_at": "2026-10-10T15:59:00.000Z",
4394
+ "key": {
4395
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4396
+ "jwk": {
4397
+ "kty": "OKP",
4398
+ "crv": "Ed25519",
4399
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4400
+ },
4401
+ "published_in": "the suite's directory"
4402
+ }
4403
+ }
4404
+ }
4405
+ }
4406
+ },
4407
+ "sites": {
4408
+ "https://good.example/l0": {
4409
+ "status": 302,
4410
+ "location": "https://good.example/l1"
4411
+ },
4412
+ "https://good.example/l1": {
4413
+ "status": 302,
4414
+ "location": "https://good.example/l2"
4415
+ },
4416
+ "https://good.example/l2": {
4417
+ "status": 302,
4418
+ "location": "https://good.example/l3"
4419
+ },
4420
+ "https://good.example/l3": {
4421
+ "status": 302,
4422
+ "location": "https://good.example/l4"
4423
+ },
4424
+ "https://good.example/l4": {
4425
+ "status": 302,
4426
+ "location": "https://good.example/l5"
4427
+ },
4428
+ "https://good.example/l5": {
4429
+ "status": 302,
4430
+ "location": "https://good.example/l6"
4431
+ },
4432
+ "https://good.example/l6": {
4433
+ "status": 302,
4434
+ "location": "https://good.example/l7"
4435
+ },
4436
+ "https://good.example/l7": {
4437
+ "status": 302,
4438
+ "location": "https://good.example/l8"
4439
+ },
4440
+ "https://good.example/l8": {
4441
+ "status": 302,
4442
+ "location": "https://good.example/l9"
4443
+ },
4444
+ "https://good.example/l9": {
4445
+ "status": 302,
4446
+ "location": "https://good.example/l10"
4447
+ },
4448
+ "https://good.example/l10": {
4449
+ "status": 302,
4450
+ "location": "https://good.example/l11"
4451
+ },
4452
+ "https://good.example/l11": {
4453
+ "status": 302,
4454
+ "location": "https://good.example/l12"
4455
+ }
4456
+ },
4457
+ "expect": {
4458
+ "proceed": false,
4459
+ "fetched_count": 11
4460
+ }
4461
+ },
4462
+ {
4463
+ "id": "redirect-ip",
4464
+ "title": "a redirect to a bare IP address",
4465
+ "why": "an address is not a domain CrawlCheck can vouch for",
4466
+ "request": {
4467
+ "url": "https://good.example/a",
4468
+ "action": "read",
4469
+ "allow_warn": false,
4470
+ "confirm": null,
4471
+ "nonce": "ccguard-acceptance-0001",
4472
+ "now": "2026-10-10T16:00:00.000Z",
4473
+ "max_hops": 10
4474
+ },
4475
+ "crawlcheck": {
4476
+ "by_domain": {
4477
+ "good.example": {
4478
+ "kind": "crawlcheck-decision",
4479
+ "v": 1,
4480
+ "decided_at": "2026-10-10T15:59:00.000Z",
4481
+ "expires_at": "2026-10-11T15:59:00.000Z",
4482
+ "clock_skew_s": 300,
4483
+ "nonce": "ccguard-acceptance-0001",
4484
+ "domain": "good.example",
4485
+ "action": "read",
4486
+ "agent": null,
4487
+ "template": null,
4488
+ "policy": {
4489
+ "max_age_hours": null,
4490
+ "on_warn": "warn",
4491
+ "require_entity": false,
4492
+ "human_approval": [],
4493
+ "allow": [],
4494
+ "deny": []
4495
+ },
4496
+ "policy_id": null,
4497
+ "engine": {
4498
+ "version": "pf4",
4499
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4500
+ },
4501
+ "decision": "allow",
4502
+ "base_decision": "allow",
4503
+ "human_confirmation_required": false,
4504
+ "reason_codes": [
4505
+ "resolve.actions.read"
4506
+ ],
4507
+ "steps": [
4508
+ {
4509
+ "rule": "resolve.actions.read",
4510
+ "effect": "allow",
4511
+ "why": "suite fixture"
4512
+ }
4513
+ ],
4514
+ "alternatives": [],
4515
+ "evidence": {
4516
+ "report": "https://crawlcheck.io/r/suitefixture",
4517
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4518
+ },
4519
+ "resolve": {
4520
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4521
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4522
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4523
+ },
4524
+ "sha256": "538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
4525
+ "signature": {
4526
+ "v": 1,
4527
+ "alg": "Ed25519",
4528
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4529
+ "over": "sha256",
4530
+ "message": "crawlcheck-data-v1\n538189facc04db817956a840415c602c48cf9c29ce7b626fbd2d6cd2db3a2b72",
4531
+ "sig": "kebBznICRjh4gEDCOyvn4YRYaSxkCj4cvsRPWaC7NCCfPrFKgCiZHrVAFhODv_hWa7OfWpNvWME0Tio0W5UXAQ",
4532
+ "signed_at": "2026-10-10T15:59:00.000Z",
4533
+ "key": {
4534
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4535
+ "jwk": {
4536
+ "kty": "OKP",
4537
+ "crv": "Ed25519",
4538
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4539
+ },
4540
+ "published_in": "the suite's directory"
4541
+ }
4542
+ }
4543
+ },
4544
+ "also-good.example": {
4545
+ "kind": "crawlcheck-decision",
4546
+ "v": 1,
4547
+ "decided_at": "2026-10-10T15:59:00.000Z",
4548
+ "expires_at": "2026-10-11T15:59:00.000Z",
4549
+ "clock_skew_s": 300,
4550
+ "nonce": "ccguard-acceptance-0001",
4551
+ "domain": "also-good.example",
4552
+ "action": "read",
4553
+ "agent": null,
4554
+ "template": null,
4555
+ "policy": {
4556
+ "max_age_hours": null,
4557
+ "on_warn": "warn",
4558
+ "require_entity": false,
4559
+ "human_approval": [],
4560
+ "allow": [],
4561
+ "deny": []
4562
+ },
4563
+ "policy_id": null,
4564
+ "engine": {
4565
+ "version": "pf4",
4566
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4567
+ },
4568
+ "decision": "allow",
4569
+ "base_decision": "allow",
4570
+ "human_confirmation_required": false,
4571
+ "reason_codes": [
4572
+ "resolve.actions.read"
4573
+ ],
4574
+ "steps": [
4575
+ {
4576
+ "rule": "resolve.actions.read",
4577
+ "effect": "allow",
4578
+ "why": "suite fixture"
4579
+ }
4580
+ ],
4581
+ "alternatives": [],
4582
+ "evidence": {
4583
+ "report": "https://crawlcheck.io/r/suitefixture",
4584
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4585
+ },
4586
+ "resolve": {
4587
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4588
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4589
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4590
+ },
4591
+ "sha256": "397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
4592
+ "signature": {
4593
+ "v": 1,
4594
+ "alg": "Ed25519",
4595
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4596
+ "over": "sha256",
4597
+ "message": "crawlcheck-data-v1\n397e79eadb3c6457282bf8ffc33b5840cada8edbfb2e3c56ddc8bada2fd62ee1",
4598
+ "sig": "CR_y7ei6pqwnAASl9hRtXwus3SNLpNzozCzHf_DyGwPxQilYPdubDDnTjnZDqvPDS49-0q-Ygt2mtpUbIQh0CQ",
4599
+ "signed_at": "2026-10-10T15:59:00.000Z",
4600
+ "key": {
4601
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4602
+ "jwk": {
4603
+ "kty": "OKP",
4604
+ "crv": "Ed25519",
4605
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4606
+ },
4607
+ "published_in": "the suite's directory"
4608
+ }
4609
+ }
4610
+ },
4611
+ "evil.example": {
4612
+ "kind": "crawlcheck-decision",
4613
+ "v": 1,
4614
+ "decided_at": "2026-10-10T15:59:00.000Z",
4615
+ "expires_at": "2026-10-11T15:59:00.000Z",
4616
+ "clock_skew_s": 300,
4617
+ "nonce": "ccguard-acceptance-0001",
4618
+ "domain": "evil.example",
4619
+ "action": "read",
4620
+ "agent": null,
4621
+ "template": null,
4622
+ "policy": {
4623
+ "max_age_hours": null,
4624
+ "on_warn": "warn",
4625
+ "require_entity": false,
4626
+ "human_approval": [],
4627
+ "allow": [],
4628
+ "deny": []
4629
+ },
4630
+ "policy_id": null,
4631
+ "engine": {
4632
+ "version": "pf4",
4633
+ "rules_sha256": "18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e"
4634
+ },
4635
+ "decision": "block",
4636
+ "base_decision": "block",
4637
+ "human_confirmation_required": false,
4638
+ "reason_codes": [
4639
+ "resolve.actions.read"
4640
+ ],
4641
+ "steps": [
4642
+ {
4643
+ "rule": "resolve.actions.read",
4644
+ "effect": "block",
4645
+ "why": "suite fixture"
4646
+ }
4647
+ ],
4648
+ "alternatives": [],
4649
+ "evidence": {
4650
+ "report": "https://crawlcheck.io/r/suitefixture",
4651
+ "manifest_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4652
+ },
4653
+ "resolve": {
4654
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
4655
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4656
+ "leaf_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
4657
+ },
4658
+ "sha256": "da1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
4659
+ "signature": {
4660
+ "v": 1,
4661
+ "alg": "Ed25519",
4662
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4663
+ "over": "sha256",
4664
+ "message": "crawlcheck-data-v1\nda1b746cfc0ec51e4a6efcefc5e63d824652ef99c21828054d237df6055ae9e9",
4665
+ "sig": "BZFgavq6NoUbGwIS_A8Vdbge-EGp4hi5HXxy396I5UuHvjukMIcnXrae6hwPDmY_UIdpGWTHz8fMyW0FAEvODw",
4666
+ "signed_at": "2026-10-10T15:59:00.000Z",
4667
+ "key": {
4668
+ "kid": "xrog-5dLQHQuXmIsVCTFRFfPSzLVonFLRoWdifn1AmE",
4669
+ "jwk": {
4670
+ "kty": "OKP",
4671
+ "crv": "Ed25519",
4672
+ "x": "_EeVevPcJyuRWRCjFyG3-wRgmEdZmrn9tlBTvD31u8Q"
4673
+ },
4674
+ "published_in": "the suite's directory"
4675
+ }
4676
+ }
4677
+ }
4678
+ }
4679
+ },
4680
+ "sites": {
4681
+ "https://good.example/a": {
4682
+ "status": 302,
4683
+ "location": "http://169.254.169.254/latest"
4684
+ }
4685
+ },
4686
+ "expect": {
4687
+ "proceed": false,
4688
+ "fetched": [
4689
+ "https://good.example/a"
4690
+ ]
4691
+ }
4692
+ }
4693
+ ]
4694
+ }