@crvouga/atlas 0.10.2 → 0.12.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 (114) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +7 -0
  3. package/dist/reports/src/catalog-health.d.ts +142 -0
  4. package/dist/reports/src/catalog-health.js +257 -0
  5. package/dist/reports/src/test-catalog.d.ts +8 -0
  6. package/dist/reports/src/test-catalog.js +5 -1
  7. package/dist/schema/src/api.d.ts +79 -0
  8. package/dist/schema/src/api.js +50 -0
  9. package/dist/server/src/app.js +9 -0
  10. package/dist/server/src/llms.js +1 -0
  11. package/dist/server/src/openapi.js +18 -2
  12. package/dist/server/src/settings-page.d.ts +4 -4
  13. package/dist/server/src/settings-page.js +17 -78
  14. package/docs/reference/http-api.md +34 -0
  15. package/docs/reference/reports.md +224 -0
  16. package/docs/reference/schema.md +10 -0
  17. package/docs/reference/server.md +4 -4
  18. package/docs/server.md +10 -0
  19. package/docs/ui.md +142 -0
  20. package/docs/workspaces.md +130 -0
  21. package/llms-full.txt +322 -0
  22. package/llms.txt +2 -0
  23. package/package.json +17 -10
  24. package/packages/schema/schemas/catalog-health.schema.json +400 -0
  25. package/packages/server/openapi.json +596 -0
  26. package/packages/visualizer/src/admin/SettingsPage.tsx +456 -0
  27. package/packages/visualizer/src/admin/main.tsx +11 -0
  28. package/packages/visualizer/src/app/AppShell.tsx +62 -38
  29. package/packages/visualizer/src/app/gazetteer.tsx +90 -83
  30. package/packages/visualizer/src/app/router.tsx +33 -15
  31. package/packages/visualizer/src/components/ActivityIndicator.tsx +4 -5
  32. package/packages/visualizer/src/components/DataIssues.tsx +36 -54
  33. package/packages/visualizer/src/components/Header.tsx +197 -125
  34. package/packages/visualizer/src/components/Legend.tsx +13 -41
  35. package/packages/visualizer/src/components/ProjectPicker.tsx +61 -26
  36. package/packages/visualizer/src/components/Screen.tsx +80 -71
  37. package/packages/visualizer/src/components/SpecLogo.tsx +15 -0
  38. package/packages/visualizer/src/components/Status.tsx +20 -34
  39. package/packages/visualizer/src/components/labels.tsx +8 -3
  40. package/packages/visualizer/src/components/spec-logos/APACHE-2.0.txt +206 -0
  41. package/packages/visualizer/src/components/spec-logos/CAMUNDA-MIT.txt +21 -0
  42. package/packages/visualizer/src/components/spec-logos/FILE-ICONS-ISC.txt +13 -0
  43. package/packages/visualizer/src/components/spec-logos/README.md +23 -0
  44. package/packages/visualizer/src/components/spec-logos/SIMPLE-ICONS-CC0.txt +30 -0
  45. package/packages/visualizer/src/components/spec-logos/alloy.svg +1 -0
  46. package/packages/visualizer/src/components/spec-logos/dmn.svg +3 -0
  47. package/packages/visualizer/src/components/spec-logos/gherkin.svg +1 -0
  48. package/packages/visualizer/src/components/spec-logos/openslo.svg +63 -0
  49. package/packages/visualizer/src/components/spec-logos/quint.svg +1 -0
  50. package/packages/visualizer/src/evidence/artifacts.tsx +263 -110
  51. package/packages/visualizer/src/evidence/chart-source.tsx +18 -0
  52. package/packages/visualizer/src/evidence/check-detail.tsx +283 -139
  53. package/packages/visualizer/src/evidence/decision-table.tsx +35 -26
  54. package/packages/visualizer/src/evidence/document-page.tsx +51 -29
  55. package/packages/visualizer/src/evidence/feature-page.tsx +121 -53
  56. package/packages/visualizer/src/evidence/marks.tsx +112 -79
  57. package/packages/visualizer/src/evidence/model-page.tsx +77 -46
  58. package/packages/visualizer/src/evidence/model-trace.tsx +55 -35
  59. package/packages/visualizer/src/evidence/overview.tsx +137 -69
  60. package/packages/visualizer/src/evidence/recording-page.tsx +70 -31
  61. package/packages/visualizer/src/evidence/recording.tsx +135 -68
  62. package/packages/visualizer/src/evidence/snapshot.tsx +99 -43
  63. package/packages/visualizer/src/evidence/source-text.tsx +33 -0
  64. package/packages/visualizer/src/evidence/sources-panel.tsx +138 -144
  65. package/packages/visualizer/src/evidence/spec-header.tsx +52 -36
  66. package/packages/visualizer/src/evidence/spec-index.tsx +61 -32
  67. package/packages/visualizer/src/evidence/spec-page.tsx +56 -25
  68. package/packages/visualizer/src/evidence/test-filter.tsx +38 -14
  69. package/packages/visualizer/src/explorer/Explorer.tsx +688 -261
  70. package/packages/visualizer/src/explorer/ExplorerIndex.tsx +136 -68
  71. package/packages/visualizer/src/explorer/RunsView.tsx +307 -94
  72. package/packages/visualizer/src/explorer/TestDetail.tsx +393 -118
  73. package/packages/visualizer/src/explorer/parts.tsx +35 -13
  74. package/packages/visualizer/src/find/Finder.tsx +106 -90
  75. package/packages/visualizer/src/find/open.ts +17 -20
  76. package/packages/visualizer/src/live/test-progress.tsx +60 -22
  77. package/packages/visualizer/src/looks/Stage.tsx +223 -110
  78. package/packages/visualizer/src/main.tsx +9 -11
  79. package/packages/visualizer/src/map/ChartMap.tsx +125 -69
  80. package/packages/visualizer/src/map/EventEdge.tsx +59 -37
  81. package/packages/visualizer/src/map/map.module.css +12 -546
  82. package/packages/visualizer/src/map/nodes.tsx +124 -70
  83. package/packages/visualizer/src/reachable.test.ts +3 -2
  84. package/packages/visualizer/src/spec-kind.ts +2 -2
  85. package/packages/visualizer/src/ui/grammars/ALLOY-MIT.txt +21 -0
  86. package/packages/visualizer/src/ui/grammars/QUINT-APACHE-2.0.txt +206 -0
  87. package/packages/visualizer/src/ui/grammars/README.md +14 -0
  88. package/packages/visualizer/src/ui/grammars/alloy.json +71 -0
  89. package/packages/visualizer/src/ui/grammars/quint.json +152 -0
  90. package/packages/visualizer/src/ui/highlight.ts +50 -0
  91. package/packages/visualizer/src/ui/theme.tsx +109 -0
  92. package/packages/visualizer/src/views/ChartPage.tsx +46 -26
  93. package/packages/visualizer/src/views/ChartTests.tsx +59 -22
  94. package/packages/visualizer/src/views/ProductPage.tsx +16 -15
  95. package/packages/visualizer/src/views/SidePanel.tsx +241 -131
  96. package/packages/visualizer/src/app/gazetteer.module.css +0 -107
  97. package/packages/visualizer/src/components/ActivityIndicator.module.css +0 -4
  98. package/packages/visualizer/src/components/DataIssues.module.css +0 -136
  99. package/packages/visualizer/src/components/Header.module.css +0 -114
  100. package/packages/visualizer/src/components/Legend.module.css +0 -84
  101. package/packages/visualizer/src/components/Screen.module.css +0 -312
  102. package/packages/visualizer/src/components/Status.module.css +0 -116
  103. package/packages/visualizer/src/components/icons.tsx +0 -156
  104. package/packages/visualizer/src/evidence/artifacts.module.css +0 -213
  105. package/packages/visualizer/src/evidence/evidence.module.css +0 -907
  106. package/packages/visualizer/src/evidence/recording.module.css +0 -460
  107. package/packages/visualizer/src/evidence/sources.module.css +0 -168
  108. package/packages/visualizer/src/evidence/spec-snapshot.tsx +0 -26
  109. package/packages/visualizer/src/explorer/explorer.module.css +0 -1238
  110. package/packages/visualizer/src/find/Finder.module.css +0 -168
  111. package/packages/visualizer/src/looks/stage.module.css +0 -300
  112. package/packages/visualizer/src/styles/global.css +0 -105
  113. package/packages/visualizer/src/styles/tokens.css +0 -80
  114. package/packages/visualizer/src/views/views.module.css +0 -546
