@crvouga/atlas 0.10.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 (45) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/dist/schema/src/common.d.ts +2 -2
  3. package/dist/schema/src/manifest.d.ts +4 -4
  4. package/dist/schema/src/spec.d.ts +6 -6
  5. package/package.json +3 -3
  6. package/packages/schema/schemas/check-detail.schema.json +15 -15
  7. package/packages/schema/schemas/checks-result.schema.json +2 -2
  8. package/packages/schema/schemas/command-error.schema.json +4 -4
  9. package/packages/schema/schemas/doctor-result.schema.json +4 -4
  10. package/packages/schema/schemas/effective-delta.schema.json +69 -95
  11. package/packages/schema/schemas/effective-evidence.schema.json +63 -89
  12. package/packages/schema/schemas/evidence-page.schema.json +41 -59
  13. package/packages/schema/schemas/init-plan.schema.json +58 -90
  14. package/packages/schema/schemas/layer-rows.schema.json +17 -29
  15. package/packages/schema/schemas/layer.schema.json +54 -70
  16. package/packages/schema/schemas/live-run-start.schema.json +1 -1
  17. package/packages/schema/schemas/live-run.schema.json +1 -1
  18. package/packages/schema/schemas/merge-result.schema.json +6 -6
  19. package/packages/schema/schemas/outline.schema.json +7 -11
  20. package/packages/schema/schemas/path-record.schema.json +12 -28
  21. package/packages/schema/schemas/problem.schema.json +9 -9
  22. package/packages/schema/schemas/publish-checks.schema.json +27 -43
  23. package/packages/schema/schemas/publish-result.schema.json +16 -24
  24. package/packages/schema/schemas/ready.schema.json +12 -12
  25. package/packages/schema/schemas/report-event.schema.json +22 -28
  26. package/packages/schema/schemas/report-run.schema.json +33 -59
  27. package/packages/schema/schemas/report-runs.schema.json +24 -38
  28. package/packages/schema/schemas/report-status.schema.json +30 -54
  29. package/packages/schema/schemas/run-info.schema.json +9 -21
  30. package/packages/schema/schemas/run-summary.schema.json +6 -14
  31. package/packages/schema/schemas/server-config.schema.json +21 -21
  32. package/packages/schema/schemas/server-editable-settings.schema.json +14 -14
  33. package/packages/schema/schemas/server-info.schema.json +15 -19
  34. package/packages/schema/schemas/server-settings-snapshot.schema.json +28 -28
  35. package/packages/schema/schemas/spec-set.schema.json +16 -24
  36. package/packages/schema/schemas/state-node.schema.json +16 -16
  37. package/packages/schema/schemas/state-record.schema.json +5 -9
  38. package/packages/schema/schemas/store-listing.schema.json +3 -7
  39. package/packages/schema/schemas/store-write-result.schema.json +2 -2
  40. package/packages/schema/schemas/stream-result.schema.json +13 -17
  41. package/packages/schema/schemas/test-catalog.schema.json +109 -151
  42. package/packages/schema/schemas/test-history.schema.json +72 -136
  43. package/packages/schema/schemas/timeline-entry.schema.json +2 -2
  44. package/packages/schema/schemas/transition-record.schema.json +9 -21
  45. package/packages/server/openapi.json +620 -910
package/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # Changelog: @crvouga/atlas
2
2
 
