@crvouga/atlas 0.9.0 → 0.10.1

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 (91) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/playwright-reporter/src/evidence.d.ts +122 -0
  3. package/dist/playwright-reporter/src/evidence.js +327 -0
  4. package/dist/playwright-reporter/src/index.d.ts +114 -0
  5. package/dist/playwright-reporter/src/index.js +312 -0
  6. package/dist/reports/src/compose.js +7 -14
  7. package/dist/reports/src/recorded-specs.d.ts +33 -0
  8. package/dist/reports/src/recorded-specs.js +42 -0
  9. package/dist/reports/src/report-index.d.ts +6 -0
  10. package/dist/reports/src/report-index.js +14 -2
  11. package/dist/reports/src/test-catalog.d.ts +386 -0
  12. package/dist/reports/src/test-catalog.js +655 -0
  13. package/dist/schema/src/api.d.ts +585 -0
  14. package/dist/schema/src/api.js +105 -0
  15. package/dist/schema/src/common.d.ts +2 -2
  16. package/dist/schema/src/manifest.d.ts +4 -4
  17. package/dist/schema/src/spec.d.ts +6 -6
  18. package/dist/server/src/app.js +82 -4
  19. package/dist/server/src/llms.js +14 -0
  20. package/dist/server/src/openapi.d.ts +1 -1
  21. package/dist/server/src/openapi.js +60 -3
  22. package/docs/agents.md +1 -0
  23. package/docs/integrating.md +1 -0
  24. package/docs/reference/http-api.md +134 -2
  25. package/docs/reference/playwright-reporter.md +332 -0
  26. package/docs/reference/reports.md +632 -0
  27. package/docs/reference/schema.md +57 -0
  28. package/docs/rich-evidence.md +198 -0
  29. package/docs/server.md +41 -0
  30. package/llms-full.txt +378 -2
  31. package/llms.txt +2 -0
  32. package/package.json +8 -3
  33. package/packages/schema/schemas/check-detail.schema.json +15 -15
  34. package/packages/schema/schemas/checks-result.schema.json +2 -2
  35. package/packages/schema/schemas/command-error.schema.json +4 -4
  36. package/packages/schema/schemas/doctor-result.schema.json +4 -4
  37. package/packages/schema/schemas/effective-delta.schema.json +69 -95
  38. package/packages/schema/schemas/effective-evidence.schema.json +63 -89
  39. package/packages/schema/schemas/evidence-page.schema.json +41 -59
  40. package/packages/schema/schemas/init-plan.schema.json +58 -90
  41. package/packages/schema/schemas/layer-rows.schema.json +17 -29
  42. package/packages/schema/schemas/layer.schema.json +54 -70
  43. package/packages/schema/schemas/live-run-start.schema.json +1 -1
  44. package/packages/schema/schemas/live-run.schema.json +1 -1
  45. package/packages/schema/schemas/merge-result.schema.json +6 -6
  46. package/packages/schema/schemas/outline.schema.json +7 -11
  47. package/packages/schema/schemas/path-record.schema.json +12 -28
  48. package/packages/schema/schemas/problem.schema.json +9 -9
  49. package/packages/schema/schemas/publish-checks.schema.json +27 -43
  50. package/packages/schema/schemas/publish-result.schema.json +16 -24
  51. package/packages/schema/schemas/ready.schema.json +12 -12
  52. package/packages/schema/schemas/report-event.schema.json +22 -28
  53. package/packages/schema/schemas/report-run.schema.json +225 -0
  54. package/packages/schema/schemas/report-runs.schema.json +163 -0
  55. package/packages/schema/schemas/report-status.schema.json +30 -54
  56. package/packages/schema/schemas/run-info.schema.json +9 -21
  57. package/packages/schema/schemas/run-summary.schema.json +6 -14
  58. package/packages/schema/schemas/server-config.schema.json +21 -21
  59. package/packages/schema/schemas/server-editable-settings.schema.json +14 -14
  60. package/packages/schema/schemas/server-info.schema.json +15 -19
  61. package/packages/schema/schemas/server-settings-snapshot.schema.json +28 -28
  62. package/packages/schema/schemas/spec-set.schema.json +16 -24
  63. package/packages/schema/schemas/state-node.schema.json +16 -16
  64. package/packages/schema/schemas/state-record.schema.json +5 -9
  65. package/packages/schema/schemas/store-listing.schema.json +3 -7
  66. package/packages/schema/schemas/store-write-result.schema.json +2 -2
  67. package/packages/schema/schemas/stream-result.schema.json +13 -17
  68. package/packages/schema/schemas/test-catalog.schema.json +1135 -0
  69. package/packages/schema/schemas/test-history.schema.json +632 -0
  70. package/packages/schema/schemas/timeline-entry.schema.json +2 -2
  71. package/packages/schema/schemas/transition-record.schema.json +9 -21
  72. package/packages/server/openapi.json +4417 -1382
  73. package/packages/visualizer/src/app/AppShell.tsx +7 -3
  74. package/packages/visualizer/src/app/router.tsx +26 -3
  75. package/packages/visualizer/src/components/Header.tsx +2 -2
  76. package/packages/visualizer/src/evidence/evidence-context.tsx +10 -1
  77. package/packages/visualizer/src/explorer/Explorer.tsx +433 -0
  78. package/packages/visualizer/src/explorer/ExplorerIndex.tsx +120 -0
  79. package/packages/visualizer/src/explorer/RunsView.tsx +164 -0
  80. package/packages/visualizer/src/explorer/TestDetail.tsx +214 -0
  81. package/packages/visualizer/src/explorer/catalog.tsx +274 -0
  82. package/packages/visualizer/src/explorer/explorer.module.css +1238 -0
  83. package/packages/visualizer/src/explorer/groups.test.ts +87 -0
  84. package/packages/visualizer/src/explorer/groups.ts +126 -0
  85. package/packages/visualizer/src/explorer/navigate.ts +36 -0
  86. package/packages/visualizer/src/explorer/parts.tsx +59 -0
  87. package/packages/visualizer/src/explorer/search.ts +97 -0
  88. package/packages/visualizer/src/find/Finder.tsx +2 -0
  89. package/packages/visualizer/src/find/corpus.ts +13 -6
  90. package/packages/visualizer/src/find/rank.ts +2 -0
  91. package/packages/visualizer/src/evidence/project-home.tsx +0 -45
