@crvouga/atlas 0.15.0 → 0.17.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 (54) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/reports/src/attachment-files.d.ts +3 -1
  3. package/dist/reports/src/attachment-files.js +14 -4
  4. package/dist/reports/src/evidence-detail.d.ts +19 -2
  5. package/dist/reports/src/evidence-detail.js +63 -14
  6. package/dist/reports/src/evidence-types.d.ts +53 -0
  7. package/dist/reports/src/layer-merge.js +7 -2
  8. package/dist/reports/src/layer-types.d.ts +1 -1
  9. package/dist/reports/src/publish-checks.js +11 -3
  10. package/dist/reports/src/recording-receipt.d.ts +48 -0
  11. package/dist/reports/src/recording-receipt.js +103 -0
  12. package/dist/reports/src/report-cli.d.ts +1 -1
  13. package/dist/reports/src/report-cli.js +20 -2
  14. package/dist/reports/src/report-status.d.ts +2 -0
  15. package/dist/reports/src/report-status.js +17 -1
  16. package/dist/reports/src/reports-explorer-route.d.ts +8 -0
  17. package/dist/reports/src/reports-route.d.ts +8 -0
  18. package/dist/reports/src/test-catalog.d.ts +24 -3
  19. package/dist/reports/src/test-catalog.js +37 -11
  20. package/dist/schema/src/api.d.ts +232 -0
  21. package/dist/schema/src/api.js +35 -6
  22. package/dist/schema/src/cli-results.d.ts +107 -2
  23. package/dist/schema/src/cli-results.js +11 -3
  24. package/dist/schema/src/layer.d.ts +165 -0
  25. package/dist/schema/src/layer.js +72 -1
  26. package/dist/server/src/app.js +3 -2
  27. package/dist/server/src/llms.js +2 -1
  28. package/dist/server/src/openapi.js +2 -1
  29. package/docs/reference/cli.md +5 -0
  30. package/docs/reference/http-api.md +4 -2
  31. package/docs/reference/reports.md +204 -5
  32. package/docs/reference/schema.md +75 -0
  33. package/docs/rich-evidence.md +29 -0
  34. package/docs/server.md +1 -1
  35. package/llms-full.txt +39 -3
  36. package/package.json +1 -1
  37. package/packages/schema/schemas/check-detail.schema.json +20 -0
  38. package/packages/schema/schemas/effective-delta.schema.json +143 -0
  39. package/packages/schema/schemas/effective-evidence.schema.json +143 -0
  40. package/packages/schema/schemas/evidence-page.schema.json +86 -0
  41. package/packages/schema/schemas/layer-rows.schema.json +57 -0
  42. package/packages/schema/schemas/layer.schema.json +153 -0
  43. package/packages/schema/schemas/publish-checks.schema.json +24 -0
  44. package/packages/schema/schemas/publish-result.schema.json +161 -1
  45. package/packages/schema/schemas/report-run.schema.json +71 -0
  46. package/packages/schema/schemas/report-runs.schema.json +38 -1
  47. package/packages/schema/schemas/report-status.schema.json +104 -0
  48. package/packages/schema/schemas/test-catalog.schema.json +41 -0
  49. package/packages/schema/schemas/test-history.schema.json +82 -0
  50. package/packages/server/openapi.json +830 -4
  51. package/packages/visualizer/src/evidence/marks.tsx +16 -0
  52. package/packages/visualizer/src/explorer/RunsView.tsx +128 -10
  53. package/packages/visualizer/src/explorer/catalog.tsx +16 -6
  54. package/packages/visualizer/src/explorer/search.ts +4 -1
@@ -80,6 +80,21 @@ export declare const BackendInfoSchema: z.ZodObject<{
80
80
  live: z.ZodBoolean;
81
81
  available: z.ZodBoolean;
82
82
  }, z.core.$loose>;
83
+ /** One reference to a video held by a layer, check, retry attempt or step, found by the attachment's effective media type. */
84
+ export declare const VideoRefSchema: z.ZodObject<{
85
+ name: z.ZodString;
86
+ owner: z.ZodString;
87
+ attempt: z.ZodOptional<z.ZodNumber>;
88
+ step: z.ZodOptional<z.ZodString>;
89
+ recording: z.ZodOptional<z.ZodString>;
90
+ available: z.ZodBoolean;
91
+ }, z.core.$loose>;
92
+ /** Video references as counts: how many are referenced, how many distinct recordings can be played, how many cannot. */
93
+ export declare const VideoCountsSchema: z.ZodObject<{
94
+ references: z.ZodNumber;
95
+ recordings: z.ZodNumber;
96
+ unavailable: z.ZodNumber;
97
+ }, z.core.$loose>;
83
98
  /** What a result carries beyond its outcome, as counts and short facts. Present only when there is something. */