3
- ## 0.10.0 (2026-10-21)
3
+ ## 0.10.1 (2026-10-24)
4
+
5
+ ### Fixes and improvements
6
+
7
+ - patch Vite and Zod vulnerabilities (#17) ([4d8e389](https://github.com/crvouga/atlas/commit/4d8e389acb31eccfc34736cb83c6b10fdd6e292e))
8
+
9
+ ## 0.10.0 (2026-10-20)
4
10
 
5
11
  ### Features
6
12
 
@@ -33,12 +33,12 @@ export declare const EVENT_KINDS: readonly ["user", "system", "time", "hand-off"
33
33
  * Zod schema for an `EVENT_KINDS` value that first rewrites the legacy value `member` to `user`, so specs written
34
34
  * before the kinds were renamed still parse.
35
35
  */
36
- export declare const EventKindSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
36
+ export declare const EventKindSchema: z.ZodPreprocess<z.ZodEnum<{
37
37
  time: "time";
38
38
  user: "user";
39
39
  system: "system";
40
40
  "hand-off": "hand-off";
41
- }>>;
41
+ }>, unknown>;
42
42
  /** One of `EVENT_KINDS`. */
43
43
  export type EventKind = z.infer<typeof EventKindSchema>;
44
44
  /**
@@ -258,12 +258,12 @@ export declare const MapEdgeSchema: z.ZodObject<{
258
258
  source: z.ZodString;
259
259
  target: z.ZodString;
260
260
  event: z.ZodString;
261
- kind: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
261
+ kind: z.ZodPreprocess<z.ZodEnum<{
262
262
  time: "time";
263
263
  user: "user";
264
264
  system: "system";
265
265
  "hand-off": "hand-off";
266
- }>>;
266
+ }>, unknown>;
267
267
  inScope: z.ZodOptional<z.ZodBoolean>;
268
268
  }, z.core.$strip>;
269
269
  /**
@@ -380,12 +380,12 @@ export declare const TransitionRecordSchema: z.ZodObject<{
380
380
  source: z.ZodString;
381
381
  target: z.ZodOptional<z.ZodNullable<z.ZodString>>;
382
382
  event: z.ZodString;
383
- kind: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
383
+ kind: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
384
384
  time: "time";
385
385
  user: "user";
386
386
  system: "system";
387
387
  "hand-off": "hand-off";
388
- }>>>;
388
+ }>, unknown>>;
389
389
  how: z.ZodOptional<z.ZodNullable<z.ZodString>>;
390
390
  client: z.ZodOptional<z.ZodString>;
391
391
  status: z.ZodEnum<{
@@ -90,12 +90,12 @@ export declare const StateMetaShape: {
90
90
  label: z.ZodOptional<z.ZodString>;
91
91
  }, z.core.$strip>;
92
92
  readonly hints: z.ZodArray<z.ZodString>;
93
- readonly eventKinds: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
93
+ readonly eventKinds: z.ZodRecord<z.ZodString, z.ZodPreprocess<z.ZodEnum<{
94
94
  time: "time";
95
95
  user: "user";
96
96
  system: "system";
97
97
  "hand-off": "hand-off";
98
- }>>>;
98
+ }>, unknown>>;
99
99
  readonly timeEvents: z.ZodRecord<z.ZodString, z.ZodString>;
100
100
  };
101
101
  /** `StateMetaShape` with every field optional: the `meta` of a state or of a whole chart. */
@@ -134,12 +134,12 @@ export declare const StateMetaSchema: z.ZodObject<{
134
134
  label: z.ZodOptional<z.ZodString>;
135
135
  }, z.core.$strip>>;
136
136
  hints: z.ZodOptional<z.ZodArray<z.ZodString>>;
137
- eventKinds: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
137
+ eventKinds: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodPreprocess<z.ZodEnum<{
138
138
  time: "time";
139
139
  user: "user";
140
140
  system: "system";
141
141
  "hand-off": "hand-off";
142
- }>>>>;
142
+ }>, unknown>>>;
143
143
  timeEvents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
144
144
  }, z.core.$strip>;
145
145
  /** A parsed `StateMetaSchema` value. */
@@ -216,12 +216,12 @@ export declare const MachineSchema: z.ZodObject<{
216
216
  label: z.ZodOptional<z.ZodString>;
217
217
  }, z.core.$strip>>;
218
218
  hints: z.ZodOptional<z.ZodArray<z.ZodString>>;
219
- eventKinds: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
219
+ eventKinds: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodPreprocess<z.ZodEnum<{
220
220
  time: "time";
221
221
  user: "user";
222
222
  system: "system";
223
223
  "hand-off": "hand-off";
224
- }>>>>;
224
+ }>, unknown>>>;
225
225
  timeEvents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
226
226
  }, z.core.$strip>>;
227
227
  states: z.ZodRecord<z.ZodString, z.ZodUnknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crvouga/atlas",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "Atlas: specs of any kind, reported as layered evidence. Publish checks from any runner (JUnit, CTRF, a script), combine them across nodes, branches, environments and backends, gate CI on the result, and run statecharts against the real app.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -207,10 +207,10 @@
207
207
  "react-dom": "^19.3.0",
208
208
  "solid-js": "^1.9.15",
209
209
  "tsx": "4.23.13",
210
- "vite": "7.3.6",
210
+ "vite": "7.3.7",
211
211
  "xstate": "5.33.2",
212
212
  "yaml": "^2.9.0",
213
- "zod": "^3.25.76",
213
+ "zod": "^4.6.7",
214
214
  "zustand": "^5.0.15"
215
215
  },
