@taprootio/docs-artifact 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +362 -0
  3. package/bin/taproot-docs-conformance.js +20 -0
  4. package/bin/taproot-docs-validate.js +17 -0
  5. package/conformance.d.ts +11 -0
  6. package/fixtures/README.md +24 -0
  7. package/fixtures/conformance.json +1630 -0
  8. package/fixtures/invalid/duplicate-json-key.json +1 -0
  9. package/fixtures/invalid/hash-drift/taproot-docs/fragments/welcome.html +1 -0
  10. package/fixtures/invalid/size-drift/taproot-docs/fragments/welcome.html +1 -0
  11. package/fixtures/invalid/unsafe-markup/taproot-docs/fragments/welcome.html +1 -0
  12. package/fixtures/valid/complete/taproot-docs/assets/pixel.png.base64 +1 -0
  13. package/fixtures/valid/complete/taproot-docs/fragments/button.en-us.html +1 -0
  14. package/fixtures/valid/complete/taproot-docs/fragments/button.fr-fr.html +1 -0
  15. package/fixtures/valid/complete/taproot-docs/fragments/getting-started.en-us.html +3 -0
  16. package/fixtures/valid/complete/taproot-docs/fragments/getting-started.fr-fr.html +3 -0
  17. package/fixtures/valid/complete/taproot-docs-manifest.json +231 -0
  18. package/fixtures/valid/minimal/taproot-docs/fragments/welcome.html +1 -0
  19. package/fixtures/valid/minimal/taproot-docs-manifest.json +80 -0
  20. package/index.d.ts +204 -0
  21. package/node.d.ts +6 -0
  22. package/package.json +54 -0
  23. package/schema/taproot-docs-manifest.schema.json +487 -0
  24. package/src/artifact-validator.js +870 -0
  25. package/src/binary.js +67 -0
  26. package/src/conformance.js +578 -0
  27. package/src/constants.js +104 -0
  28. package/src/errors.js +139 -0
  29. package/src/index.js +18 -0
  30. package/src/json.js +516 -0
  31. package/src/manifest-validator.js +650 -0
  32. package/src/markup.js +578 -0
  33. package/src/node-internal.js +4 -0
  34. package/src/node.js +513 -0
  35. package/src/path.js +103 -0
  36. package/src/text.js +30 -0