84
99
  export declare const EvidenceSummarySchema: z.ZodObject<{
85
100
  attachments: z.ZodNumber;
@@ -91,6 +106,14 @@ export declare const EvidenceSummarySchema: z.ZodObject<{
91
106
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
92
107
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
93
108
  roles: z.ZodArray<z.ZodString>;
109
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
110
+ name: z.ZodString;
111
+ owner: z.ZodString;
112
+ attempt: z.ZodOptional<z.ZodNumber>;
113
+ step: z.ZodOptional<z.ZodString>;
114
+ recording: z.ZodOptional<z.ZodString>;
115
+ available: z.ZodBoolean;
116
+ }, z.core.$loose>>>;
94
117
  }, z.core.$loose>;
95
118
  /** A layer as the report shows it: its origin and its checks by status. */
96
119
  export declare const LayerHeaderSchema: z.ZodObject<{
@@ -133,6 +156,22 @@ export declare const LayerHeaderSchema: z.ZodObject<{
133
156
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
134
157
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
135
158
  roles: z.ZodArray<z.ZodString>;
159
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
160
+ name: z.ZodString;
161
+ owner: z.ZodString;
162
+ attempt: z.ZodOptional<z.ZodNumber>;
163
+ step: z.ZodOptional<z.ZodString>;
164
+ recording: z.ZodOptional<z.ZodString>;
165
+ available: z.ZodBoolean;
166
+ }, z.core.$loose>>>;
167
+ }, z.core.$loose>>;
168
+ recordings: z.ZodOptional<z.ZodObject<{
169
+ expected: z.ZodNumber;
170
+ uploaded: z.ZodNumber;
171
+ referenced: z.ZodNumber;
172
+ skipped: z.ZodNumber;
173
+ unresolved: z.ZodNumber;
174
+ notApplicable: z.ZodNumber;
136
175
  }, z.core.$loose>>;
137
176
  }, z.core.$loose>;
138
177
  /** One check of a layer as the report shows it. */
@@ -167,6 +206,18 @@ export declare const LayerRowSchema: z.ZodObject<{
167
206
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
168
207
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
169
208
  roles: z.ZodArray<z.ZodString>;
209
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
210
+ name: z.ZodString;
211
+ owner: z.ZodString;
212
+ attempt: z.ZodOptional<z.ZodNumber>;
213
+ step: z.ZodOptional<z.ZodString>;
214
+ recording: z.ZodOptional<z.ZodString>;
215
+ available: z.ZodBoolean;
216
+ }, z.core.$loose>>>;
217
+ }, z.core.$loose>>;
218
+ recording: z.ZodOptional<z.ZodObject<{
219
+ state: z.ZodString;
220
+ reason: z.ZodOptional<z.ZodString>;
170
221
  }, z.core.$loose>>;
171
222
  }, z.core.$loose>;
172
223
  /** A layer with its checks: the rows of one layer, read apart from its header. */
@@ -203,6 +254,18 @@ export declare const LayerRowsSchema: z.ZodObject<{
203
254
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
204
255
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
205
256
  roles: z.ZodArray<z.ZodString>;
257
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
258
+ name: z.ZodString;
259
+ owner: z.ZodString;
260
+ attempt: z.ZodOptional<z.ZodNumber>;
261
+ step: z.ZodOptional<z.ZodString>;
262
+ recording: z.ZodOptional<z.ZodString>;
263
+ available: z.ZodBoolean;
264
+ }, z.core.$loose>>>;
265
+ }, z.core.$loose>>;
266
+ recording: z.ZodOptional<z.ZodObject<{
267
+ state: z.ZodString;
268
+ reason: z.ZodOptional<z.ZodString>;
206
269
  }, z.core.$loose>>;
207
270
  }, z.core.$loose>>;
208
271
  fingerprints: z.ZodRecord<z.ZodString, z.ZodString>;
@@ -241,6 +304,18 @@ export declare const LayerEvidenceSchema: z.ZodObject<{
241
304
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
242
305
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
243
306
  roles: z.ZodArray<z.ZodString>;
307
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
308
+ name: z.ZodString;
309
+ owner: z.ZodString;
310
+ attempt: z.ZodOptional<z.ZodNumber>;
311
+ step: z.ZodOptional<z.ZodString>;
312
+ recording: z.ZodOptional<z.ZodString>;
313
+ available: z.ZodBoolean;
314
+ }, z.core.$loose>>>;
315
+ }, z.core.$loose>>;
316
+ recording: z.ZodOptional<z.ZodObject<{
317
+ state: z.ZodString;
318
+ reason: z.ZodOptional<z.ZodString>;
244
319
  }, z.core.$loose>>;
245
320
  }, z.core.$loose>>;
246
321
  fingerprints: z.ZodRecord<z.ZodString, z.ZodString>;
