@crvouga/atlas 1.13.0 → 1.15.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 (65) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/dist/playwright/src/index.d.ts +4 -0
  3. package/dist/playwright/src/index.js +4 -0
  4. package/dist/playwright/src/ui-catalog.d.ts +51 -0
  5. package/dist/playwright/src/ui-catalog.js +44 -0
  6. package/dist/reports/src/evidence-detail.d.ts +19 -0
  7. package/dist/reports/src/evidence-detail.js +31 -4
  8. package/dist/reports/src/evidence-types.d.ts +5 -2
  9. package/dist/reports/src/layer-merge.d.ts +5 -1
  10. package/dist/reports/src/layer-merge.js +13 -5
  11. package/dist/reports/src/layer-store.d.ts +1 -1
  12. package/dist/reports/src/layer-store.js +4 -2
  13. package/dist/reports/src/layer-types.d.ts +2 -0
  14. package/dist/reports/src/report-index.js +9 -5
  15. package/dist/reports/src/run-compare.d.ts +182 -0
  16. package/dist/reports/src/run-compare.js +329 -0
  17. package/dist/reports/src/test-catalog.d.ts +8 -0
  18. package/dist/reports/src/test-catalog.js +14 -1
  19. package/dist/reports/src/ui-catalog-publish.d.ts +92 -0
  20. package/dist/reports/src/ui-catalog-publish.js +68 -0
  21. package/dist/reports/src/ui-catalog.d.ts +229 -0
  22. package/dist/reports/src/ui-catalog.js +273 -0
  23. package/dist/reports/src/ui-state.d.ts +70 -0
  24. package/dist/reports/src/ui-state.js +66 -0
  25. package/dist/schema/src/api.d.ts +354 -0
  26. package/dist/schema/src/api.js +78 -3
  27. package/dist/server/src/app.js +15 -0
  28. package/dist/server/src/openapi.js +22 -2
  29. package/docs/reference/http-api.md +46 -0
  30. package/docs/reference/playwright.md +63 -0
  31. package/docs/reference/reports.md +942 -4
  32. package/docs/reference/schema.md +33 -0
  33. package/docs/report-contract.md +2 -2
  34. package/docs/rich-evidence.md +5 -0
  35. package/docs/server.md +2 -0
  36. package/docs/ui-catalog.md +173 -0
  37. package/docs/ui.md +45 -1
  38. package/llms-full.txt +276 -3
  39. package/llms.txt +1 -0
  40. package/package.json +2 -1
  41. package/packages/schema/schemas/effective-delta.schema.json +75 -2
  42. package/packages/schema/schemas/effective-evidence.schema.json +75 -2
  43. package/packages/schema/schemas/evidence-page.schema.json +1 -1
  44. package/packages/schema/schemas/layer-rows.schema.json +74 -1
  45. package/packages/schema/schemas/report-run.schema.json +25 -3
  46. package/packages/schema/schemas/report-runs.schema.json +1 -1
  47. package/packages/schema/schemas/review-collection.schema.json +1 -1
  48. package/packages/schema/schemas/review-manifest.schema.json +1 -1
  49. package/packages/schema/schemas/test-catalog.schema.json +1 -1
  50. package/packages/schema/schemas/test-history.schema.json +2 -2
  51. package/packages/server/openapi.json +1559 -175
  52. package/packages/visualizer/src/app/AppShell.tsx +36 -30
  53. package/packages/visualizer/src/app/router.tsx +10 -1
  54. package/packages/visualizer/src/catalog/UiCatalogFilters.tsx +65 -0
  55. package/packages/visualizer/src/catalog/UiCatalogPage.tsx +342 -0
  56. package/packages/visualizer/src/catalog/provider.tsx +25 -0
  57. package/packages/visualizer/src/catalog/search.ts +68 -0
  58. package/packages/visualizer/src/catalog/words.ts +26 -0
  59. package/packages/visualizer/src/components/Header.tsx +17 -4
  60. package/packages/visualizer/src/explorer/ComparePair.tsx +597 -0
  61. package/packages/visualizer/src/explorer/CompareView.tsx +340 -0
  62. package/packages/visualizer/src/explorer/Explorer.tsx +6 -2
  63. package/packages/visualizer/src/explorer/RunsView.tsx +10 -0
  64. package/packages/visualizer/src/explorer/playlist.tsx +1 -1
  65. package/packages/visualizer/src/explorer/search.ts +15 -3
@@ -253,7 +253,7 @@
253
253
  },
254
254
  "available": {
255
255
  "type": "boolean",
256
- "description": "False when the reference names no bytes (no bundle key, address or inline text)"
256
+ "description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
257
257
  },
258
258
  "scope": {
259
259
  "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",
@@ -373,6 +373,79 @@
373
373
  ],
374
374
  "additionalProperties": {}
375
375
  },
