@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
@@ -4,29 +4,29 @@
4
4
  "type": "object",
5
5
  "properties": {
6
6
  "data": {
7
- "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
8
7
  "default": "./atlas-data",
8
+ "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
9
9
  "type": "string"
10
10
  },
11
11
  "backends": {
12
- "description": "Further backends, read together with the data folder: S3, another server, a device lab",
13
12
  "default": [],
13
+ "description": "Further backends, read together with the data folder: S3, another server, a device lab",
14
14
  "type": "array",
15
15
  "items": {
16
16
  "type": "object",
17
17
  "properties": {
18
18
  "id": {
19
- "description": "Lowercase letters, digits and hyphens. Names where a result came from",
20
19
  "type": "string",
21
- "pattern": "^[a-z0-9-]+$"
20
+ "pattern": "^[a-z0-9-]+$",
21
+ "description": "Lowercase letters, digits and hyphens. Names where a result came from"
22
22
  },
23
23
  "label": {
24
24
  "type": "string"
25
25
  },
26
26
  "url": {
27
- "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)",
28
27
  "type": "string",
29
- "minLength": 1
28
+ "minLength": 1,
29
+ "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)"
30
30
  },
31
31
  "write": {
32
32
  "description": "Uploads go here instead of the data folder. At most one backend is the write target",
@@ -67,8 +67,8 @@
67
67
  "additionalProperties": false
68
68
  },
69
69
  "refreshSeconds": {
70
- "description": "How often the backends are looked at for layers written by something other than this server",
71
70
  "default": 10,
71
+ "description": "How often the backends are looked at for layers written by something other than this server",
72
72
  "type": "number",
73
73
  "minimum": 1
74
74
  },
@@ -81,20 +81,20 @@
81
81
  "type": "object",
82
82
  "properties": {
83
83
  "maxObjectMiB": {
84
- "description": "The largest object an upload may be",
85
84
  "default": 256,
85
+ "description": "The largest object an upload may be",
86
86
  "type": "number",
87
87
  "exclusiveMinimum": 0
88
88
  },
89
89
  "maxJsonMiB": {
90
- "description": "The largest JSON body (a manifest, a checks request)",
91
90
  "default": 32,
91
+ "description": "The largest JSON body (a manifest, a checks request)",
92
92
  "type": "number",
93
93
  "exclusiveMinimum": 0
94
94
  },
95
95
  "maxStreams": {
96
- "description": "Viewers that may be connected for live updates at once",
97
96
  "default": 500,
97
+ "description": "Viewers that may be connected for live updates at once",
98
98
  "type": "integer",
99
99
  "exclusiveMinimum": 0,
100
100
  "maximum": 9007199254740991
@@ -103,28 +103,28 @@
103
103
  "additionalProperties": false
104
104
  },
105
105
  "heartbeatSeconds": {
106
- "description": "How often a live connection is touched, so proxies keep it open",
107
106
  "default": 15,
107
+ "description": "How often a live connection is touched, so proxies keep it open",
108
108
  "type": "number",
109
109
  "minimum": 1
110
110
  },
111
111
  "runTimeoutSeconds": {
112
- "description": "Interrupt a live run after this many seconds without a producer heartbeat",
113
112
  "default": 30,
113
+ "description": "Interrupt a live run after this many seconds without a producer heartbeat",
114
114
  "type": "number",
115
115
  "minimum": 10,
116
116
  "maximum": 3600
117
117
  },
118
118
  "runStallSeconds": {
119
- "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
120
119
  "default": 900,
120
+ "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
121
121
  "type": "number",
122
122
  "minimum": 0,
123
123
  "maximum": 86400
124
124
  },
125
125
  "log": {
126
- "description": "One JSON line per request",
127
126
  "default": true,
127
+ "description": "One JSON line per request",
128
128
  "type": "boolean"
129
129
  }
130
130
  },
@@ -9,44 +9,40 @@
9
9
  },
10
10
  "version": {
11
11
  "description": "The @crvouga/atlas version the server runs, or null when it does not know",
12
- "anyOf": [
13
- {
14
- "type": "string"
15
- },
16
- {
17
- "type": "null"
18
- }
12
+ "type": [
13
+ "string",
14
+ "null"
19
15
  ]
20
16
  },
21
17
  "role": {
22
- "description": "What the token of this request may do. A server with no tokens treats everyone as admin",
23
18
  "type": "string",
24
19
  "enum": [
25
20
  "read",
26
21
  "publish",
27
22
  "admin"
28
- ]
23
+ ],
24
+ "description": "What the token of this request may do. A server with no tokens treats everyone as admin"
29
25
  },
30
26
  "open": {
31
- "description": "True when the server has no tokens at all",
32
- "type": "boolean"
27
+ "type": "boolean",
28
+ "description": "True when the server has no tokens at all"
33
29
  },
34
30
  "write": {
35
- "description": "The id of the backend uploads go to",
36
- "type": "string"
31
+ "type": "string",
32
+ "description": "The id of the backend uploads go to"
37
33
  },
38
34
  "ready": {
39
35
  "type": "boolean"
40
36
  },
41
37
  "viewers": {
42
- "description": "Viewers connected to /api/events right now",
43
38
  "type": "integer",
44
39
  "minimum": 0,
45
- "maximum": 9007199254740991
40
+ "maximum": 9007199254740991,
41
+ "description": "Viewers connected to /api/events right now"
46
42
  },
47
43
  "time": {
48
- "description": "The server clock, epoch milliseconds",
49
- "type": "number"
44
+ "type": "number",
45
+ "description": "The server clock, epoch milliseconds"
50
46
  },
51
47
  "backends": {
52
48
  "type": "array",
@@ -86,14 +82,14 @@
86
82
  "maximum": 9007199254740991
87
83
  },
88
84
  "capabilities": {
89
- "description": "Features this server has, by name: `events`, `ingest`, `store`, `checks`, `status`, `effective`. A client checks a name before using what it names",
90
85
  "type": "object",
91
86
  "propertyNames": {
92
87
  "type": "string"
93
88
  },
94
89
  "additionalProperties": {
95
90
  "type": "boolean"
96
- }
91
+ },
92
+ "description": "Features this server has, by name: `events`, `ingest`, `store`, `checks`, `status`, `effective`. A client checks a name before using what it names"
97
93
  }
98
94
  },
99
95
  "required": [
@@ -11,29 +11,29 @@
11
11
  "type": "object",
12
12
  "properties": {
13
13
  "data": {
14
- "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
15
14
  "default": "./atlas-data",
15
+ "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
16
16
  "type": "string"
17
17
  },
18
18
  "backends": {
19
- "description": "Further backends, read together with the data folder: S3, another server, a device lab",
20
19
  "default": [],
20
+ "description": "Further backends, read together with the data folder: S3, another server, a device lab",
21
21
  "type": "array",
22
22
  "items": {
23
23
  "type": "object",
24
24
  "properties": {
25
25
  "id": {
26
- "description": "Lowercase letters, digits and hyphens. Names where a result came from",
27
26
  "type": "string",
28
- "pattern": "^[a-z0-9-]+$"
27
+ "pattern": "^[a-z0-9-]+$",
28
+ "description": "Lowercase letters, digits and hyphens. Names where a result came from"
29
29
  },
30
30
  "label": {
31
31
  "type": "string"
32
32
  },
33
33
  "url": {
34
- "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)",
35
34
  "type": "string",
36
- "minLength": 1
35
+ "minLength": 1,
36
+ "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)"
37
37
  },
38
38
  "write": {
39
39
  "description": "Uploads go here instead of the data folder. At most one backend is the write target",
@@ -74,8 +74,8 @@
74
74
  "additionalProperties": false
75
75
  },
76
76
  "refreshSeconds": {
77
- "description": "How often the backends are looked at for layers written by something other than this server",
78
77
  "default": 10,
78
+ "description": "How often the backends are looked at for layers written by something other than this server",
79
79
  "type": "number",
80
80
  "minimum": 1
81
81
  },
@@ -88,20 +88,20 @@
88
88
  "type": "object",
89
89
  "properties": {
90
90
  "maxObjectMiB": {
91
- "description": "The largest object an upload may be",
92
91
  "default": 256,
92
+ "description": "The largest object an upload may be",
93
93
  "type": "number",
94
94
  "exclusiveMinimum": 0
95
95
  },
96
96
  "maxJsonMiB": {
97
- "description": "The largest JSON body (a manifest, a checks request)",
98
97
  "default": 32,
98
+ "description": "The largest JSON body (a manifest, a checks request)",
99
99
  "type": "number",
100
100
  "exclusiveMinimum": 0
101
101
  },
102
102
  "maxStreams": {
103
- "description": "Viewers that may be connected for live updates at once",
104
103
  "default": 500,
104
+ "description": "Viewers that may be connected for live updates at once",
105
105
  "type": "integer",
106
106
  "exclusiveMinimum": 0,
107
107
  "maximum": 9007199254740991
@@ -110,28 +110,28 @@
110
110
  "additionalProperties": false
111
111
  },
112
112
  "heartbeatSeconds": {
113
- "description": "How often a live connection is touched, so proxies keep it open",
114
113
  "default": 15,
114
+ "description": "How often a live connection is touched, so proxies keep it open",
115
115
  "type": "number",
116
116
  "minimum": 1
117
117
  },
118
118
  "runTimeoutSeconds": {
119
- "description": "Interrupt a live run after this many seconds without a producer heartbeat",
120
119
  "default": 30,
120
+ "description": "Interrupt a live run after this many seconds without a producer heartbeat",
121
121
  "type": "number",
122
122
  "minimum": 10,
123
123
  "maximum": 3600
124
124
  },
125
125
  "runStallSeconds": {
126
- "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
127
126
  "default": 900,
127
+ "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
128
128
  "type": "number",
129
129
  "minimum": 0,
130
130
  "maximum": 86400
131
131
  },
132
132
  "log": {
133
- "description": "One JSON line per request",
134
133
  "default": true,
134
+ "description": "One JSON line per request",
135
135
  "type": "boolean"
136
136
  }
137
137
  },
@@ -141,29 +141,29 @@
141
141
  "type": "object",
142
142
  "properties": {
143
143
  "data": {
144
- "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
145
144
  "default": "./atlas-data",
145
+ "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
146
146
  "type": "string"
147
147
  },
148
148
  "backends": {
149
- "description": "Further backends, read together with the data folder: S3, another server, a device lab",
150
149
  "default": [],
150
+ "description": "Further backends, read together with the data folder: S3, another server, a device lab",
151
151
  "type": "array",
152
152
  "items": {
153
153
  "type": "object",
154
154
  "properties": {
155
155
  "id": {
156
- "description": "Lowercase letters, digits and hyphens. Names where a result came from",
157
156
  "type": "string",
158
- "pattern": "^[a-z0-9-]+$"
157
+ "pattern": "^[a-z0-9-]+$",
158
+ "description": "Lowercase letters, digits and hyphens. Names where a result came from"
159
159
  },
160
160
  "label": {
161
161
  "type": "string"
162
162
  },
163
163
  "url": {
164
- "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)",
165
164
  "type": "string",
166
- "minLength": 1
165
+ "minLength": 1,
166
+ "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)"
167
167
  },
168
168
  "write": {
169
169
  "description": "Uploads go here instead of the data folder. At most one backend is the write target",
@@ -204,8 +204,8 @@
204
204
  "additionalProperties": false
205
205
  },
206
206
  "refreshSeconds": {
207
- "description": "How often the backends are looked at for layers written by something other than this server",
208
207
  "default": 10,
208
+ "description": "How often the backends are looked at for layers written by something other than this server",
209
209
  "type": "number",
210
210
  "minimum": 1
211
211
  },
@@ -218,20 +218,20 @@
218
218
  "type": "object",
219
219
  "properties": {
220
220
  "maxObjectMiB": {
221
- "description": "The largest object an upload may be",
222
221
  "default": 256,
222
+ "description": "The largest object an upload may be",
223
223
  "type": "number",
224
224
  "exclusiveMinimum": 0
225
225
  },
226
226
  "maxJsonMiB": {
227
- "description": "The largest JSON body (a manifest, a checks request)",
228
227
  "default": 32,
228
+ "description": "The largest JSON body (a manifest, a checks request)",
229
229
  "type": "number",
230
230
  "exclusiveMinimum": 0
231
231
  },
232
232
  "maxStreams": {
233
- "description": "Viewers that may be connected for live updates at once",
234
233
  "default": 500,
234
+ "description": "Viewers that may be connected for live updates at once",
235
235
  "type": "integer",
236
236
  "exclusiveMinimum": 0,
237
237
  "maximum": 9007199254740991
@@ -240,28 +240,28 @@
240
240
  "additionalProperties": false
241
241
  },
242
242
  "heartbeatSeconds": {
243
- "description": "How often a live connection is touched, so proxies keep it open",
244
243
  "default": 15,
244
+ "description": "How often a live connection is touched, so proxies keep it open",
245
245
  "type": "number",
246
246
  "minimum": 1
247
247
  },
248
248
  "runTimeoutSeconds": {
249
- "description": "Interrupt a live run after this many seconds without a producer heartbeat",
250
249
  "default": 30,
250
+ "description": "Interrupt a live run after this many seconds without a producer heartbeat",
251
251
  "type": "number",
252
252
  "minimum": 10,
253
253
  "maximum": 3600
254
254
  },
255
255
  "runStallSeconds": {
256
- "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
257
256
  "default": 900,
257
+ "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
258
258
  "type": "number",
259
259
  "minimum": 0,
260
260
  "maximum": 86400
261
261
  },
262
262
  "log": {
263
- "description": "One JSON line per request",
264
263
  "default": true,
264
+ "description": "One JSON line per request",
265
265
  "type": "boolean"
266
266
  }
267
267
  },
@@ -8,34 +8,26 @@
8
8
  "const": 1
9
9
  },
10
10
  "id": {
11
- "description": "SHA-256 of the branch, commit, freshness and the digest of every file: the same specs from the same commit are the same set",
12
11
  "type": "string",
13
- "pattern": "^[0-9a-f]{64}$"
12
+ "pattern": "^[0-9a-f]{64}$",
13
+ "description": "SHA-256 of the branch, commit, freshness and the digest of every file: the same specs from the same commit are the same set"
14
14
  },
15
15
  "branch": {
16
- "anyOf": [
17
- {
18
- "type": "string"
19
- },
20
- {
21
- "type": "null"
22
- }
16
+ "type": [
17
+ "string",
18
+ "null"
23
19
  ]
24
20
  },
25
21
  "sha": {
26
- "anyOf": [
27
- {
28
- "type": "string"
29
- },
30
- {
31
- "type": "null"
32
- }
22
+ "type": [
23
+ "string",
24
+ "null"
33
25
  ]
34
26
  },
35
27
  "recordedAtMs": {
36
- "description": "For a clean checkout, the commit time; for a modified one, when it was published",
37
28
  "type": "number",
38
- "minimum": 0
29
+ "minimum": 0,
30
+ "description": "For a clean checkout, the commit time; for a modified one, when it was published"
39
31
  },
40
32
  "freshness": {
41
33
  "type": "string",
@@ -50,18 +42,18 @@
50
42
  "type": "object",
51
43
  "properties": {
52
44
  "path": {
53
- "description": "`specs/<path inside the specs directory>`, the name a check uses in `specPath`",
54
45
  "type": "string",
55
- "minLength": 1
46
+ "minLength": 1,
47
+ "description": "`specs/<path inside the specs directory>`, the name a check uses in `specPath`"
56
48
  },
57
49
  "digest": {
58
- "description": "SHA-256 of the file. Its text is at layers/specs/blobs/<digest>.txt",
59
50
  "type": "string",
60
- "pattern": "^[0-9a-f]{64}$"
51
+ "pattern": "^[0-9a-f]{64}$",
52
+ "description": "SHA-256 of the file. Its text is at layers/specs/blobs/<digest>.txt"
61
53
  },
62
54
  "fingerprint": {
63
- "description": "The advisory fingerprint layers record, to warn when a spec changed since they ran",
64
- "type": "string"
55
+ "type": "string",
56
+ "description": "The advisory fingerprint layers record, to warn when a spec changed since they ran"
65
57
  },
66
58
  "kind": {
67
59
  "type": "string"
@@ -26,11 +26,11 @@
26
26
  "type": "string"
27
27
  },
28
28
  "events": {
29
- "description": "Business events that happen on entering the state",
30
29
  "type": "array",
31
30
  "items": {
32
31
  "type": "string"
33
- }
32
+ },
33
+ "description": "Business events that happen on entering the state"
34
34
  },
35
35
  "confidence": {
36
36
  "type": "string",
@@ -73,18 +73,17 @@
73
73
  "type": "string"
74
74
  },
75
75
  "quint": {
76
- "description": "Quint model reference",
77
- "type": "string"
76
+ "type": "string",
77
+ "description": "Quint model reference"
78
78
  },
79
79
  "gherkin": {
80
- "description": "Feature files or scenarios that cover the state",
81
80
  "type": "array",
82
81
  "items": {
83
82
  "type": "string"
84
- }
83
+ },
84
+ "description": "Feature files or scenarios that cover the state"
85
85
  },
86
86
  "contracts": {
87
- "description": "Business rules and their exact Given/When/Then examples, copied from the authoritative source",
88
87
  "type": "array",
89
88
  "items": {
90
89
  "type": "object",
@@ -142,15 +141,16 @@
142
141
  "source",
143
142
  "steps"
144
143
  ]
145
- }
144
+ },
145
+ "description": "Business rules and their exact Given/When/Then examples, copied from the authoritative source"
146
146
  },
147
147
  "design": {
148
148
  "type": "object",
149
149
  "properties": {
150
150
  "image": {
151
- "description": "URL or spec-relative path of a design frame",
152
151
  "type": "string",
153
- "minLength": 1
152
+ "minLength": 1,
153
+ "description": "URL or spec-relative path of a design frame"
154
154
  },
155
155
  "url": {
156
156
  "description": "Where the design lives, for example a Figma frame link",
@@ -165,14 +165,13 @@
165
165
  ]
166
166
  },
167
167
  "hints": {
168
- "description": "What the screen shows, for the placeholder sketch",
169
168
  "type": "array",
170
169
  "items": {
171
170
  "type": "string"
172
- }
171
+ },
172
+ "description": "What the screen shows, for the placeholder sketch"
173
173
  },
174
174
  "eventKinds": {
175
- "description": "Chart-level: who or what sends each event; overrides the runner and the guess",
176
175
  "type": "object",
177
176
  "propertyNames": {
178
177
  "type": "string"
@@ -185,17 +184,18 @@
185
184
  "time",
186
185
  "hand-off"
187
186
  ]
188
- }
187
+ },
188
+ "description": "Chart-level: who or what sends each event; overrides the runner and the guess"
189
189
  },
190
190
  "timeEvents": {
191
- "description": "Chart-level: time events and the span each one jumps, for example \"5 minutes\"",
192
191
  "type": "object",
193
192
  "propertyNames": {
194
193
  "type": "string"
195
194
  },
196
195
  "additionalProperties": {
197
196
  "type": "string"
198
- }
197
+ },
198
+ "description": "Chart-level: time events and the span each one jumps, for example \"5 minutes\""
199
199
  }
200
200
  }
201
201
  },
@@ -7,13 +7,9 @@
7
7
  "type": "string"
8
8
  },
9
9
  "chart": {
10
- "anyOf": [
11
- {
12
- "type": "string"
13
- },
14
- {
15
- "type": "null"
16
- }
10
+ "type": [
11
+ "string",
12
+ "null"
17
13
  ]
18
14
  },
19
15
  "description": {
@@ -249,11 +245,11 @@
249
245
  }
250
246
  },
251
247
  "noSignal": {
252
- "description": "No observable signal is mapped yet",
253
248
  "type": "array",
254
249
  "items": {
255
250
  "type": "string"
256
- }
251
+ },
252
+ "description": "No observable signal is mapped yet"
257
253
  },
258
254
  "events": {
259
255
  "description": "The CloudEvents observed during the step",
@@ -11,13 +11,9 @@
11
11
  },
12
12
  "next": {
13
13
  "description": "Pass as `?after=` for the next page; null when there are no more",
14
- "anyOf": [
15
- {
16
- "type": "string"
17
- },
18
- {
19
- "type": "null"
20
- }
14
+ "type": [
15
+ "string",
16
+ "null"
21
17
  ]
22
18
  }
23
19
  },
@@ -11,8 +11,8 @@
11
11
  "type": "string"
12
12
  },
13
13
  "kind": {
14
- "description": "What the server recognised the key as: `layer`, `layer-catalog`, `blob`, `spec-body`, `spec-set`, `spec-catalog`, `run-manifest`, `run-catalog`, `run-file` or `scratch`",
15
- "type": "string"
14
+ "type": "string",
15
+ "description": "What the server recognised the key as: `layer`, `layer-catalog`, `blob`, `spec-body`, `spec-set`, `spec-catalog`, `run-manifest`, `run-catalog`, `run-file` or `scratch`"
16
16
  },
17
17
  "created": {
18
18
  "type": "boolean"
@@ -4,46 +4,42 @@
4
4
  "type": "object",
5
5
  "properties": {
6
6
  "ok": {
7
- "description": "False when any check could not be sent (the exit code is then 1)",
8
- "type": "boolean"
7
+ "type": "boolean",
8
+ "description": "False when any check could not be sent (the exit code is then 1)"
9
9
  },
10
10
  "producer": {
11
11
  "type": "string"
12
12
  },
13
13
  "environment": {
14
- "anyOf": [
15
- {
16
- "type": "string"
17
- },
18
- {
19
- "type": "null"
20
- }
14
+ "type": [
15
+ "string",
16
+ "null"
21
17
  ]
22
18
  },
23
19
  "layers": {
24
- "description": "Layers that arrived",
25
20
  "type": "integer",
26
21
  "minimum": 0,
27
- "maximum": 9007199254740991
22
+ "maximum": 9007199254740991,
23
+ "description": "Layers that arrived"
28
24
  },
29
25
  "checks": {
30
- "description": "Checks that arrived",
31
26
  "type": "integer",
32
27
  "minimum": 0,
33
- "maximum": 9007199254740991
28
+ "maximum": 9007199254740991,
29
+ "description": "Checks that arrived"
34
30
  },
35
31
  "lost": {
36
- "description": "Checks that never arrived",
37
32
  "type": "integer",
38
33
  "minimum": 0,
39
- "maximum": 9007199254740991
34
+ "maximum": 9007199254740991,
35
+ "description": "Checks that never arrived"
40
36
  },
41
37
  "warnings": {
42
- "description": "Input lines that were skipped, and sends that failed",
43
38
  "type": "array",
44
39
  "items": {
45
40
  "type": "string"
46
- }
41
+ },
42
+ "description": "Input lines that were skipped, and sends that failed"
47
43
  }
48
44
  },
49
45
  "required": [