@@ -284,6 +359,22 @@ export declare const LayerEvidenceSchema: z.ZodObject<{
284
359
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
285
360
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
286
361
  roles: z.ZodArray<z.ZodString>;
362
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
363
+ name: z.ZodString;
364
+ owner: z.ZodString;
365
+ attempt: z.ZodOptional<z.ZodNumber>;
366
+ step: z.ZodOptional<z.ZodString>;
367
+ recording: z.ZodOptional<z.ZodString>;
368
+ available: z.ZodBoolean;
369
+ }, z.core.$loose>>>;
370
+ }, z.core.$loose>>;
371
+ recordings: z.ZodOptional<z.ZodObject<{
372
+ expected: z.ZodNumber;
373
+ uploaded: z.ZodNumber;
374
+ referenced: z.ZodNumber;
375
+ skipped: z.ZodNumber;
376
+ unresolved: z.ZodNumber;
377
+ notApplicable: z.ZodNumber;
287
378
  }, z.core.$loose>>;
288
379
  }, z.core.$loose>;
289
380
  }, z.core.$loose>;
@@ -327,6 +418,18 @@ export declare const EffectiveEvidenceSchema: z.ZodObject<{
327
418
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
328
419
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
329
420
  roles: z.ZodArray<z.ZodString>;
421
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
422
+ name: z.ZodString;
423
+ owner: z.ZodString;
424
+ attempt: z.ZodOptional<z.ZodNumber>;
425
+ step: z.ZodOptional<z.ZodString>;
426
+ recording: z.ZodOptional<z.ZodString>;
427
+ available: z.ZodBoolean;
428
+ }, z.core.$loose>>>;
429
+ }, z.core.$loose>>;
430
+ recording: z.ZodOptional<z.ZodObject<{
431
+ state: z.ZodString;
432
+ reason: z.ZodOptional<z.ZodString>;
330
433
  }, z.core.$loose>>;
331
434
  }, z.core.$loose>>;
332
435
  fingerprints: z.ZodRecord<z.ZodString, z.ZodString>;
@@ -370,6 +473,22 @@ export declare const EffectiveEvidenceSchema: z.ZodObject<{
370
473
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
371
474
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
372
475
  roles: z.ZodArray<z.ZodString>;
476
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
477
+ name: z.ZodString;
478
+ owner: z.ZodString;
479
+ attempt: z.ZodOptional<z.ZodNumber>;
480
+ step: z.ZodOptional<z.ZodString>;
481
+ recording: z.ZodOptional<z.ZodString>;
482
+ available: z.ZodBoolean;
483
+ }, z.core.$loose>>>;
484
+ }, z.core.$loose>>;
485
+ recordings: z.ZodOptional<z.ZodObject<{
486
+ expected: z.ZodNumber;
487
+ uploaded: z.ZodNumber;
488
+ referenced: z.ZodNumber;
489
+ skipped: z.ZodNumber;
490
+ unresolved: z.ZodNumber;
491
+ notApplicable: z.ZodNumber;
373
492
  }, z.core.$loose>>;
374
493
  }, z.core.$loose>;
375
494
  }, z.core.$loose>>;
@@ -434,6 +553,18 @@ export declare const EffectiveDeltaSchema: z.ZodObject<{
434
553
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
435
554
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
436
555
  roles: z.ZodArray<z.ZodString>;
556
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
557
+ name: z.ZodString;
558
+ owner: z.ZodString;
559
+ attempt: z.ZodOptional<z.ZodNumber>;
560
+ step: z.ZodOptional<z.ZodString>;
561
+ recording: z.ZodOptional<z.ZodString>;
562
+ available: z.ZodBoolean;
563
+ }, z.core.$loose>>>;
564
+ }, z.core.$loose>>;
565
+ recording: z.ZodOptional<z.ZodObject<{
566
+ state: z.ZodString;
567
+ reason: z.ZodOptional<z.ZodString>;
437
568
  }, z.core.$loose>>;
438
569
  }, z.core.$loose>>;
439
570
  fingerprints: z.ZodRecord<z.ZodString, z.ZodString>;
@@ -477,6 +608,22 @@ export declare const EffectiveDeltaSchema: z.ZodObject<{
477
608
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
478
609
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
479
610
  roles: z.ZodArray<z.ZodString>;
611
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
612
+ name: z.ZodString;
613
+ owner: z.ZodString;
614
+ attempt: z.ZodOptional<z.ZodNumber>;
615
+ step: z.ZodOptional<z.ZodString>;
616
+ recording: z.ZodOptional<z.ZodString>;
617
+ available: z.ZodBoolean;
618
+ }, z.core.$loose>>>;
619
+ }, z.core.$loose>>;
620
+ recordings: z.ZodOptional<z.ZodObject<{
621
+ expected: z.ZodNumber;
622
+ uploaded: z.ZodNumber;
623
+ referenced: z.ZodNumber;
624
+ skipped: z.ZodNumber;
625
+ unresolved: z.ZodNumber;
626
+ notApplicable: z.ZodNumber;
480
627
  }, z.core.$loose>>;
481
628
  }, z.core.$loose>;
482
629
  }, z.core.$loose>>;
