@crvouga/atlas 1.2.0 → 1.4.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.
- package/CHANGELOG.md +12 -0
- package/dist/reports/src/evidence-detail.d.ts +37 -3
- package/dist/reports/src/evidence-detail.js +52 -20
- package/dist/reports/src/evidence-scope.d.ts +83 -0
- package/dist/reports/src/evidence-scope.js +129 -0
- package/dist/reports/src/evidence-types.d.ts +3 -1
- package/dist/reports/src/explorer-types.d.ts +1 -1
- package/dist/reports/src/export-evidence.js +1 -1
- package/dist/reports/src/layer-merge.js +3 -2
- package/dist/reports/src/layer-types.d.ts +1 -1
- package/dist/reports/src/layers-route.d.ts +2 -1
- package/dist/reports/src/layers-route.js +8 -4
- package/dist/reports/src/publish-checks.js +1 -0
- package/dist/reports/src/reporter.d.ts +1 -1
- package/dist/reports/src/reports-explorer-route.d.ts +276 -0
- package/dist/reports/src/reports-route.d.ts +276 -0
- package/dist/reports/src/test-catalog.d.ts +34 -1
- package/dist/reports/src/test-catalog.js +23 -5
- package/dist/schema/src/api.d.ts +542 -0
- package/dist/schema/src/api.js +17 -5
- package/dist/schema/src/layer.d.ts +981 -0
- package/dist/schema/src/layer.js +43 -4
- package/dist/server/src/openapi.js +3 -2
- package/docs/extending.md +1 -0
- package/docs/reference/http-api.md +6 -4
- package/docs/reference/reports.md +243 -14
- package/docs/reference/schema.md +23 -0
- package/docs/rich-evidence.md +70 -0
- package/docs/ui.md +1 -1
- package/llms-full.txt +78 -5
- package/package.json +1 -1
- package/packages/schema/schemas/check-detail.schema.json +697 -1
- package/packages/schema/schemas/effective-delta.schema.json +192 -0
- package/packages/schema/schemas/effective-evidence.schema.json +192 -0
- package/packages/schema/schemas/evidence-page.schema.json +96 -0
- package/packages/schema/schemas/layer-rows.schema.json +96 -0
- package/packages/schema/schemas/layer.schema.json +1598 -62
- package/packages/schema/schemas/publish-checks.schema.json +768 -0
- package/packages/schema/schemas/report-run.schema.json +181 -0
- package/packages/schema/schemas/report-runs.schema.json +6 -0
- package/packages/schema/schemas/test-catalog.schema.json +128 -0
- package/packages/schema/schemas/test-history.schema.json +202 -0
- package/packages/server/openapi.json +2721 -48
- package/packages/visualizer/src/evidence/artifacts.tsx +77 -29
- package/packages/visualizer/src/evidence/evidence-scope.tsx +106 -0
- package/packages/visualizer/src/evidence/format.ts +11 -0
- package/packages/visualizer/src/explorer/Explorer.tsx +28 -5
- package/packages/visualizer/src/explorer/RunArtifacts.tsx +246 -0
- package/packages/visualizer/src/explorer/RunsView.tsx +40 -9
- package/packages/visualizer/src/explorer/search.ts +10 -3
|
@@ -177,6 +177,102 @@
|
|
|
177
177
|
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
178
178
|
"type": "string"
|
|
179
179
|
},
|
|
180
|
+
"scope": {
|
|
181
|
+
"description": "What this one attachment (usually a recording) does and does not show. Overrides the scope of its attempt, check, part and layer as a whole",
|
|
182
|
+
"type": "object",
|
|
183
|
+
"properties": {
|
|
184
|
+
"surface": {
|
|
185
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
186
|
+
"type": "string",
|
|
187
|
+
"minLength": 1
|
|
188
|
+
},
|
|
189
|
+
"deviceKind": {
|
|
190
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
191
|
+
"type": "string",
|
|
192
|
+
"minLength": 1
|
|
193
|
+
},
|
|
194
|
+
"syntheticData": {
|
|
195
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
196
|
+
"type": "boolean"
|
|
197
|
+
},
|
|
198
|
+
"dependencies": {
|
|
199
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
200
|
+
"type": "string",
|
|
201
|
+
"minLength": 1
|
|
202
|
+
},
|
|
203
|
+
"audioCaptured": {
|
|
204
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
205
|
+
"type": "boolean"
|
|
206
|
+
},
|
|
207
|
+
"pacing": {
|
|
208
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
209
|
+
"type": "string",
|
|
210
|
+
"minLength": 1
|
|
211
|
+
},
|
|
212
|
+
"asserted": {
|
|
213
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
214
|
+
"type": "array",
|
|
215
|
+
"items": {
|
|
216
|
+
"type": "string"
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"limitations": {
|
|
220
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
221
|
+
"type": "array",
|
|
222
|
+
"items": {
|
|
223
|
+
"type": "string"
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
"declaredBy": {
|
|
227
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
228
|
+
"type": "string"
|
|
229
|
+
},
|
|
230
|
+
"verified": {
|
|
231
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
232
|
+
"type": "array",
|
|
233
|
+
"items": {
|
|
234
|
+
"type": "string"
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
"verifiedBy": {
|
|
238
|
+
"description": "What checked the `verified` fields",
|
|
239
|
+
"type": "string"
|
|
240
|
+
},
|
|
241
|
+
"provenance": {
|
|
242
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
243
|
+
"type": "array",
|
|
244
|
+
"items": {
|
|
245
|
+
"type": "object",
|
|
246
|
+
"properties": {
|
|
247
|
+
"url": {
|
|
248
|
+
"type": "string",
|
|
249
|
+
"minLength": 1
|
|
250
|
+
},
|
|
251
|
+
"name": {
|
|
252
|
+
"type": "string"
|
|
253
|
+
},
|
|
254
|
+
"rel": {
|
|
255
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
256
|
+
"type": "string"
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"required": [
|
|
260
|
+
"url"
|
|
261
|
+
],
|
|
262
|
+
"additionalProperties": {}
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
"extensions": {
|
|
266
|
+
"type": "object",
|
|
267
|
+
"propertyNames": {
|
|
268
|
+
"type": "string",
|
|
269
|
+
"minLength": 1
|
|
270
|
+
},
|
|
271
|
+
"additionalProperties": {}
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"additionalProperties": {}
|
|
275
|
+
},
|
|
180
276
|
"tags": {
|
|
181
277
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
182
278
|
"type": "array",
|
|
@@ -323,6 +419,102 @@
|
|
|
323
419
|
"additionalProperties": {}
|
|
324
420
|
}
|
|
325
421
|
},
|
|
422
|
+
"scope": {
|
|
423
|
+
"description": "What the evidence below this level does and does not show: where it ran, how real its data and dependencies were, whether audio was captured, and what is asserted. Absent: unknown, never assumed live, physical or end to end",
|
|
424
|
+
"type": "object",
|
|
425
|
+
"properties": {
|
|
426
|
+
"surface": {
|
|
427
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
428
|
+
"type": "string",
|
|
429
|
+
"minLength": 1
|
|
430
|
+
},
|
|
431
|
+
"deviceKind": {
|
|
432
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
433
|
+
"type": "string",
|
|
434
|
+
"minLength": 1
|
|
435
|
+
},
|
|
436
|
+
"syntheticData": {
|
|
437
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
438
|
+
"type": "boolean"
|
|
439
|
+
},
|
|
440
|
+
"dependencies": {
|
|
441
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
442
|
+
"type": "string",
|
|
443
|
+
"minLength": 1
|
|
444
|
+
},
|
|
445
|
+
"audioCaptured": {
|
|
446
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
447
|
+
"type": "boolean"
|
|
448
|
+
},
|
|
449
|
+
"pacing": {
|
|
450
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
451
|
+
"type": "string",
|
|
452
|
+
"minLength": 1
|
|
453
|
+
},
|
|
454
|
+
"asserted": {
|
|
455
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
456
|
+
"type": "array",
|
|
457
|
+
"items": {
|
|
458
|
+
"type": "string"
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
"limitations": {
|
|
462
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
463
|
+
"type": "array",
|
|
464
|
+
"items": {
|
|
465
|
+
"type": "string"
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
"declaredBy": {
|
|
469
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
470
|
+
"type": "string"
|
|
471
|
+
},
|
|
472
|
+
"verified": {
|
|
473
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
474
|
+
"type": "array",
|
|
475
|
+
"items": {
|
|
476
|
+
"type": "string"
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
"verifiedBy": {
|
|
480
|
+
"description": "What checked the `verified` fields",
|
|
481
|
+
"type": "string"
|
|
482
|
+
},
|
|
483
|
+
"provenance": {
|
|
484
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
485
|
+
"type": "array",
|
|
486
|
+
"items": {
|
|
487
|
+
"type": "object",
|
|
488
|
+
"properties": {
|
|
489
|
+
"url": {
|
|
490
|
+
"type": "string",
|
|
491
|
+
"minLength": 1
|
|
492
|
+
},
|
|
493
|
+
"name": {
|
|
494
|
+
"type": "string"
|
|
495
|
+
},
|
|
496
|
+
"rel": {
|
|
497
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
498
|
+
"type": "string"
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
"required": [
|
|
502
|
+
"url"
|
|
503
|
+
],
|
|
504
|
+
"additionalProperties": {}
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
"extensions": {
|
|
508
|
+
"type": "object",
|
|
509
|
+
"propertyNames": {
|
|
510
|
+
"type": "string",
|
|
511
|
+
"minLength": 1
|
|
512
|
+
},
|
|
513
|
+
"additionalProperties": {}
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
"additionalProperties": {}
|
|
517
|
+
},
|
|
326
518
|
"extensions": {
|
|
327
519
|
"type": "object",
|
|
328
520
|
"propertyNames": {
|
|
@@ -425,6 +617,102 @@
|
|
|
425
617
|
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
426
618
|
"type": "string"
|
|
427
619
|
},
|
|
620
|
+
"scope": {
|
|
621
|
+
"description": "What this one attachment (usually a recording) does and does not show. Overrides the scope of its attempt, check, part and layer as a whole",
|
|
622
|
+
"type": "object",
|
|
623
|
+
"properties": {
|
|
624
|
+
"surface": {
|
|
625
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
626
|
+
"type": "string",
|
|
627
|
+
"minLength": 1
|
|
628
|
+
},
|
|
629
|
+
"deviceKind": {
|
|
630
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
631
|
+
"type": "string",
|
|
632
|
+
"minLength": 1
|
|
633
|
+
},
|
|
634
|
+
"syntheticData": {
|
|
635
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
636
|
+
"type": "boolean"
|
|
637
|
+
},
|
|
638
|
+
"dependencies": {
|
|
639
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
640
|
+
"type": "string",
|
|
641
|
+
"minLength": 1
|
|
642
|
+
},
|
|
643
|
+
"audioCaptured": {
|
|
644
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
645
|
+
"type": "boolean"
|
|
646
|
+
},
|
|
647
|
+
"pacing": {
|
|
648
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
649
|
+
"type": "string",
|
|
650
|
+
"minLength": 1
|
|
651
|
+
},
|
|
652
|
+
"asserted": {
|
|
653
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
654
|
+
"type": "array",
|
|
655
|
+
"items": {
|
|
656
|
+
"type": "string"
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
"limitations": {
|
|
660
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
661
|
+
"type": "array",
|
|
662
|
+
"items": {
|
|
663
|
+
"type": "string"
|
|
664
|
+
}
|
|
665
|
+
},
|
|
666
|
+
"declaredBy": {
|
|
667
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
668
|
+
"type": "string"
|
|
669
|
+
},
|
|
670
|
+
"verified": {
|
|
671
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
672
|
+
"type": "array",
|
|
673
|
+
"items": {
|
|
674
|
+
"type": "string"
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
"verifiedBy": {
|
|
678
|
+
"description": "What checked the `verified` fields",
|
|
679
|
+
"type": "string"
|
|
680
|
+
},
|
|
681
|
+
"provenance": {
|
|
682
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
683
|
+
"type": "array",
|
|
684
|
+
"items": {
|
|
685
|
+
"type": "object",
|
|
686
|
+
"properties": {
|
|
687
|
+
"url": {
|
|
688
|
+
"type": "string",
|
|
689
|
+
"minLength": 1
|
|
690
|
+
},
|
|
691
|
+
"name": {
|
|
692
|
+
"type": "string"
|
|
693
|
+
},
|
|
694
|
+
"rel": {
|
|
695
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
696
|
+
"type": "string"
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
"required": [
|
|
700
|
+
"url"
|
|
701
|
+
],
|
|
702
|
+
"additionalProperties": {}
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
"extensions": {
|
|
706
|
+
"type": "object",
|
|
707
|
+
"propertyNames": {
|
|
708
|
+
"type": "string",
|
|
709
|
+
"minLength": 1
|
|
710
|
+
},
|
|
711
|
+
"additionalProperties": {}
|
|
712
|
+
}
|
|
713
|
+
},
|
|
714
|
+
"additionalProperties": {}
|
|
715
|
+
},
|
|
428
716
|
"tags": {
|
|
429
717
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
430
718
|
"type": "array",
|
|
@@ -616,6 +904,102 @@
|
|
|
616
904
|
"detail": {
|
|
617
905
|
"type": "string"
|
|
618
906
|
},
|
|
907
|
+
"scope": {
|
|
908
|
+
"description": "What this try's evidence shows, when it differs from the other tries (a retry on another device). Overrides the check's scope for this try's attachments",
|
|
909
|
+
"type": "object",
|
|
910
|
+
"properties": {
|
|
911
|
+
"surface": {
|
|
912
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
913
|
+
"type": "string",
|
|
914
|
+
"minLength": 1
|
|
915
|
+
},
|
|
916
|
+
"deviceKind": {
|
|
917
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
918
|
+
"type": "string",
|
|
919
|
+
"minLength": 1
|
|
920
|
+
},
|
|
921
|
+
"syntheticData": {
|
|
922
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
923
|
+
"type": "boolean"
|
|
924
|
+
},
|
|
925
|
+
"dependencies": {
|
|
926
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
927
|
+
"type": "string",
|
|
928
|
+
"minLength": 1
|
|
929
|
+
},
|
|
930
|
+
"audioCaptured": {
|
|
931
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
932
|
+
"type": "boolean"
|
|
933
|
+
},
|
|
934
|
+
"pacing": {
|
|
935
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
936
|
+
"type": "string",
|
|
937
|
+
"minLength": 1
|
|
938
|
+
},
|
|
939
|
+
"asserted": {
|
|
940
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
941
|
+
"type": "array",
|
|
942
|
+
"items": {
|
|
943
|
+
"type": "string"
|
|
944
|
+
}
|
|
945
|
+
},
|
|
946
|
+
"limitations": {
|
|
947
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
948
|
+
"type": "array",
|
|
949
|
+
"items": {
|
|
950
|
+
"type": "string"
|
|
951
|
+
}
|
|
952
|
+
},
|
|
953
|
+
"declaredBy": {
|
|
954
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
955
|
+
"type": "string"
|
|
956
|
+
},
|
|
957
|
+
"verified": {
|
|
958
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
959
|
+
"type": "array",
|
|
960
|
+
"items": {
|
|
961
|
+
"type": "string"
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
"verifiedBy": {
|
|
965
|
+
"description": "What checked the `verified` fields",
|
|
966
|
+
"type": "string"
|
|
967
|
+
},
|
|
968
|
+
"provenance": {
|
|
969
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
970
|
+
"type": "array",
|
|
971
|
+
"items": {
|
|
972
|
+
"type": "object",
|
|
973
|
+
"properties": {
|
|
974
|
+
"url": {
|
|
975
|
+
"type": "string",
|
|
976
|
+
"minLength": 1
|
|
977
|
+
},
|
|
978
|
+
"name": {
|
|
979
|
+
"type": "string"
|
|
980
|
+
},
|
|
981
|
+
"rel": {
|
|
982
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
983
|
+
"type": "string"
|
|
984
|
+
}
|
|
985
|
+
},
|
|
986
|
+
"required": [
|
|
987
|
+
"url"
|
|
988
|
+
],
|
|
989
|
+
"additionalProperties": {}
|
|
990
|
+
}
|
|
991
|
+
},
|
|
992
|
+
"extensions": {
|
|
993
|
+
"type": "object",
|
|
994
|
+
"propertyNames": {
|
|
995
|
+
"type": "string",
|
|
996
|
+
"minLength": 1
|
|
997
|
+
},
|
|
998
|
+
"additionalProperties": {}
|
|
999
|
+
}
|
|
1000
|
+
},
|
|
1001
|
+
"additionalProperties": {}
|
|
1002
|
+
},
|
|
619
1003
|
"steps": {
|
|
620
1004
|
"type": "array",
|
|
621
1005
|
"items": {
|
|
@@ -710,6 +1094,102 @@
|
|
|
710
1094
|
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
711
1095
|
"type": "string"
|
|
712
1096
|
},
|
|
1097
|
+
"scope": {
|
|
1098
|
+
"description": "What this one attachment (usually a recording) does and does not show. Overrides the scope of its attempt, check, part and layer as a whole",
|
|
1099
|
+
"type": "object",
|
|
1100
|
+
"properties": {
|
|
1101
|
+
"surface": {
|
|
1102
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
1103
|
+
"type": "string",
|
|
1104
|
+
"minLength": 1
|
|
1105
|
+
},
|
|
1106
|
+
"deviceKind": {
|
|
1107
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
1108
|
+
"type": "string",
|
|
1109
|
+
"minLength": 1
|
|
1110
|
+
},
|
|
1111
|
+
"syntheticData": {
|
|
1112
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
1113
|
+
"type": "boolean"
|
|
1114
|
+
},
|
|
1115
|
+
"dependencies": {
|
|
1116
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
1117
|
+
"type": "string",
|
|
1118
|
+
"minLength": 1
|
|
1119
|
+
},
|
|
1120
|
+
"audioCaptured": {
|
|
1121
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
1122
|
+
"type": "boolean"
|
|
1123
|
+
},
|
|
1124
|
+
"pacing": {
|
|
1125
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
1126
|
+
"type": "string",
|
|
1127
|
+
"minLength": 1
|
|
1128
|
+
},
|
|
1129
|
+
"asserted": {
|
|
1130
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
1131
|
+
"type": "array",
|
|
1132
|
+
"items": {
|
|
1133
|
+
"type": "string"
|
|
1134
|
+
}
|
|
1135
|
+
},
|
|
1136
|
+
"limitations": {
|
|
1137
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
1138
|
+
"type": "array",
|
|
1139
|
+
"items": {
|
|
1140
|
+
"type": "string"
|
|
1141
|
+
}
|
|
1142
|
+
},
|
|
1143
|
+
"declaredBy": {
|
|
1144
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
1145
|
+
"type": "string"
|
|
1146
|
+
},
|
|
1147
|
+
"verified": {
|
|
1148
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
1149
|
+
"type": "array",
|
|
1150
|
+
"items": {
|
|
1151
|
+
"type": "string"
|
|
1152
|
+
}
|
|
1153
|
+
},
|
|
1154
|
+
"verifiedBy": {
|
|
1155
|
+
"description": "What checked the `verified` fields",
|
|
1156
|
+
"type": "string"
|
|
1157
|
+
},
|
|
1158
|
+
"provenance": {
|
|
1159
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
1160
|
+
"type": "array",
|
|
1161
|
+
"items": {
|
|
1162
|
+
"type": "object",
|
|
1163
|
+
"properties": {
|
|
1164
|
+
"url": {
|
|
1165
|
+
"type": "string",
|
|
1166
|
+
"minLength": 1
|
|
1167
|
+
},
|
|
1168
|
+
"name": {
|
|
1169
|
+
"type": "string"
|
|
1170
|
+
},
|
|
1171
|
+
"rel": {
|
|
1172
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
1173
|
+
"type": "string"
|
|
1174
|
+
}
|
|
1175
|
+
},
|
|
1176
|
+
"required": [
|
|
1177
|
+
"url"
|
|
1178
|
+
],
|
|
1179
|
+
"additionalProperties": {}
|
|
1180
|
+
}
|
|
1181
|
+
},
|
|
1182
|
+
"extensions": {
|
|
1183
|
+
"type": "object",
|
|
1184
|
+
"propertyNames": {
|
|
1185
|
+
"type": "string",
|
|
1186
|
+
"minLength": 1
|
|
1187
|
+
},
|
|
1188
|
+
"additionalProperties": {}
|
|
1189
|
+
}
|
|
1190
|
+
},
|
|
1191
|
+
"additionalProperties": {}
|
|
1192
|
+
},
|
|
713
1193
|
"tags": {
|
|
714
1194
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
715
1195
|
"type": "array",
|
|
@@ -931,6 +1411,102 @@
|
|
|
931
1411
|
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
932
1412
|
"type": "string"
|
|
933
1413
|
},
|
|
1414
|
+
"scope": {
|
|
1415
|
+
"description": "What this one attachment (usually a recording) does and does not show. Overrides the scope of its attempt, check, part and layer as a whole",
|
|
1416
|
+
"type": "object",
|
|
1417
|
+
"properties": {
|
|
1418
|
+
"surface": {
|
|
1419
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
1420
|
+
"type": "string",
|
|
1421
|
+
"minLength": 1
|
|
1422
|
+
},
|
|
1423
|
+
"deviceKind": {
|
|
1424
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
1425
|
+
"type": "string",
|
|
1426
|
+
"minLength": 1
|
|
1427
|
+
},
|
|
1428
|
+
"syntheticData": {
|
|
1429
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
1430
|
+
"type": "boolean"
|
|
1431
|
+
},
|
|
1432
|
+
"dependencies": {
|
|
1433
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
1434
|
+
"type": "string",
|
|
1435
|
+
"minLength": 1
|
|
1436
|
+
},
|
|
1437
|
+
"audioCaptured": {
|
|
1438
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
1439
|
+
"type": "boolean"
|
|
1440
|
+
},
|
|
1441
|
+
"pacing": {
|
|
1442
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
1443
|
+
"type": "string",
|
|
1444
|
+
"minLength": 1
|
|
1445
|
+
},
|
|
1446
|
+
"asserted": {
|
|
1447
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
1448
|
+
"type": "array",
|
|
1449
|
+
"items": {
|
|
1450
|
+
"type": "string"
|
|
1451
|
+
}
|
|
1452
|
+
},
|
|
1453
|
+
"limitations": {
|
|
1454
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
1455
|
+
"type": "array",
|
|
1456
|
+
"items": {
|
|
1457
|
+
"type": "string"
|
|
1458
|
+
}
|
|
1459
|
+
},
|
|
1460
|
+
"declaredBy": {
|
|
1461
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
1462
|
+
"type": "string"
|
|
1463
|
+
},
|
|
1464
|
+
"verified": {
|
|
1465
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
1466
|
+
"type": "array",
|
|
1467
|
+
"items": {
|
|
1468
|
+
"type": "string"
|
|
1469
|
+
}
|
|
1470
|
+
},
|
|
1471
|
+
"verifiedBy": {
|
|
1472
|
+
"description": "What checked the `verified` fields",
|
|
1473
|
+
"type": "string"
|
|
1474
|
+
},
|
|
1475
|
+
"provenance": {
|
|
1476
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
1477
|
+
"type": "array",
|
|
1478
|
+
"items": {
|
|
1479
|
+
"type": "object",
|
|
1480
|
+
"properties": {
|
|
1481
|
+
"url": {
|
|
1482
|
+
"type": "string",
|
|
1483
|
+
"minLength": 1
|
|
1484
|
+
},
|
|
1485
|
+
"name": {
|
|
1486
|
+
"type": "string"
|
|
1487
|
+
},
|
|
1488
|
+
"rel": {
|
|
1489
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
1490
|
+
"type": "string"
|
|
1491
|
+
}
|
|
1492
|
+
},
|
|
1493
|
+
"required": [
|
|
1494
|
+
"url"
|
|
1495
|
+
],
|
|
1496
|
+
"additionalProperties": {}
|
|
1497
|
+
}
|
|
1498
|
+
},
|
|
1499
|
+
"extensions": {
|
|
1500
|
+
"type": "object",
|
|
1501
|
+
"propertyNames": {
|
|
1502
|
+
"type": "string",
|
|
1503
|
+
"minLength": 1
|
|
1504
|
+
},
|
|
1505
|
+
"additionalProperties": {}
|
|
1506
|
+
}
|
|
1507
|
+
},
|
|
1508
|
+
"additionalProperties": {}
|
|
1509
|
+
},
|
|
934
1510
|
"tags": {
|
|
935
1511
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
936
1512
|
"type": "array",
|
|
@@ -1322,6 +1898,102 @@
|
|
|
1322
1898
|
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
1323
1899
|
"type": "string"
|
|
1324
1900
|
},
|
|
1901
|
+
"scope": {
|
|
1902
|
+
"description": "What this one attachment (usually a recording) does and does not show. Overrides the scope of its attempt, check, part and layer as a whole",
|
|
1903
|
+
"type": "object",
|
|
1904
|
+
"properties": {
|
|
1905
|
+
"surface": {
|
|
1906
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
1907
|
+
"type": "string",
|
|
1908
|
+
"minLength": 1
|
|
1909
|
+
},
|
|
1910
|
+
"deviceKind": {
|
|
1911
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
1912
|
+
"type": "string",
|
|
1913
|
+
"minLength": 1
|
|
1914
|
+
},
|
|
1915
|
+
"syntheticData": {
|
|
1916
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
1917
|
+
"type": "boolean"
|
|
1918
|
+
},
|
|
1919
|
+
"dependencies": {
|
|
1920
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
1921
|
+
"type": "string",
|
|
1922
|
+
"minLength": 1
|
|
1923
|
+
},
|
|
1924
|
+
"audioCaptured": {
|
|
1925
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
1926
|
+
"type": "boolean"
|
|
1927
|
+
},
|
|
1928
|
+
"pacing": {
|
|
1929
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
1930
|
+
"type": "string",
|
|
1931
|
+
"minLength": 1
|
|
1932
|
+
},
|
|
1933
|
+
"asserted": {
|
|
1934
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
1935
|
+
"type": "array",
|
|
1936
|
+
"items": {
|
|
1937
|
+
"type": "string"
|
|
1938
|
+
}
|
|
1939
|
+
},
|
|
1940
|
+
"limitations": {
|
|
1941
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
1942
|
+
"type": "array",
|
|
1943
|
+
"items": {
|
|
1944
|
+
"type": "string"
|
|
1945
|
+
}
|
|
1946
|
+
},
|
|
1947
|
+
"declaredBy": {
|
|
1948
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
1949
|
+
"type": "string"
|
|
1950
|
+
},
|
|
1951
|
+
"verified": {
|
|
1952
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
1953
|
+
"type": "array",
|
|
1954
|
+
"items": {
|
|
1955
|
+
"type": "string"
|
|
1956
|
+
}
|
|
1957
|
+
},
|
|
1958
|
+
"verifiedBy": {
|
|
1959
|
+
"description": "What checked the `verified` fields",
|
|
1960
|
+
"type": "string"
|
|
1961
|
+
},
|
|
1962
|
+
"provenance": {
|
|
1963
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
1964
|
+
"type": "array",
|
|
1965
|
+
"items": {
|
|
1966
|
+
"type": "object",
|
|
1967
|
+
"properties": {
|
|
1968
|
+
"url": {
|
|
1969
|
+
"type": "string",
|
|
1970
|
+
"minLength": 1
|
|
1971
|
+
},
|
|
1972
|
+
"name": {
|
|
1973
|
+
"type": "string"
|
|
1974
|
+
},
|
|
1975
|
+
"rel": {
|
|
1976
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
1977
|
+
"type": "string"
|
|
1978
|
+
}
|
|
1979
|
+
},
|
|
1980
|
+
"required": [
|
|
1981
|
+
"url"
|
|
1982
|
+
],
|
|
1983
|
+
"additionalProperties": {}
|
|
1984
|
+
}
|
|
1985
|
+
},
|
|
1986
|
+
"extensions": {
|
|
1987
|
+
"type": "object",
|
|
1988
|
+
"propertyNames": {
|
|
1989
|
+
"type": "string",
|
|
1990
|
+
"minLength": 1
|
|
1991
|
+
},
|
|
1992
|
+
"additionalProperties": {}
|
|
1993
|
+
}
|
|
1994
|
+
},
|
|
1995
|
+
"additionalProperties": {}
|
|
1996
|
+
},
|
|
1325
1997
|
"tags": {
|
|
1326
1998
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
1327
1999
|
"type": "array",
|
|
@@ -1468,6 +2140,102 @@
|
|
|
1468
2140
|
"additionalProperties": {}
|
|
1469
2141
|
}
|
|
1470
2142
|
},
|
|
2143
|
+
"scope": {
|
|
2144
|
+
"description": "What the evidence below this level does and does not show: where it ran, how real its data and dependencies were, whether audio was captured, and what is asserted. Absent: unknown, never assumed live, physical or end to end",
|
|
2145
|
+
"type": "object",
|
|
2146
|
+
"properties": {
|
|
2147
|
+
"surface": {
|
|
2148
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
2149
|
+
"type": "string",
|
|
2150
|
+
"minLength": 1
|
|
2151
|
+
},
|
|
2152
|
+
"deviceKind": {
|
|
2153
|
+
"description": "What it ran on, in an open vocabulary: `simulator`, `emulator`, `physical`, `virtual-machine`, `desktop`… A simulator and a physical phone stay distinct values; they are filtered separately",
|
|
2154
|
+
"type": "string",
|
|
2155
|
+
"minLength": 1
|
|
2156
|
+
},
|
|
2157
|
+
"syntheticData": {
|
|
2158
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
2159
|
+
"type": "boolean"
|
|
2160
|
+
},
|
|
2161
|
+
"dependencies": {
|
|
2162
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
2163
|
+
"type": "string",
|
|
2164
|
+
"minLength": 1
|
|
2165
|
+
},
|
|
2166
|
+
"audioCaptured": {
|
|
2167
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
2168
|
+
"type": "boolean"
|
|
2169
|
+
},
|
|
2170
|
+
"pacing": {
|
|
2171
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
2172
|
+
"type": "string",
|
|
2173
|
+
"minLength": 1
|
|
2174
|
+
},
|
|
2175
|
+
"asserted": {
|
|
2176
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
2177
|
+
"type": "array",
|
|
2178
|
+
"items": {
|
|
2179
|
+
"type": "string"
|
|
2180
|
+
}
|
|
2181
|
+
},
|
|
2182
|
+
"limitations": {
|
|
2183
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
2184
|
+
"type": "array",
|
|
2185
|
+
"items": {
|
|
2186
|
+
"type": "string"
|
|
2187
|
+
}
|
|
2188
|
+
},
|
|
2189
|
+
"declaredBy": {
|
|
2190
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
2191
|
+
"type": "string"
|
|
2192
|
+
},
|
|
2193
|
+
"verified": {
|
|
2194
|
+
"description": "The names of the fields above (`surface`, `deviceKind`, `syntheticData`, `dependencies`, `audioCaptured`, `pacing`) that something independent of the producer checked. Every other field is only declared",
|
|
2195
|
+
"type": "array",
|
|
2196
|
+
"items": {
|
|
2197
|
+
"type": "string"
|
|
2198
|
+
}
|
|
2199
|
+
},
|
|
2200
|
+
"verifiedBy": {
|
|
2201
|
+
"description": "What checked the `verified` fields",
|
|
2202
|
+
"type": "string"
|
|
2203
|
+
},
|
|
2204
|
+
"provenance": {
|
|
2205
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
2206
|
+
"type": "array",
|
|
2207
|
+
"items": {
|
|
2208
|
+
"type": "object",
|
|
2209
|
+
"properties": {
|
|
2210
|
+
"url": {
|
|
2211
|
+
"type": "string",
|
|
2212
|
+
"minLength": 1
|
|
2213
|
+
},
|
|
2214
|
+
"name": {
|
|
2215
|
+
"type": "string"
|
|
2216
|
+
},
|
|
2217
|
+
"rel": {
|
|
2218
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
2219
|
+
"type": "string"
|
|
2220
|
+
}
|
|
2221
|
+
},
|
|
2222
|
+
"required": [
|
|
2223
|
+
"url"
|
|
2224
|
+
],
|
|
2225
|
+
"additionalProperties": {}
|
|
2226
|
+
}
|
|
2227
|
+
},
|
|
2228
|
+
"extensions": {
|
|
2229
|
+
"type": "object",
|
|
2230
|
+
"propertyNames": {
|
|
2231
|
+
"type": "string",
|
|
2232
|
+
"minLength": 1
|
|
2233
|
+
},
|
|
2234
|
+
"additionalProperties": {}
|
|
2235
|
+
}
|
|
2236
|
+
},
|
|
2237
|
+
"additionalProperties": {}
|
|
2238
|
+
},
|
|
1471
2239
|
"extensions": {
|
|
1472
2240
|
"type": "object",
|
|
1473
2241
|
"propertyNames": {
|