@crvouga/atlas 1.7.0 → 1.9.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 +13 -1
- package/dist/reports/src/evidence-detail.js +6 -1
- package/dist/reports/src/evidence-types.d.ts +2 -0
- package/dist/reports/src/explorer-types.d.ts +19 -0
- package/dist/reports/src/latency.d.ts +204 -0
- package/dist/reports/src/latency.js +219 -0
- package/dist/reports/src/reliability.d.ts +181 -0
- package/dist/reports/src/reliability.js +294 -0
- package/dist/reports/src/report-index.js +1 -1
- package/dist/reports/src/reports-explorer-route.d.ts +19 -6
- package/dist/reports/src/reports-route.d.ts +19 -6
- package/dist/reports/src/test-catalog.d.ts +11 -3
- package/dist/reports/src/test-catalog.js +12 -5
- package/dist/schema/src/api.d.ts +377 -0
- package/dist/schema/src/api.js +55 -3
- package/dist/schema/src/layer.d.ts +90 -0
- package/dist/schema/src/layer.js +20 -1
- package/dist/server/src/app.js +15 -0
- package/dist/server/src/llms.js +1 -0
- package/dist/server/src/openapi.js +25 -2
- package/docs/extending.md +1 -1
- package/docs/reference/http-api.md +48 -0
- package/docs/reference/reports.md +619 -1
- package/docs/reference/schema.md +39 -0
- package/docs/rich-evidence.md +43 -0
- package/docs/server.md +18 -0
- package/docs/ui.md +20 -1
- package/llms-full.txt +130 -2
- package/package.json +1 -1
- package/packages/schema/schemas/check-detail.schema.json +56 -1
- package/packages/schema/schemas/effective-delta.schema.json +86 -2
- package/packages/schema/schemas/effective-evidence.schema.json +86 -2
- package/packages/schema/schemas/evidence-page.schema.json +13 -0
- package/packages/schema/schemas/layer-rows.schema.json +73 -2
- package/packages/schema/schemas/layer.schema.json +112 -2
- package/packages/schema/schemas/publish-checks.schema.json +56 -1
- package/packages/schema/schemas/test-catalog.schema.json +102 -0
- package/packages/schema/schemas/test-history.schema.json +204 -0
- package/packages/schema/schemas/test-reliability.schema.json +629 -0
- package/packages/server/openapi.json +2354 -661
- package/packages/visualizer/src/evidence/check-detail.tsx +9 -0
- package/packages/visualizer/src/explorer/ProductLatency.tsx +214 -0
- package/packages/visualizer/src/explorer/Reliability.tsx +337 -0
- package/packages/visualizer/src/explorer/TestDetail.tsx +12 -2
- package/packages/visualizer/src/explorer/catalog.tsx +1 -1
- package/packages/visualizer/src/explorer/search.ts +36 -0
|
@@ -57,16 +57,74 @@
|
|
|
57
57
|
"type": "object",
|
|
58
58
|
"properties": {
|
|
59
59
|
"name": {
|
|
60
|
-
"type": "string"
|
|
60
|
+
"type": "string",
|
|
61
|
+
"minLength": 1
|
|
61
62
|
},
|
|
62
63
|
"value": {
|
|
63
|
-
"type": "number"
|
|
64
|
+
"type": "number",
|
|
65
|
+
"description": "A finite number"
|
|
64
66
|
},
|
|
65
67
|
"unit": {
|
|
66
68
|
"type": "string"
|
|
67
69
|
},
|
|
68
70
|
"limit": {
|
|
71
|
+
"description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
|
|
69
72
|
"type": "number"
|
|
73
|
+
},
|
|
74
|
+
"kind": {
|
|
75
|
+
"description": "What the number is, in an open vocabulary. `product-latency`: a user-visible response time between `from` and `to`. Absent: just a number, never read as product latency",
|
|
76
|
+
"type": "string",
|
|
77
|
+
"minLength": 1
|
|
78
|
+
},
|
|
79
|
+
"from": {
|
|
80
|
+
"description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
|
|
81
|
+
"type": "string",
|
|
82
|
+
"minLength": 1
|
|
83
|
+
},
|
|
84
|
+
"to": {
|
|
85
|
+
"description": "The event the interval ends at",
|
|
86
|
+
"type": "string",
|
|
87
|
+
"minLength": 1
|
|
88
|
+
},
|
|
89
|
+
"intended": {
|
|
90
|
+
"description": "The interval the name of the measurement claims, when what was measured is only part of it. If `intended.to` differs from `to` (or `intended.from` from `from`) the measurement is shown as partial, never as the complete interval",
|
|
91
|
+
"type": "object",
|
|
92
|
+
"properties": {
|
|
93
|
+
"from": {
|
|
94
|
+
"description": "The event the interval starts at: `end of speech`, `submit pressed`",
|
|
95
|
+
"type": "string",
|
|
96
|
+
"minLength": 1
|
|
97
|
+
},
|
|
98
|
+
"to": {
|
|
99
|
+
"description": "The event the interval ends at: `audible response`, `confirmation visible`",
|
|
100
|
+
"type": "string",
|
|
101
|
+
"minLength": 1
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"additionalProperties": {}
|
|
105
|
+
},
|
|
106
|
+
"source": {
|
|
107
|
+
"description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
|
|
108
|
+
"type": "string"
|
|
109
|
+
},
|
|
110
|
+
"outcome": {
|
|
111
|
+
"description": "`observed` (the default), `timeout` or `failed`. For anything but `observed` the value is how long the observation waited: at least that much, so it counts against a budget and is never dropped",
|
|
112
|
+
"type": "string",
|
|
113
|
+
"minLength": 1
|
|
114
|
+
},
|
|
115
|
+
"instrumentation": {
|
|
116
|
+
"description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
|
|
117
|
+
"type": "string"
|
|
118
|
+
},
|
|
119
|
+
"labels": {
|
|
120
|
+
"description": "What the observation is comparable with: `device`, `build`, `network`. `device` and `build` group the observations and, when two groups differ in the others, the comparison says so",
|
|
121
|
+
"type": "object",
|
|
122
|
+
"propertyNames": {
|
|
123
|
+
"type": "string"
|
|
124
|
+
},
|
|
125
|
+
"additionalProperties": {
|
|
126
|
+
"type": "string"
|
|
127
|
+
}
|
|
70
128
|
}
|
|
71
129
|
},
|
|
72
130
|
"required": [
|
|
@@ -121,6 +179,19 @@
|
|
|
121
179
|
"minimum": 0,
|
|
122
180
|
"maximum": 9007199254740991
|
|
123
181
|
},
|
|
182
|
+
"attemptStatuses": {
|
|
183
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
184
|
+
"type": "array",
|
|
185
|
+
"items": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"enum": [
|
|
188
|
+
"passed",
|
|
189
|
+
"failed",
|
|
190
|
+
"running",
|
|
191
|
+
"not-run"
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
},
|
|
124
195
|
"links": {
|
|
125
196
|
"type": "integer",
|
|
126
197
|
"minimum": 0,
|
|
@@ -514,6 +585,19 @@
|
|
|
514
585
|
"minimum": 0,
|
|
515
586
|
"maximum": 9007199254740991
|
|
516
587
|
},
|
|
588
|
+
"attemptStatuses": {
|
|
589
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
590
|
+
"type": "array",
|
|
591
|
+
"items": {
|
|
592
|
+
"type": "string",
|
|
593
|
+
"enum": [
|
|
594
|
+
"passed",
|
|
595
|
+
"failed",
|
|
596
|
+
"running",
|
|
597
|
+
"not-run"
|
|
598
|
+
]
|
|
599
|
+
}
|
|
600
|
+
},
|
|
517
601
|
"links": {
|
|
518
602
|
"type": "integer",
|
|
519
603
|
"minimum": 0,
|
|
@@ -166,6 +166,19 @@
|
|
|
166
166
|
"minimum": 0,
|
|
167
167
|
"maximum": 9007199254740991
|
|
168
168
|
},
|
|
169
|
+
"attemptStatuses": {
|
|
170
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
171
|
+
"type": "array",
|
|
172
|
+
"items": {
|
|
173
|
+
"type": "string",
|
|
174
|
+
"enum": [
|
|
175
|
+
"passed",
|
|
176
|
+
"failed",
|
|
177
|
+
"running",
|
|
178
|
+
"not-run"
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
},
|
|
169
182
|
"links": {
|
|
170
183
|
"type": "integer",
|
|
171
184
|
"minimum": 0,
|
|
@@ -48,16 +48,74 @@
|
|
|
48
48
|
"type": "object",
|
|
49
49
|
"properties": {
|
|
50
50
|
"name": {
|
|
51
|
-
"type": "string"
|
|
51
|
+
"type": "string",
|
|
52
|
+
"minLength": 1
|
|
52
53
|
},
|
|
53
54
|
"value": {
|
|
54
|
-
"type": "number"
|
|
55
|
+
"type": "number",
|
|
56
|
+
"description": "A finite number"
|
|
55
57
|
},
|
|
56
58
|
"unit": {
|
|
57
59
|
"type": "string"
|
|
58
60
|
},
|
|
59
61
|
"limit": {
|
|
62
|
+
"description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
|
|
60
63
|
"type": "number"
|
|
64
|
+
},
|
|
65
|
+
"kind": {
|
|
66
|
+
"description": "What the number is, in an open vocabulary. `product-latency`: a user-visible response time between `from` and `to`. Absent: just a number, never read as product latency",
|
|
67
|
+
"type": "string",
|
|
68
|
+
"minLength": 1
|
|
69
|
+
},
|
|
70
|
+
"from": {
|
|
71
|
+
"description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
|
|
72
|
+
"type": "string",
|
|
73
|
+
"minLength": 1
|
|
74
|
+
},
|
|
75
|
+
"to": {
|
|
76
|
+
"description": "The event the interval ends at",
|
|
77
|
+
"type": "string",
|
|
78
|
+
"minLength": 1
|
|
79
|
+
},
|
|
80
|
+
"intended": {
|
|
81
|
+
"description": "The interval the name of the measurement claims, when what was measured is only part of it. If `intended.to` differs from `to` (or `intended.from` from `from`) the measurement is shown as partial, never as the complete interval",
|
|
82
|
+
"type": "object",
|
|
83
|
+
"properties": {
|
|
84
|
+
"from": {
|
|
85
|
+
"description": "The event the interval starts at: `end of speech`, `submit pressed`",
|
|
86
|
+
"type": "string",
|
|
87
|
+
"minLength": 1
|
|
88
|
+
},
|
|
89
|
+
"to": {
|
|
90
|
+
"description": "The event the interval ends at: `audible response`, `confirmation visible`",
|
|
91
|
+
"type": "string",
|
|
92
|
+
"minLength": 1
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"additionalProperties": {}
|
|
96
|
+
},
|
|
97
|
+
"source": {
|
|
98
|
+
"description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
|
|
99
|
+
"type": "string"
|
|
100
|
+
},
|
|
101
|
+
"outcome": {
|
|
102
|
+
"description": "`observed` (the default), `timeout` or `failed`. For anything but `observed` the value is how long the observation waited: at least that much, so it counts against a budget and is never dropped",
|
|
103
|
+
"type": "string",
|
|
104
|
+
"minLength": 1
|
|
105
|
+
},
|
|
106
|
+
"instrumentation": {
|
|
107
|
+
"description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
|
|
108
|
+
"type": "string"
|
|
109
|
+
},
|
|
110
|
+
"labels": {
|
|
111
|
+
"description": "What the observation is comparable with: `device`, `build`, `network`. `device` and `build` group the observations and, when two groups differ in the others, the comparison says so",
|
|
112
|
+
"type": "object",
|
|
113
|
+
"propertyNames": {
|
|
114
|
+
"type": "string"
|
|
115
|
+
},
|
|
116
|
+
"additionalProperties": {
|
|
117
|
+
"type": "string"
|
|
118
|
+
}
|
|
61
119
|
}
|
|
62
120
|
},
|
|
63
121
|
"required": [
|
|
@@ -112,6 +170,19 @@
|
|
|
112
170
|
"minimum": 0,
|
|
113
171
|
"maximum": 9007199254740991
|
|
114
172
|
},
|
|
173
|
+
"attemptStatuses": {
|
|
174
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
175
|
+
"type": "array",
|
|
176
|
+
"items": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"enum": [
|
|
179
|
+
"passed",
|
|
180
|
+
"failed",
|
|
181
|
+
"running",
|
|
182
|
+
"not-run"
|
|
183
|
+
]
|
|
184
|
+
}
|
|
185
|
+
},
|
|
115
186
|
"links": {
|
|
116
187
|
"type": "integer",
|
|
117
188
|
"minimum": 0,
|
|
@@ -224,8 +224,63 @@
|
|
|
224
224
|
"type": "string"
|
|
225
225
|
},
|
|
226
226
|
"limit": {
|
|
227
|
-
"description": "The allowance. A measurement over it is reported, and never fails the check by itself",
|
|
227
|
+
"description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
|
|
228
228
|
"type": "number"
|
|
229
|
+
},
|
|
230
|
+
"kind": {
|
|
231
|
+
"description": "What the number is, in an open vocabulary. `product-latency`: a user-visible response time between `from` and `to`. Absent: just a number, never read as product latency",
|
|
232
|
+
"type": "string",
|
|
233
|
+
"minLength": 1
|
|
234
|
+
},
|
|
235
|
+
"from": {
|
|
236
|
+
"description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
|
|
237
|
+
"type": "string",
|
|
238
|
+
"minLength": 1
|
|
239
|
+
},
|
|
240
|
+
"to": {
|
|
241
|
+
"description": "The event the interval ends at",
|
|
242
|
+
"type": "string",
|
|
243
|
+
"minLength": 1
|
|
244
|
+
},
|
|
245
|
+
"intended": {
|
|
246
|
+
"description": "The interval the name of the measurement claims, when what was measured is only part of it. If `intended.to` differs from `to` (or `intended.from` from `from`) the measurement is shown as partial, never as the complete interval",
|
|
247
|
+
"type": "object",
|
|
248
|
+
"properties": {
|
|
249
|
+
"from": {
|
|
250
|
+
"description": "The event the interval starts at: `end of speech`, `submit pressed`",
|
|
251
|
+
"type": "string",
|
|
252
|
+
"minLength": 1
|
|
253
|
+
},
|
|
254
|
+
"to": {
|
|
255
|
+
"description": "The event the interval ends at: `audible response`, `confirmation visible`",
|
|
256
|
+
"type": "string",
|
|
257
|
+
"minLength": 1
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"additionalProperties": {}
|
|
261
|
+
},
|
|
262
|
+
"source": {
|
|
263
|
+
"description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
|
|
264
|
+
"type": "string"
|
|
265
|
+
},
|
|
266
|
+
"outcome": {
|
|
267
|
+
"description": "`observed` (the default), `timeout` or `failed`. For anything but `observed` the value is how long the observation waited: at least that much, so it counts against a budget and is never dropped",
|
|
268
|
+
"type": "string",
|
|
269
|
+
"minLength": 1
|
|
270
|
+
},
|
|
271
|
+
"instrumentation": {
|
|
272
|
+
"description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
|
|
273
|
+
"type": "string"
|
|
274
|
+
},
|
|
275
|
+
"labels": {
|
|
276
|
+
"description": "What the observation is comparable with: `device`, `build`, `network`. `device` and `build` group the observations and, when two groups differ in the others, the comparison says so",
|
|
277
|
+
"type": "object",
|
|
278
|
+
"propertyNames": {
|
|
279
|
+
"type": "string"
|
|
280
|
+
},
|
|
281
|
+
"additionalProperties": {
|
|
282
|
+
"type": "string"
|
|
283
|
+
}
|
|
229
284
|
}
|
|
230
285
|
},
|
|
231
286
|
"required": [
|
|
@@ -2355,8 +2410,63 @@
|
|
|
2355
2410
|
"type": "string"
|
|
2356
2411
|
},
|
|
2357
2412
|
"limit": {
|
|
2358
|
-
"description": "The allowance. A measurement over it is reported, and never fails the check by itself",
|
|
2413
|
+
"description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
|
|
2359
2414
|
"type": "number"
|
|
2415
|
+
},
|
|
2416
|
+
"kind": {
|
|
2417
|
+
"description": "What the number is, in an open vocabulary. `product-latency`: a user-visible response time between `from` and `to`. Absent: just a number, never read as product latency",
|
|
2418
|
+
"type": "string",
|
|
2419
|
+
"minLength": 1
|
|
2420
|
+
},
|
|
2421
|
+
"from": {
|
|
2422
|
+
"description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
|
|
2423
|
+
"type": "string",
|
|
2424
|
+
"minLength": 1
|
|
2425
|
+
},
|
|
2426
|
+
"to": {
|
|
2427
|
+
"description": "The event the interval ends at",
|
|
2428
|
+
"type": "string",
|
|
2429
|
+
"minLength": 1
|
|
2430
|
+
},
|
|
2431
|
+
"intended": {
|
|
2432
|
+
"description": "The interval the name of the measurement claims, when what was measured is only part of it. If `intended.to` differs from `to` (or `intended.from` from `from`) the measurement is shown as partial, never as the complete interval",
|
|
2433
|
+
"type": "object",
|
|
2434
|
+
"properties": {
|
|
2435
|
+
"from": {
|
|
2436
|
+
"description": "The event the interval starts at: `end of speech`, `submit pressed`",
|
|
2437
|
+
"type": "string",
|
|
2438
|
+
"minLength": 1
|
|
2439
|
+
},
|
|
2440
|
+
"to": {
|
|
2441
|
+
"description": "The event the interval ends at: `audible response`, `confirmation visible`",
|
|
2442
|
+
"type": "string",
|
|
2443
|
+
"minLength": 1
|
|
2444
|
+
}
|
|
2445
|
+
},
|
|
2446
|
+
"additionalProperties": {}
|
|
2447
|
+
},
|
|
2448
|
+
"source": {
|
|
2449
|
+
"description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
|
|
2450
|
+
"type": "string"
|
|
2451
|
+
},
|
|
2452
|
+
"outcome": {
|
|
2453
|
+
"description": "`observed` (the default), `timeout` or `failed`. For anything but `observed` the value is how long the observation waited: at least that much, so it counts against a budget and is never dropped",
|
|
2454
|
+
"type": "string",
|
|
2455
|
+
"minLength": 1
|
|
2456
|
+
},
|
|
2457
|
+
"instrumentation": {
|
|
2458
|
+
"description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
|
|
2459
|
+
"type": "string"
|
|
2460
|
+
},
|
|
2461
|
+
"labels": {
|
|
2462
|
+
"description": "What the observation is comparable with: `device`, `build`, `network`. `device` and `build` group the observations and, when two groups differ in the others, the comparison says so",
|
|
2463
|
+
"type": "object",
|
|
2464
|
+
"propertyNames": {
|
|
2465
|
+
"type": "string"
|
|
2466
|
+
},
|
|
2467
|
+
"additionalProperties": {
|
|
2468
|
+
"type": "string"
|
|
2469
|
+
}
|
|
2360
2470
|
}
|
|
2361
2471
|
},
|
|
2362
2472
|
"required": [
|
|
@@ -56,8 +56,63 @@
|
|
|
56
56
|
"type": "string"
|
|
57
57
|
},
|
|
58
58
|
"limit": {
|
|
59
|
-
"description": "The allowance. A measurement over it is reported, and never fails the check by itself",
|
|
59
|
+
"description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
|
|
60
60
|
"type": "number"
|
|
61
|
+
},
|
|
62
|
+
"kind": {
|
|
63
|
+
"description": "What the number is, in an open vocabulary. `product-latency`: a user-visible response time between `from` and `to`. Absent: just a number, never read as product latency",
|
|
64
|
+
"type": "string",
|
|
65
|
+
"minLength": 1
|
|
66
|
+
},
|
|
67
|
+
"from": {
|
|
68
|
+
"description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
|
|
69
|
+
"type": "string",
|
|
70
|
+
"minLength": 1
|
|
71
|
+
},
|
|
72
|
+
"to": {
|
|
73
|
+
"description": "The event the interval ends at",
|
|
74
|
+
"type": "string",
|
|
75
|
+
"minLength": 1
|
|
76
|
+
},
|
|
77
|
+
"intended": {
|
|
78
|
+
"description": "The interval the name of the measurement claims, when what was measured is only part of it. If `intended.to` differs from `to` (or `intended.from` from `from`) the measurement is shown as partial, never as the complete interval",
|
|
79
|
+
"type": "object",
|
|
80
|
+
"properties": {
|
|
81
|
+
"from": {
|
|
82
|
+
"description": "The event the interval starts at: `end of speech`, `submit pressed`",
|
|
83
|
+
"type": "string",
|
|
84
|
+
"minLength": 1
|
|
85
|
+
},
|
|
86
|
+
"to": {
|
|
87
|
+
"description": "The event the interval ends at: `audible response`, `confirmation visible`",
|
|
88
|
+
"type": "string",
|
|
89
|
+
"minLength": 1
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"additionalProperties": {}
|
|
93
|
+
},
|
|
94
|
+
"source": {
|
|
95
|
+
"description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
|
|
96
|
+
"type": "string"
|
|
97
|
+
},
|
|
98
|
+
"outcome": {
|
|
99
|
+
"description": "`observed` (the default), `timeout` or `failed`. For anything but `observed` the value is how long the observation waited: at least that much, so it counts against a budget and is never dropped",
|
|
100
|
+
"type": "string",
|
|
101
|
+
"minLength": 1
|
|
102
|
+
},
|
|
103
|
+
"instrumentation": {
|
|
104
|
+
"description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
|
|
105
|
+
"type": "string"
|
|
106
|
+
},
|
|
107
|
+
"labels": {
|
|
108
|
+
"description": "What the observation is comparable with: `device`, `build`, `network`. `device` and `build` group the observations and, when two groups differ in the others, the comparison says so",
|
|
109
|
+
"type": "object",
|
|
110
|
+
"propertyNames": {
|
|
111
|
+
"type": "string"
|
|
112
|
+
},
|
|
113
|
+
"additionalProperties": {
|
|
114
|
+
"type": "string"
|
|
115
|
+
}
|
|
61
116
|
}
|
|
62
117
|
},
|
|
63
118
|
"required": [
|
|
@@ -865,6 +865,10 @@
|
|
|
865
865
|
"type": "string",
|
|
866
866
|
"description": "Why it has its status, at most 500 characters"
|
|
867
867
|
},
|
|
868
|
+
"specRevision": {
|
|
869
|
+
"description": "The fingerprint of its spec text that the layer recorded, when it recorded one. Two results with different revisions were recorded against different promises. Absent: not recorded, never assumed to match",
|
|
870
|
+
"type": "string"
|
|
871
|
+
},
|
|
868
872
|
"evidence": {
|
|
869
873
|
"type": "object",
|
|
870
874
|
"properties": {
|
|
@@ -888,6 +892,19 @@
|
|
|
888
892
|
"minimum": 0,
|
|
889
893
|
"maximum": 9007199254740991
|
|
890
894
|
},
|
|
895
|
+
"attemptStatuses": {
|
|
896
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
897
|
+
"type": "array",
|
|
898
|
+
"items": {
|
|
899
|
+
"type": "string",
|
|
900
|
+
"enum": [
|
|
901
|
+
"passed",
|
|
902
|
+
"failed",
|
|
903
|
+
"running",
|
|
904
|
+
"not-run"
|
|
905
|
+
]
|
|
906
|
+
}
|
|
907
|
+
},
|
|
891
908
|
"links": {
|
|
892
909
|
"type": "integer",
|
|
893
910
|
"minimum": 0,
|
|
@@ -1077,6 +1094,91 @@
|
|
|
1077
1094
|
"roles"
|
|
1078
1095
|
],
|
|
1079
1096
|
"additionalProperties": {}
|
|
1097
|
+
},
|
|
1098
|
+
"latency": {
|
|
1099
|
+
"description": "Its product-latency measurements (`kind: product-latency`), when it recorded any. Separate from `durationMs`, which is how long the test took",
|
|
1100
|
+
"type": "array",
|
|
1101
|
+
"items": {
|
|
1102
|
+
"type": "object",
|
|
1103
|
+
"properties": {
|
|
1104
|
+
"name": {
|
|
1105
|
+
"type": "string",
|
|
1106
|
+
"minLength": 1
|
|
1107
|
+
},
|
|
1108
|
+
"value": {
|
|
1109
|
+
"type": "number",
|
|
1110
|
+
"description": "A finite number"
|
|
1111
|
+
},
|
|
1112
|
+
"unit": {
|
|
1113
|
+
"type": "string"
|
|
1114
|
+
},
|
|
1115
|
+
"limit": {
|
|
1116
|
+
"description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
|
|
1117
|
+
"type": "number"
|
|
1118
|
+
},
|
|
1119
|
+
"kind": {
|
|
1120
|
+
"description": "What the number is, in an open vocabulary. `product-latency`: a user-visible response time between `from` and `to`. Absent: just a number, never read as product latency",
|
|
1121
|
+
"type": "string",
|
|
1122
|
+
"minLength": 1
|
|
1123
|
+
},
|
|
1124
|
+
"from": {
|
|
1125
|
+
"description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
|
|
1126
|
+
"type": "string",
|
|
1127
|
+
"minLength": 1
|
|
1128
|
+
},
|
|
1129
|
+
"to": {
|
|
1130
|
+
"description": "The event the interval ends at",
|
|
1131
|
+
"type": "string",
|
|
1132
|
+
"minLength": 1
|
|
1133
|
+
},
|
|
1134
|
+
"intended": {
|
|
1135
|
+
"description": "The interval the name of the measurement claims, when what was measured is only part of it. If `intended.to` differs from `to` (or `intended.from` from `from`) the measurement is shown as partial, never as the complete interval",
|
|
1136
|
+
"type": "object",
|
|
1137
|
+
"properties": {
|
|
1138
|
+
"from": {
|
|
1139
|
+
"description": "The event the interval starts at: `end of speech`, `submit pressed`",
|
|
1140
|
+
"type": "string",
|
|
1141
|
+
"minLength": 1
|
|
1142
|
+
},
|
|
1143
|
+
"to": {
|
|
1144
|
+
"description": "The event the interval ends at: `audible response`, `confirmation visible`",
|
|
1145
|
+
"type": "string",
|
|
1146
|
+
"minLength": 1
|
|
1147
|
+
}
|
|
1148
|
+
},
|
|
1149
|
+
"additionalProperties": {}
|
|
1150
|
+
},
|
|
1151
|
+
"source": {
|
|
1152
|
+
"description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
|
|
1153
|
+
"type": "string"
|
|
1154
|
+
},
|
|
1155
|
+
"outcome": {
|
|
1156
|
+
"description": "`observed` (the default), `timeout` or `failed`. For anything but `observed` the value is how long the observation waited: at least that much, so it counts against a budget and is never dropped",
|
|
1157
|
+
"type": "string",
|
|
1158
|
+
"minLength": 1
|
|
1159
|
+
},
|
|
1160
|
+
"instrumentation": {
|
|
1161
|
+
"description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
|
|
1162
|
+
"type": "string"
|
|
1163
|
+
},
|
|
1164
|
+
"labels": {
|
|
1165
|
+
"description": "What the observation is comparable with: `device`, `build`, `network`. `device` and `build` group the observations and, when two groups differ in the others, the comparison says so",
|
|
1166
|
+
"type": "object",
|
|
1167
|
+
"propertyNames": {
|
|
1168
|
+
"type": "string"
|
|
1169
|
+
},
|
|
1170
|
+
"additionalProperties": {
|
|
1171
|
+
"type": "string"
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
},
|
|
1175
|
+
"required": [
|
|
1176
|
+
"name",
|
|
1177
|
+
"value",
|
|
1178
|
+
"unit"
|
|
1179
|
+
],
|
|
1180
|
+
"additionalProperties": {}
|
|
1181
|
+
}
|
|
1080
1182
|
}
|
|
1081
1183
|
},
|
|
1082
1184
|
"required": [
|