@@ -544,6 +691,22 @@ export declare const EvidencePageSchema: z.ZodObject<{
544
691
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
545
692
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
546
693
  roles: z.ZodArray<z.ZodString>;
694
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
695
+ name: z.ZodString;
696
+ owner: z.ZodString;
697
+ attempt: z.ZodOptional<z.ZodNumber>;
698
+ step: z.ZodOptional<z.ZodString>;
699
+ recording: z.ZodOptional<z.ZodString>;
700
+ available: z.ZodBoolean;
701
+ }, z.core.$loose>>>;
702
+ }, z.core.$loose>>;
703
+ recordings: z.ZodOptional<z.ZodObject<{
704
+ expected: z.ZodNumber;
705
+ uploaded: z.ZodNumber;
706
+ referenced: z.ZodNumber;
707
+ skipped: z.ZodNumber;
708
+ unresolved: z.ZodNumber;
709
+ notApplicable: z.ZodNumber;
547
710
  }, z.core.$loose>>;
548
711
  }, z.core.$loose>>;
549
712
  cursor: z.ZodNullable<z.ZodString>;
@@ -584,6 +747,7 @@ export declare const CheckDetailSchema: z.ZodObject<{
584
747
  height: z.ZodOptional<z.ZodNumber>;
585
748
  durationMs: z.ZodOptional<z.ZodNumber>;
586
749
  description: z.ZodOptional<z.ZodString>;
750
+ omitted: z.ZodOptional<z.ZodString>;
587
751
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
588
752
  at: z.ZodOptional<z.ZodObject<{
589
753
  step: z.ZodOptional<z.ZodString>;
@@ -649,6 +813,7 @@ export declare const CheckDetailSchema: z.ZodObject<{
649
813
  height: z.ZodOptional<z.ZodNumber>;
650
814
  durationMs: z.ZodOptional<z.ZodNumber>;
651
815
  description: z.ZodOptional<z.ZodString>;
816
+ omitted: z.ZodOptional<z.ZodString>;
652
817
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
653
818
  at: z.ZodOptional<z.ZodObject<{
654
819
  step: z.ZodOptional<z.ZodString>;
@@ -694,6 +859,7 @@ export declare const CheckDetailSchema: z.ZodObject<{
694
859
  height: z.ZodOptional<z.ZodNumber>;
695
860
  durationMs: z.ZodOptional<z.ZodNumber>;
696
861
  description: z.ZodOptional<z.ZodString>;
862
+ omitted: z.ZodOptional<z.ZodString>;
697
863
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
698
864
  at: z.ZodOptional<z.ZodObject<{
699
865
  step: z.ZodOptional<z.ZodString>;
@@ -746,6 +912,7 @@ export declare const CheckDetailSchema: z.ZodObject<{
746
912
  height: z.ZodOptional<z.ZodNumber>;
747
913
  durationMs: z.ZodOptional<z.ZodNumber>;
748
914
  description: z.ZodOptional<z.ZodString>;
915
+ omitted: z.ZodOptional<z.ZodString>;
749
916
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
750
917
  at: z.ZodOptional<z.ZodObject<{
751
918
  step: z.ZodOptional<z.ZodString>;
@@ -793,6 +960,7 @@ export declare const CheckDetailSchema: z.ZodObject<{
793
960
  limit: z.ZodOptional<z.ZodNumber>;
794
961
  }, z.core.$loose>>>;
795
962
  durationMs: z.ZodOptional<z.ZodNumber>;
963
+ recordingExpectation: z.ZodOptional<z.ZodString>;
796
964
  }, z.core.$loose>;
797
965
  run: z.ZodObject<{}, z.core.$loose>;
798
966
  }, z.core.$loose>;
@@ -923,6 +1091,14 @@ export declare const TestResultEntrySchema: z.ZodObject<{
923
1091
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
924
1092
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
925
1093
  roles: z.ZodArray<z.ZodString>;
1094
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
1095
+ name: z.ZodString;
1096
+ owner: z.ZodString;
1097
+ attempt: z.ZodOptional<z.ZodNumber>;
1098
+ step: z.ZodOptional<z.ZodString>;
1099
+ recording: z.ZodOptional<z.ZodString>;
1100
+ available: z.ZodBoolean;
1101
+ }, z.core.$loose>>>;
926
1102
  }, z.core.$loose>>;
927
1103
  }, z.core.$loose>;
928
1104
  /** One test of the catalog: what it is, its current result per environment, and how it has gone over its recorded history. */
@@ -975,6 +1151,14 @@ export declare const TestSummarySchema: z.ZodObject<{
975
1151
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
976
1152
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
977
1153
  roles: z.ZodArray<z.ZodString>;
1154
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
1155
+ name: z.ZodString;
1156
+ owner: z.ZodString;
1157
+ attempt: z.ZodOptional<z.ZodNumber>;
1158
+ step: z.ZodOptional<z.ZodString>;
1159
+ recording: z.ZodOptional<z.ZodString>;
1160
+ available: z.ZodBoolean;
1161
+ }, z.core.$loose>>>;
978
1162
  }, z.core.$loose>>;
979
1163
  }, z.core.$loose>>;
980
1164
  stats: z.ZodObject<{
@@ -1217,6 +1401,14 @@ export declare const TestCatalogSchema: z.ZodObject<{
1217
1401
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
1218
1402
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
1219
1403
  roles: z.ZodArray<z.ZodString>;
1404
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
1405
+ name: z.ZodString;
1406
+ owner: z.ZodString;
1407
+ attempt: z.ZodOptional<z.ZodNumber>;
1408
+ step: z.ZodOptional<z.ZodString>;
1409
+ recording: z.ZodOptional<z.ZodString>;
1410
+ available: z.ZodBoolean;
1411
+ }, z.core.$loose>>>;
1220
1412
  }, z.core.$loose>>;
1221
1413
  }, z.core.$loose>>;
1222
1414
  stats: z.ZodObject<{
@@ -1390,6 +1582,14 @@ export declare const TestHistorySchema: z.ZodObject<{
1390
1582
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
1391
1583
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
1392
1584
  roles: z.ZodArray<z.ZodString>;
1585
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
1586
+ name: z.ZodString;
1587
+ owner: z.ZodString;
1588
+ attempt: z.ZodOptional<z.ZodNumber>;
1589
+ step: z.ZodOptional<z.ZodString>;
1590
+ recording: z.ZodOptional<z.ZodString>;
1591
+ available: z.ZodBoolean;
1592
+ }, z.core.$loose>>>;
1393
1593
  }, z.core.$loose>>;
1394
1594
  }, z.core.$loose>>;