@@ -1,546 +0,0 @@
1
- .app {
2
- height: 100%;
3
- display: flex;
4
- flex-direction: column;
5
- }
6
-
7
- .frame {
8
- flex: 1;
9
- min-height: 0;
10
- display: grid;
11
- grid-template-columns: var(--index-w) minmax(0, 1fr);
12
- }
13
-
14
- .main {
15
- min-width: 0;
16
- min-height: 0;
17
- display: flex;
18
- flex-direction: column;
19
- background: var(--bg);
20
- }
21
-
22
- @media (max-width: 760px) {
23
- .app {
24
- height: auto;
25
- min-height: 100%;
26
- }
27
-
28
- .frame {
29
- display: flex;
30
- flex-direction: column;
31
- flex: none;
32
- overflow: visible;
33
- }
34
-
35
- .main {
36
- order: -1;
37
- flex: none;
38
- min-height: auto;
39
- }
40
- }
41
-
42
- .message {
43
- max-width: 40rem;
44
- margin: 4rem auto;
45
- padding: 0 1.25rem;
46
- color: var(--ink-2);
47
- }
48
-
49
- .message h1 {
50
- font-size: 1.4rem;
51
- color: var(--ink);
52
- }
53
-
54
- .button {
55
- display: inline-flex;
56
- font-size: 0.875rem;
57
- font-weight: 600;
58
- border: 1px solid var(--line-2);
59
- background: var(--card);
60
- color: var(--ink);
61
- border-radius: var(--pill);
62
- padding: 0.4rem 0.9rem;
63
- cursor: pointer;
64
- text-decoration: none;
65
- }
66
-
67
- /* Chart page */
68
-
69
- .mapArea {
70
- position: relative;
71
- flex: 1;
72
- min-width: 0;
73
- min-height: 0;
74
- overflow: hidden;
75
- }
76
-
77
- .assumedBadge {
78
- font-size: 0.72rem;
79
- font-weight: 600;
80
- border-radius: var(--pill);
81
- padding: 0.15rem 0.6rem;
82
- color: var(--ink-3);
83
- border: 1px dashed var(--faint);
84
- background: var(--bg-2);
85
- }
86
-
87
- .lead {
88
- margin: 0;
89
- color: var(--ink-2);
90
- }
91
-
92
- .statusNote {
93
- margin: -0.4rem 0 0;
94
- font-size: 0.85rem;
95
- color: var(--muted);
96
- }
97
-
98
- .warn {
99
- margin: 0;
100
- background: var(--failed-soft);
101
- color: var(--failed-ink);
102
- border-radius: var(--radius-sm);
103
- padding: 0.6rem 0.8rem;
104
- font-size: 0.875rem;
105
- }
106
-
107
- .bigShot {
108
- width: min(100%, 20rem);
109
- margin: 0 auto;
110
- }
111
-
112
- .clip {
113
- margin: 0;
114
- }
115
-
116
- .video {
117
- display: block;
118
- width: 100%;
119
- max-height: 420px;
120
- background: #0f172a;
121
- border-radius: 12px;
122
- }
123
-
124
- .clip figcaption,
125
- .clipPending {
126
- font-size: 0.75rem;
127
- color: var(--muted);
128
- margin: 0.35rem 0 0;
129
- }
130
-
131
- .beforeAfter {
132
- display: grid;
133
- grid-template-columns: 1fr 1fr;
134
- gap: 0.75rem;
135
- }
136
-
137
- .beforeAfter figure {
138
- margin: 0;
139
- }
140
-
141
- .beforeAfter figcaption {
142
- font-size: 0.75rem;
143
- color: var(--muted);
144
- margin-top: 0.35rem;
145
- }
146
-
147
- .section {
148
- display: flex;
149
- flex-direction: column;
150
- gap: 0.4rem;
151
- }
152
-
153
- .sectionTitle {
154
- margin: 0;
155
- font-size: 0.9rem;
156
- }
157
-
158
- .checks {
159
- list-style: none;
160
- padding: 0;
161
- margin: 0;
162
- display: flex;
163
- flex-direction: column;
164
- gap: 0.35rem;
165
- font-size: 0.875rem;
166
- }
167
-
168
- .checks li {
169
- display: grid;
170
- grid-template-columns: 1rem 1fr;
171
- gap: 0.4rem;
172
- color: var(--ink-2);
173
- }
174
-
175
- .checks li[data-passed='true'] .checkMark {
176
- color: var(--passed-ink);
177
- }
178
-
179
- .checks li[data-passed='false'] {
180
- color: var(--failed-ink);
181
- }
182
-
183
- .checkMark {
184
- color: var(--faint);
185
- font-weight: 700;
186
- }
187
-
188
- .expected {
189
- display: block;
190
- font-size: 0.78rem;
191
- color: var(--muted);
192
- }
193
-
194
- .notes {
195
- list-style: none;
196
- padding: 0;
197
- margin: 0;
198
- display: flex;
199
- flex-direction: column;
200
- gap: 0.4rem;
201
- }
202
-
203
- .note {
204
- background: var(--bg);
205
- color: var(--ink-3);
206
- border-radius: var(--radius-sm);
207
- padding: 0.6rem 0.8rem;
208
- margin: 0;
209
- font-size: 0.85rem;
210
- }
211
-
212
- .noteMeta {
213
- display: block;
214
- margin-top: 0.3rem;
215
- font-size: 0.78rem;
216
- color: var(--muted);
217
- }
218
-
219
- .eventList {
220
- display: flex;
221
- flex-direction: column;
222
- gap: 0.3rem;
223
- }
224
-
225
- .eventRow {
226
- display: flex;
227
- flex-wrap: wrap;
228
- align-items: baseline;
229
- justify-content: space-between;
230
- gap: 0.4rem 1rem;
231
- text-decoration: none;
232
- color: var(--ink);
233
- font-size: 1rem;
234
- padding: 12px 0;
235
- border-bottom: 1px solid var(--line);
236
- }
237
-
238
- .eventRow[data-status='failed'],
239
- .eventRow[data-status='failed'] .eventTarget {
240
- color: var(--failed);
241
- font-weight: 700;
242
- }
243
-
244
- .eventRow:hover {
245
- background: var(--bg);
246
- }
247
-
248
- .eventTarget {
249
- color: var(--muted);
250
- }
251
-
252
- .inlineChip {
253
- display: inline-flex;
254
- gap: 0.3rem;
255
- align-items: center;
256
- font-size: 0.75rem;
257
- font-weight: 600;
258
- padding: 0.15rem 0.55rem;
259
- border-radius: var(--pill);
260
- border: 1.5px solid;
261
- background: var(--bg);
262
- color: var(--muted);
263
- border-color: var(--line-2);
264
- }
265
-
266
- .inlineChip[data-kind='user'] {
267
- background: var(--user-soft);
268
- color: var(--user-ink);
269
- border-color: var(--user-line);
270
- }
271
- .inlineChip[data-kind='system'] {
272
- background: var(--system-soft);
273
- color: var(--system-ink);
274
- border-color: var(--system-line);
275
- }
276
- .inlineChip[data-kind='time'] {
277
- background: var(--time-soft);
278
- color: var(--time-ink);
279
- border-color: var(--time-line);
280
- }
281
- .inlineChip[data-kind='hand-off'] {
282
- background: var(--handoff-soft);
283
- color: var(--handoff-ink);
284
- border-color: var(--handoff-line);
285
- }
286
- .inlineChip[data-status='not-reached'],
287
- .inlineChip[data-status='not-yet-run'],
288
- .inlineChip[data-status='spec-only'] {
289
- border-style: dashed;
290
- }
291
- .inlineChip[data-status='failed'] {
292
- color: var(--failed-ink);
293
- border-color: var(--failed);
294
- background: var(--failed-soft);
295
- }
296
-
297
- .plateScroll {
298
- height: 100%;
299
- overflow: auto;
300
- padding: 28px 40px 64px;
301
- background: var(--card);
302
- }
303
-
304
- .plateTitle {
305
- margin: 0;
306
- font-size: 1.375rem;
307
- font-weight: 650;
308
- letter-spacing: -0.01em;
309
- line-height: 1.2;
310
- }
311
-
312
- .homeTitle {
313
- margin: 0 0 8px;
314
- font-size: 1.375rem;
315
- letter-spacing: -0.01em;
316
- line-height: 1.2;
317
- }
318
-
319
- .plateHead {
320
- display: flex;
321
- flex-wrap: wrap;
322
- align-items: center;
323
- gap: 0.6rem 1rem;
324
- }
325
-
326
- .plateHead .plateTitle {
327
- flex-basis: 100%;
328
- }
329
-
330
- .plateSplit {
331
- display: grid;
332
- grid-template-columns: minmax(16rem, 20rem) minmax(0, 1fr);
333
- gap: 28px;
334
- align-items: start;
335
- margin-top: 8px;
336
- }
337
-
338
- .mapLink {
339
- display: inline-block;
340
- margin-bottom: 12px;
341
- color: var(--place);
342
- text-decoration: none;
343
- }
344
-
345
- .placeGroup {
346
- margin-top: 28px;
347
- }
348
-
349
- .placeGroup h2 {
350
- margin: 0 0 8px;
351
- font-size: 1rem;
352
- font-weight: 600;
353
- }
354
-
355
- .plateList {
356
- list-style: none;
357
- margin: 12px 0 0;
358
- padding: 0;
359
- }
360
-
361
- .plateList a,
362
- .handOff {
363
- display: flex;
364
- justify-content: space-between;
365
- gap: 12px;
366
- padding: 12px 0;
367
- border-bottom: 1px solid var(--line);
368
- color: inherit;
369
- text-decoration: none;
370
- }
371
-
372
- .plateList a:hover {
373
- color: var(--place);
374
- }
375
-
376
- .mapPlate {
377
- flex: 1;
378
- min-height: 0;
379
- display: flex;
380
- flex-direction: column;
381
- background: var(--card);
382
- overflow: hidden;
383
- }
384
-
385
- .mapHeading {
386
- padding: 20px 40px 12px;
387
- border-bottom: 1px solid var(--line);
388
- }
389
-
390
- .mapHeading h1 {
391
- margin: 0;
392
- font-size: 1.375rem;
393
- font-weight: 650;
394
- letter-spacing: -0.01em;
395
- }
396
-
397
- .mapHeading p {
398
- margin: 6px 0 0;
399
- max-width: 62ch;
400
- color: var(--ink-2);
401
- }
402
-
403
- .mapScope {
404
- display: flex;
405
- flex-wrap: wrap;
406
- gap: 0.35rem 1rem;
407
- align-items: baseline;
408
- }
409
-
410
- .mapScope a {
411
- color: var(--place);
412
- text-decoration: none;
413
- }
414
-
415
- @media (max-width: 900px) {
416
- .plateSplit {
417
- grid-template-columns: 1fr;
418
- }
419
-
420
- .plateScroll {
421
- padding: 20px 16px 48px;
422
- }
423
- }
424
-
425
- .steps {
426
- list-style: none;
427
- padding: 0;
428
- margin: 0;
429
- display: flex;
430
- flex-direction: column;
431
- gap: 0.25rem;
432
- }
433
-
434
- .steps li[data-here='false'] {
435
- opacity: 0.6;
436
- }
437
-
438
- .step {
439
- display: flex;
440
- gap: 0.55rem;
441
- align-items: center;
442
- text-decoration: none;
443
- color: var(--ink);
444
- font-size: 0.82rem;
445
- padding: 0.35rem 0.5rem;
446
- border-radius: var(--radius-sm);
447
- }
448
-
449
- .step:hover {
450
- background: var(--bg);
451
- }
452
-
453
- .stepEvent[data-status='failed'] {
454
- color: var(--failed);
455
- font-weight: 700;
456
- }
457
-
458
- .checkRow {
459
- display: flex;
460
- justify-content: space-between;
461
- gap: 12px;
462
- width: 100%;
463
- padding: 12px 0;
464
- border: 0;
465
- border-bottom: 1px solid var(--line);
466
- background: transparent;
467
- color: inherit;
468
- font: inherit;
469
- text-align: left;
470
- cursor: pointer;
471
- }
472
-
473
- .checkRow[data-status='failed'] {
474
- color: var(--failed);
475
- }
476
-
477
- .stepNo {
478
- background: var(--user);
479
- color: #fff;
480
- border-radius: var(--pill);
481
- min-width: 1.3rem;
482
- height: 1.3rem;
483
- display: inline-grid;
484
- place-items: center;
485
- font-size: 0.7rem;
486
- flex: none;
487
- }
488
-
489
- .dev {
490
- border-top: 1px solid var(--line);
491
- padding-top: 0.75rem;
492
- font-size: 0.82rem;
493
- }
494
-
495
- .devTrigger {
496
- display: inline-flex;
497
- align-items: center;
498
- gap: 0.35rem;
499
- border: 0;
500
- background: transparent;
501
- color: var(--muted);
502
- cursor: pointer;
503
- padding: 0;
504
- }
505
-
506
- .devChevron {
507
- transition: transform 160ms var(--ease);
508
- }
509
-
510
- .devTrigger[data-state='open'] .devChevron {
511
- transform: rotate(90deg);
512
- }
513
-
514
- .devList {
515
- margin: 0.5rem 0 0;
516
- }
517
-
518
- .devList dt {
519
- font-weight: 600;
520
- margin-top: 0.5rem;
521
- }
522
-
523
- .devList dd {
524
- margin: 0.15rem 0 0;
525
- word-break: break-word;
526
- color: var(--ink-3);
527
- }
528
-
529
- .devList ul {
530
- margin: 0;
531
- padding-left: 1rem;
532
- }
533
-
534
- @media (max-width: 760px) {
535
- .plateScroll,
536
- .mapPlate {
537
- height: auto;
538
- overflow: visible;
539
- }
540
-
541
- .mapArea {
542
- flex: none;
543
- height: 70vh;
544
- min-height: 24rem;
545
- }
546
- }