@@ -0,0 +1,632 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/test-history.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "schemaVersion": {
7
+ "type": "number",
8
+ "const": 1
9
+ },
10
+ "version": {
11
+ "type": "string"
12
+ },
13
+ "test": {
14
+ "type": "object",
15
+ "properties": {
16
+ "key": {
17
+ "type": "string",
18
+ "description": "The test's identity, `JSON.stringify([specPath, id])`. Pass it to `/api/reports/tests/history?key=`"
19
+ },
20
+ "id": {
21
+ "type": "string"
22
+ },
23
+ "title": {
24
+ "type": "string"
25
+ },
26
+ "specPath": {
27
+ "type": [
28
+ "string",
29
+ "null"
30
+ ]
31
+ },
32
+ "spec": {
33
+ "anyOf": [
34
+ {
35
+ "type": "object",
36
+ "properties": {
37
+ "path": {
38
+ "type": "string"
39
+ },
40
+ "title": {
41
+ "type": "string"
42
+ },
43
+ "domain": {
44
+ "type": "string"
45
+ },
46
+ "kind": {
47
+ "type": "string"
48
+ }
49
+ },
50
+ "required": [
51
+ "path",
52
+ "title",
53
+ "domain",
54
+ "kind"
55
+ ],
56
+ "additionalProperties": {}
57
+ },
58
+ {
59
+ "type": "null"
60
+ }
61
+ ],
62
+ "description": "The spec it belongs to: recorded by its layers, published in a spec set, or derived from the path"
63
+ },
64
+ "status": {
65
+ "type": "string",
66
+ "enum": [
67
+ "passed",
68
+ "failed",
69
+ "running",
70
+ "not-run"
71
+ ],
72
+ "description": "The worst current result across environments: failed, then running, then not-run, then passed"
73
+ },
74
+ "environments": {
75
+ "type": "array",
76
+ "items": {
77
+ "type": "string"
78
+ }
79
+ },
80
+ "producers": {
81
+ "type": "array",
82
+ "items": {
83
+ "type": "string"
84
+ }
85
+ },
86
+ "outcomes": {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "object",
90
+ "properties": {
91
+ "at": {
92
+ "type": "number",
93
+ "description": "When it was recorded, epoch milliseconds"
94
+ },
95
+ "status": {
96
+ "type": "string",
97
+ "enum": [
98
+ "passed",
99
+ "failed",
100
+ "running",
101
+ "not-run"
102
+ ]
103
+ },
104
+ "durationMs": {
105
+ "description": "How long it took, or null when the producer did not measure it",
106
+ "type": [
107
+ "number",
108
+ "null"
109
+ ]
110
+ },
111
+ "environment": {
112
+ "description": "The client it checked, such as `desktop-web` or `ios`",
113
+ "type": [
114
+ "string",
115
+ "null"
116
+ ]
117
+ },
118
+ "producer": {
119
+ "type": "string"
120
+ },
121
+ "kind": {
122
+ "type": "string"
123
+ },
124
+ "parameters": {
125
+ "type": "object",
126
+ "propertyNames": {
127
+ "type": "string"
128
+ },
129
+ "additionalProperties": {
130
+ "type": "string"
131
+ }
132
+ },
133
+ "branch": {
134
+ "type": [
135
+ "string",
136
+ "null"
137
+ ]
138
+ },
139
+ "sha": {
140
+ "type": [
141
+ "string",
142
+ "null"
143
+ ]
144
+ },
145
+ "runUrl": {
146
+ "type": [
147
+ "string",
148
+ "null"
149
+ ]
150
+ },
151
+ "run": {
152
+ "type": "string",
153
+ "description": "The key of the run it belongs to, as `GET /api/reports/runs` lists it"
154
+ },
155
+ "layer": {
156
+ "type": "string",
157
+ "description": "The id of the layer that recorded it"
158
+ },
159
+ "backend": {
160
+ "type": "string"
161
+ },
162
+ "detail": {
163
+ "type": "string",
164
+ "description": "Why it has its status, at most 500 characters"
165
+ },
166
+ "evidence": {
167
+ "type": "object",
168
+ "properties": {
169
+ "attachments": {
170
+ "type": "integer",
171
+ "minimum": 0,
172
+ "maximum": 9007199254740991
173
+ },
174
+ "steps": {
175
+ "type": "integer",
176
+ "minimum": 0,
177
+ "maximum": 9007199254740991
178
+ },
179
+ "annotations": {
180
+ "type": "integer",
181
+ "minimum": 0,
182
+ "maximum": 9007199254740991
183
+ },
184
+ "attempts": {
185
+ "type": "integer",
186
+ "minimum": 0,
187
+ "maximum": 9007199254740991
188
+ },
189
+ "links": {
190
+ "type": "integer",
191
+ "minimum": 0,
192
+ "maximum": 9007199254740991
193
+ },
194
+ "tags": {
195
+ "type": "array",
196
+ "items": {
197
+ "type": "string"
198
+ }
199
+ },
200
+ "labels": {
201
+ "type": "object",
202
+ "propertyNames": {
203
+ "type": "string"
204
+ },
205
+ "additionalProperties": {
206
+ "type": "string"
207
+ }
208
+ },
209
+ "roles": {
210
+ "type": "array",
211
+ "items": {
212
+ "type": "string"
213
+ }
214
+ }
215
+ },
216
+ "required": [
217
+ "attachments",
218
+ "steps",
219
+ "annotations",
220
+ "attempts",
221
+ "links",
222
+ "tags",
223
+ "labels",
224
+ "roles"
225
+ ],
226
+ "additionalProperties": {}
227
+ }
228
+ },
229
+ "required": [
230
+ "at",
231
+ "status",
232
+ "durationMs",
233
+ "environment",
234
+ "producer",
235
+ "kind",
236
+ "parameters",
237
+ "branch",
238
+ "sha",
239
+ "runUrl",
240
+ "run",
241
+ "layer",
242
+ "backend",
243
+ "detail"
244
+ ],
245
+ "additionalProperties": {}
246
+ },
247
+ "description": "The current result per producer, environment and parameter set, newest first"
248
+ },
249
+ "stats": {
250
+ "type": "object",
251
+ "properties": {
252
+ "results": {
253
+ "type": "integer",
254
+ "minimum": 0,
255
+ "maximum": 9007199254740991
256
+ },
257
+ "passed": {
258
+ "type": "integer",
259
+ "minimum": 0,
260
+ "maximum": 9007199254740991
261
+ },
262
+ "failed": {
263
+ "type": "integer",
264
+ "minimum": 0,
265
+ "maximum": 9007199254740991
266
+ },
267
+ "passRate": {
268
+ "description": "passed / (passed + failed), or null with no completed result",
269
+ "type": [
270
+ "number",
271
+ "null"
272
+ ]
273
+ },
274
+ "flaky": {
275
+ "type": "boolean"
276
+ },
277
+ "flakyReason": {
278
+ "type": "string"
279
+ },
280
+ "flips": {
281
+ "type": "integer",
282
+ "minimum": 0,
283
+ "maximum": 9007199254740991
284
+ },
285
+ "durations": {
286
+ "anyOf": [
287
+ {
288
+ "type": "object",
289
+ "properties": {
290
+ "count": {
291
+ "type": "integer",
292
+ "minimum": 0,
293
+ "maximum": 9007199254740991
294
+ },
295
+ "totalMs": {
296
+ "type": "number"
297
+ },
298
+ "avgMs": {
299
+ "type": "number"
300
+ },
301
+ "p50Ms": {
302
+ "type": "number"
303
+ },
304
+ "p95Ms": {
305
+ "type": "number"
306
+ },
307
+ "minMs": {
308
+ "type": "number"
309
+ },
310
+ "maxMs": {
311
+ "type": "number"
312
+ },
313
+ "lastMs": {
314
+ "type": "number"
315
+ }
316
+ },
317
+ "required": [
318
+ "count",
319
+ "totalMs",
320
+ "avgMs",
321
+ "p50Ms",
322
+ "p95Ms",
323
+ "minMs",
324
+ "maxMs",
325
+ "lastMs"
326
+ ],
327
+ "additionalProperties": {}
328
+ },
329
+ {
330
+ "type": "null"
331
+ }
332
+ ]
333
+ },
334
+ "firstSeenMs": {
335
+ "type": [
336
+ "number",
337
+ "null"
338
+ ]
339
+ },
340
+ "lastSeenMs": {
341
+ "type": [
342
+ "number",
343
+ "null"
344
+ ]
345
+ },
346
+ "lastPassedAtMs": {
347
+ "type": [
348
+ "number",
349
+ "null"
350
+ ]
351
+ },
352
+ "lastFailedAtMs": {
353
+ "type": [
354
+ "number",
355
+ "null"
356
+ ]
357
+ },
358
+ "runs": {
359
+ "type": "integer",
360
+ "minimum": 0,
361
+ "maximum": 9007199254740991
362
+ },
363
+ "branches": {
364
+ "type": "array",
365
+ "items": {
366
+ "type": "string"
367
+ }
368
+ }
369
+ },
370
+ "required": [
371
+ "results",
372
+ "passed",
373
+ "failed",
374
+ "passRate",
375
+ "flaky",
376
+ "flakyReason",
377
+ "flips",
378
+ "durations",
379
+ "firstSeenMs",
380
+ "lastSeenMs",
381
+ "lastPassedAtMs",
382
+ "lastFailedAtMs",
383
+ "runs",
384
+ "branches"
385
+ ],
386
+ "additionalProperties": {}
387
+ },
388
+ "tags": {
389
+ "type": "array",
390
+ "items": {
391
+ "type": "string"
392
+ }
393
+ },
394
+ "labels": {
395
+ "type": "object",
396
+ "propertyNames": {
397
+ "type": "string"
398
+ },
399
+ "additionalProperties": {
400
+ "type": "string"
401
+ }
402
+ },
403
+ "evidence": {
404
+ "type": "object",
405
+ "properties": {
406
+ "attachments": {
407
+ "type": "integer",
408
+ "minimum": 0,
409
+ "maximum": 9007199254740991
410
+ },
411
+ "steps": {
412
+ "type": "integer",
413
+ "minimum": 0,
414
+ "maximum": 9007199254740991
415
+ },
416
+ "attempts": {
417
+ "type": "integer",
418
+ "minimum": 0,
419
+ "maximum": 9007199254740991
420
+ },
421
+ "roles": {
422
+ "type": "array",
423
+ "items": {
424
+ "type": "string"
425
+ }
426
+ }
427
+ },
428
+ "required": [
429
+ "attachments",
430
+ "steps",
431
+ "attempts",
432
+ "roles"
433
+ ],
434
+ "additionalProperties": {}
435
+ },
436
+ "lastRecordedAtMs": {
437
+ "type": "number"
438
+ },
439
+ "live": {
440
+ "type": "boolean"
441
+ }
442
+ },
443
+ "required": [
444
+ "key",
445
+ "id",
446
+ "title",
447
+ "specPath",
448
+ "spec",
449
+ "status",
450
+ "environments",
451
+ "producers",
452
+ "outcomes",
453
+ "stats",
454
+ "tags",
455
+ "labels",
456
+ "evidence",
457
+ "lastRecordedAtMs",
458
+ "live"
459
+ ],
460
+ "additionalProperties": {}
461
+ },
462
+ "history": {
463
+ "type": "array",
464
+ "items": {
465
+ "type": "object",
466
+ "properties": {
467
+ "at": {
468
+ "type": "number",
469
+ "description": "When it was recorded, epoch milliseconds"
470
+ },
471
+ "status": {
472
+ "type": "string",
473
+ "enum": [
474
+ "passed",
475
+ "failed",
476
+ "running",
477
+ "not-run"
478
+ ]
479
+ },
480
+ "durationMs": {
481
+ "description": "How long it took, or null when the producer did not measure it",
482
+ "type": [
483
+ "number",
484
+ "null"
485
+ ]
486
+ },
487
+ "environment": {
488
+ "description": "The client it checked, such as `desktop-web` or `ios`",
489
+ "type": [
490
+ "string",
491
+ "null"
492
+ ]
493
+ },
494
+ "producer": {
495
+ "type": "string"
496
+ },
497
+ "kind": {
498
+ "type": "string"
499
+ },
500
+ "parameters": {
501
+ "type": "object",
502
+ "propertyNames": {
503
+ "type": "string"
504
+ },
505
+ "additionalProperties": {
506
+ "type": "string"
507
+ }
508
+ },
509
+ "branch": {
510
+ "type": [
511
+ "string",
512
+ "null"
513
+ ]
514
+ },
515
+ "sha": {
516
+ "type": [
517
+ "string",
518
+ "null"
519
+ ]
520
+ },
521
+ "runUrl": {
522
+ "type": [
523
+ "string",
524
+ "null"
525
+ ]
526
+ },
527
+ "run": {
528
+ "type": "string",
529
+ "description": "The key of the run it belongs to, as `GET /api/reports/runs` lists it"
530
+ },
531
+ "layer": {
532
+ "type": "string",
533
+ "description": "The id of the layer that recorded it"
534
+ },
535
+ "backend": {
536
+ "type": "string"
537
+ },
538
+ "detail": {
539
+ "type": "string",
540
+ "description": "Why it has its status, at most 500 characters"
541
+ },
542
+ "evidence": {
543
+ "type": "object",
544
+ "properties": {
545
+ "attachments": {
546
+ "type": "integer",
547
+ "minimum": 0,
548
+ "maximum": 9007199254740991
549
+ },
550
+ "steps": {
551
+ "type": "integer",
552
+ "minimum": 0,
553
+ "maximum": 9007199254740991
554
+ },
555
+ "annotations": {
556
+ "type": "integer",
557
+ "minimum": 0,
558
+ "maximum": 9007199254740991
559
+ },
560
+ "attempts": {
561
+ "type": "integer",
562
+ "minimum": 0,
563
+ "maximum": 9007199254740991
564
+ },
565
+ "links": {
566
+ "type": "integer",
567
+ "minimum": 0,
568
+ "maximum": 9007199254740991
569
+ },
570
+ "tags": {
571
+ "type": "array",
572
+ "items": {
573
+ "type": "string"
574
+ }
575
+ },
576
+ "labels": {
577
+ "type": "object",
578
+ "propertyNames": {
579
+ "type": "string"
580
+ },
581
+ "additionalProperties": {
582
+ "type": "string"
583
+ }
584
+ },
585
+ "roles": {
586
+ "type": "array",
587
+ "items": {
588
+ "type": "string"
589
+ }
590
+ }
591
+ },
592
+ "required": [
593
+ "attachments",
594
+ "steps",
595
+ "annotations",
596
+ "attempts",
597
+ "links",
598
+ "tags",
599
+ "labels",
600
+ "roles"
601
+ ],
602
+ "additionalProperties": {}
603
+ }
604
+ },
605
+ "required": [
606
+ "at",
607
+ "status",
608
+ "durationMs",
609
+ "environment",
610
+ "producer",
611
+ "kind",
612
+ "parameters",
613
+ "branch",
614
+ "sha",
615
+ "runUrl",
616
+ "run",
617
+ "layer",
618
+ "backend",
619
+ "detail"
620
+ ],
621
+ "additionalProperties": {}
622
+ }
623
+ }
624
+ },
625
+ "required": [
626
+ "schemaVersion",
627
+ "version",
628
+ "test",
629
+ "history"
630
+ ],
631
+ "additionalProperties": {}
632
+ }
@@ -4,9 +4,9 @@
4
4
  "type": "object",