1395
1595
  stats: z.ZodObject<{
@@ -1460,6 +1660,14 @@ export declare const TestHistorySchema: z.ZodObject<{
1460
1660
  artifactTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
1461
1661
  labels: z.ZodRecord<z.ZodString, z.ZodString>;
1462
1662
  roles: z.ZodArray<z.ZodString>;
1663
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
1664
+ name: z.ZodString;
1665
+ owner: z.ZodString;
1666
+ attempt: z.ZodOptional<z.ZodNumber>;
1667
+ step: z.ZodOptional<z.ZodString>;
1668
+ recording: z.ZodOptional<z.ZodString>;
1669
+ available: z.ZodBoolean;
1670
+ }, z.core.$loose>>>;
1463
1671
  }, z.core.$loose>>;
1464
1672
  }, z.core.$loose>>;
1465
1673
  }, z.core.$loose>;
@@ -1495,6 +1703,11 @@ export declare const ReportRunSchema: z.ZodObject<{
1495
1703
  environment: z.ZodNullable<z.ZodString>;
1496
1704
  detail: z.ZodString;
1497
1705
  }, z.core.$loose>>;
1706
+ videos: z.ZodOptional<z.ZodObject<{
1707
+ references: z.ZodNumber;
1708
+ recordings: z.ZodNumber;
1709
+ unavailable: z.ZodNumber;
1710
+ }, z.core.$loose>>;
1498
1711
  }, z.core.$loose>;
1499
1712
  /** `GET /api/reports/runs`: runs, newest first. */
1500
1713
  export declare const RunListSchema: z.ZodObject<{
@@ -1532,7 +1745,13 @@ export declare const RunListSchema: z.ZodObject<{
1532
1745
  environment: z.ZodNullable<z.ZodString>;
1533
1746
  detail: z.ZodString;
1534
1747
  }, z.core.$loose>>;
1748
+ videos: z.ZodOptional<z.ZodObject<{
1749
+ references: z.ZodNumber;
1750
+ recordings: z.ZodNumber;
1751
+ unavailable: z.ZodNumber;
1752
+ }, z.core.$loose>>;
1535
1753
  }, z.core.$loose>>;
1754
+ withVideo: z.ZodOptional<z.ZodNumber>;
1536
1755
  }, z.core.$loose>;
1537
1756
  /** `GET /api/reports/runs/detail`: one run and its last result for every test, environment and producer it recorded. */
1538
1757
  export declare const RunDetailSchema: z.ZodObject<{
@@ -1569,6 +1788,11 @@ export declare const RunDetailSchema: z.ZodObject<{
1569
1788
  environment: z.ZodNullable<z.ZodString>;
1570
1789
  detail: z.ZodString;
1571
1790
  }, z.core.$loose>>;
1791
+ videos: z.ZodOptional<z.ZodObject<{
1792
+ references: z.ZodNumber;
1793
+ recordings: z.ZodNumber;
1794
+ unavailable: z.ZodNumber;
1795
+ }, z.core.$loose>>;
1572
1796
  }, z.core.$loose>;
1573
1797
  results: z.ZodArray<z.ZodObject<{
1574
1798
  key: z.ZodString;
@@ -1587,5 +1811,13 @@ export declare const RunDetailSchema: z.ZodObject<{
1587
1811
  at: z.ZodNumber;
1588
1812
  layer: z.ZodString;
1589
1813
  detail: z.ZodString;
1814
+ videos: z.ZodOptional<z.ZodArray<z.ZodObject<{
1815
+ name: z.ZodString;
1816
+ owner: z.ZodString;
1817
+ attempt: z.ZodOptional<z.ZodNumber>;
1818
+ step: z.ZodOptional<z.ZodString>;
1819
+ recording: z.ZodOptional<z.ZodString>;
1820
+ available: z.ZodBoolean;
1821
+ }, z.core.$loose>>>;
1590
1822
  }, z.core.$loose>>;
1591
1823
  }, z.core.$loose>;
