@crvouga/atlas 1.1.0 → 1.3.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/artifact-query.d.ts +123 -0
- package/dist/reports/src/artifact-query.js +234 -0
- package/dist/reports/src/evidence-detail.d.ts +14 -3
- package/dist/reports/src/evidence-detail.js +34 -19
- 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 +5 -1
- package/dist/reports/src/explorer-types.d.ts +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/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 +108 -6
- package/dist/reports/src/test-catalog.js +155 -8
- package/dist/schema/src/api.d.ts +745 -0
- package/dist/schema/src/api.js +48 -6
- package/dist/schema/src/layer.d.ts +981 -0
- package/dist/schema/src/layer.js +43 -4
- package/dist/server/src/app.js +16 -5
- package/dist/server/src/openapi.js +42 -3
- package/docs/extending.md +1 -0
- package/docs/reference/http-api.md +86 -2
- package/docs/reference/reports.md +550 -14
- package/docs/reference/schema.md +55 -0
- package/docs/rich-evidence.md +78 -0
- package/docs/server.md +4 -1
- package/docs/ui.md +1 -1
- package/llms-full.txt +170 -4
- package/package.json +1 -1
- package/packages/schema/schemas/check-detail.schema.json +673 -1
- package/packages/schema/schemas/effective-delta.schema.json +206 -0
- package/packages/schema/schemas/effective-evidence.schema.json +206 -0
- package/packages/schema/schemas/evidence-page.schema.json +103 -0
- package/packages/schema/schemas/layer-rows.schema.json +103 -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 +131 -0
- package/packages/schema/schemas/report-runs.schema.json +221 -0
- package/packages/schema/schemas/test-catalog.schema.json +135 -0
- package/packages/schema/schemas/test-history.schema.json +216 -0
- package/packages/server/openapi.json +4731 -735
- package/packages/visualizer/src/evidence/artifacts.tsx +24 -18
- package/packages/visualizer/src/evidence/evidence-scope.tsx +106 -0
- package/packages/visualizer/src/evidence/format.ts +11 -0
- package/packages/visualizer/src/explorer/ArtifactsView.tsx +162 -0
- package/packages/visualizer/src/explorer/Explorer.tsx +47 -3
- package/packages/visualizer/src/explorer/RunsView.tsx +43 -19
- package/packages/visualizer/src/explorer/catalog.tsx +97 -12
- package/packages/visualizer/src/explorer/filters.tsx +279 -0
- package/packages/visualizer/src/explorer/search.ts +85 -6
- package/packages/visualizer/src/explorer/views.ts +75 -0
|
@@ -178,6 +178,13 @@
|
|
|
178
178
|
"description": "The name of the step that holds it",
|
|
179
179
|
"type": "string"
|
|
180
180
|
},
|
|
181
|
+
"tags": {
|
|
182
|
+
"description": "The normalized tags of this attachment itself. Absent when it has none (and in documents of older servers)",
|
|
183
|
+
"type": "array",
|
|
184
|
+
"items": {
|
|
185
|
+
"type": "string"
|
|
186
|
+
}
|
|
187
|
+
},
|
|
181
188
|
"recording": {
|
|
182
189
|
"description": "What identifies the bytes; references with the same value are one recording. Absent when it cannot be played",
|
|
183
190
|
"type": "string"
|
|
@@ -185,6 +192,102 @@
|
|
|
185
192
|
"available": {
|
|
186
193
|
"type": "boolean",
|
|
187
194
|
"description": "False when the reference names no bytes (no bundle key, address or inline text)"
|
|
195
|
+
},
|
|
196
|
+
"scope": {
|
|
197
|
+
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
198
|
+
"type": "object",
|
|
199
|
+
"properties": {
|
|
200
|
+
"surface": {
|
|
201
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
202
|
+
"type": "string",
|
|
203
|
+
"minLength": 1
|
|
204
|
+
},
|
|
205
|
+
"deviceKind": {
|
|
206
|
+
"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",
|
|
207
|
+
"type": "string",
|
|
208
|
+
"minLength": 1
|
|
209
|
+
},
|
|
210
|
+
"syntheticData": {
|
|
211
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
212
|
+
"type": "boolean"
|
|
213
|
+
},
|
|
214
|
+
"dependencies": {
|
|
215
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
216
|
+
"type": "string",
|
|
217
|
+
"minLength": 1
|
|
218
|
+
},
|
|
219
|
+
"audioCaptured": {
|
|
220
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
221
|
+
"type": "boolean"
|
|
222
|
+
},
|
|
223
|
+
"pacing": {
|
|
224
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
225
|
+
"type": "string",
|
|
226
|
+
"minLength": 1
|
|
227
|
+
},
|
|
228
|
+
"asserted": {
|
|
229
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
230
|
+
"type": "array",
|
|
231
|
+
"items": {
|
|
232
|
+
"type": "string"
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"limitations": {
|
|
236
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
237
|
+
"type": "array",
|
|
238
|
+
"items": {
|
|
239
|
+
"type": "string"
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
"declaredBy": {
|
|
243
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
244
|
+
"type": "string"
|
|
245
|
+
},
|
|
246
|
+
"verified": {
|
|
247
|
+
"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",
|
|
248
|
+
"type": "array",
|
|
249
|
+
"items": {
|
|
250
|
+
"type": "string"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"verifiedBy": {
|
|
254
|
+
"description": "What checked the `verified` fields",
|
|
255
|
+
"type": "string"
|
|
256
|
+
},
|
|
257
|
+
"provenance": {
|
|
258
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
259
|
+
"type": "array",
|
|
260
|
+
"items": {
|
|
261
|
+
"type": "object",
|
|
262
|
+
"properties": {
|
|
263
|
+
"url": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"minLength": 1
|
|
266
|
+
},
|
|
267
|
+
"name": {
|
|
268
|
+
"type": "string"
|
|
269
|
+
},
|
|
270
|
+
"rel": {
|
|
271
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
272
|
+
"type": "string"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"required": [
|
|
276
|
+
"url"
|
|
277
|
+
],
|
|
278
|
+
"additionalProperties": {}
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"extensions": {
|
|
282
|
+
"type": "object",
|
|
283
|
+
"propertyNames": {
|
|
284
|
+
"type": "string",
|
|
285
|
+
"minLength": 1
|
|
286
|
+
},
|
|
287
|
+
"additionalProperties": {}
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"additionalProperties": {}
|
|
188
291
|
}
|
|
189
292
|
},
|
|
190
293
|
"required": [
|
|
@@ -468,6 +571,13 @@
|
|
|
468
571
|
"description": "The name of the step that holds it",
|
|
469
572
|
"type": "string"
|
|
470
573
|
},
|
|
574
|
+
"tags": {
|
|
575
|
+
"description": "The normalized tags of this attachment itself. Absent when it has none (and in documents of older servers)",
|
|
576
|
+
"type": "array",
|
|
577
|
+
"items": {
|
|
578
|
+
"type": "string"
|
|
579
|
+
}
|
|
580
|
+
},
|
|
471
581
|
"recording": {
|
|
472
582
|
"description": "What identifies the bytes; references with the same value are one recording. Absent when it cannot be played",
|
|
473
583
|
"type": "string"
|
|
@@ -475,6 +585,102 @@
|
|
|
475
585
|
"available": {
|
|
476
586
|
"type": "boolean",
|
|
477
587
|
"description": "False when the reference names no bytes (no bundle key, address or inline text)"
|
|
588
|
+
},
|
|
589
|
+
"scope": {
|
|
590
|
+
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
591
|
+
"type": "object",
|
|
592
|
+
"properties": {
|
|
593
|
+
"surface": {
|
|
594
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
595
|
+
"type": "string",
|
|
596
|
+
"minLength": 1
|
|
597
|
+
},
|
|
598
|
+
"deviceKind": {
|
|
599
|
+
"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",
|
|
600
|
+
"type": "string",
|
|
601
|
+
"minLength": 1
|
|
602
|
+
},
|
|
603
|
+
"syntheticData": {
|
|
604
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
605
|
+
"type": "boolean"
|
|
606
|
+
},
|
|
607
|
+
"dependencies": {
|
|
608
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
609
|
+
"type": "string",
|
|
610
|
+
"minLength": 1
|
|
611
|
+
},
|
|
612
|
+
"audioCaptured": {
|
|
613
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
614
|
+
"type": "boolean"
|
|
615
|
+
},
|
|
616
|
+
"pacing": {
|
|
617
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
618
|
+
"type": "string",
|
|
619
|
+
"minLength": 1
|
|
620
|
+
},
|
|
621
|
+
"asserted": {
|
|
622
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
623
|
+
"type": "array",
|
|
624
|
+
"items": {
|
|
625
|
+
"type": "string"
|
|
626
|
+
}
|
|
627
|
+
},
|
|
628
|
+
"limitations": {
|
|
629
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
630
|
+
"type": "array",
|
|
631
|
+
"items": {
|
|
632
|
+
"type": "string"
|
|
633
|
+
}
|
|
634
|
+
},
|
|
635
|
+
"declaredBy": {
|
|
636
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
637
|
+
"type": "string"
|
|
638
|
+
},
|
|
639
|
+
"verified": {
|
|
640
|
+
"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",
|
|
641
|
+
"type": "array",
|
|
642
|
+
"items": {
|
|
643
|
+
"type": "string"
|
|
644
|
+
}
|
|
645
|
+
},
|
|
646
|
+
"verifiedBy": {
|
|
647
|
+
"description": "What checked the `verified` fields",
|
|
648
|
+
"type": "string"
|
|
649
|
+
},
|
|
650
|
+
"provenance": {
|
|
651
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
652
|
+
"type": "array",
|
|
653
|
+
"items": {
|
|
654
|
+
"type": "object",
|
|
655
|
+
"properties": {
|
|
656
|
+
"url": {
|
|
657
|
+
"type": "string",
|
|
658
|
+
"minLength": 1
|
|
659
|
+
},
|
|
660
|
+
"name": {
|
|
661
|
+
"type": "string"
|
|
662
|
+
},
|
|
663
|
+
"rel": {
|
|
664
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
665
|
+
"type": "string"
|
|
666
|
+
}
|
|
667
|
+
},
|
|
668
|
+
"required": [
|
|
669
|
+
"url"
|
|
670
|
+
],
|
|
671
|
+
"additionalProperties": {}
|
|
672
|
+
}
|
|
673
|
+
},
|
|
674
|
+
"extensions": {
|
|
675
|
+
"type": "object",
|
|
676
|
+
"propertyNames": {
|
|
677
|
+
"type": "string",
|
|
678
|
+
"minLength": 1
|
|
679
|
+
},
|
|
680
|
+
"additionalProperties": {}
|
|
681
|
+
}
|
|
682
|
+
},
|
|
683
|
+
"additionalProperties": {}
|
|
478
684
|
}
|
|
479
685
|
},
|
|
480
686
|
"required": [
|
|
@@ -178,6 +178,13 @@
|
|
|
178
178
|
"description": "The name of the step that holds it",
|
|
179
179
|
"type": "string"
|
|
180
180
|
},
|
|
181
|
+
"tags": {
|
|
182
|
+
"description": "The normalized tags of this attachment itself. Absent when it has none (and in documents of older servers)",
|
|
183
|
+
"type": "array",
|
|
184
|
+
"items": {
|
|
185
|
+
"type": "string"
|
|
186
|
+
}
|
|
187
|
+
},
|
|
181
188
|
"recording": {
|
|
182
189
|
"description": "What identifies the bytes; references with the same value are one recording. Absent when it cannot be played",
|
|
183
190
|
"type": "string"
|
|
@@ -185,6 +192,102 @@
|
|
|
185
192
|
"available": {
|
|
186
193
|
"type": "boolean",
|
|
187
194
|
"description": "False when the reference names no bytes (no bundle key, address or inline text)"
|
|
195
|
+
},
|
|
196
|
+
"scope": {
|
|
197
|
+
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
198
|
+
"type": "object",
|
|
199
|
+
"properties": {
|
|
200
|
+
"surface": {
|
|
201
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
202
|
+
"type": "string",
|
|
203
|
+
"minLength": 1
|
|
204
|
+
},
|
|
205
|
+
"deviceKind": {
|
|
206
|
+
"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",
|
|
207
|
+
"type": "string",
|
|
208
|
+
"minLength": 1
|
|
209
|
+
},
|
|
210
|
+
"syntheticData": {
|
|
211
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
212
|
+
"type": "boolean"
|
|
213
|
+
},
|
|
214
|
+
"dependencies": {
|
|
215
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
216
|
+
"type": "string",
|
|
217
|
+
"minLength": 1
|
|
218
|
+
},
|
|
219
|
+
"audioCaptured": {
|
|
220
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
221
|
+
"type": "boolean"
|
|
222
|
+
},
|
|
223
|
+
"pacing": {
|
|
224
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
225
|
+
"type": "string",
|
|
226
|
+
"minLength": 1
|
|
227
|
+
},
|
|
228
|
+
"asserted": {
|
|
229
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
230
|
+
"type": "array",
|
|
231
|
+
"items": {
|
|
232
|
+
"type": "string"
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"limitations": {
|
|
236
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
237
|
+
"type": "array",
|
|
238
|
+
"items": {
|
|
239
|
+
"type": "string"
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
"declaredBy": {
|
|
243
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
244
|
+
"type": "string"
|
|
245
|
+
},
|
|
246
|
+
"verified": {
|
|
247
|
+
"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",
|
|
248
|
+
"type": "array",
|
|
249
|
+
"items": {
|
|
250
|
+
"type": "string"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"verifiedBy": {
|
|
254
|
+
"description": "What checked the `verified` fields",
|
|
255
|
+
"type": "string"
|
|
256
|
+
},
|
|
257
|
+
"provenance": {
|
|
258
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
259
|
+
"type": "array",
|
|
260
|
+
"items": {
|
|
261
|
+
"type": "object",
|
|
262
|
+
"properties": {
|
|
263
|
+
"url": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"minLength": 1
|
|
266
|
+
},
|
|
267
|
+
"name": {
|
|
268
|
+
"type": "string"
|
|
269
|
+
},
|
|
270
|
+
"rel": {
|
|
271
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
272
|
+
"type": "string"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"required": [
|
|
276
|
+
"url"
|
|
277
|
+
],
|
|
278
|
+
"additionalProperties": {}
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"extensions": {
|
|
282
|
+
"type": "object",
|
|
283
|
+
"propertyNames": {
|
|
284
|
+
"type": "string",
|
|
285
|
+
"minLength": 1
|
|
286
|
+
},
|
|
287
|
+
"additionalProperties": {}
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"additionalProperties": {}
|
|
188
291
|
}
|
|
189
292
|
},
|
|
190
293
|
"required": [
|
|
@@ -468,6 +571,13 @@
|
|
|
468
571
|
"description": "The name of the step that holds it",
|
|
469
572
|
"type": "string"
|
|
470
573
|
},
|
|
574
|
+
"tags": {
|
|
575
|
+
"description": "The normalized tags of this attachment itself. Absent when it has none (and in documents of older servers)",
|
|
576
|
+
"type": "array",
|
|
577
|
+
"items": {
|
|
578
|
+
"type": "string"
|
|
579
|
+
}
|
|
580
|
+
},
|
|
471
581
|
"recording": {
|
|
472
582
|
"description": "What identifies the bytes; references with the same value are one recording. Absent when it cannot be played",
|
|
473
583
|
"type": "string"
|
|
@@ -475,6 +585,102 @@
|
|
|
475
585
|
"available": {
|
|
476
586
|
"type": "boolean",
|
|
477
587
|
"description": "False when the reference names no bytes (no bundle key, address or inline text)"
|
|
588
|
+
},
|
|
589
|
+
"scope": {
|
|
590
|
+
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
591
|
+
"type": "object",
|
|
592
|
+
"properties": {
|
|
593
|
+
"surface": {
|
|
594
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
595
|
+
"type": "string",
|
|
596
|
+
"minLength": 1
|
|
597
|
+
},
|
|
598
|
+
"deviceKind": {
|
|
599
|
+
"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",
|
|
600
|
+
"type": "string",
|
|
601
|
+
"minLength": 1
|
|
602
|
+
},
|
|
603
|
+
"syntheticData": {
|
|
604
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
605
|
+
"type": "boolean"
|
|
606
|
+
},
|
|
607
|
+
"dependencies": {
|
|
608
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
609
|
+
"type": "string",
|
|
610
|
+
"minLength": 1
|
|
611
|
+
},
|
|
612
|
+
"audioCaptured": {
|
|
613
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
614
|
+
"type": "boolean"
|
|
615
|
+
},
|
|
616
|
+
"pacing": {
|
|
617
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
618
|
+
"type": "string",
|
|
619
|
+
"minLength": 1
|
|
620
|
+
},
|
|
621
|
+
"asserted": {
|
|
622
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
623
|
+
"type": "array",
|
|
624
|
+
"items": {
|
|
625
|
+
"type": "string"
|
|
626
|
+
}
|
|
627
|
+
},
|
|
628
|
+
"limitations": {
|
|
629
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
630
|
+
"type": "array",
|
|
631
|
+
"items": {
|
|
632
|
+
"type": "string"
|
|
633
|
+
}
|
|
634
|
+
},
|
|
635
|
+
"declaredBy": {
|
|
636
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
637
|
+
"type": "string"
|
|
638
|
+
},
|
|
639
|
+
"verified": {
|
|
640
|
+
"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",
|
|
641
|
+
"type": "array",
|
|
642
|
+
"items": {
|
|
643
|
+
"type": "string"
|
|
644
|
+
}
|
|
645
|
+
},
|
|
646
|
+
"verifiedBy": {
|
|
647
|
+
"description": "What checked the `verified` fields",
|
|
648
|
+
"type": "string"
|
|
649
|
+
},
|
|
650
|
+
"provenance": {
|
|
651
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
652
|
+
"type": "array",
|
|
653
|
+
"items": {
|
|
654
|
+
"type": "object",
|
|
655
|
+
"properties": {
|
|
656
|
+
"url": {
|
|
657
|
+
"type": "string",
|
|
658
|
+
"minLength": 1
|
|
659
|
+
},
|
|
660
|
+
"name": {
|
|
661
|
+
"type": "string"
|
|
662
|
+
},
|
|
663
|
+
"rel": {
|
|
664
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
665
|
+
"type": "string"
|
|
666
|
+
}
|
|
667
|
+
},
|
|
668
|
+
"required": [
|
|
669
|
+
"url"
|
|
670
|
+
],
|
|
671
|
+
"additionalProperties": {}
|
|
672
|
+
}
|
|
673
|
+
},
|
|
674
|
+
"extensions": {
|
|
675
|
+
"type": "object",
|
|
676
|
+
"propertyNames": {
|
|
677
|
+
"type": "string",
|
|
678
|
+
"minLength": 1
|
|
679
|
+
},
|
|
680
|
+
"additionalProperties": {}
|
|
681
|
+
}
|
|
682
|
+
},
|
|
683
|
+
"additionalProperties": {}
|
|
478
684
|
}
|
|
479
685
|
},
|
|
480
686
|
"required": [
|
|
@@ -223,6 +223,13 @@
|
|
|
223
223
|
"description": "The name of the step that holds it",
|
|
224
224
|
"type": "string"
|
|
225
225
|
},
|
|
226
|
+
"tags": {
|
|
227
|
+
"description": "The normalized tags of this attachment itself. Absent when it has none (and in documents of older servers)",
|
|
228
|
+
"type": "array",
|
|
229
|
+
"items": {
|
|
230
|
+
"type": "string"
|
|
231
|
+
}
|
|
232
|
+
},
|
|
226
233
|
"recording": {
|
|
227
234
|
"description": "What identifies the bytes; references with the same value are one recording. Absent when it cannot be played",
|
|
228
235
|
"type": "string"
|
|
@@ -230,6 +237,102 @@
|
|
|
230
237
|
"available": {
|
|
231
238
|
"type": "boolean",
|
|
232
239
|
"description": "False when the reference names no bytes (no bundle key, address or inline text)"
|
|
240
|
+
},
|
|
241
|
+
"scope": {
|
|
242
|
+
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
243
|
+
"type": "object",
|
|
244
|
+
"properties": {
|
|
245
|
+
"surface": {
|
|
246
|
+
"description": "Where the product ran, in an open vocabulary: `browser`, `native-app`, `api`, `cli`…",
|
|
247
|
+
"type": "string",
|
|
248
|
+
"minLength": 1
|
|
249
|
+
},
|
|
250
|
+
"deviceKind": {
|
|
251
|
+
"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",
|
|
252
|
+
"type": "string",
|
|
253
|
+
"minLength": 1
|
|
254
|
+
},
|
|
255
|
+
"syntheticData": {
|
|
256
|
+
"description": "True: the data was made up for the run. False: real data. Absent: unknown",
|
|
257
|
+
"type": "boolean"
|
|
258
|
+
},
|
|
259
|
+
"dependencies": {
|
|
260
|
+
"description": "Whether what the product talks to was `scripted` (replies fixed in advance), `live` or `mixed`. An open vocabulary; absent is unknown",
|
|
261
|
+
"type": "string",
|
|
262
|
+
"minLength": 1
|
|
263
|
+
},
|
|
264
|
+
"audioCaptured": {
|
|
265
|
+
"description": "True: the recording has real audio. False: it is silent. Absent: unknown",
|
|
266
|
+
"type": "boolean"
|
|
267
|
+
},
|
|
268
|
+
"pacing": {
|
|
269
|
+
"description": "How time ran, in an open vocabulary: `paced` (slowed or scripted for a viewer), `real-time`. Absent: unknown",
|
|
270
|
+
"type": "string",
|
|
271
|
+
"minLength": 1
|
|
272
|
+
},
|
|
273
|
+
"asserted": {
|
|
274
|
+
"description": "The boundaries the result actually asserts. Activity visible in a recording beyond them is not verified behavior",
|
|
275
|
+
"type": "array",
|
|
276
|
+
"items": {
|
|
277
|
+
"type": "string"
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"limitations": {
|
|
281
|
+
"description": "Known limits of what this evidence shows, in the producer's words",
|
|
282
|
+
"type": "array",
|
|
283
|
+
"items": {
|
|
284
|
+
"type": "string"
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
"declaredBy": {
|
|
288
|
+
"description": "Who or what made this declaration: a tool, a team, a person",
|
|
289
|
+
"type": "string"
|
|
290
|
+
},
|
|
291
|
+
"verified": {
|
|
292
|
+
"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",
|
|
293
|
+
"type": "array",
|
|
294
|
+
"items": {
|
|
295
|
+
"type": "string"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"verifiedBy": {
|
|
299
|
+
"description": "What checked the `verified` fields",
|
|
300
|
+
"type": "string"
|
|
301
|
+
},
|
|
302
|
+
"provenance": {
|
|
303
|
+
"description": "Where the declaration comes from and how to check it: a document, a CI step, a device log",
|
|
304
|
+
"type": "array",
|
|
305
|
+
"items": {
|
|
306
|
+
"type": "object",
|
|
307
|
+
"properties": {
|
|
308
|
+
"url": {
|
|
309
|
+
"type": "string",
|
|
310
|
+
"minLength": 1
|
|
311
|
+
},
|
|
312
|
+
"name": {
|
|
313
|
+
"type": "string"
|
|
314
|
+
},
|
|
315
|
+
"rel": {
|
|
316
|
+
"description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
|
|
317
|
+
"type": "string"
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"required": [
|
|
321
|
+
"url"
|
|
322
|
+
],
|
|
323
|
+
"additionalProperties": {}
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
"extensions": {
|
|
327
|
+
"type": "object",
|
|
328
|
+
"propertyNames": {
|
|
329
|
+
"type": "string",
|
|
330
|
+
"minLength": 1
|
|
331
|
+
},
|
|
332
|
+
"additionalProperties": {}
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
"additionalProperties": {}
|
|
233
336
|
}
|
|
234
337
|
},
|
|
235
338
|
"required": [
|