@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.
Files changed (46) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/dist/reports/src/evidence-detail.js +6 -1
  3. package/dist/reports/src/evidence-types.d.ts +2 -0
  4. package/dist/reports/src/explorer-types.d.ts +19 -0
  5. package/dist/reports/src/latency.d.ts +204 -0
  6. package/dist/reports/src/latency.js +219 -0
  7. package/dist/reports/src/reliability.d.ts +181 -0
  8. package/dist/reports/src/reliability.js +294 -0
  9. package/dist/reports/src/report-index.js +1 -1
  10. package/dist/reports/src/reports-explorer-route.d.ts +19 -6
  11. package/dist/reports/src/reports-route.d.ts +19 -6
  12. package/dist/reports/src/test-catalog.d.ts +11 -3
  13. package/dist/reports/src/test-catalog.js +12 -5
  14. package/dist/schema/src/api.d.ts +377 -0
  15. package/dist/schema/src/api.js +55 -3
  16. package/dist/schema/src/layer.d.ts +90 -0
  17. package/dist/schema/src/layer.js +20 -1
  18. package/dist/server/src/app.js +15 -0
  19. package/dist/server/src/llms.js +1 -0
  20. package/dist/server/src/openapi.js +25 -2
  21. package/docs/extending.md +1 -1
  22. package/docs/reference/http-api.md +48 -0
  23. package/docs/reference/reports.md +619 -1
  24. package/docs/reference/schema.md +39 -0
  25. package/docs/rich-evidence.md +43 -0
  26. package/docs/server.md +18 -0
  27. package/docs/ui.md +20 -1
  28. package/llms-full.txt +130 -2
  29. package/package.json +1 -1
  30. package/packages/schema/schemas/check-detail.schema.json +56 -1
  31. package/packages/schema/schemas/effective-delta.schema.json +86 -2
  32. package/packages/schema/schemas/effective-evidence.schema.json +86 -2
  33. package/packages/schema/schemas/evidence-page.schema.json +13 -0
  34. package/packages/schema/schemas/layer-rows.schema.json +73 -2
  35. package/packages/schema/schemas/layer.schema.json +112 -2
  36. package/packages/schema/schemas/publish-checks.schema.json +56 -1
  37. package/packages/schema/schemas/test-catalog.schema.json +102 -0
  38. package/packages/schema/schemas/test-history.schema.json +204 -0
  39. package/packages/schema/schemas/test-reliability.schema.json +629 -0
  40. package/packages/server/openapi.json +2354 -661
  41. package/packages/visualizer/src/evidence/check-detail.tsx +9 -0
  42. package/packages/visualizer/src/explorer/ProductLatency.tsx +214 -0
  43. package/packages/visualizer/src/explorer/Reliability.tsx +337 -0
  44. package/packages/visualizer/src/explorer/TestDetail.tsx +12 -2
  45. package/packages/visualizer/src/explorer/catalog.tsx +1 -1
  46. package/packages/visualizer/src/explorer/search.ts +36 -0
@@ -163,6 +163,10 @@
163
163
  "type": "string",
164
164
  "description": "Why it has its status, at most 500 characters"
165
165
  },
166
+ "specRevision": {
167
+ "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",
168
+ "type": "string"
169
+ },
166
170
  "evidence": {
167
171
  "type": "object",
168
172
  "properties": {
@@ -186,6 +190,19 @@
186
190
  "minimum": 0,
187
191
  "maximum": 9007199254740991
188
192
  },
193
+ "attemptStatuses": {
194
+ "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",
195
+ "type": "array",
196
+ "items": {
197
+ "type": "string",
198
+ "enum": [
199
+ "passed",
200
+ "failed",
201
+ "running",
202
+ "not-run"
203
+ ]
204
+ }
205
+ },
189
206
  "links": {
190
207
  "type": "integer",
191
208
  "minimum": 0,
@@ -375,6 +392,91 @@
375
392
  "roles"
376
393
  ],
377
394
  "additionalProperties": {}
395
+ },
396
+ "latency": {
397
+ "description": "Its product-latency measurements (`kind: product-latency`), when it recorded any. Separate from `durationMs`, which is how long the test took",
398
+ "type": "array",
399
+ "items": {
400
+ "type": "object",
401
+ "properties": {
402
+ "name": {
403
+ "type": "string",
404
+ "minLength": 1
405
+ },
406
+ "value": {
407
+ "type": "number",
408
+ "description": "A finite number"
409
+ },
410
+ "unit": {
411
+ "type": "string"
412
+ },
413
+ "limit": {
414
+ "description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
415
+ "type": "number"
416
+ },
417
+ "kind": {
418
+ "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",
419
+ "type": "string",
420
+ "minLength": 1
421
+ },
422
+ "from": {
423
+ "description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
424
+ "type": "string",
425
+ "minLength": 1
426
+ },
427
+ "to": {
428
+ "description": "The event the interval ends at",
429
+ "type": "string",
430
+ "minLength": 1
431
+ },
432
+ "intended": {
433
+ "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",
434
+ "type": "object",
435
+ "properties": {
436
+ "from": {
437
+ "description": "The event the interval starts at: `end of speech`, `submit pressed`",
438
+ "type": "string",
439
+ "minLength": 1
440
+ },
441
+ "to": {
442
+ "description": "The event the interval ends at: `audible response`, `confirmation visible`",
443
+ "type": "string",
444
+ "minLength": 1
445
+ }
446
+ },
447
+ "additionalProperties": {}
448
+ },
449
+ "source": {
450
+ "description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
451
+ "type": "string"
452
+ },
453
+ "outcome": {
454
+ "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",
455
+ "type": "string",
456
+ "minLength": 1
457
+ },
458
+ "instrumentation": {
459
+ "description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
460
+ "type": "string"
461
+ },
462
+ "labels": {
463
+ "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",
464
+ "type": "object",
465
+ "propertyNames": {
466
+ "type": "string"
467
+ },
468
+ "additionalProperties": {
469
+ "type": "string"
470
+ }
471
+ }
472
+ },
473
+ "required": [
474
+ "name",
475
+ "value",
476
+ "unit"
477
+ ],
478
+ "additionalProperties": {}
479
+ }
378
480
  }