@@ -62,6 +62,21 @@ export const BackendInfoSchema = z.looseObject({
62
62
  live: z.boolean().describe('Always false on a server'),
63
63
  available: z.boolean().describe('False when the backend could not be read; its results are then unknown, never passed')
64
64
  });
65
+ /** One reference to a video held by a layer, check, retry attempt or step, found by the attachment's effective media type. */
66
+ export const VideoRefSchema = z.looseObject({
67
+ name: z.string().describe('The attachment name'),
68
+ owner: z.string().describe('Who holds it: `layer`, `check`, `attempt` or `step`. An open vocabulary: treat an unknown owner as a check'),
69
+ attempt: z.number().int().nonnegative().optional().describe('The retry attempt that holds it, or that holds the step that does'),
70
+ step: z.string().optional().describe('The name of the step that holds it'),
71
+ recording: z.string().optional().describe('What identifies the bytes; references with the same value are one recording. Absent when it cannot be played'),
72
+ available: z.boolean().describe('False when the reference names no bytes (no bundle key, address or inline text)')
73
+ });
74
+ /** Video references as counts: how many are referenced, how many distinct recordings can be played, how many cannot. */
75
+ export const VideoCountsSchema = z.looseObject({
76
+ references: z.number().int().nonnegative().describe('Every reference to a video; identical bytes referenced twice count twice'),
77
+ recordings: z.number().int().nonnegative().describe('Distinct playable recordings'),
78
+ unavailable: z.number().int().nonnegative().describe('References that name no bytes')
79
+ });
65
80
  /** What a result carries beyond its outcome, as counts and short facts. Present only when there is something. */