@@ -0,0 +1,1630 @@
1
+ {
2
+ "version": 1,
3
+ "cases": [
4
+ {
5
+ "name": "valid-minimal",
6
+ "valid": true,
7
+ "expectedCodes": [],
8
+ "manifest": "valid/minimal/taproot-docs-manifest.json",
9
+ "files": [
10
+ {
11
+ "path": "taproot-docs/fragments/welcome.html",
12
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
13
+ }
14
+ ]
15
+ },
16
+ {
17
+ "name": "valid-complete-localized-artifact",
18
+ "valid": true,
19
+ "expectedCodes": [],
20
+ "manifest": "valid/complete/taproot-docs-manifest.json",
21
+ "files": [
22
+ {
23
+ "path": "taproot-docs/fragments/getting-started.en-us.html",
24
+ "source": "valid/complete/taproot-docs/fragments/getting-started.en-us.html"
25
+ },
26
+ {
27
+ "path": "taproot-docs/fragments/getting-started.fr-fr.html",
28
+ "source": "valid/complete/taproot-docs/fragments/getting-started.fr-fr.html"
29
+ },
30
+ {
31
+ "path": "taproot-docs/fragments/button.en-us.html",
32
+ "source": "valid/complete/taproot-docs/fragments/button.en-us.html"
33
+ },
34
+ {
35
+ "path": "taproot-docs/fragments/button.fr-fr.html",
36
+ "source": "valid/complete/taproot-docs/fragments/button.fr-fr.html"
37
+ },
38
+ {
39
+ "path": "taproot-docs/assets/pixel.png",
40
+ "base64Source": "valid/complete/taproot-docs/assets/pixel.png.base64"
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "name": "reject-duplicate-json-keys",
46
+ "valid": false,
47
+ "expectedCodes": ["json.duplicate_key"],
48
+ "manifest": "invalid/duplicate-json-key.json",
49
+ "files": []
50
+ },
51
+ {
52
+ "name": "reject-oversized-manifest-bytes",
53
+ "valid": false,
54
+ "expectedCodes": ["manifest.too_large"],
55
+ "manifest": "valid/minimal/taproot-docs-manifest.json",
56
+ "manifestPaddingBytes": 2097152,
57
+ "files": []
58
+ },
59
+ {
60
+ "name": "reject-semver-numeric-prerelease-leading-zero",
61
+ "valid": false,
62
+ "expectedCodes": ["string.pattern"],
63
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
64
+ "mutations": [
65
+ {
66
+ "operation": "replace",
67
+ "path": ["build", "producerVersion"],
68
+ "value": "1.0.0-01"
69
+ }
70
+ ],
71
+ "files": []
72
+ },
73
+ {
74
+ "name": "accept-pinned-locale-subset-length-boundary",
75
+ "valid": true,
76
+ "expectedCodes": [],
77
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
78
+ "mutations": [
79
+ { "operation": "replace", "path": ["defaultLocale"], "value": "abc-Latn-419" },
80
+ { "operation": "replace", "path": ["locales", 0, "tag"], "value": "abc-Latn-419" },
81
+ { "operation": "replace", "path": ["resources", 0, "variants", 0, "locale"], "value": "abc-Latn-419" },
82
+ { "operation": "replace", "path": ["navigation", 0, "locale"], "value": "abc-Latn-419" }
83
+ ],
84
+ "files": [
85
+ {
86
+ "path": "taproot-docs/fragments/welcome.html",
87
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
88
+ }
89
+ ]
90
+ },
91
+ {
92
+ "name": "reject-noncanonical-locale-subset-casing",
93
+ "valid": false,
94
+ "expectedCodes": ["locale.not_canonical"],
95
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
96
+ "mutations": [
97
+ { "operation": "replace", "path": ["defaultLocale"], "value": "en-us" },
98
+ { "operation": "replace", "path": ["locales", 0, "tag"], "value": "en-us" },
99
+ { "operation": "replace", "path": ["resources", 0, "variants", 0, "locale"], "value": "en-us" },
100
+ { "operation": "replace", "path": ["navigation", 0, "locale"], "value": "en-us" }
101
+ ],
102
+ "files": []
103
+ },
104
+ {
105
+ "name": "reject-locale-outside-pinned-subset",
106
+ "valid": false,
107
+ "expectedCodes": ["locale.invalid"],
108
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
109
+ "mutations": [
110
+ { "operation": "replace", "path": ["defaultLocale"], "value": "de-1901" },
111
+ { "operation": "replace", "path": ["locales", 0, "tag"], "value": "de-1901" },
112
+ { "operation": "replace", "path": ["resources", 0, "variants", 0, "locale"], "value": "de-1901" },
113
+ { "operation": "replace", "path": ["navigation", 0, "locale"], "value": "de-1901" }
114
+ ],
115
+ "files": []
116
+ },
117
+ {
118
+ "name": "reject-manifest-c1-control",
119
+ "valid": false,
120
+ "expectedCodes": ["string.control"],
121
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
122
+ "mutations": [
123
+ { "operation": "replace", "path": ["resources", 0, "variants", 0, "title"], "value": "Unsafe\u0085title" }
124
+ ],
125
+ "files": []
126
+ },
127
+ {
128
+ "name": "reject-manifest-bidirectional-override",
129
+ "valid": false,
130
+ "expectedCodes": ["string.control"],
131
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
132
+ "mutations": [
133
+ { "operation": "replace", "path": ["resources", 0, "variants", 0, "title"], "value": "Unsafe\u202etitle" }
134
+ ],
135
+ "files": []
136
+ },
137
+ {
138
+ "name": "reject-unsafe-fragment-path",
139
+ "valid": false,
140
+ "expectedCodes": ["path.unsafe"],
141
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
142
+ "mutations": [
143
+ {
144
+ "operation": "replace",
145
+ "path": ["resources", 0, "variants", 0, "fragments", 0, "path"],
146
+ "value": "taproot-docs/fragments/../welcome.html"
147
+ }
148
+ ],
149
+ "files": []
150
+ },
151
+ {
152
+ "name": "reject-reserved-route",
153
+ "valid": false,
154
+ "expectedCodes": ["route.reserved"],
155
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
156
+ "mutations": [
157
+ {
158
+ "operation": "replace",
159
+ "path": ["resources", 0, "variants", 0, "route"],
160
+ "value": "/api/"
161
+ }
162
+ ],
163
+ "files": []
164
+ },
165
+ {
166
+ "name": "reject-nested-404-html-route",
167
+ "valid": false,
168
+ "expectedCodes": ["route.reserved"],
169
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
170
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/404.html/child/" }],
171
+ "files": []
172
+ },
173
+ {
174
+ "name": "reject-nested-favicon-route",
175
+ "valid": false,
176
+ "expectedCodes": ["route.reserved"],
177
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
178
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/favicon.ico/child/" }],
179
+ "files": []
180
+ },
181
+ {
182
+ "name": "reject-root-index-file-route",
183
+ "valid": false,
184
+ "expectedCodes": ["route.reserved"],
185
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
186
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/index.html/" }],
187
+ "files": []
188
+ },
189
+ {
190
+ "name": "reject-nested-root-index-file-route",
191
+ "valid": false,
192
+ "expectedCodes": ["route.reserved"],
193
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
194
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/index.html/child/" }],
195
+ "files": []
196
+ },
197
+ {
198
+ "name": "reject-nested-web-manifest-route",
199
+ "valid": false,
200
+ "expectedCodes": ["route.reserved"],
201
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
202
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/manifest.webmanifest/child/" }],
203
+ "files": []
204
+ },
205
+ {
206
+ "name": "reject-nested-robots-route",
207
+ "valid": false,
208
+ "expectedCodes": ["route.reserved"],
209
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
210
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/robots.txt/child/" }],
211
+ "files": []
212
+ },
213
+ {
214
+ "name": "reject-nested-sitemap-route",
215
+ "valid": false,
216
+ "expectedCodes": ["route.reserved"],
217
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
218
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/sitemap.xml/child/" }],
219
+ "files": []
220
+ },
221
+ {
222
+ "name": "reject-nested-artifact-manifest-route",
223
+ "valid": false,
224
+ "expectedCodes": ["route.reserved"],
225
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
226
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/taproot-docs-manifest.json/child/" }],
227
+ "files": []
228
+ },
229
+ {
230
+ "name": "reject-route-root-windows-device-alias",
231
+ "valid": false,
232
+ "expectedCodes": ["route.device_name"],
233
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
234
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/con/" }],
235
+ "files": []
236
+ },
237
+ {
238
+ "name": "reject-route-windows-device-alias-with-extension",
239
+ "valid": false,
240
+ "expectedCodes": ["route.device_name"],
241
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
242
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/nul.txt/" }],
243
+ "files": []
244
+ },
245
+ {
246
+ "name": "reject-route-nested-windows-device-alias",
247
+ "valid": false,
248
+ "expectedCodes": ["route.device_name"],
249
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
250
+ "mutations": [{ "operation": "replace", "path": ["resources", 0, "variants", 0, "route"], "value": "/guides/com1/" }],
251
+ "files": []
252
+ },
253
+ {
254
+ "name": "reject-unsupported-required-capability",
255
+ "valid": false,
256
+ "expectedCodes": ["capability.unsupported"],
257
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
258
+ "mutations": [
259
+ {
260
+ "operation": "replace",
261
+ "path": ["capabilities", "required"],
262
+ "value": [
263
+ "taproot.docs.fragments.html.v1",
264
+ "taproot.docs.unknown.v1"
265
+ ]
266
+ }
267
+ ],
268
+ "files": []
269
+ },
270
+ {
271
+ "name": "reject-unknown-redirect-target",
272
+ "valid": false,
273
+ "expectedCodes": ["redirect.unknown_resource"],
274
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
275
+ "mutations": [
276
+ {
277
+ "operation": "replace",
278
+ "path": ["redirects"],
279
+ "value": [
280
+ {
281
+ "from": "/old-welcome/",
282
+ "toResourceKey": "guide:missing",
283
+ "locale": "en-US",
284
+ "status": 308
285
+ }
286
+ ]
287
+ }
288
+ ],
289
+ "files": []
290
+ },
291
+ {
292
+ "name": "reject-undeclared-resource-variant-locale",
293
+ "valid": false,
294
+ "expectedCodes": ["resource.unknown_locale"],
295
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
296
+ "mutations": [
297
+ {
298
+ "operation": "append",
299
+ "path": ["resources", 0, "variants"],
300
+ "value": {
301
+ "locale": "fr-FR",
302
+ "route": "/fr/bienvenue/",
303
+ "title": "Bienvenue",
304
+ "description": "Une variante dont la langue n'est pas declaree.",
305
+ "headings": [],
306
+ "source": {
307
+ "path": "guides/bienvenue.md",
308
+ "url": "https://github.com/taprootio/docs-fixture/blob/0123456789abcdef0123456789abcdef01234567/guides/bienvenue.md"
309
+ },
310
+ "fragments": [
311
+ {
312
+ "key": "body",
313
+ "role": "body",
314
+ "path": "taproot-docs/fragments/bienvenue.html",
315
+ "mediaType": "text/html; charset=utf-8",
316
+ "bytes": 37,
317
+ "sha256": "sha256:13977afe13c21fc2fd5962f7155c0df0ca57bb4550f5fd08ec982a46e28709a1"
318
+ }
319
+ ]
320
+ }
321
+ }
322
+ ],
323
+ "files": []
324
+ },
325
+ {
326
+ "name": "reject-duplicate-route",
327
+ "valid": false,
328
+ "expectedCodes": ["duplicate.route"],
329
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
330
+ "mutations": [
331
+ {
332
+ "operation": "append",
333
+ "path": ["resources"],
334
+ "value": {
335
+ "key": "guide:welcome-copy",
336
+ "semantic": {
337
+ "kind": "guide",
338
+ "audiences": ["user"],
339
+ "tags": []
340
+ },
341
+ "variants": [
342
+ {
343
+ "locale": "en-US",
344
+ "route": "/welcome/",
345
+ "title": "Welcome copy",
346
+ "description": "A route collision fixture.",
347
+ "headings": [],
348
+ "source": {
349
+ "path": "guides/welcome-copy.md",
350
+ "url": "https://github.com/taprootio/docs-fixture/blob/0123456789abcdef0123456789abcdef01234567/guides/welcome-copy.md"
351
+ },
352
+ "fragments": [
353
+ {
354
+ "key": "body",
355
+ "role": "body",
356
+ "path": "taproot-docs/fragments/welcome-copy.html",
357
+ "mediaType": "text/html; charset=utf-8",
358
+ "bytes": 37,
359
+ "sha256": "sha256:13977afe13c21fc2fd5962f7155c0df0ca57bb4550f5fd08ec982a46e28709a1"
360
+ }
361
+ ]
362
+ }
363
+ ]
364
+ }
365
+ }
366
+ ],
367
+ "files": []
368
+ },
369
+ {
370
+ "name": "reject-missing-file",
371
+ "valid": false,
372
+ "expectedCodes": ["file.missing"],
373
+ "manifest": "valid/minimal/taproot-docs-manifest.json",
374
+ "files": []
375
+ },
376
+ {
377
+ "name": "reject-hash-drift",
378
+ "valid": false,
379
+ "expectedCodes": ["file.hash_drift"],
380
+ "manifest": "valid/minimal/taproot-docs-manifest.json",
381
+ "files": [
382
+ {
383
+ "path": "taproot-docs/fragments/welcome.html",
384
+ "source": "invalid/hash-drift/taproot-docs/fragments/welcome.html"
385
+ }
386
+ ]
387
+ },
388
+ {
389
+ "name": "reject-size-drift",
390
+ "valid": false,
391
+ "expectedCodes": ["file.size_drift"],
392
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
393
+ "mutations": [
394
+ {
395
+ "operation": "replace",
396
+ "path": ["resources", 0, "variants", 0, "fragments", 0, "bytes"],
397
+ "value": 36
398
+ }
399
+ ],
400
+ "files": [
401
+ {
402
+ "path": "taproot-docs/fragments/welcome.html",
403
+ "source": "invalid/size-drift/taproot-docs/fragments/welcome.html"
404
+ }
405
+ ]
406
+ },
407
+ {
408
+ "name": "reject-unsafe-markup",
409
+ "valid": false,
410
+ "expectedCodes": ["markup.unsupported_tag"],
411
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
412
+ "mutations": [
413
+ {
414
+ "operation": "replace",
415
+ "path": ["resources", 0, "variants", 0, "fragments", 0, "bytes"],
416
+ "value": 26
417
+ },
418
+ {
419
+ "operation": "replace",
420
+ "path": ["resources", 0, "variants", 0, "fragments", 0, "sha256"],
421
+ "value": "sha256:cfc151a63b53ac09647ea69d07410784a48c62c857ab6079e2ee8b3a3c9efbbe"
422
+ }
423
+ ],
424
+ "files": [
425
+ {
426
+ "path": "taproot-docs/fragments/welcome.html",
427
+ "source": "invalid/unsafe-markup/taproot-docs/fragments/welcome.html"
428
+ }
429
+ ]
430
+ },
431
+ {
432
+ "name": "reject-markup-element-limit",
433
+ "valid": false,
434
+ "expectedCodes": ["limit.markup_elements"],
435
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
436
+ "files": [
437
+ {
438
+ "path": "taproot-docs/fragments/welcome.html",
439
+ "generated": {
440
+ "kind": "repeat",
441
+ "text": "<br>",
442
+ "count": 100001
443
+ },
444
+ "synchronizeDescriptor": true
445
+ }
446
+ ]
447
+ },
448
+ {
449
+ "name": "reject-markup-depth-limit",
450
+ "valid": false,
451
+ "expectedCodes": ["limit.markup_depth"],
452
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
453
+ "files": [
454
+ {
455
+ "path": "taproot-docs/fragments/welcome.html",
456
+ "generated": {
457
+ "kind": "nested",
458
+ "tag": "div",
459
+ "depth": 129
460
+ },
461
+ "synchronizeDescriptor": true
462
+ }
463
+ ]
464
+ },
465
+ {
466
+ "name": "accept-navigation-depth-ceiling",
467
+ "valid": true,
468
+ "expectedCodes": [],
469
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
470
+ "generatedNavigationDepth": 12,
471
+ "files": [
472
+ {
473
+ "path": "taproot-docs/fragments/welcome.html",
474
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
475
+ }
476
+ ]
477
+ },
478
+ {
479
+ "name": "reject-navigation-depth-above-ceiling",
480
+ "valid": false,
481
+ "expectedCodes": ["navigation.too_deep"],
482
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
483
+ "generatedNavigationDepth": 13,
484
+ "files": []
485
+ },
486
+ {
487
+ "name": "reject-semicolonless-html-entity",
488
+ "valid": false,
489
+ "expectedCodes": ["markup.unsupported_entity"],
490
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
491
+ "files": [
492
+ {
493
+ "path": "taproot-docs/fragments/welcome.html",
494
+ "generated": {
495
+ "kind": "repeat",
496
+ "text": "<p>Terms &amp conditions</p>",
497
+ "count": 1
498
+ },
499
+ "synchronizeDescriptor": true
500
+ }
501
+ ]
502
+ },
503
+ {
504
+ "name": "reject-duplicate-file-entry",
505
+ "valid": false,
506
+ "expectedCodes": ["duplicate.file_entry"],
507
+ "manifest": "valid/minimal/taproot-docs-manifest.json",
508
+ "files": [
509
+ {
510
+ "path": "taproot-docs/fragments/welcome.html",
511
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
512
+ },
513
+ {
514
+ "path": "taproot-docs/fragments/welcome.html",
515
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
516
+ }
517
+ ]
518
+ },
519
+ {
520
+ "name": "reject-unexpected-semantic-file",
521
+ "valid": false,
522
+ "expectedCodes": ["file.unexpected"],
523
+ "manifest": "valid/minimal/taproot-docs-manifest.json",
524
+ "files": [
525
+ {
526
+ "path": "taproot-docs/fragments/welcome.html",
527
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
528
+ },
529
+ {
530
+ "path": "taproot-docs/fragments/extra.html",
531
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
532
+ }
533
+ ]
534
+ },
535
+ {
536
+ "name": "reject-unsupported-asset-media",
537
+ "valid": false,
538
+ "expectedCodes": ["value.unsupported"],
539
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
540
+ "mutations": [
541
+ {
542
+ "operation": "append",
543
+ "path": ["assets"],
544
+ "value": {
545
+ "key": "image:unsafe",
546
+ "path": "taproot-docs/assets/unsafe.svg",
547
+ "mediaType": "image/svg+xml",
548
+ "bytes": 1,
549
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
550
+ "width": 1,
551
+ "height": 1
552
+ }
553
+ }
554
+ ],
555
+ "files": []
556
+ },
557
+ {
558
+ "name": "reject-asset-decoded-pixel-limit",
559
+ "valid": false,
560
+ "expectedCodes": ["asset.decoded_pixels"],
561
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
562
+ "mutations": [
563
+ {
564
+ "operation": "append",
565
+ "path": ["assets"],
566
+ "value": {
567
+ "key": "image:oversized-canvas",
568
+ "path": "taproot-docs/assets/oversized-canvas.gif",
569
+ "mediaType": "image/gif",
570
+ "bytes": 1,
571
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
572
+ "width": 32768,
573
+ "height": 32768
574
+ }
575
+ }
576
+ ],
577
+ "files": [
578
+ {
579
+ "path": "taproot-docs/fragments/welcome.html",
580
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
581
+ },
582
+ {
583
+ "path": "taproot-docs/assets/oversized-canvas.gif",
584
+ "generated": {
585
+ "kind": "gif",
586
+ "width": 32768,
587
+ "height": 32768,
588
+ "frames": 1
589
+ },
590
+ "synchronizeDescriptor": true
591
+ }
592
+ ]
593
+ },
594
+ {
595
+ "name": "reject-asset-animation-frame-limit",
596
+ "valid": false,
597
+ "expectedCodes": ["asset.animation_frames"],
598
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
599
+ "mutations": [
600
+ {
601
+ "operation": "append",
602
+ "path": ["assets"],
603
+ "value": {
604
+ "key": "image:too-many-frames",
605
+ "path": "taproot-docs/assets/too-many-frames.gif",
606
+ "mediaType": "image/gif",
607
+ "bytes": 1,
608
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
609
+ "width": 1,
610
+ "height": 1
611
+ }
612
+ }
613
+ ],
614
+ "files": [
615
+ {
616
+ "path": "taproot-docs/fragments/welcome.html",
617
+ "source": "valid/minimal/taproot-docs/fragments/welcome.html"
618
+ },
619
+ {
620
+ "path": "taproot-docs/assets/too-many-frames.gif",
621
+ "generated": {
622
+ "kind": "gif",
623
+ "width": 1,
624
+ "height": 1,
625
+ "frames": 1001
626
+ },
627
+ "synchronizeDescriptor": true
628
+ }
629
+ ]
630
+ },
631
+ {
632
+ "name": "reject-gif-cumulative-decoded-animation-pixels",
633
+ "valid": false,
634
+ "expectedCodes": ["asset.decoded_animation_pixels"],
635
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
636
+ "generatedImage": { "kind": "gif", "width": 8192, "height": 4097, "frames": 2 }
637
+ },
638
+ {
639
+ "name": "reject-apng-cumulative-decoded-animation-pixels",
640
+ "valid": false,
641
+ "expectedCodes": ["asset.decoded_animation_pixels"],
642
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
643
+ "generatedImage": { "kind": "png", "width": 8192, "height": 4097, "frames": 2 }
644
+ },
645
+ {
646
+ "name": "reject-webp-cumulative-decoded-animation-pixels",
647
+ "valid": false,
648
+ "expectedCodes": ["asset.decoded_animation_pixels"],
649
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
650
+ "generatedAnimatedWebp": {
651
+ "canvasWidth": 8192,
652
+ "canvasHeight": 4097,
653
+ "frameWidth": 8192,
654
+ "frameHeight": 4097,
655
+ "topOrder": ["VP8X", "ANIM", "ANMF", "ANMF"]
656
+ }
657
+ },
658
+ {
659
+ "name": "reject-fragment-windows-device-path",
660
+ "valid": false,
661
+ "expectedCodes": ["path.device_name"],
662
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
663
+ "mutations": [
664
+ {
665
+ "operation": "replace",
666
+ "path": ["resources", 0, "variants", 0, "fragments", 0, "path"],
667
+ "value": "taproot-docs/fragments/nested/nul.html"
668
+ }
669
+ ],
670
+ "files": []
671
+ },
672
+ {
673
+ "name": "reject-asset-windows-device-path",
674
+ "valid": false,
675
+ "expectedCodes": ["path.device_name"],
676
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
677
+ "mutations": [
678
+ {
679
+ "operation": "append",
680
+ "path": ["assets"],
681
+ "value": {
682
+ "key": "image:device",
683
+ "path": "taproot-docs/assets/nested/com1.png",
684
+ "mediaType": "image/png",
685
+ "bytes": 1,
686
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
687
+ "width": 1,
688
+ "height": 1
689
+ }
690
+ }
691
+ ],
692
+ "files": []
693
+ },
694
+ {
695
+ "name": "reject-asset-declared-pixel-product",
696
+ "valid": false,
697
+ "expectedCodes": ["asset.decoded_pixels"],
698
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
699
+ "mutations": [{
700
+ "operation": "append",
701
+ "path": ["assets"],
702
+ "value": {
703
+ "key": "image:declared-too-large",
704
+ "path": "taproot-docs/assets/declared-too-large.png",
705
+ "mediaType": "image/png",
706
+ "bytes": 1,
707
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
708
+ "width": 8193,
709
+ "height": 8192
710
+ }
711
+ }],
712
+ "files": []
713
+ },
714
+ {
715
+ "name": "accept-valid-animated-webp-frame",
716
+ "valid": true,
717
+ "expectedCodes": [],
718
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
719
+ "mutations": [{
720
+ "operation": "append",
721
+ "path": ["assets"],
722
+ "value": {
723
+ "key": "image:animated",
724
+ "path": "taproot-docs/assets/animated.webp",
725
+ "mediaType": "image/webp",
726
+ "bytes": 1,
727
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
728
+ "width": 1,
729
+ "height": 1
730
+ }
731
+ }],
732
+ "files": [
733
+ { "path": "taproot-docs/fragments/welcome.html", "source": "valid/minimal/taproot-docs/fragments/welcome.html" },
734
+ {
735
+ "path": "taproot-docs/assets/animated.webp",
736
+ "generated": { "kind": "animated-webp" },
737
+ "synchronizeDescriptor": true
738
+ }
739
+ ]
740
+ },
741
+ {
742
+ "name": "reject-animated-webp-oversized-frame",
743
+ "valid": false,
744
+ "expectedCodes": ["asset.decoded_pixels"],
745
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
746
+ "mutations": [{
747
+ "operation": "append",
748
+ "path": ["assets"],
749
+ "value": {
750
+ "key": "image:animated",
751
+ "path": "taproot-docs/assets/animated.webp",
752
+ "mediaType": "image/webp",
753
+ "bytes": 1,
754
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
755
+ "width": 1,
756
+ "height": 1
757
+ }
758
+ }],
759
+ "files": [
760
+ { "path": "taproot-docs/fragments/welcome.html", "source": "valid/minimal/taproot-docs/fragments/welcome.html" },
761
+ {
762
+ "path": "taproot-docs/assets/animated.webp",
763
+ "generated": { "kind": "animated-webp", "frameWidth": 32768, "frameHeight": 32768, "embeddedWidth": 1, "embeddedHeight": 1 },
764
+ "synchronizeDescriptor": true
765
+ }
766
+ ]
767
+ },
768
+ {
769
+ "name": "reject-animated-webp-frame-outside-canvas",
770
+ "valid": false,
771
+ "expectedCodes": ["asset.media_mismatch"],
772
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
773
+ "mutations": [{
774
+ "operation": "append",
775
+ "path": ["assets"],
776
+ "value": {
777
+ "key": "image:animated",
778
+ "path": "taproot-docs/assets/animated.webp",
779
+ "mediaType": "image/webp",
780
+ "bytes": 1,
781
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
782
+ "width": 1,
783
+ "height": 1
784
+ }
785
+ }],
786
+ "files": [
787
+ { "path": "taproot-docs/fragments/welcome.html", "source": "valid/minimal/taproot-docs/fragments/welcome.html" },
788
+ {
789
+ "path": "taproot-docs/assets/animated.webp",
790
+ "generated": { "kind": "animated-webp", "frameX": 2 },
791
+ "synchronizeDescriptor": true
792
+ }
793
+ ]
794
+ },
795
+ {
796
+ "name": "reject-animated-webp-reserved-frame-flags",
797
+ "valid": false,
798
+ "expectedCodes": ["asset.media_mismatch"],
799
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
800
+ "mutations": [{
801
+ "operation": "append",
802
+ "path": ["assets"],
803
+ "value": {
804
+ "key": "image:animated",
805
+ "path": "taproot-docs/assets/animated.webp",
806
+ "mediaType": "image/webp",
807
+ "bytes": 1,
808
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
809
+ "width": 1,
810
+ "height": 1
811
+ }
812
+ }],
813
+ "files": [
814
+ { "path": "taproot-docs/fragments/welcome.html", "source": "valid/minimal/taproot-docs/fragments/welcome.html" },
815
+ {
816
+ "path": "taproot-docs/assets/animated.webp",
817
+ "generated": { "kind": "animated-webp", "frameFlags": 4 },
818
+ "synchronizeDescriptor": true
819
+ }
820
+ ]
821
+ },
822
+ {
823
+ "name": "reject-animated-webp-embedded-dimension-mismatch",
824
+ "valid": false,
825
+ "expectedCodes": ["asset.media_mismatch"],
826
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
827
+ "mutations": [{
828
+ "operation": "append",
829
+ "path": ["assets"],
830
+ "value": {
831
+ "key": "image:animated",
832
+ "path": "taproot-docs/assets/animated.webp",
833
+ "mediaType": "image/webp",
834
+ "bytes": 1,
835
+ "sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
836
+ "width": 2,
837
+ "height": 1
838
+ }
839
+ }],
840
+ "files": [
841
+ { "path": "taproot-docs/fragments/welcome.html", "source": "valid/minimal/taproot-docs/fragments/welcome.html" },
842
+ {
843
+ "path": "taproot-docs/assets/animated.webp",
844
+ "generated": { "kind": "animated-webp", "canvasWidth": 2, "frameWidth": 2, "embeddedWidth": 1 },
845
+ "synchronizeDescriptor": true
846
+ }
847
+ ]
848
+ },
849
+ {
850
+ "name": "reject-animated-webp-nonzero-top-level-padding",
851
+ "valid": false,
852
+ "expectedCodes": ["asset.media_mismatch"],
853
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
854
+ "generatedAnimatedWebp": { "topOrder": ["VP8X", "ODD", "ANIM", "ANMF"], "topPadByte": 1 }
855
+ },
856
+ {
857
+ "name": "reject-webp-unknown-chunk-in-simple-container",
858
+ "valid": false,
859
+ "expectedCodes": ["asset.media_mismatch"],
860
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
861
+ "generatedAnimatedWebp": { "topOrder": ["VP8L", "ODD!"] }
862
+ },
863
+ {
864
+ "name": "reject-webp-unknown-chunk-in-extended-still-container",
865
+ "valid": false,
866
+ "expectedCodes": ["asset.media_mismatch"],
867
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
868
+ "generatedAnimatedWebp": { "extendedFlags": 0, "topOrder": ["VP8X", "ODD!", "VP8 "] }
869
+ },
870
+ {
871
+ "name": "reject-webp-unknown-chunk-in-animation",
872
+ "valid": false,
873
+ "expectedCodes": ["asset.media_mismatch"],
874
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
875
+ "generatedAnimatedWebp": { "topOrder": ["VP8X", "ODD!", "ANIM", "ANMF"] }
876
+ },
877
+ {
878
+ "name": "reject-animated-webp-nonzero-nested-padding",
879
+ "valid": false,
880
+ "expectedCodes": ["asset.media_mismatch"],
881
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
882
+ "generatedAnimatedWebp": { "nestedOrder": ["VP8L"], "nestedPadByte": 1 }
883
+ },
884
+ {
885
+ "name": "reject-animated-webp-vp8l-before-vp8x",
886
+ "valid": false,
887
+ "expectedCodes": ["asset.media_mismatch"],
888
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
889
+ "generatedAnimatedWebp": { "topOrder": ["VP8L", "VP8X", "ANIM", "ANMF"] }
890
+ },
891
+ {
892
+ "name": "reject-animated-webp-frame-before-animation-header",
893
+ "valid": false,
894
+ "expectedCodes": ["asset.media_mismatch"],
895
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
896
+ "generatedAnimatedWebp": { "topOrder": ["VP8X", "ANMF", "ANIM"] }
897
+ },
898
+ {
899
+ "name": "reject-animated-webp-duplicate-animation-header",
900
+ "valid": false,
901
+ "expectedCodes": ["asset.media_mismatch"],
902
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
903
+ "generatedAnimatedWebp": { "topOrder": ["VP8X", "ANIM", "ANIM", "ANMF"] }
904
+ },
905
+ {
906
+ "name": "reject-animated-webp-top-level-payload",
907
+ "valid": false,
908
+ "expectedCodes": ["asset.media_mismatch"],
909
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
910
+ "generatedAnimatedWebp": { "topOrder": ["VP8X", "VP8 ", "ANIM", "ANMF"] }
911
+ },
912
+ {
913
+ "name": "reject-animated-webp-unsupported-nested-chunk",
914
+ "valid": false,
915
+ "expectedCodes": ["asset.media_mismatch"],
916
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
917
+ "generatedAnimatedWebp": { "nestedOrder": ["EXIF"] }
918
+ },
919
+ {
920
+ "name": "reject-animated-webp-duplicate-nested-image",
921
+ "valid": false,
922
+ "expectedCodes": ["asset.media_mismatch"],
923
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
924
+ "generatedAnimatedWebp": { "nestedOrder": ["VP8L", "VP8L"] }
925
+ },
926
+ {
927
+ "name": "reject-animated-webp-misordered-nested-alpha",
928
+ "valid": false,
929
+ "expectedCodes": ["asset.media_mismatch"],
930
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
931
+ "generatedAnimatedWebp": { "nestedOrder": ["VP8 ", "ALPH"] }
932
+ },
933
+ {
934
+ "name": "accept-webp-still-feature-contract",
935
+ "valid": true,
936
+ "expectedCodes": [],
937
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
938
+ "generatedAnimatedWebp": { "extendedFlags": 60, "topOrder": ["VP8X", "ICCP", "ALPH", "VP8 ", "EXIF", "XMP "] }
939
+ },
940
+ {
941
+ "name": "accept-webp-animated-feature-contract",
942
+ "valid": true,
943
+ "expectedCodes": [],
944
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
945
+ "generatedAnimatedWebp": { "extendedFlags": 62, "nestedOrder": ["ALPH", "VP8 "], "topOrder": ["VP8X", "ICCP", "ANIM", "ANMF", "EXIF", "XMP "] }
946
+ },
947
+ {
948
+ "name": "accept-webp-animated-lossless-alpha",
949
+ "valid": true,
950
+ "expectedCodes": [],
951
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
952
+ "generatedAnimatedWebp": { "extendedFlags": 18, "embeddedAlphaUsed": true, "nestedOrder": ["VP8L"] }
953
+ },
954
+ {
955
+ "name": "reject-webp-icc-flag-without-chunk",
956
+ "valid": false,
957
+ "expectedCodes": ["asset.media_mismatch"],
958
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
959
+ "generatedAnimatedWebp": { "extendedFlags": 32, "topOrder": ["VP8X", "VP8 "] }
960
+ },
961
+ {
962
+ "name": "reject-webp-alpha-flag-without-alpha",
963
+ "valid": false,
964
+ "expectedCodes": ["asset.media_mismatch"],
965
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
966
+ "generatedAnimatedWebp": { "extendedFlags": 16, "topOrder": ["VP8X", "VP8 "] }
967
+ },
968
+ {
969
+ "name": "reject-webp-exif-flag-without-chunk",
970
+ "valid": false,
971
+ "expectedCodes": ["asset.media_mismatch"],
972
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
973
+ "generatedAnimatedWebp": { "extendedFlags": 8, "topOrder": ["VP8X", "VP8 "] }
974
+ },
975
+ {
976
+ "name": "reject-webp-xmp-flag-without-chunk",
977
+ "valid": false,
978
+ "expectedCodes": ["asset.media_mismatch"],
979
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
980
+ "generatedAnimatedWebp": { "extendedFlags": 4, "topOrder": ["VP8X", "VP8 "] }
981
+ },
982
+ {
983
+ "name": "reject-webp-animation-flag-without-animation",
984
+ "valid": false,
985
+ "expectedCodes": ["asset.media_mismatch"],
986
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
987
+ "generatedAnimatedWebp": { "extendedFlags": 2, "topOrder": ["VP8X"] }
988
+ },
989
+ {
990
+ "name": "reject-webp-iccp-without-flag",
991
+ "valid": false,
992
+ "expectedCodes": ["asset.media_mismatch"],
993
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
994
+ "generatedAnimatedWebp": { "extendedFlags": 0, "topOrder": ["VP8X", "ICCP", "VP8 "] }
995
+ },
996
+ {
997
+ "name": "reject-webp-alph-without-flag",
998
+ "valid": false,
999
+ "expectedCodes": ["asset.media_mismatch"],
1000
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1001
+ "generatedAnimatedWebp": { "extendedFlags": 0, "topOrder": ["VP8X", "ALPH", "VP8 "] }
1002
+ },
1003
+ {
1004
+ "name": "reject-webp-exif-without-flag",
1005
+ "valid": false,
1006
+ "expectedCodes": ["asset.media_mismatch"],
1007
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1008
+ "generatedAnimatedWebp": { "extendedFlags": 0, "topOrder": ["VP8X", "VP8 ", "EXIF"] }
1009
+ },
1010
+ {
1011
+ "name": "reject-webp-xmp-without-flag",
1012
+ "valid": false,
1013
+ "expectedCodes": ["asset.media_mismatch"],
1014
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1015
+ "generatedAnimatedWebp": { "extendedFlags": 0, "topOrder": ["VP8X", "VP8 ", "XMP "] }
1016
+ },
1017
+ {
1018
+ "name": "reject-webp-animation-without-flag",
1019
+ "valid": false,
1020
+ "expectedCodes": ["asset.media_mismatch"],
1021
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1022
+ "generatedAnimatedWebp": { "extendedFlags": 0, "topOrder": ["VP8X", "ANIM", "ANMF"] }
1023
+ },
1024
+ {
1025
+ "name": "reject-webp-duplicate-iccp",
1026
+ "valid": false,
1027
+ "expectedCodes": ["asset.media_mismatch"],
1028
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1029
+ "generatedAnimatedWebp": { "extendedFlags": 32, "topOrder": ["VP8X", "ICCP", "ICCP", "VP8 "] }
1030
+ },
1031
+ {
1032
+ "name": "reject-webp-duplicate-alph",
1033
+ "valid": false,
1034
+ "expectedCodes": ["asset.media_mismatch"],
1035
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1036
+ "generatedAnimatedWebp": { "extendedFlags": 16, "topOrder": ["VP8X", "ALPH", "ALPH", "VP8 "] }
1037
+ },
1038
+ {
1039
+ "name": "reject-webp-duplicate-exif",
1040
+ "valid": false,
1041
+ "expectedCodes": ["asset.media_mismatch"],
1042
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1043
+ "generatedAnimatedWebp": { "extendedFlags": 8, "topOrder": ["VP8X", "VP8 ", "EXIF", "EXIF"] }
1044
+ },
1045
+ {
1046
+ "name": "reject-webp-duplicate-xmp",
1047
+ "valid": false,
1048
+ "expectedCodes": ["asset.media_mismatch"],
1049
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1050
+ "generatedAnimatedWebp": { "extendedFlags": 4, "topOrder": ["VP8X", "VP8 ", "XMP ", "XMP "] }
1051
+ },
1052
+ {
1053
+ "name": "reject-webp-iccp-after-image",
1054
+ "valid": false,
1055
+ "expectedCodes": ["asset.media_mismatch"],
1056
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1057
+ "generatedAnimatedWebp": { "extendedFlags": 32, "topOrder": ["VP8X", "VP8 ", "ICCP"] }
1058
+ },
1059
+ {
1060
+ "name": "reject-webp-alph-not-immediately-before-vp8",
1061
+ "valid": false,
1062
+ "expectedCodes": ["asset.media_mismatch"],
1063
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1064
+ "generatedAnimatedWebp": { "extendedFlags": 48, "topOrder": ["VP8X", "ALPH", "ICCP", "VP8 "] }
1065
+ },
1066
+ {
1067
+ "name": "reject-webp-exif-before-image",
1068
+ "valid": false,
1069
+ "expectedCodes": ["asset.media_mismatch"],
1070
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1071
+ "generatedAnimatedWebp": { "extendedFlags": 8, "topOrder": ["VP8X", "EXIF", "VP8 "] }
1072
+ },
1073
+ {
1074
+ "name": "reject-webp-xmp-before-image",
1075
+ "valid": false,
1076
+ "expectedCodes": ["asset.media_mismatch"],
1077
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1078
+ "generatedAnimatedWebp": { "extendedFlags": 4, "topOrder": ["VP8X", "XMP ", "VP8 "] }
1079
+ },
1080
+ {
1081
+ "name": "reject-webp-exif-after-xmp",
1082
+ "valid": false,
1083
+ "expectedCodes": ["asset.media_mismatch"],
1084
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1085
+ "generatedAnimatedWebp": { "extendedFlags": 12, "topOrder": ["VP8X", "VP8 ", "XMP ", "EXIF"] }
1086
+ },
1087
+ {
1088
+ "name": "reject-webp-alph-with-vp8l",
1089
+ "valid": false,
1090
+ "expectedCodes": ["asset.media_mismatch"],
1091
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1092
+ "generatedAnimatedWebp": { "extendedFlags": 16, "topOrder": ["VP8X", "ALPH", "VP8L"] }
1093
+ },
1094
+ {
1095
+ "name": "reject-webp-animated-alph-without-alpha-flag",
1096
+ "valid": false,
1097
+ "expectedCodes": ["asset.media_mismatch"],
1098
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1099
+ "generatedAnimatedWebp": { "extendedFlags": 2, "nestedOrder": ["ALPH", "VP8 "] }
1100
+ },
1101
+ {
1102
+ "name": "reject-webp-animated-vp8l-alpha-without-flag",
1103
+ "valid": false,
1104
+ "expectedCodes": ["asset.media_mismatch"],
1105
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1106
+ "generatedAnimatedWebp": { "extendedFlags": 2, "embeddedAlphaUsed": true, "nestedOrder": ["VP8L"] }
1107
+ },
1108
+ {
1109
+ "name": "reject-webp-frame-after-metadata-ended-run",
1110
+ "valid": false,
1111
+ "expectedCodes": ["asset.media_mismatch"],
1112
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1113
+ "generatedAnimatedWebp": { "extendedFlags": 10, "topOrder": ["VP8X", "ANIM", "ANMF", "EXIF", "ANMF"] }
1114
+ },
1115
+ {
1116
+ "name": "accept-browser-decodable-apng",
1117
+ "valid": true,
1118
+ "expectedCodes": [],
1119
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1120
+ "generatedImage": { "kind": "png", "animated": true, "frames": 2 }
1121
+ },
1122
+ {
1123
+ "name": "reject-apng-sequence-gap",
1124
+ "valid": false,
1125
+ "expectedCodes": ["asset.media_mismatch"],
1126
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1127
+ "generatedImage": { "kind": "png", "animated": true, "frames": 2, "sequenceGap": true }
1128
+ },
1129
+ {
1130
+ "name": "reject-apng-invalid-dispose",
1131
+ "valid": false,
1132
+ "expectedCodes": ["asset.media_mismatch"],
1133
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1134
+ "generatedImage": { "kind": "png", "animated": true, "frames": 2, "dispose": 3 }
1135
+ },
1136
+ {
1137
+ "name": "reject-apng-invalid-blend",
1138
+ "valid": false,
1139
+ "expectedCodes": ["asset.media_mismatch"],
1140
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1141
+ "generatedImage": { "kind": "png", "animated": true, "frames": 2, "blend": 2 }
1142
+ },
1143
+ {
1144
+ "name": "reject-apng-missing-frame-data",
1145
+ "valid": false,
1146
+ "expectedCodes": ["asset.media_mismatch"],
1147
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1148
+ "generatedImage": { "kind": "png", "animated": true, "frames": 2, "omitSecondData": true }
1149
+ },
1150
+ {
1151
+ "name": "reject-apng-frame-data-before-control",
1152
+ "valid": false,
1153
+ "expectedCodes": ["asset.media_mismatch"],
1154
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1155
+ "generatedImage": { "kind": "png", "animated": true, "frames": 2, "fdatBeforeControl": true }
1156
+ },
1157
+ {
1158
+ "name": "reject-apng-declared-frame-mismatch",
1159
+ "valid": false,
1160
+ "expectedCodes": ["asset.media_mismatch"],
1161
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1162
+ "generatedImage": { "kind": "png", "animated": true, "frames": 2, "declaredFrames": 3 }
1163
+ },
1164
+ {
1165
+ "name": "accept-indexed-png-palette",
1166
+ "valid": true,
1167
+ "expectedCodes": [],
1168
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1169
+ "generatedImage": { "kind": "png", "bitDepth": 8, "colorType": 3, "paletteEntries": 2 }
1170
+ },
1171
+ {
1172
+ "name": "reject-png-palette-for-grayscale",
1173
+ "valid": false,
1174
+ "expectedCodes": ["asset.media_mismatch"],
1175
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1176
+ "generatedImage": { "kind": "png", "bitDepth": 8, "colorType": 0, "paletteEntries": 2 }
1177
+ },
1178
+ {
1179
+ "name": "reject-indexed-png-without-palette",
1180
+ "valid": false,
1181
+ "expectedCodes": ["asset.media_mismatch"],
1182
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1183
+ "generatedImage": { "kind": "png", "bitDepth": 8, "colorType": 3 }
1184
+ },
1185
+ {
1186
+ "name": "reject-indexed-png-palette-over-bit-depth",
1187
+ "valid": false,
1188
+ "expectedCodes": ["asset.media_mismatch"],
1189
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1190
+ "generatedImage": { "kind": "png", "bitDepth": 1, "colorType": 3, "paletteEntries": 3 }
1191
+ },
1192
+ {
1193
+ "name": "reject-png-palette-after-idat",
1194
+ "valid": false,
1195
+ "expectedCodes": ["asset.media_mismatch"],
1196
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1197
+ "generatedImage": { "kind": "png", "bitDepth": 8, "colorType": 2, "paletteEntries": 2, "paletteAfterData": true }
1198
+ },
1199
+ {
1200
+ "name": "accept-gif-local-color-table",
1201
+ "valid": true,
1202
+ "expectedCodes": [],
1203
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1204
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "palette": "local" }
1205
+ },
1206
+ {
1207
+ "name": "reject-gif-without-color-table",
1208
+ "valid": false,
1209
+ "expectedCodes": ["asset.media_mismatch"],
1210
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1211
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "palette": "none" }
1212
+ },
1213
+ {
1214
+ "name": "reject-webp-vp8-interframe",
1215
+ "valid": false,
1216
+ "expectedCodes": ["asset.media_mismatch"],
1217
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1218
+ "generatedAnimatedWebp": { "extendedFlags": 0, "vp8Fault": "interframe", "topOrder": ["VP8X", "VP8 "] }
1219
+ },
1220
+ {
1221
+ "name": "reject-webp-vp8-hidden-frame",
1222
+ "valid": false,
1223
+ "expectedCodes": ["asset.media_mismatch"],
1224
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1225
+ "generatedAnimatedWebp": { "extendedFlags": 0, "vp8Fault": "hidden", "topOrder": ["VP8X", "VP8 "] }
1226
+ },
1227
+ {
1228
+ "name": "reject-webp-vp8-experimental-version",
1229
+ "valid": false,
1230
+ "expectedCodes": ["asset.media_mismatch"],
1231
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1232
+ "generatedAnimatedWebp": { "extendedFlags": 0, "vp8Fault": "experimental", "topOrder": ["VP8X", "VP8 "] }
1233
+ },
1234
+ {
1235
+ "name": "reject-webp-vp8-empty-partition",
1236
+ "valid": false,
1237
+ "expectedCodes": ["asset.media_mismatch"],
1238
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1239
+ "generatedAnimatedWebp": { "extendedFlags": 0, "vp8Fault": "empty-partition", "topOrder": ["VP8X", "VP8 "] }
1240
+ },
1241
+ {
1242
+ "name": "reject-webp-vp8-partition-at-end",
1243
+ "valid": false,
1244
+ "expectedCodes": ["asset.media_mismatch"],
1245
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1246
+ "generatedAnimatedWebp": { "extendedFlags": 0, "vp8Fault": "partition-at-end", "topOrder": ["VP8X", "VP8 "] }
1247
+ },
1248
+ {
1249
+ "name": "reject-webp-vp8l-without-stream",
1250
+ "valid": false,
1251
+ "expectedCodes": ["asset.media_mismatch"],
1252
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1253
+ "generatedAnimatedWebp": { "extendedFlags": 0, "vp8lHeaderOnly": true, "topOrder": ["VP8X", "VP8L"] }
1254
+ },
1255
+ {
1256
+ "name": "reject-webp-alph-reserved-bits",
1257
+ "valid": false,
1258
+ "expectedCodes": ["asset.media_mismatch"],
1259
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1260
+ "generatedAnimatedWebp": { "extendedFlags": 16, "alphaHeader": 64, "topOrder": ["VP8X", "ALPH", "VP8 "] }
1261
+ },
1262
+ {
1263
+ "name": "reject-webp-alph-preprocessing",
1264
+ "valid": false,
1265
+ "expectedCodes": ["asset.media_mismatch"],
1266
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1267
+ "generatedAnimatedWebp": { "extendedFlags": 16, "alphaHeader": 32, "topOrder": ["VP8X", "ALPH", "VP8 "] }
1268
+ },
1269
+ {
1270
+ "name": "reject-webp-alph-compression",
1271
+ "valid": false,
1272
+ "expectedCodes": ["asset.media_mismatch"],
1273
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1274
+ "generatedAnimatedWebp": { "extendedFlags": 16, "alphaHeader": 2, "topOrder": ["VP8X", "ALPH", "VP8 "] }
1275
+ },
1276
+ {
1277
+ "name": "reject-webp-alph-raw-length",
1278
+ "valid": false,
1279
+ "expectedCodes": ["asset.media_mismatch"],
1280
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1281
+ "generatedAnimatedWebp": { "extendedFlags": 16, "alphaDataLength": 0, "topOrder": ["VP8X", "ALPH", "VP8 "] }
1282
+ },
1283
+ {
1284
+ "name": "accept-png-consecutive-zero-length-idat",
1285
+ "valid": true,
1286
+ "expectedCodes": [],
1287
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1288
+ "generatedImage": { "kind": "png", "leadingZeroIdat": true }
1289
+ },
1290
+ {
1291
+ "name": "reject-png-lowercase-reserved-type-byte",
1292
+ "valid": false,
1293
+ "expectedCodes": ["asset.media_mismatch"],
1294
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1295
+ "generatedImage": { "kind": "png", "reservedChunk": true }
1296
+ },
1297
+ {
1298
+ "name": "reject-png-interrupted-zero-length-idat",
1299
+ "valid": false,
1300
+ "expectedCodes": ["asset.media_mismatch"],
1301
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1302
+ "generatedImage": { "kind": "png", "leadingZeroIdat": true, "interruptZeroIdat": true }
1303
+ },
1304
+ {
1305
+ "name": "accept-gif-graphic-control-extension",
1306
+ "valid": true,
1307
+ "expectedCodes": [],
1308
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1309
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extension": "gce" }
1310
+ },
1311
+ {
1312
+ "name": "accept-gif-application-extension",
1313
+ "valid": true,
1314
+ "expectedCodes": [],
1315
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1316
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extension": "application" }
1317
+ },
1318
+ {
1319
+ "name": "accept-gif-plain-text-extension",
1320
+ "valid": true,
1321
+ "expectedCodes": [],
1322
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1323
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extension": "plain-text" }
1324
+ },
1325
+ {
1326
+ "name": "accept-gif-comment-extension",
1327
+ "valid": true,
1328
+ "expectedCodes": [],
1329
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1330
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extension": "comment" }
1331
+ },
1332
+ {
1333
+ "name": "reject-gif-gce-block-size",
1334
+ "valid": false,
1335
+ "expectedCodes": ["asset.media_mismatch"],
1336
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1337
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extensionFault": "gce-size" }
1338
+ },
1339
+ {
1340
+ "name": "reject-gif-gce-terminator",
1341
+ "valid": false,
1342
+ "expectedCodes": ["asset.media_mismatch"],
1343
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1344
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extensionFault": "gce-terminator" }
1345
+ },
1346
+ {
1347
+ "name": "reject-gif-gce-reserved-bits",
1348
+ "valid": false,
1349
+ "expectedCodes": ["asset.media_mismatch"],
1350
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1351
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extensionFault": "gce-reserved" }
1352
+ },
1353
+ {
1354
+ "name": "reject-gif-unknown-extension",
1355
+ "valid": false,
1356
+ "expectedCodes": ["asset.media_mismatch"],
1357
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1358
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "extensionFault": "unknown" }
1359
+ },
1360
+ {
1361
+ "name": "reject-gif-image-reserved-bits",
1362
+ "valid": false,
1363
+ "expectedCodes": ["asset.media_mismatch"],
1364
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1365
+ "generatedImage": { "kind": "gif", "width": 1, "height": 1, "frames": 1, "imageReserved": true }
1366
+ },
1367
+ {
1368
+ "name": "accept-standalone-baseline-jpeg",
1369
+ "valid": true,
1370
+ "expectedCodes": [],
1371
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1372
+ "generatedImage": { "kind": "jpeg" }
1373
+ },
1374
+ {
1375
+ "name": "accept-jpeg-quantization-table-after-frame-header",
1376
+ "valid": true,
1377
+ "expectedCodes": [],
1378
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1379
+ "generatedImage": { "kind": "jpeg", "fault": "dqt-after-sof" }
1380
+ },
1381
+ {
1382
+ "name": "accept-jpeg-complete-non-interleaved-scans",
1383
+ "valid": true,
1384
+ "expectedCodes": [],
1385
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1386
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan" }
1387
+ },
1388
+ {
1389
+ "name": "accept-jpeg-non-interleaved-restart-component-geometry",
1390
+ "valid": true,
1391
+ "expectedCodes": [],
1392
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1393
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan-restarts", "width": 17 }
1394
+ },
1395
+ {
1396
+ "name": "reject-jpeg-duplicate-component-across-scans",
1397
+ "valid": false,
1398
+ "expectedCodes": ["asset.media_mismatch"],
1399
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1400
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan-duplicate" }
1401
+ },
1402
+ {
1403
+ "name": "reject-jpeg-missing-component-across-scans",
1404
+ "valid": false,
1405
+ "expectedCodes": ["asset.media_mismatch"],
1406
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1407
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan-missing" }
1408
+ },
1409
+ {
1410
+ "name": "reject-jpeg-missing-per-scan-quantization-table",
1411
+ "valid": false,
1412
+ "expectedCodes": ["asset.media_mismatch"],
1413
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1414
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan-missing-quantization" }
1415
+ },
1416
+ {
1417
+ "name": "reject-jpeg-missing-per-scan-huffman-table",
1418
+ "valid": false,
1419
+ "expectedCodes": ["asset.media_mismatch"],
1420
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1421
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan-missing-huffman" }
1422
+ },
1423
+ {
1424
+ "name": "reject-jpeg-invalid-per-scan-spectral-fields",
1425
+ "valid": false,
1426
+ "expectedCodes": ["asset.media_mismatch"],
1427
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1428
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan-spectral" }
1429
+ },
1430
+ {
1431
+ "name": "reject-jpeg-non-interleaved-restart-cardinality",
1432
+ "valid": false,
1433
+ "expectedCodes": ["asset.media_mismatch"],
1434
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1435
+ "generatedImage": { "kind": "jpeg", "fault": "multi-scan-restart-cardinality", "width": 17 }
1436
+ },
1437
+ {
1438
+ "name": "reject-jpeg-header-only-stream",
1439
+ "valid": false,
1440
+ "expectedCodes": ["asset.media_mismatch"],
1441
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1442
+ "generatedImage": { "kind": "jpeg", "fault": "header-only" }
1443
+ },
1444
+ {
1445
+ "name": "reject-jpeg-arithmetic-frame",
1446
+ "valid": false,
1447
+ "expectedCodes": ["asset.media_mismatch"],
1448
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1449
+ "generatedImage": { "kind": "jpeg", "fault": "arithmetic" }
1450
+ },
1451
+ {
1452
+ "name": "reject-jpeg-missing-quantization-table",
1453
+ "valid": false,
1454
+ "expectedCodes": ["asset.media_mismatch"],
1455
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1456
+ "generatedImage": { "kind": "jpeg", "fault": "missing-quantization" }
1457
+ },
1458
+ {
1459
+ "name": "reject-jpeg-duplicate-component",
1460
+ "valid": false,
1461
+ "expectedCodes": ["asset.media_mismatch"],
1462
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1463
+ "generatedImage": { "kind": "jpeg", "fault": "duplicate-component" }
1464
+ },
1465
+ {
1466
+ "name": "reject-jpeg-missing-huffman-table",
1467
+ "valid": false,
1468
+ "expectedCodes": ["asset.media_mismatch"],
1469
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1470
+ "generatedImage": { "kind": "jpeg", "fault": "missing-huffman" }
1471
+ },
1472
+ {
1473
+ "name": "reject-jpeg-16-bit-baseline-quantization-table",
1474
+ "valid": false,
1475
+ "expectedCodes": ["asset.media_mismatch"],
1476
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1477
+ "generatedImage": { "kind": "jpeg", "fault": "dqt-16-bit" }
1478
+ },
1479
+ {
1480
+ "name": "reject-jpeg-zero-quantization-coefficient",
1481
+ "valid": false,
1482
+ "expectedCodes": ["asset.media_mismatch"],
1483
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1484
+ "generatedImage": { "kind": "jpeg", "fault": "dqt-zero" }
1485
+ },
1486
+ {
1487
+ "name": "reject-jpeg-oversubscribed-huffman-table",
1488
+ "valid": false,
1489
+ "expectedCodes": ["asset.media_mismatch"],
1490
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1491
+ "generatedImage": { "kind": "jpeg", "fault": "dht-oversubscribed" }
1492
+ },
1493
+ {
1494
+ "name": "reject-jpeg-exhausted-huffman-table",
1495
+ "valid": false,
1496
+ "expectedCodes": ["asset.media_mismatch"],
1497
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1498
+ "generatedImage": { "kind": "jpeg", "fault": "dht-exhausted" }
1499
+ },
1500
+ {
1501
+ "name": "reject-jpeg-all-ones-terminal-huffman-code",
1502
+ "valid": false,
1503
+ "expectedCodes": ["asset.media_mismatch"],
1504
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1505
+ "generatedImage": { "kind": "jpeg", "fault": "dht-all-ones" }
1506
+ },
1507
+ {
1508
+ "name": "reject-jpeg-too-many-huffman-symbols",
1509
+ "valid": false,
1510
+ "expectedCodes": ["asset.media_mismatch"],
1511
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1512
+ "generatedImage": { "kind": "jpeg", "fault": "dht-too-many" }
1513
+ },
1514
+ {
1515
+ "name": "reject-jpeg-invalid-baseline-dc-category",
1516
+ "valid": false,
1517
+ "expectedCodes": ["asset.media_mismatch"],
1518
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1519
+ "generatedImage": { "kind": "jpeg", "fault": "dht-invalid-dc" }
1520
+ },
1521
+ {
1522
+ "name": "reject-jpeg-invalid-baseline-ac-size",
1523
+ "valid": false,
1524
+ "expectedCodes": ["asset.media_mismatch"],
1525
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1526
+ "generatedImage": { "kind": "jpeg", "fault": "dht-invalid-ac" }
1527
+ },
1528
+ {
1529
+ "name": "reject-jpeg-invalid-zero-size-ac-symbol",
1530
+ "valid": false,
1531
+ "expectedCodes": ["asset.media_mismatch"],
1532
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1533
+ "generatedImage": { "kind": "jpeg", "fault": "dht-zero-size-ac" }
1534
+ },
1535
+ {
1536
+ "name": "reject-jpeg-restart-without-preceding-entropy",
1537
+ "valid": false,
1538
+ "expectedCodes": ["asset.media_mismatch"],
1539
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1540
+ "generatedImage": { "kind": "jpeg", "fault": "rst-only", "width": 9 }
1541
+ },
1542
+ {
1543
+ "name": "reject-jpeg-consecutive-restarts",
1544
+ "valid": false,
1545
+ "expectedCodes": ["asset.media_mismatch"],
1546
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1547
+ "generatedImage": { "kind": "jpeg", "fault": "rst-consecutive", "width": 17 }
1548
+ },
1549
+ {
1550
+ "name": "reject-jpeg-restart-without-following-entropy",
1551
+ "valid": false,
1552
+ "expectedCodes": ["asset.media_mismatch"],
1553
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1554
+ "generatedImage": { "kind": "jpeg", "fault": "rst-no-final-entropy", "width": 9 }
1555
+ },
1556
+ {
1557
+ "name": "reject-jpeg-sampling-product-over-baseline-ceiling",
1558
+ "valid": false,
1559
+ "expectedCodes": ["asset.media_mismatch"],
1560
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1561
+ "generatedImage": { "kind": "jpeg", "fault": "sampling-units" }
1562
+ },
1563
+ {
1564
+ "name": "reject-jpeg-multiple-fill-bytes-before-stuffed-zero",
1565
+ "valid": false,
1566
+ "expectedCodes": ["asset.media_mismatch"],
1567
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1568
+ "generatedImage": { "kind": "jpeg", "fault": "stuffing-multiple-ff" }
1569
+ },
1570
+ {
1571
+ "name": "accept-jpeg-fill-bytes-before-eoi",
1572
+ "valid": true,
1573
+ "expectedCodes": [],
1574
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1575
+ "generatedImage": { "kind": "jpeg", "fault": "fill-before-eoi" }
1576
+ },
1577
+ {
1578
+ "name": "accept-jpeg-fill-bytes-before-restart",
1579
+ "valid": true,
1580
+ "expectedCodes": [],
1581
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1582
+ "generatedImage": { "kind": "jpeg", "fault": "fill-before-rst", "width": 9 }
1583
+ },
1584
+ {
1585
+ "name": "reject-jpeg-missing-restart-marker",
1586
+ "valid": false,
1587
+ "expectedCodes": ["asset.media_mismatch"],
1588
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1589
+ "generatedImage": { "kind": "jpeg", "fault": "rst-missing", "width": 17 }
1590
+ },
1591
+ {
1592
+ "name": "reject-jpeg-excess-restart-marker",
1593
+ "valid": false,
1594
+ "expectedCodes": ["asset.media_mismatch"],
1595
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1596
+ "generatedImage": { "kind": "jpeg", "fault": "rst-excess", "width": 9 }
1597
+ },
1598
+ {
1599
+ "name": "accept-jpeg-exact-restart-marker-count",
1600
+ "valid": true,
1601
+ "expectedCodes": [],
1602
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1603
+ "generatedImage": { "kind": "jpeg", "fault": "rst-exact", "width": 17 }
1604
+ },
1605
+ {
1606
+ "name": "accept-jpeg-restart-interval-above-mcu-count",
1607
+ "valid": true,
1608
+ "expectedCodes": [],
1609
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1610
+ "generatedImage": { "kind": "jpeg", "fault": "rst-interval-over-mcus" }
1611
+ },
1612
+ {
1613
+ "name": "reject-literal-null-fragment-text",
1614
+ "valid": false,
1615
+ "expectedCodes": ["markup.invalid_null"],
1616
+ "baseManifest": "valid/minimal/taproot-docs-manifest.json",
1617
+ "files": [
1618
+ {
1619
+ "path": "taproot-docs/fragments/welcome.html",
1620
+ "generated": {
1621
+ "kind": "repeat",
1622
+ "text": "<p>a\u0000b</p>",
1623
+ "count": 1
1624
+ },
1625
+ "synchronizeDescriptor": true
1626
+ }
1627
+ ]
1628
+ }
1629
+ ]
1630
+ }