216
216
  "peerDependencies": {
@@ -13,9 +13,9 @@
13
13
  "type": "object",
14
14
  "properties": {
15
15
  "id": {
16
- "description": "The check's stable identity within its producer. The same check must keep the same id in every layer, or layers cannot replace one another",
17
16
  "type": "string",
18
- "minLength": 1
17
+ "minLength": 1,
18
+ "description": "The check's stable identity within its producer. The same check must keep the same id in every layer, or layers cannot replace one another"
19
19
  },
20
20
  "title": {
21
21
  "type": "string"
@@ -30,8 +30,8 @@
30
30
  ]
31
31
  },
32
32
  "detail": {
33
- "description": "Why it failed, or what was measured",
34
33
  "default": "",
34
+ "description": "Why it failed, or what was measured",
35
35
  "type": "string"
36
36
  },
37
37
  "specPath": {
@@ -49,8 +49,8 @@
49
49
  "minLength": 1
50
50
  },
51
51
  "value": {
52
- "description": "A finite number",
53
- "type": "number"
52
+ "type": "number",
53
+ "description": "A finite number"
54
54
  },
55
55
  "unit": {
56
56
  "type": "string"
@@ -215,9 +215,9 @@
215
215
  "type": "object",
216
216
  "properties": {
217
217
  "type": {
218
- "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
219
218
  "type": "string",
220
- "minLength": 1
219
+ "minLength": 1,
220
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…"
221
221
  },
222
222
  "message": {
223
223
  "type": "string"
@@ -443,9 +443,9 @@
443
443
  "type": "object",
444
444
  "properties": {
445
445
  "type": {
446
- "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
447
446
  "type": "string",
448
- "minLength": 1
447
+ "minLength": 1,
448
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…"
449
449
  },
450
450
  "message": {
451
451
  "type": "string"
@@ -708,9 +708,9 @@
708
708
  "type": "object",
709
709
  "properties": {
710
710
  "type": {
711
- "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
712
711
  "type": "string",
713
- "minLength": 1
712
+ "minLength": 1,
713
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…"
714
714
  },
715
715
  "message": {
716
716
  "type": "string"
@@ -908,9 +908,9 @@
908
908
  "type": "object",
909
909
  "properties": {
910
910
  "type": {
911
- "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
912
911
  "type": "string",
913
- "minLength": 1
912
+ "minLength": 1,
913
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…"
914
914
  },
915
915
  "message": {
916
916
  "type": "string"
@@ -1016,10 +1016,10 @@
1016
1016
  "additionalProperties": {}
1017
1017
  },
1018
1018
  "run": {
1019
- "description": "What the run as a whole carries: its logs, links, labels, annotations and extensions",
1020
1019
  "type": "object",
1021
1020
  "properties": {},
1022
- "additionalProperties": {}
1021
+ "additionalProperties": {},
1022
+ "description": "What the run as a whole carries: its logs, links, labels, annotations and extensions"
1023
1023
  }
1024
1024
  },
1025
1025
  "required": [
@@ -8,8 +8,8 @@
8
8
  "const": true
9
9
  },
10
10
  "id": {
11
- "description": "The layer id",
12
- "type": "string"
11
+ "type": "string",
12
+ "description": "The layer id"
13
13
  },
14
14
  "checks": {
15
15
  "type": "integer",
@@ -11,13 +11,13 @@
11
11
  "type": "object",
12
12
  "properties": {
13
13
  "message": {
14
- "description": "What is wrong, and usually what to do about it",
15
- "type": "string"
14
+ "type": "string",
15
+ "description": "What is wrong, and usually what to do about it"
16
16
  },
17
17
  "code": {
18
- "description": "`usage`: the command or its inputs were wrong. Nothing was written",
19
18
  "type": "string",
20
- "const": "usage"
19
+ "const": "usage",
20
+ "description": "`usage`: the command or its inputs were wrong. Nothing was written"
21
21
  }
22
22
  },
23
23
  "required": [
@@ -4,8 +4,8 @@
4
4
  "type": "object",
5
5
  "properties": {
6
6
  "ok": {
7
- "description": "True when every check of every store passed (otherwise the exit code is 1)",
8
- "type": "boolean"
7
+ "type": "boolean",
8
+ "description": "True when every check of every store passed (otherwise the exit code is 1)"
9
9
  },
10
10
  "stores": {
11
11
  "type": "array",
@@ -21,8 +21,8 @@
21
21
  "type": "object",
22
22
  "properties": {
23
23
  "name": {
24
- "description": "`store`, `list`, `contents`, `write`, …",
25
- "type": "string"
24
+ "type": "string",
25
+ "description": "`store`, `list`, `contents`, `write`, …"
26
26
  },
27
27
  "ok": {
28
28
  "type": "boolean"
@@ -4,11 +4,10 @@
4
4
  "type": "object",
5
5
  "properties": {
6
6
  "version": {
7
- "description": "Changes exactly when the report does",
8
- "type": "string"
7
+ "type": "string",
8
+ "description": "Changes exactly when the report does"
9
9
  },
10
10
  "layers": {
11
- "description": "Layers that are new or changed since `base`, whole",
12
11
  "type": "array",
13
12
  "items": {
14
13
  "type": "object",
@@ -22,12 +21,12 @@
22
21
  "type": "object",
23
22
  "properties": {
24
23
  "kind": {
25
- "description": "The kind of the part holding the check. Part of the slot",
26
- "type": "string"
24
+ "type": "string",
25
+ "description": "The kind of the part holding the check. Part of the slot"
27
26
  },
28
27
  "id": {
29
- "description": "The check id. Part of the slot",
30
- "type": "string"
28
+ "type": "string",
29
+ "description": "The check id. Part of the slot"
31
30
  },
32
31
  "title": {
33
32
  "type": "string"
@@ -43,18 +42,14 @@
43
42
  },
44
43
  "specPath": {
45
44
  "description": "The spec the check belongs to, `specs/<path>`, or null",
46
- "anyOf": [
47
- {
48
- "type": "string"
49
- },
50
- {
51
- "type": "null"
52
- }
45
+ "type": [
46
+ "string",
47
+ "null"
53
48
  ]
54
49
  },
55
50
  "detail": {
56
- "description": "Why it has this status; empty when there is nothing to add",
57
- "type": "string"
51
+ "type": "string",
52
+ "description": "Why it has this status; empty when there is nothing to add"
58
53
  },
59
54
  "measurements": {
60
55
  "type": "array",
@@ -83,13 +78,9 @@
83
78
  }
84
79
  },
85
80
  "testId": {
86
- "anyOf": [
87
- {
88
- "type": "string"
89
- },
90
- {
91
- "type": "null"
92
- }
81
+ "type": [
82
+ "string",
83
+ "null"
93
84
  ]
94
85
  },
95
86
  "variant": {
@@ -102,13 +93,9 @@
102
93
  }
103
94
  },
104
95
  "durationMs": {
105
- "anyOf": [
106
- {
107
- "type": "number"
108
- },
109
- {
110
- "type": "null"
111
- }
96
+ "type": [
97
+ "number",
98
+ "null"
112
99
  ]
113
100
  },
114
101
  "evidence": {
@@ -190,96 +177,76 @@
190
177
  }
191
178
  },
192
179
  "fingerprints": {
193
- "description": "Spec path to the fingerprint the layer recorded for it",
194
180
  "type": "object",
195
181
  "propertyNames": {
196
182
  "type": "string"
197
183
  },
198
184
  "additionalProperties": {
199
185
  "type": "string"
200
- }
186
+ },
187
+ "description": "Spec path to the fingerprint the layer recorded for it"
201
188
  },
202
189
  "layer": {
203
190
  "type": "object",
204
191
  "properties": {
205
192
  "id": {
206
- "description": "The layer id: 64 lowercase hex digits, the SHA-256 of its content",
207
- "type": "string"
193
+ "type": "string",
194
+ "description": "The layer id: 64 lowercase hex digits, the SHA-256 of its content"
208
195
  },
209
196
  "backend": {
210
- "description": "The backend it was read from; the one that sorts first when several hold it",
211
- "type": "string"
197
+ "type": "string",
198
+ "description": "The backend it was read from; the one that sorts first when several hold it"
212
199
  },
213
200
  "producer": {
214
- "description": "The suite or tool that made it. Part of the slot",
215
- "type": "string"
201
+ "type": "string",
202
+ "description": "The suite or tool that made it. Part of the slot"
216
203
  },
217
204
  "packageDir": {
218
- "anyOf": [
219
- {
220
- "type": "string"
221
- },
222
- {
223
- "type": "null"
224
- }
205
+ "type": [
206
+ "string",
207
+ "null"
225
208
  ]
226
209
  },
227
210
  "recordedAtMs": {
228
- "description": "When the checks ran, epoch milliseconds. The newest completed result wins its slot",
229
- "type": "number"
211
+ "type": "number",
212
+ "description": "When the checks ran, epoch milliseconds. The newest completed result wins its slot"
230
213
  },
231
214
  "sha": {
232
215
  "description": "The commit it was recorded at. Provenance only",
233
- "anyOf": [
234
- {
235
- "type": "string"
236
- },
237
- {
238
- "type": "null"
239
- }
216
+ "type": [
217
+ "string",
218
+ "null"
240
219
  ]
241
220
  },
242
221
  "branch": {
243
222
  "description": "The branch it was recorded on. Provenance only",
244
- "anyOf": [
245
- {
246
- "type": "string"
247
- },
248
- {
249
- "type": "null"
250
- }
223
+ "type": [
224
+ "string",
225
+ "null"
251
226
  ]
252
227
  },
253
228
  "environment": {
254
229
  "description": "The client it checked, such as `ios`. Part of the slot",
255
- "anyOf": [
256
- {
257
- "type": "string"
258
- },
259
- {
260
- "type": "null"
261
- }
230
+ "type": [
231
+ "string",
232
+ "null"
262
233
  ]
263
234
  },
264
235
  "runUrl": {
265
- "anyOf": [
266
- {
267
- "type": "string"
268
- },
269
- {
270
- "type": "null"
271
- }
236
+ "type": [
237
+ "string",
238
+ "null"
272
239
  ]
273
240
  },
274
241
  "parameters": {
275
- "description": "Other choices that make a result its own slot",
276
242
  "type": "object",
277
243
  "propertyNames": {
278
244
  "type": "string"
279
245
  },
280
246
  "additionalProperties": {
281
247
  "type": "string"
282
- }
248
+ },
249
+ "description": "Other choices that make a result its own slot"
283
250
  },
284
251
  "freshness": {
285
252
  "description": "`modified`: recorded from a checkout with uncommitted changes. `unknown`: origin not captured. Absent: clean",
@@ -290,13 +257,13 @@
290
257
  ]
291
258
  },
292
259
  "recording": {
293
- "description": "Where recorded timelines are read from, or null",
294
260
  "anyOf": [
295
261
  {},
296
262
  {
297
263
  "type": "null"
298
264
  }
299
- ]
265
+ ],
266
+ "description": "Where recorded timelines are read from, or null"
300
267
  },
301
268
  "live": {
302
269
  "type": "boolean"
@@ -316,7 +283,13 @@
316
283
  "type": "integer",
317
284
  "minimum": 0,
318
285
  "maximum": 9007199254740991
319
- }
286
+ },
287
+ "required": [
288
+ "passed",
289
+ "failed",
290
+ "running",
291
+ "not-run"
292
+ ]
320
293
  },
321
294
  "execution": {
322
295
  "type": "string"
@@ -410,7 +383,8 @@
410
383
  "layer"
411
384
  ],
412
385
  "additionalProperties": {}
413
- }
386
+ },
387
+ "description": "Layers that are new or changed since `base`, whole"
414
388
  },
415
389
  "backends": {
416
390
  "type": "array",
@@ -424,12 +398,12 @@
424
398
  "type": "string"
425
399
  },
426
400
  "live": {
427
- "description": "Always false on a server",
428
- "type": "boolean"
401
+ "type": "boolean",
402
+ "description": "Always false on a server"
429
403
  },
430
404
  "available": {
431
- "description": "False when the backend could not be read; its results are then unknown, never passed",
432
- "type": "boolean"
405
+ "type": "boolean",
406
+ "description": "False when the backend could not be read; its results are then unknown, never passed"
433
407
  }
434
408
  },
435
409
  "required": [
@@ -442,37 +416,37 @@
442
416
  }
443
417
  },
444
418
  "notices": {
445
- "description": "What could not be read. A gate treats any notice as unknown, never as passed",
446
419
  "type": "array",
447
420
  "items": {
448
421
  "type": "string"
449
- }
422
+ },
423
+ "description": "What could not be read. A gate treats any notice as unknown, never as passed"
450
424
  },
451
425
  "totalLayers": {
452
- "description": "Every layer read, whether or not it still wins anything",
453
426
  "type": "integer",
454
427
  "minimum": 0,
455
- "maximum": 9007199254740991
428
+ "maximum": 9007199254740991,
429
+ "description": "Every layer read, whether or not it still wins anything"
456
430
  },
457
431
  "active": {
458
- "description": "Always empty on a server; kept for viewers written for live spec runs",
459
432
  "type": "array",
460
- "items": {}
433
+ "items": {},
434
+ "description": "Always empty on a server; kept for viewers written for live spec runs"
461
435
  },
462
436
  "delta": {
463
437
  "type": "boolean",
464
438
  "const": true
465
439
  },
466
440
  "base": {
467
- "description": "The version this applies to",
468
- "type": "string"
441
+ "type": "string",
442
+ "description": "The version this applies to"
469
443
  },
470
444
  "removed": {
471
- "description": "Ids of layers that no longer hold a winner",
472
445
  "type": "array",
473
446
  "items": {
474
447
  "type": "string"
475
- }
448
+ },
449
+ "description": "Ids of layers that no longer hold a winner"
476
450
  }
477
451
  },
478
452
  "required": [