@crvouga/atlas 0.10.0 → 0.10.2

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 (51) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/dist/reports/src/layer-merge.d.ts +5 -1
  3. package/dist/reports/src/layer-merge.js +17 -2
  4. package/dist/schema/src/common.d.ts +2 -2
  5. package/dist/schema/src/manifest.d.ts +4 -4
  6. package/dist/schema/src/spec.d.ts +6 -6
  7. package/docs/agents.md +25 -0
  8. package/docs/reference/reports.md +2 -0
  9. package/docs/report-contract.md +3 -0
  10. package/llms-full.txt +28 -0
  11. package/package.json +3 -3
  12. package/packages/schema/schemas/check-detail.schema.json +15 -15
  13. package/packages/schema/schemas/checks-result.schema.json +2 -2
  14. package/packages/schema/schemas/command-error.schema.json +4 -4
  15. package/packages/schema/schemas/doctor-result.schema.json +4 -4
  16. package/packages/schema/schemas/effective-delta.schema.json +69 -95
  17. package/packages/schema/schemas/effective-evidence.schema.json +63 -89
  18. package/packages/schema/schemas/evidence-page.schema.json +41 -59
  19. package/packages/schema/schemas/init-plan.schema.json +58 -90
  20. package/packages/schema/schemas/layer-rows.schema.json +17 -29
  21. package/packages/schema/schemas/layer.schema.json +54 -70
  22. package/packages/schema/schemas/live-run-start.schema.json +1 -1
  23. package/packages/schema/schemas/live-run.schema.json +1 -1
  24. package/packages/schema/schemas/merge-result.schema.json +6 -6
  25. package/packages/schema/schemas/outline.schema.json +7 -11
  26. package/packages/schema/schemas/path-record.schema.json +12 -28
  27. package/packages/schema/schemas/problem.schema.json +9 -9
  28. package/packages/schema/schemas/publish-checks.schema.json +27 -43
  29. package/packages/schema/schemas/publish-result.schema.json +16 -24
  30. package/packages/schema/schemas/ready.schema.json +12 -12
  31. package/packages/schema/schemas/report-event.schema.json +22 -28
  32. package/packages/schema/schemas/report-run.schema.json +33 -59
  33. package/packages/schema/schemas/report-runs.schema.json +24 -38
  34. package/packages/schema/schemas/report-status.schema.json +30 -54
  35. package/packages/schema/schemas/run-info.schema.json +9 -21
  36. package/packages/schema/schemas/run-summary.schema.json +6 -14
  37. package/packages/schema/schemas/server-config.schema.json +21 -21
  38. package/packages/schema/schemas/server-editable-settings.schema.json +14 -14
  39. package/packages/schema/schemas/server-info.schema.json +15 -19
  40. package/packages/schema/schemas/server-settings-snapshot.schema.json +28 -28
  41. package/packages/schema/schemas/spec-set.schema.json +16 -24
  42. package/packages/schema/schemas/state-node.schema.json +16 -16
  43. package/packages/schema/schemas/state-record.schema.json +5 -9
  44. package/packages/schema/schemas/store-listing.schema.json +3 -7
  45. package/packages/schema/schemas/store-write-result.schema.json +2 -2
  46. package/packages/schema/schemas/stream-result.schema.json +13 -17
  47. package/packages/schema/schemas/test-catalog.schema.json +109 -151
  48. package/packages/schema/schemas/test-history.schema.json +72 -136
  49. package/packages/schema/schemas/timeline-entry.schema.json +2 -2
  50. package/packages/schema/schemas/transition-record.schema.json +9 -21
  51. package/packages/server/openapi.json +620 -910
@@ -14,23 +14,15 @@
14
14
  "type": "string"
15
15
  },