376
+ "state": {
377
+ "description": "Only for a check of a `ui-state` or `ui-plan` part: its picture and the facts its producer declared under the `atlas.ui-state` extension. See the UI catalog guide. Never decides a result",
378
+ "type": "object",
379
+ "properties": {
380
+ "route": {
381
+ "type": "string"
382
+ },
383
+ "fixture": {
384
+ "type": "string"
385
+ },
386
+ "cohort": {
387
+ "type": "string"
388
+ },
389
+ "area": {
390
+ "type": "string"
391
+ },
392
+ "flags": {
393
+ "type": "array",
394
+ "items": {
395
+ "type": "string"
396
+ }
397
+ },
398
+ "covers": {
399
+ "type": "array",
400
+ "items": {
401
+ "type": "string"
402
+ }
403
+ },
404
+ "inventory": {
405
+ "description": "A `ui-plan` entry that names a surface of the product's inventory, not a state",
406
+ "type": "boolean"
407
+ },
408
+ "screenshot": {
409
+ "description": "The check's picture: its `screenshot` attachment, else its first image",
410
+ "type": "object",
411
+ "properties": {
412
+ "name": {
413
+ "type": "string"
414
+ },
415
+ "bundleKey": {
416
+ "type": "string"
417
+ },
418
+ "uri": {
419
+ "type": "string"
420
+ },
421
+ "contentType": {
422
+ "type": "string"
423
+ },
424
+ "width": {
425
+ "type": "number"
426
+ },
427
+ "height": {
428
+ "type": "number"
429
+ },
430
+ "bytes": {
431
+ "type": "number"
432
+ },
433
+ "sha256": {
434
+ "type": "string"
435
+ },
436
+ "omitted": {
437
+ "description": "Why the producer left the bytes out",
438
+ "type": "string"
439
+ }
440
+ },
441
+ "required": [
442
+ "name"
443
+ ],
444
+ "additionalProperties": {}
445
+ }
446
+ },
447
+ "additionalProperties": {}
448
+ },
376
449
  "recording": {
377
450
  "description": "What became of the check's expected recording: uploaded, referenced, skipped, unresolved or not-applicable. Independent of `status`",
378
451
  "type": "object",
@@ -161,7 +161,7 @@
161
161
  "type": "integer",
162
162
  "minimum": 0,
163
163
  "maximum": 9007199254740991,
164
- "description": "References that name no bytes"
164
+ "description": "References that name no bytes, or bytes the layer does not hold"
165
165
  }
166
166
  },
167
167
  "required": [
@@ -314,7 +314,7 @@
314
314
  },
315
315
  "available": {
316
316
  "type": "boolean",
317
- "description": "False when the reference names no bytes (no bundle key, address or inline text)"
317
+ "description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
318
318
  },
319
319
  "scope": {
320
320
  "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",
@@ -420,6 +420,28 @@
420
420
  ],
421
421
  "additionalProperties": {}
422
422
  }
423
+ },
424
+ "kind": {
425
+ "description": "The kind of the part that held it. With the producer, environment and parameters it is the condition the result was recorded under. Absent from an older server",
426
+ "type": "string"
427
+ },
428
+ "parameters": {
429
+ "description": "The other choices that made it its own result (a device size, a locale…). Absent when there are none, and from an older server",
430
+ "type": "object",
431
+ "propertyNames": {
432
+ "type": "string"
433
+ },
434
+ "additionalProperties": {
435
+ "type": "string"
436
+ }
437
+ },
438
+ "specRevision": {
439
+ "description": "The fingerprint of its spec file the layer recorded. Absent means not recorded, never \"the same\"",
440
+ "type": "string"
441
+ },
442
+ "recordedTitle": {
443
+ "description": "The title this run's layer gave the check. `title` is the check's newest title in the whole history; this is the wording as recorded. Absent from an older server",
444
+ "type": "string"
423
445
  }
424
446
  },
425
447
  "required": [
@@ -494,7 +516,7 @@
494
516
  "type": "integer",
495
517
  "minimum": 0,
496
518
  "maximum": 9007199254740991,
497
- "description": "References that name no bytes"
519
+ "description": "References that name no bytes, or bytes the layer does not hold"
498
520
  }
499
521
  },
500
522
  "required": [
@@ -169,7 +169,7 @@
169
169
  "type": "integer",
170
170
  "minimum": 0,
171
171
  "maximum": 9007199254740991,
172
- "description": "References that name no bytes"
172
+ "description": "References that name no bytes, or bytes the layer does not hold"
173
173
  }
174
174
  },
175
175
  "required": [
@@ -194,7 +194,7 @@
194
194
  },
195
195
  "available": {
196
196
  "type": "boolean",
197
- "description": "False when the reference names no bytes (no bundle key, address or inline text)"
197
+ "description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
198
198
  },
199
199
  "scope": {
200
200
  "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",
@@ -219,7 +219,7 @@
219
219
  },
220
220
  "available": {
221
221
  "type": "boolean",
222
- "description": "False when the reference names no bytes (no bundle key, address or inline text)"
222
+ "description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
223
223
  },
224
224
  "scope": {
225
225
  "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",
@@ -975,7 +975,7 @@
975
975
  },
976
976
  "available": {
977
977
  "type": "boolean",
978
- "description": "False when the reference names no bytes (no bundle key, address or inline text)"
978
+ "description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
979
979
  },
980
980
  "scope": {
981
981
  "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",
@@ -273,7 +273,7 @@
273
273
  },
274
274
  "available": {
275
275
  "type": "boolean",
276
- "description": "False when the reference names no bytes (no bundle key, address or inline text)"
276
+ "description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
277
277
  },
278
278
  "scope": {
279
279
  "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",
@@ -926,7 +926,7 @@
926
926
  },
927
927
  "available": {
928
928
  "type": "boolean",
929
- "description": "False when the reference names no bytes (no bundle key, address or inline text)"
929
+ "description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
930
930
  },
931
931
  "scope": {
932
932
  "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",