379
481
  },
380
482
  "required": [
@@ -714,6 +816,10 @@
714
816
  "type": "string",
715
817
  "description": "Why it has its status, at most 500 characters"
716
818
  },
819
+ "specRevision": {
820
+ "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",
821
+ "type": "string"
822
+ },
717
823
  "evidence": {
718
824
  "type": "object",
719
825
  "properties": {
@@ -737,6 +843,19 @@
737
843
  "minimum": 0,
738
844
  "maximum": 9007199254740991
739
845
  },
846
+ "attemptStatuses": {
847
+ "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",
848
+ "type": "array",
849
+ "items": {
850
+ "type": "string",
851
+ "enum": [
852
+ "passed",
853
+ "failed",
854
+ "running",
855
+ "not-run"
856
+ ]
857
+ }
858
+ },
740
859
  "links": {
741
860
  "type": "integer",
742
861
  "minimum": 0,
@@ -926,6 +1045,91 @@
926
1045
  "roles"
927
1046
  ],
928
1047
  "additionalProperties": {}
1048
+ },
1049
+ "latency": {
1050
+ "description": "Its product-latency measurements (`kind: product-latency`), when it recorded any. Separate from `durationMs`, which is how long the test took",
1051
+ "type": "array",
1052
+ "items": {
1053
+ "type": "object",
1054
+ "properties": {
1055
+ "name": {
1056
+ "type": "string",
1057
+ "minLength": 1
1058
+ },
1059
+ "value": {
1060
+ "type": "number",
1061
+ "description": "A finite number"
1062
+ },
1063
+ "unit": {
1064
+ "type": "string"
1065
+ },
1066
+ "limit": {
1067
+ "description": "The allowance, or budget. A measurement over it is reported, and never fails the check by itself",
1068
+ "type": "number"
1069
+ },
1070
+ "kind": {
1071
+ "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",
1072
+ "type": "string",
1073
+ "minLength": 1
1074
+ },
1075
+ "from": {
1076
+ "description": "The event the interval starts at. Without both `from` and `to` a latency is shown but no product claim is made from it",
1077
+ "type": "string",
1078
+ "minLength": 1
1079
+ },
1080
+ "to": {
1081
+ "description": "The event the interval ends at",
1082
+ "type": "string",
1083
+ "minLength": 1
1084
+ },
1085
+ "intended": {
1086
+ "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",
1087
+ "type": "object",
1088
+ "properties": {
1089
+ "from": {
1090
+ "description": "The event the interval starts at: `end of speech`, `submit pressed`",
1091
+ "type": "string",
1092
+ "minLength": 1
1093
+ },
1094
+ "to": {
1095
+ "description": "The event the interval ends at: `audible response`, `confirmation visible`",
1096
+ "type": "string",
1097
+ "minLength": 1
1098
+ }
1099
+ },
1100
+ "additionalProperties": {}
1101
+ },
1102
+ "source": {
1103
+ "description": "How it was measured: `app-instrumentation`, `trace`, `recording-analysis`",
1104
+ "type": "string"
1105
+ },
1106
+ "outcome": {
1107
+ "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",
1108
+ "type": "string",
1109
+ "minLength": 1
1110
+ },
1111
+ "instrumentation": {
1112
+ "description": "The version or method of the measurement. A change of it between two sets of observations is disclosed when they are compared",
1113
+ "type": "string"
1114
+ },
1115
+ "labels": {
1116
+ "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",
1117
+ "type": "object",
1118
+ "propertyNames": {
1119
+ "type": "string"
1120
+ },
1121
+ "additionalProperties": {
1122
+ "type": "string"
1123
+ }
1124
+ }
1125
+ },
1126
+ "required": [
1127
+ "name",
1128
+ "value",
1129
+ "unit"
1130
+ ],
1131
+ "additionalProperties": {}
1132
+ }
929
1133
  }
930
1134
  },
931
1135
  "required": [