16
16
  "commit": {
17
- "anyOf": [
18
- {
19
- "type": "string"
20
- },
21
- {
22
- "type": "null"
23
- }
17
+ "type": [
18
+ "string",
19
+ "null"
24
20
  ]
25
21
  },
26
22
  "branch": {
27
- "anyOf": [
28
- {
29
- "type": "string"
30
- },
31
- {
32
- "type": "null"
33
- }
23
+ "type": [
24
+ "string",
25
+ "null"
34
26
  ]
35
27
  },
36
28
  "durationMs": {
@@ -7,8 +7,8 @@
7
7
  "type": "string"
8
8
  },
9
9
  "host": {
10
- "description": "Where to listen. 127.0.0.1 keeps it on this machine; 0.0.0.0 is every interface and needs tokens (or `auth.insecure`)",
11
10
  "default": "127.0.0.1",
11
+ "description": "Where to listen. 127.0.0.1 keeps it on this machine; 0.0.0.0 is every interface and needs tokens (or `auth.insecure`)",
12
12
  "type": "string"
13
13
  },
14
14
  "port": {
@@ -18,29 +18,29 @@
18
18
  "maximum": 65535
19
19
  },
20
20
  "data": {
21
- "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
22
21
  "default": "./atlas-data",
22
+ "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
23
23
  "type": "string"
24
24
  },
25
25
  "backends": {
26
- "description": "Further backends, read together with the data folder: S3, another server, a device lab",
27
26
  "default": [],
27
+ "description": "Further backends, read together with the data folder: S3, another server, a device lab",
28
28
  "type": "array",
29
29
  "items": {
30
30
  "type": "object",
31
31
  "properties": {
32
32
  "id": {
33
- "description": "Lowercase letters, digits and hyphens. Names where a result came from",
34
33
  "type": "string",
35
- "pattern": "^[a-z0-9-]+$"
34
+ "pattern": "^[a-z0-9-]+$",
35
+ "description": "Lowercase letters, digits and hyphens. Names where a result came from"
36
36
  },
37
37
  "label": {
38
38
  "type": "string"
39
39
  },
40
40
  "url": {
41
- "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)",
42
41
  "type": "string",
43
- "minLength": 1
42
+ "minLength": 1,
43
+ "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)"
44
44
  },
45
45
  "write": {
46
46
  "description": "Uploads go here instead of the data folder. At most one backend is the write target",
@@ -73,18 +73,18 @@
73
73
  "type": "object",
74
74
  "properties": {
75
75
  "name": {
76
- "description": "Shown in logs, never the token itself",
77
76
  "type": "string",
78
- "minLength": 1
77
+ "minLength": 1,
78
+ "description": "Shown in logs, never the token itself"
79
79
  },
80
80
  "role": {
81
- "description": "`read` may look. `publish` may also upload. `admin` may also remove scratch objects",
82
81
  "type": "string",
83
82
  "enum": [
84
83
  "read",
85
84
  "publish",
86
85
  "admin"
87
- ]
86
+ ],
87
+ "description": "`read` may look. `publish` may also upload. `admin` may also remove scratch objects"
88
88
  },
89
89
  "token": {
90
90
  "description": "The token. Prefer `tokenEnv`, so the file holds no secret",
@@ -104,13 +104,13 @@
104
104
  }
105
105
  },
106
106
  "anonymousRead": {
107
- "description": "Let anyone look without a token. Uploading still needs one",
108
107
  "default": false,
108
+ "description": "Let anyone look without a token. Uploading still needs one",
109
109
  "type": "boolean"
110
110
  },
111
111
  "insecure": {
112
- "description": "Allow listening on every interface with no tokens at all",
113
112
  "default": false,
113
+ "description": "Allow listening on every interface with no tokens at all",
114
114
  "type": "boolean"
115
115
  }
116
116
  },
@@ -143,8 +143,8 @@
143
143
  "additionalProperties": false
144
144
  },
145
145
  "refreshSeconds": {
146
- "description": "How often the backends are looked at for layers written by something other than this server",
147
146
  "default": 10,
147
+ "description": "How often the backends are looked at for layers written by something other than this server",
148
148
  "type": "number",
149
149
  "minimum": 1
150
150
  },
@@ -157,20 +157,20 @@
157
157
  "type": "object",
158
158
  "properties": {
159
159
  "maxObjectMiB": {
160
- "description": "The largest object an upload may be",
161
160
  "default": 256,
161
+ "description": "The largest object an upload may be",
162
162
  "type": "number",
163
163
  "exclusiveMinimum": 0
164
164
  },
165
165
  "maxJsonMiB": {
166
- "description": "The largest JSON body (a manifest, a checks request)",
167
166
  "default": 32,
167
+ "description": "The largest JSON body (a manifest, a checks request)",
168
168
  "type": "number",
169
169
  "exclusiveMinimum": 0
170
170
  },
171
171
  "maxStreams": {
172
- "description": "Viewers that may be connected for live updates at once",
173
172
  "default": 500,
173
+ "description": "Viewers that may be connected for live updates at once",
174
174
  "type": "integer",
175
175
  "exclusiveMinimum": 0,
176
176
  "maximum": 9007199254740991
@@ -179,28 +179,28 @@
179
179
  "additionalProperties": false
180
180
  },
181
181
  "runTimeoutSeconds": {
182
- "description": "Interrupt a live run after this many seconds without a producer heartbeat",
183
182
  "default": 30,
183
+ "description": "Interrupt a live run after this many seconds without a producer heartbeat",
184
184
  "type": "number",
185
185
  "minimum": 10,
186
186
  "maximum": 3600
187
187
  },
188
188
  "runStallSeconds": {
189
- "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
190
189
  "default": 900,
190
+ "description": "Interrupt after this many seconds without test progress; 0 disables progress expiry",
191
191
  "type": "number",
192
192
  "minimum": 0,
193
193
  "maximum": 86400
194
194
  },
195
195
  "heartbeatSeconds": {
196
- "description": "How often a live connection is touched, so proxies keep it open",
197
196
  "default": 15,
197
+ "description": "How often a live connection is touched, so proxies keep it open",
198
198
  "type": "number",
199
199
  "minimum": 1
200
200
  },
201
201
  "log": {
202
- "description": "One JSON line per request",
203
202
  "default": true,
203
+ "description": "One JSON line per request",
204
204
  "type": "boolean"
205
205
  }
206
206
  },
@@ -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"