66
81
  export const EvidenceSummarySchema = z.looseObject({
67
82
  attachments: z.number().int().nonnegative(),
@@ -72,7 +87,8 @@ export const EvidenceSummarySchema = z.looseObject({
72
87
  tags: z.array(z.string()),
73
88
  artifactTags: z.array(z.string()).optional().describe('Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run'),
74
89
  labels: z.record(z.string(), z.string()),
75
- roles: z.array(z.string())
90
+ roles: z.array(z.string()),
91
+ videos: z.array(VideoRefSchema).optional().describe('Its references to videos and who holds each. Absent when it has none, and in reports written before this was recorded')
76
92
  });
77
93
  /** A layer as the report shows it: its origin and its checks by status. */
78
94
  export const LayerHeaderSchema = z.looseObject({
@@ -92,7 +108,11 @@ export const LayerHeaderSchema = z.looseObject({
92
108
  live: z.boolean(),
93
109
  counts: z.record(EvidenceStatusSchema, z.number().int().nonnegative()),
94
110
  execution: z.string(),
95
- evidence: EvidenceSummarySchema.optional()
111
+ evidence: EvidenceSummarySchema.optional(),
112
+ recordings: z.looseObject({
113
+ expected: z.number().int().nonnegative(), uploaded: z.number().int().nonnegative(), referenced: z.number().int().nonnegative(),
114
+ skipped: z.number().int().nonnegative(), unresolved: z.number().int().nonnegative(), notApplicable: z.number().int().nonnegative()
115
+ }).optional().describe('How many of the recordings the layer expected were published. Absent: the layer declared no expectations, so its completeness is unknown, not complete')
96
116
  });
97
117
  /** One check of a layer as the report shows it. */
98
118
  export const LayerRowSchema = z.looseObject({
@@ -106,7 +126,8 @@ export const LayerRowSchema = z.looseObject({
106
126
  testId: z.string().nullable(),
107
127
  variant: z.record(z.string(), z.string()),
108
128
  durationMs: z.number().nullable(),
109
- evidence: EvidenceSummarySchema.optional()
129
+ evidence: EvidenceSummarySchema.optional(),
130
+ recording: z.looseObject({ state: z.string(), reason: z.string().optional() }).optional().describe('What became of the check\'s expected recording: uploaded, referenced, skipped, unresolved or not-applicable. Independent of `status`')
110
131
  });
111
132
  /** A layer with its checks: the rows of one layer, read apart from its header. */
112
133
  export const LayerRowsSchema = z.looseObject({
@@ -374,10 +395,17 @@ export const ReportRunSchema = z.looseObject({
374
395
  producers: z.array(z.string()), environments: z.array(z.string()),
375
396
  layers: z.number().int().nonnegative(), tests: z.number().int().nonnegative(), counts: StatusCountsSchema,
376
397
  totalDurationMs: z.number().nullable(),
377
- failing: z.array(z.looseObject({ key: z.string(), title: z.string(), environment: z.string().nullable(), detail: z.string() }))
398
+ failing: z.array(z.looseObject({ key: z.string(), title: z.string(), environment: z.string().nullable(), detail: z.string() })),
399
+ videos: VideoCountsSchema.optional().describe('Its videos, from its layers and the last result of each test. Absent when it has none or the report carries no video information')
378
400
  });
379
401
  /** `GET /api/reports/runs`: runs, newest first. */
380
- export const RunListSchema = z.looseObject({ schemaVersion: z.literal(1), version: z.string(), total: z.number().int().nonnegative(), runs: z.array(ReportRunSchema) });
402
+ export const RunListSchema = z.looseObject({
403
+ schemaVersion: z.literal(1),
404
+ version: z.string(),
405
+ total: z.number().int().nonnegative().describe('Runs that matched, before `limit`'),
406
+ runs: z.array(ReportRunSchema),
407
+ withVideo: z.number().int().nonnegative().optional().describe('How many of all runs (before `video` and `limit`) have a playable video recording')
408
+ });
381
409
  /** `GET /api/reports/runs/detail`: one run and its last result for every test, environment and producer it recorded. */
382
410
  export const RunDetailSchema = z.looseObject({
383
411
  schemaVersion: z.literal(1),
@@ -385,6 +413,7 @@ export const RunDetailSchema = z.looseObject({
385
413
  run: ReportRunSchema,
386
414
  results: z.array(z.looseObject({
387
415
  key: z.string(), id: z.string(), title: z.string(), specPath: z.string().nullable(), environment: z.string().nullable(), producer: z.string(),
388
- status: EvidenceStatusSchema, durationMs: z.number().nullable(), at: z.number(), layer: z.string(), detail: z.string()
416
+ status: EvidenceStatusSchema, durationMs: z.number().nullable(), at: z.number(), layer: z.string(), detail: z.string(),
417
+ videos: z.array(VideoRefSchema).optional().describe('Every video its evidence references, with who holds it')
389
418
  }))
390
419
  });
@@ -29,10 +29,30 @@ export declare const PublishedLayerSchema: z.ZodObject<{
29
29
  }>>;
30
30
  attachmentFiles: z.ZodNumber;
31
31
  attachmentBytes: z.ZodNumber;
32
+ recordings: z.ZodOptional<z.ZodObject<{
33
+ expected: z.ZodNumber;
34
+ uploaded: z.ZodNumber;
35
+ referenced: z.ZodNumber;
36
+ skipped: z.ZodNumber;
37
+ unresolved: z.ZodNumber;
38
+ notApplicable: z.ZodNumber;
39
+ items: z.ZodArray<z.ZodObject<{
40
+ check: z.ZodString;
41
+ state: z.ZodString;
42
+ reason: z.ZodOptional<z.ZodString>;
43
+ files: z.ZodOptional<z.ZodArray<z.ZodObject<{
44
+ name: z.ZodString;
45
+ state: z.ZodOptional<z.ZodString>;
46
+ bytes: z.ZodOptional<z.ZodNumber>;
47
+ sha256: z.ZodOptional<z.ZodString>;
48
+ reason: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$loose>>>;
50
+ }, z.core.$loose>>;
51
+ }, z.core.$loose>>;
32
52
  }, z.core.$loose>;
33
53
  /** What `atlas report publish --format json` prints. */
34
54
  export declare const PublishResultSchema: z.ZodObject<{
35
- ok: z.ZodLiteral<true>;
55
+ ok: z.ZodBoolean;
36
56
  store: z.ZodString;
37
57
  layer: z.ZodObject<{
38
58
  id: z.ZodString;
@@ -49,6 +69,26 @@ export declare const PublishResultSchema: z.ZodObject<{
49
69
  }>>;
50
70
  attachmentFiles: z.ZodNumber;
51
71
  attachmentBytes: z.ZodNumber;
72
+ recordings: z.ZodOptional<z.ZodObject<{
73
+ expected: z.ZodNumber;
74
+ uploaded: z.ZodNumber;
75
+ referenced: z.ZodNumber;
76
+ skipped: z.ZodNumber;
77
+ unresolved: z.ZodNumber;
78
+ notApplicable: z.ZodNumber;
79
+ items: z.ZodArray<z.ZodObject<{
80
+ check: z.ZodString;
81
+ state: z.ZodString;
82
+ reason: z.ZodOptional<z.ZodString>;
83
+ files: z.ZodOptional<z.ZodArray<z.ZodObject<{
84
+ name: z.ZodString;
85
+ state: z.ZodOptional<z.ZodString>;
86
+ bytes: z.ZodOptional<z.ZodNumber>;
87
+ sha256: z.ZodOptional<z.ZodString>;
88
+ reason: z.ZodOptional<z.ZodString>;
89
+ }, z.core.$loose>>>;
90
+ }, z.core.$loose>>;
91
+ }, z.core.$loose>>;
52
92
  }, z.core.$loose>;
53
93
  specSet: z.ZodOptional<z.ZodObject<{
54
94
  id: z.ZodString;
@@ -61,6 +101,17 @@ export declare const PublishResultSchema: z.ZodObject<{
61
101
  bytes: z.ZodNumber;
62
102
  alreadyPublished: z.ZodBoolean;
63
103
  }, z.core.$loose>>;
104
+ recordings: z.ZodOptional<z.ZodObject<{
105
+ strict: z.ZodBoolean;
106
+ complete: z.ZodBoolean;
107
+ expected: z.ZodNumber;
108
+ uploaded: z.ZodNumber;
109
+ gaps: z.ZodArray<z.ZodObject<{
110
+ check: z.ZodString;
111
+ state: z.ZodString;
112
+ reason: z.ZodOptional<z.ZodString>;
113
+ }, z.core.$loose>>;
114
+ }, z.core.$loose>>;
64
115
  warnings: z.ZodArray<z.ZodString>;
65
116
  }, z.core.$loose>;
66
117
  /** What `atlas report stream --format json` prints when its input ends. */
@@ -288,7 +339,7 @@ export declare const CLI_RESULTS: {
288
339
  readonly command: "atlas report publish";
289
340
  readonly schemaName: "publish-result";
290
341
  readonly schema: z.ZodObject<{
291
- ok: z.ZodLiteral<true>;
342
+ ok: z.ZodBoolean;
292
343
  store: z.ZodString;
293
344
  layer: z.ZodObject<{
294
345
  id: z.ZodString;
@@ -305,6 +356,26 @@ export declare const CLI_RESULTS: {
305
356
  }>>;
306
357
  attachmentFiles: z.ZodNumber;
307
358
  attachmentBytes: z.ZodNumber;
359
+ recordings: z.ZodOptional<z.ZodObject<{
360
+ expected: z.ZodNumber;
361
+ uploaded: z.ZodNumber;
362
+ referenced: z.ZodNumber;
363
+ skipped: z.ZodNumber;
364
+ unresolved: z.ZodNumber;
365
+ notApplicable: z.ZodNumber;
366
+ items: z.ZodArray<z.ZodObject<{
367
+ check: z.ZodString;
368
+ state: z.ZodString;
369
+ reason: z.ZodOptional<z.ZodString>;
370
+ files: z.ZodOptional<z.ZodArray<z.ZodObject<{
371
+ name: z.ZodString;
372
+ state: z.ZodOptional<z.ZodString>;
373
+ bytes: z.ZodOptional<z.ZodNumber>;
374
+ sha256: z.ZodOptional<z.ZodString>;
375
+ reason: z.ZodOptional<z.ZodString>;
376
+ }, z.core.$loose>>>;
377
+ }, z.core.$loose>>;
378
+ }, z.core.$loose>>;
308
379
  }, z.core.$loose>;
309
380
  specSet: z.ZodOptional<z.ZodObject<{
310
381
  id: z.ZodString;
@@ -317,6 +388,17 @@ export declare const CLI_RESULTS: {
317
388
  bytes: z.ZodNumber;
318
389
  alreadyPublished: z.ZodBoolean;
319
390
  }, z.core.$loose>>;
391
+ recordings: z.ZodOptional<z.ZodObject<{
392
+ strict: z.ZodBoolean;
393
+ complete: z.ZodBoolean;
394
+ expected: z.ZodNumber;
395
+ uploaded: z.ZodNumber;
396
+ gaps: z.ZodArray<z.ZodObject<{
397
+ check: z.ZodString;
398
+ state: z.ZodString;
399
+ reason: z.ZodOptional<z.ZodString>;
400
+ }, z.core.$loose>>;
401
+ }, z.core.$loose>>;
320
402
  warnings: z.ZodArray<z.ZodString>;
321
403
  }, z.core.$loose>;
322
404
  };
@@ -425,6 +507,29 @@ export declare const CLI_RESULTS: {
425
507
  runUrl: z.ZodNullable<z.ZodString>;
426
508
  detail: z.ZodString;
427
509
  }, z.core.$loose>>;
510
+ recordings: z.ZodOptional<z.ZodObject<{
511
+ state: z.ZodEnum<{
512
+ unknown: "unknown";
513
+ complete: "complete";
514
+ incomplete: "incomplete";
515
+ "none-expected": "none-expected";
516
+ }>;
517
+ expected: z.ZodNumber;
518
+ uploaded: z.ZodNumber;
519
+ referenced: z.ZodNumber;
520
+ skipped: z.ZodNumber;
521
+ unresolved: z.ZodNumber;
522
+ notApplicable: z.ZodNumber;
523
+ layersWithoutReceipt: z.ZodNumber;
524
+ gaps: z.ZodArray<z.ZodObject<{
525
+ spec: z.ZodNullable<z.ZodString>;
526
+ check: z.ZodString;
527
+ layer: z.ZodString;
528
+ environment: z.ZodNullable<z.ZodString>;
529
+ state: z.ZodString;
530
+ reason: z.ZodOptional<z.ZodString>;
531
+ }, z.core.$loose>>;
532
+ }, z.core.$loose>>;
428
533
  }, z.core.$loose>;
429
534
  };
430
535
  readonly error: {