5
5
  "properties": {
6
6
  "atMs": {
7
- "description": "Milliseconds from the start of the clip",
8
7
  "type": "number",
9
- "minimum": 0
8
+ "minimum": 0,
9
+ "description": "Milliseconds from the start of the clip"
10
10
  },
11
11
  "kind": {
12
12
  "type": "string",
@@ -10,13 +10,9 @@
10
10
  "type": "string"
11
11
  },
12
12
  "target": {
13
- "anyOf": [
14
- {
15
- "type": "string"
16
- },
17
- {
18
- "type": "null"
19
- }
13
+ "type": [
14
+ "string",
15
+ "null"
20
16
  ]
21
17
  },
22
18
  "event": {
@@ -32,13 +28,9 @@
32
28
  ]
33
29
  },
34
30
  "how": {
35
- "anyOf": [
36
- {
37
- "type": "string"
38
- },
39
- {
40
- "type": "null"
41
- }
31
+ "type": [
32
+ "string",
33
+ "null"
42
34
  ]
43
35
  },
44
36
  "client": {
@@ -101,13 +93,9 @@
101
93
  "items": {}
102
94
  },
103
95
  "reason": {
104
- "anyOf": [
105
- {
106
- "type": "string"
107
- },
108
- {
109
- "type": "null"
110
- }
96
+ "type": [
97
+ "string",
98
+ "null"
111
99
  ]
112
100
  },
113
101
  "reachedBy": {