@crvouga/atlas 1.8.0 → 1.9.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.
- package/CHANGELOG.md +7 -1
- package/dist/reports/src/evidence-detail.js +6 -1
- package/dist/reports/src/evidence-types.d.ts +2 -0
- package/dist/reports/src/reliability.d.ts +181 -0
- package/dist/reports/src/reliability.js +294 -0
- package/dist/reports/src/report-index.js +1 -1
- package/dist/reports/src/test-catalog.d.ts +8 -2
- package/dist/reports/src/test-catalog.js +10 -5
- package/dist/schema/src/api.d.ts +226 -0
- package/dist/schema/src/api.js +51 -0
- package/dist/server/src/app.js +15 -0
- package/dist/server/src/llms.js +1 -0
- package/dist/server/src/openapi.js +25 -2
- package/docs/reference/http-api.md +48 -0
- package/docs/reference/reports.md +272 -1
- package/docs/reference/schema.md +11 -0
- package/docs/server.md +18 -0
- package/docs/ui.md +10 -0
- package/llms-full.txt +76 -0
- package/package.json +1 -1
- package/packages/schema/schemas/effective-delta.schema.json +26 -0
- package/packages/schema/schemas/effective-evidence.schema.json +26 -0
- package/packages/schema/schemas/evidence-page.schema.json +13 -0
- package/packages/schema/schemas/layer-rows.schema.json +13 -0
- package/packages/schema/schemas/test-catalog.schema.json +17 -0
- package/packages/schema/schemas/test-history.schema.json +34 -0
- package/packages/schema/schemas/test-reliability.schema.json +629 -0
- package/packages/server/openapi.json +1722 -568
- package/packages/visualizer/src/explorer/Reliability.tsx +337 -0
- package/packages/visualizer/src/explorer/TestDetail.tsx +3 -0
- package/packages/visualizer/src/explorer/catalog.tsx +1 -1
- package/packages/visualizer/src/explorer/search.ts +36 -0
|
@@ -4112,14 +4112,14 @@
|
|
|
4112
4112
|
}
|
|
4113
4113
|
}
|
|
4114
4114
|
},
|
|
4115
|
-
"/api/reports/
|
|
4115
|
+
"/api/reports/tests/reliability": {
|
|
4116
4116
|
"get": {
|
|
4117
|
-
"operationId": "
|
|
4117
|
+
"operationId": "getTestReliability",
|
|
4118
4118
|
"tags": [
|
|
4119
4119
|
"Report"
|
|
4120
4120
|
],
|
|
4121
|
-
"summary": "
|
|
4122
|
-
"description": "
|
|
4121
|
+
"summary": "How reliable one test is in a scope, and how that was counted",
|
|
4122
|
+
"description": "A success rate for one test that says what it counted. The snapshots one run recorded for one producer, environment and parameter set (running, finished, enriched) are one independent execution; its last word counts once with the tries it recorded. `eventual` is the share of executions that passed in the end, `firstAttempt` the share whose first try passed (over executions that recorded their tries; the rest are `unrecordedAttempts`, never assumed to have passed first time).\n\nChoose the scope with `environment`, `producer`, `parameter` (`key=value`), `branch`, `sha`, `specRevision`, `since` and `until`; executions elsewhere never count. By default only the newest recorded spec revision counts and earlier ones appear under `historical`; send `revision=any` to pool them. Only `passed` and `failed` executions are trials: `not-run` and unfinished ones are listed under `excluded` and never counted as a pass. `sample` is `none`, `insufficient` (fewer than `minimumExecutions`) or `sufficient`, a count only: `notes` say when environments, producers or branches are pooled, failed cases were published again, or history is bounded to the newest 100 results. `executions` is the denominator, open to inspection. The interval states its assumptions. This is not a production failure probability. Send `format=markdown` for Markdown.\n\nRole needed: `read`.",
|
|
4123
4123
|
"x-atlas-role": "read",
|
|
4124
4124
|
"security": [
|
|
4125
4125
|
{
|
|
@@ -4130,56 +4130,117 @@
|
|
|
4130
4130
|
}
|
|
4131
4131
|
],
|
|
4132
4132
|
"parameters": [
|
|
4133
|
+
{
|
|
4134
|
+
"required": true,
|
|
4135
|
+
"name": "key",
|
|
4136
|
+
"in": "query",
|
|
4137
|
+
"description": "The test's `key` from `/api/reports/tests`.",
|
|
4138
|
+
"example": "[\"specs/checkout/pay.feature\",\"Pay with a card\"]",
|
|
4139
|
+
"schema": {
|
|
4140
|
+
"type": "string"
|
|
4141
|
+
}
|
|
4142
|
+
},
|
|
4133
4143
|
{
|
|
4134
4144
|
"required": false,
|
|
4135
|
-
"name": "
|
|
4145
|
+
"name": "environment",
|
|
4136
4146
|
"in": "query",
|
|
4137
|
-
"description": "
|
|
4138
|
-
"example": "
|
|
4147
|
+
"description": "Environments or devices to count. Comma-separated.",
|
|
4148
|
+
"example": "phone",
|
|
4149
|
+
"schema": {
|
|
4150
|
+
"type": "string"
|
|
4151
|
+
}
|
|
4152
|
+
},
|
|
4153
|
+
{
|
|
4154
|
+
"required": false,
|
|
4155
|
+
"name": "producer",
|
|
4156
|
+
"in": "query",
|
|
4157
|
+
"description": "Producers to count. Comma-separated.",
|
|
4158
|
+
"schema": {
|
|
4159
|
+
"type": "string"
|
|
4160
|
+
}
|
|
4161
|
+
},
|
|
4162
|
+
{
|
|
4163
|
+
"required": false,
|
|
4164
|
+
"name": "parameter",
|
|
4165
|
+
"in": "query",
|
|
4166
|
+
"description": "Parameter choices `key=value`; all must match. Comma-separated.",
|
|
4167
|
+
"example": "device=small",
|
|
4168
|
+
"schema": {
|
|
4169
|
+
"type": "string"
|
|
4170
|
+
}
|
|
4171
|
+
},
|
|
4172
|
+
{
|
|
4173
|
+
"required": false,
|
|
4174
|
+
"name": "branch",
|
|
4175
|
+
"in": "query",
|
|
4176
|
+
"description": "Branches to count. Comma-separated.",
|
|
4177
|
+
"schema": {
|
|
4178
|
+
"type": "string"
|
|
4179
|
+
}
|
|
4180
|
+
},
|
|
4181
|
+
{
|
|
4182
|
+
"required": false,
|
|
4183
|
+
"name": "sha",
|
|
4184
|
+
"in": "query",
|
|
4185
|
+
"description": "Commits: a full id or a prefix of at least seven characters. Comma-separated.",
|
|
4186
|
+
"schema": {
|
|
4187
|
+
"type": "string"
|
|
4188
|
+
}
|
|
4189
|
+
},
|
|
4190
|
+
{
|
|
4191
|
+
"required": false,
|
|
4192
|
+
"name": "specRevision",
|
|
4193
|
+
"in": "query",
|
|
4194
|
+
"description": "Only executions recorded against these spec fingerprints (overrides `revision`). Comma-separated.",
|
|
4195
|
+
"schema": {
|
|
4196
|
+
"type": "string"
|
|
4197
|
+
}
|
|
4198
|
+
},
|
|
4199
|
+
{
|
|
4200
|
+
"required": false,
|
|
4201
|
+
"name": "revision",
|
|
4202
|
+
"in": "query",
|
|
4203
|
+
"description": "`any` pools every spec revision; otherwise only the newest recorded one counts.",
|
|
4139
4204
|
"schema": {
|
|
4140
4205
|
"type": "string",
|
|
4141
|
-
"
|
|
4142
|
-
|
|
4206
|
+
"enum": [
|
|
4207
|
+
"current",
|
|
4208
|
+
"any"
|
|
4209
|
+
]
|
|
4143
4210
|
}
|
|
4144
|
-
}
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
"
|
|
4149
|
-
"
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
}
|
|
4154
|
-
}
|
|
4211
|
+
},
|
|
4212
|
+
{
|
|
4213
|
+
"required": false,
|
|
4214
|
+
"name": "since",
|
|
4215
|
+
"in": "query",
|
|
4216
|
+
"description": "Only executions at or after this time: epoch milliseconds or a date.",
|
|
4217
|
+
"example": "2026-01-01",
|
|
4218
|
+
"schema": {
|
|
4219
|
+
"type": "string"
|
|
4155
4220
|
}
|
|
4156
4221
|
},
|
|
4157
|
-
|
|
4158
|
-
"
|
|
4159
|
-
"
|
|
4160
|
-
|
|
4161
|
-
|
|
4162
|
-
|
|
4163
|
-
|
|
4164
|
-
}
|
|
4222
|
+
{
|
|
4223
|
+
"required": false,
|
|
4224
|
+
"name": "until",
|
|
4225
|
+
"in": "query",
|
|
4226
|
+
"description": "Only executions at or before this time: epoch milliseconds or a date.",
|
|
4227
|
+
"schema": {
|
|
4228
|
+
"type": "string"
|
|
4165
4229
|
}
|
|
4166
|
-
}
|
|
4167
|
-
}
|
|
4168
|
-
},
|
|
4169
|
-
"post": {
|
|
4170
|
-
"operationId": "editArtifactTags",
|
|
4171
|
-
"tags": [
|
|
4172
|
-
"Report"
|
|
4173
|
-
],
|
|
4174
|
-
"summary": "Tag or untag one attachment after upload",
|
|
4175
|
-
"description": "Records one edit of the reviewer tags of one attachment, by the name of the publish (or admin) token that sends it. It adds an immutable entry to the audit trail and changes nothing else: not the layer, not the movie, not any result. The tags it removes are reviewer tags only; a producer's tags are part of the layer and stay. A reader-only token, a browser sign-in box and an anonymous reader are refused. Name the attachment as `artifactRef` does (`id:<id>`, else `key:<bundleKey>`, else `name:<name>`).\n\nRole needed: `publish`.",
|
|
4176
|
-
"x-atlas-role": "publish",
|
|
4177
|
-
"security": [
|
|
4230
|
+
},
|
|
4178
4231
|
{
|
|
4179
|
-
"
|
|
4180
|
-
|
|
4181
|
-
|
|
4182
|
-
|
|
4232
|
+
"required": false,
|
|
4233
|
+
"name": "format",
|
|
4234
|
+
"in": "query",
|
|
4235
|
+
"description": "`markdown` for Markdown instead of JSON.",
|
|
4236
|
+
"schema": {
|
|
4237
|
+
"type": "string",
|
|
4238
|
+
"enum": [
|
|
4239
|
+
"json",
|
|
4240
|
+
"markdown"
|
|
4241
|
+
]
|
|
4242
|
+
}
|
|
4243
|
+
},
|
|
4183
4244
|
{
|
|
4184
4245
|
"required": false,
|
|
4185
4246
|
"name": "project",
|
|
@@ -4193,30 +4254,22 @@
|
|
|
4193
4254
|
}
|
|
4194
4255
|
}
|
|
4195
4256
|
],
|
|
4196
|
-
"requestBody": {
|
|
4197
|
-
"required": true,
|
|
4198
|
-
"description": "The attachment and the tags to add and remove. At most 20 of each, 64 KiB.",
|
|
4199
|
-
"content": {
|
|
4200
|
-
"application/json": {
|
|
4201
|
-
"schema": {
|
|
4202
|
-
"$ref": "#/components/schemas/ArtifactTagEdit"
|
|
4203
|
-
}
|
|
4204
|
-
}
|
|
4205
|
-
}
|
|
4206
|
-
},
|
|
4207
4257
|
"responses": {
|
|
4208
|
-
"
|
|
4209
|
-
"description": "The
|
|
4258
|
+
"200": {
|
|
4259
|
+
"description": "The reliability of the test in the scope.",
|
|
4210
4260
|
"content": {
|
|
4211
4261
|
"application/json": {
|
|
4212
4262
|
"schema": {
|
|
4213
|
-
"$ref": "#/components/schemas/
|
|
4263
|
+
"$ref": "#/components/schemas/TestReliability"
|
|
4214
4264
|
}
|
|
4215
4265
|
}
|
|
4216
4266
|
}
|
|
4217
4267
|
},
|
|
4218
|
-
"
|
|
4219
|
-
"description": "
|
|
4268
|
+
"304": {
|
|
4269
|
+
"description": "Unchanged since the `If-None-Match` ETag."
|
|
4270
|
+
},
|
|
4271
|
+
"400": {
|
|
4272
|
+
"description": "No `key`.",
|
|
4220
4273
|
"content": {
|
|
4221
4274
|
"application/problem+json": {
|
|
4222
4275
|
"schema": {
|
|
@@ -4225,8 +4278,8 @@
|
|
|
4225
4278
|
}
|
|
4226
4279
|
}
|
|
4227
4280
|
},
|
|
4228
|
-
"
|
|
4229
|
-
"description": "
|
|
4281
|
+
"401": {
|
|
4282
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4230
4283
|
"content": {
|
|
4231
4284
|
"application/problem+json": {
|
|
4232
4285
|
"schema": {
|
|
@@ -4235,8 +4288,8 @@
|
|
|
4235
4288
|
}
|
|
4236
4289
|
}
|
|
4237
4290
|
},
|
|
4238
|
-
"
|
|
4239
|
-
"description": "
|
|
4291
|
+
"404": {
|
|
4292
|
+
"description": "No test in the report has that key.",
|
|
4240
4293
|
"content": {
|
|
4241
4294
|
"application/problem+json": {
|
|
4242
4295
|
"schema": {
|
|
@@ -4245,8 +4298,8 @@
|
|
|
4245
4298
|
}
|
|
4246
4299
|
}
|
|
4247
4300
|
},
|
|
4248
|
-
"
|
|
4249
|
-
"description": "
|
|
4301
|
+
"503": {
|
|
4302
|
+
"description": "The server is still reading its backends. Retry after the number of seconds in `Retry-After`.",
|
|
4250
4303
|
"content": {
|
|
4251
4304
|
"application/problem+json": {
|
|
4252
4305
|
"schema": {
|
|
@@ -4258,14 +4311,14 @@
|
|
|
4258
4311
|
}
|
|
4259
4312
|
}
|
|
4260
4313
|
},
|
|
4261
|
-
"/api/projects/{project}/reports/
|
|
4314
|
+
"/api/projects/{project}/reports/tests/reliability": {
|
|
4262
4315
|
"get": {
|
|
4263
|
-
"operationId": "
|
|
4316
|
+
"operationId": "getTestReliabilityForProject",
|
|
4264
4317
|
"tags": [
|
|
4265
4318
|
"Report"
|
|
4266
4319
|
],
|
|
4267
|
-
"summary": "
|
|
4268
|
-
"description": "
|
|
4320
|
+
"summary": "How reliable one test is in a scope, and how that was counted",
|
|
4321
|
+
"description": "A success rate for one test that says what it counted. The snapshots one run recorded for one producer, environment and parameter set (running, finished, enriched) are one independent execution; its last word counts once with the tries it recorded. `eventual` is the share of executions that passed in the end, `firstAttempt` the share whose first try passed (over executions that recorded their tries; the rest are `unrecordedAttempts`, never assumed to have passed first time).\n\nChoose the scope with `environment`, `producer`, `parameter` (`key=value`), `branch`, `sha`, `specRevision`, `since` and `until`; executions elsewhere never count. By default only the newest recorded spec revision counts and earlier ones appear under `historical`; send `revision=any` to pool them. Only `passed` and `failed` executions are trials: `not-run` and unfinished ones are listed under `excluded` and never counted as a pass. `sample` is `none`, `insufficient` (fewer than `minimumExecutions`) or `sufficient`, a count only: `notes` say when environments, producers or branches are pooled, failed cases were published again, or history is bounded to the newest 100 results. `executions` is the denominator, open to inspection. The interval states its assumptions. This is not a production failure probability. Send `format=markdown` for Markdown.\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `read`.",
|
|
4269
4322
|
"x-atlas-role": "read",
|
|
4270
4323
|
"security": [
|
|
4271
4324
|
{
|
|
@@ -4287,210 +4340,42 @@
|
|
|
4287
4340
|
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4288
4341
|
"maxLength": 64
|
|
4289
4342
|
}
|
|
4290
|
-
}
|
|
4291
|
-
],
|
|
4292
|
-
"responses": {
|
|
4293
|
-
"200": {
|
|
4294
|
-
"description": "The edits.",
|
|
4295
|
-
"content": {
|
|
4296
|
-
"application/json": {
|
|
4297
|
-
"schema": {
|
|
4298
|
-
"$ref": "#/components/schemas/ArtifactTags"
|
|
4299
|
-
}
|
|
4300
|
-
}
|
|
4301
|
-
}
|
|
4302
4343
|
},
|
|
4303
|
-
"401": {
|
|
4304
|
-
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4305
|
-
"content": {
|
|
4306
|
-
"application/problem+json": {
|
|
4307
|
-
"schema": {
|
|
4308
|
-
"$ref": "#/components/schemas/Problem"
|
|
4309
|
-
}
|
|
4310
|
-
}
|
|
4311
|
-
}
|
|
4312
|
-
}
|
|
4313
|
-
}
|
|
4314
|
-
},
|
|
4315
|
-
"post": {
|
|
4316
|
-
"operationId": "editArtifactTagsForProject",
|
|
4317
|
-
"tags": [
|
|
4318
|
-
"Report"
|
|
4319
|
-
],
|
|
4320
|
-
"summary": "Tag or untag one attachment after upload",
|
|
4321
|
-
"description": "Records one edit of the reviewer tags of one attachment, by the name of the publish (or admin) token that sends it. It adds an immutable entry to the audit trail and changes nothing else: not the layer, not the movie, not any result. The tags it removes are reviewer tags only; a producer's tags are part of the layer and stay. A reader-only token, a browser sign-in box and an anonymous reader are refused. Name the attachment as `artifactRef` does (`id:<id>`, else `key:<bundleKey>`, else `name:<name>`).\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `publish`.",
|
|
4322
|
-
"x-atlas-role": "publish",
|
|
4323
|
-
"security": [
|
|
4324
|
-
{
|
|
4325
|
-
"bearer": []
|
|
4326
|
-
}
|
|
4327
|
-
],
|
|
4328
|
-
"parameters": [
|
|
4329
4344
|
{
|
|
4330
4345
|
"required": true,
|
|
4331
|
-
"name": "
|
|
4332
|
-
"in": "
|
|
4333
|
-
"description": "
|
|
4334
|
-
"example": "
|
|
4346
|
+
"name": "key",
|
|
4347
|
+
"in": "query",
|
|
4348
|
+
"description": "The test's `key` from `/api/reports/tests`.",
|
|
4349
|
+
"example": "[\"specs/checkout/pay.feature\",\"Pay with a card\"]",
|
|
4335
4350
|
"schema": {
|
|
4336
|
-
"type": "string"
|
|
4337
|
-
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4338
|
-
"maxLength": 64
|
|
4339
|
-
}
|
|
4340
|
-
}
|
|
4341
|
-
],
|
|
4342
|
-
"requestBody": {
|
|
4343
|
-
"required": true,
|
|
4344
|
-
"description": "The attachment and the tags to add and remove. At most 20 of each, 64 KiB.",
|
|
4345
|
-
"content": {
|
|
4346
|
-
"application/json": {
|
|
4347
|
-
"schema": {
|
|
4348
|
-
"$ref": "#/components/schemas/ArtifactTagEdit"
|
|
4349
|
-
}
|
|
4350
|
-
}
|
|
4351
|
-
}
|
|
4352
|
-
},
|
|
4353
|
-
"responses": {
|
|
4354
|
-
"201": {
|
|
4355
|
-
"description": "The recorded entry.",
|
|
4356
|
-
"content": {
|
|
4357
|
-
"application/json": {
|
|
4358
|
-
"schema": {
|
|
4359
|
-
"$ref": "#/components/schemas/ArtifactTagEntry"
|
|
4360
|
-
}
|
|
4361
|
-
}
|
|
4351
|
+
"type": "string"
|
|
4362
4352
|
}
|
|
4363
4353
|
},
|
|
4364
|
-
|
|
4365
|
-
"
|
|
4366
|
-
"
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
|
|
4372
|
-
}
|
|
4373
|
-
},
|
|
4374
|
-
"403": {
|
|
4375
|
-
"description": "The token is known but its role may not do this.",
|
|
4376
|
-
"content": {
|
|
4377
|
-
"application/problem+json": {
|
|
4378
|
-
"schema": {
|
|
4379
|
-
"$ref": "#/components/schemas/Problem"
|
|
4380
|
-
}
|
|
4381
|
-
}
|
|
4382
|
-
}
|
|
4383
|
-
},
|
|
4384
|
-
"413": {
|
|
4385
|
-
"description": "Request too large.",
|
|
4386
|
-
"content": {
|
|
4387
|
-
"application/problem+json": {
|
|
4388
|
-
"schema": {
|
|
4389
|
-
"$ref": "#/components/schemas/Problem"
|
|
4390
|
-
}
|
|
4391
|
-
}
|
|
4392
|
-
}
|
|
4393
|
-
},
|
|
4394
|
-
"422": {
|
|
4395
|
-
"description": "Not a tag edit: a bad target, an empty or over-long tag, or nothing to change.",
|
|
4396
|
-
"content": {
|
|
4397
|
-
"application/problem+json": {
|
|
4398
|
-
"schema": {
|
|
4399
|
-
"$ref": "#/components/schemas/Problem"
|
|
4400
|
-
}
|
|
4401
|
-
}
|
|
4402
|
-
}
|
|
4403
|
-
}
|
|
4404
|
-
}
|
|
4405
|
-
}
|
|
4406
|
-
},
|
|
4407
|
-
"/api/reports/runs": {
|
|
4408
|
-
"get": {
|
|
4409
|
-
"operationId": "getReportRuns",
|
|
4410
|
-
"tags": [
|
|
4411
|
-
"Report"
|
|
4412
|
-
],
|
|
4413
|
-
"summary": "The runs that recorded the report",
|
|
4414
|
-
"description": "Every run, newest first: layers grouped by their CI run URL (else branch and commit), with their environments, producers, how many tests they recorded, their results by status, the time they spanned, up to twenty failures, their video counts (references, distinct playable recordings, unavailable) and the artifact tags, media types and labels their results carry. Filters narrow the list before `limit`: AND across the parameters, OR within one; `filters` in the answer names those that were applied and `facets` offers each dimension's values with counts. A server that does not know a filter ignores it and does not name it in `filters`. Send `format=markdown` for Markdown.\n\nRole needed: `read`.",
|
|
4415
|
-
"x-atlas-role": "read",
|
|
4416
|
-
"security": [
|
|
4417
|
-
{
|
|
4418
|
-
"bearer": []
|
|
4419
|
-
},
|
|
4420
|
-
{
|
|
4421
|
-
"basic": []
|
|
4422
|
-
}
|
|
4423
|
-
],
|
|
4424
|
-
"parameters": [
|
|
4425
|
-
{
|
|
4426
|
-
"required": false,
|
|
4427
|
-
"name": "limit",
|
|
4428
|
-
"in": "query",
|
|
4429
|
-
"description": "At most this many runs (default 100).",
|
|
4430
|
-
"schema": {
|
|
4431
|
-
"type": "integer",
|
|
4432
|
-
"minimum": 0
|
|
4433
|
-
}
|
|
4434
|
-
},
|
|
4435
|
-
{
|
|
4436
|
-
"required": false,
|
|
4437
|
-
"name": "video",
|
|
4438
|
-
"in": "query",
|
|
4439
|
-
"description": "`true` to list only runs that have a playable video recording. Applied to every run before `limit`; `total` counts the matches. A server that does not know it answers with every run.",
|
|
4440
|
-
"schema": {
|
|
4441
|
-
"type": "boolean"
|
|
4442
|
-
}
|
|
4443
|
-
},
|
|
4444
|
-
{
|
|
4445
|
-
"required": false,
|
|
4446
|
-
"name": "artifactTag",
|
|
4447
|
-
"in": "query",
|
|
4448
|
-
"description": "Artifact tags (`demo` and `#demo` are the same), repeatable or comma-separated. A comma or backslash inside a value is written `\\,` or `\\\\`. OR within the parameter, AND with the other filters.",
|
|
4449
|
-
"schema": {
|
|
4450
|
-
"type": "string"
|
|
4451
|
-
}
|
|
4452
|
-
},
|
|
4453
|
-
{
|
|
4454
|
-
"required": false,
|
|
4455
|
-
"name": "inherited",
|
|
4456
|
-
"in": "query",
|
|
4457
|
-
"description": "`1` with `artifactTag` to also match the tags attachments inherit from their check and run. Default: the exact artifact query.",
|
|
4458
|
-
"schema": {
|
|
4459
|
-
"type": "boolean"
|
|
4460
|
-
}
|
|
4461
|
-
},
|
|
4462
|
-
{
|
|
4463
|
-
"required": false,
|
|
4464
|
-
"name": "type",
|
|
4465
|
-
"in": "query",
|
|
4466
|
-
"description": "Media types as roles (`video`, `image`, `audio`, `snapshot`, `text`, `file`, or a producer's own). `video` means a playable recording. With `artifactTag`, one artifact must be both where the report says which videos carry which tags.",
|
|
4467
|
-
"schema": {
|
|
4468
|
-
"type": "string"
|
|
4469
|
-
}
|
|
4470
|
-
},
|
|
4471
|
-
{
|
|
4472
|
-
"required": false,
|
|
4473
|
-
"name": "label",
|
|
4474
|
-
"in": "query",
|
|
4475
|
-
"description": "`key=value`, or `key` for any value.",
|
|
4476
|
-
"schema": {
|
|
4477
|
-
"type": "string"
|
|
4354
|
+
{
|
|
4355
|
+
"required": false,
|
|
4356
|
+
"name": "environment",
|
|
4357
|
+
"in": "query",
|
|
4358
|
+
"description": "Environments or devices to count. Comma-separated.",
|
|
4359
|
+
"example": "phone",
|
|
4360
|
+
"schema": {
|
|
4361
|
+
"type": "string"
|
|
4478
4362
|
}
|
|
4479
4363
|
},
|
|
4480
4364
|
{
|
|
4481
4365
|
"required": false,
|
|
4482
|
-
"name": "
|
|
4366
|
+
"name": "producer",
|
|
4483
4367
|
"in": "query",
|
|
4484
|
-
"description": "
|
|
4368
|
+
"description": "Producers to count. Comma-separated.",
|
|
4485
4369
|
"schema": {
|
|
4486
4370
|
"type": "string"
|
|
4487
4371
|
}
|
|
4488
4372
|
},
|
|
4489
4373
|
{
|
|
4490
4374
|
"required": false,
|
|
4491
|
-
"name": "
|
|
4375
|
+
"name": "parameter",
|
|
4492
4376
|
"in": "query",
|
|
4493
|
-
"description": "
|
|
4377
|
+
"description": "Parameter choices `key=value`; all must match. Comma-separated.",
|
|
4378
|
+
"example": "device=small",
|
|
4494
4379
|
"schema": {
|
|
4495
4380
|
"type": "string"
|
|
4496
4381
|
}
|
|
@@ -4499,7 +4384,7 @@
|
|
|
4499
4384
|
"required": false,
|
|
4500
4385
|
"name": "branch",
|
|
4501
4386
|
"in": "query",
|
|
4502
|
-
"description": "Branches.",
|
|
4387
|
+
"description": "Branches to count. Comma-separated.",
|
|
4503
4388
|
"schema": {
|
|
4504
4389
|
"type": "string"
|
|
4505
4390
|
}
|
|
@@ -4508,34 +4393,39 @@
|
|
|
4508
4393
|
"required": false,
|
|
4509
4394
|
"name": "sha",
|
|
4510
4395
|
"in": "query",
|
|
4511
|
-
"description": "
|
|
4396
|
+
"description": "Commits: a full id or a prefix of at least seven characters. Comma-separated.",
|
|
4512
4397
|
"schema": {
|
|
4513
4398
|
"type": "string"
|
|
4514
4399
|
}
|
|
4515
4400
|
},
|
|
4516
4401
|
{
|
|
4517
4402
|
"required": false,
|
|
4518
|
-
"name": "
|
|
4403
|
+
"name": "specRevision",
|
|
4519
4404
|
"in": "query",
|
|
4520
|
-
"description": "
|
|
4405
|
+
"description": "Only executions recorded against these spec fingerprints (overrides `revision`). Comma-separated.",
|
|
4521
4406
|
"schema": {
|
|
4522
4407
|
"type": "string"
|
|
4523
4408
|
}
|
|
4524
4409
|
},
|
|
4525
4410
|
{
|
|
4526
4411
|
"required": false,
|
|
4527
|
-
"name": "
|
|
4412
|
+
"name": "revision",
|
|
4528
4413
|
"in": "query",
|
|
4529
|
-
"description": "
|
|
4414
|
+
"description": "`any` pools every spec revision; otherwise only the newest recorded one counts.",
|
|
4530
4415
|
"schema": {
|
|
4531
|
-
"type": "string"
|
|
4416
|
+
"type": "string",
|
|
4417
|
+
"enum": [
|
|
4418
|
+
"current",
|
|
4419
|
+
"any"
|
|
4420
|
+
]
|
|
4532
4421
|
}
|
|
4533
4422
|
},
|
|
4534
4423
|
{
|
|
4535
4424
|
"required": false,
|
|
4536
4425
|
"name": "since",
|
|
4537
4426
|
"in": "query",
|
|
4538
|
-
"description": "Only
|
|
4427
|
+
"description": "Only executions at or after this time: epoch milliseconds or a date.",
|
|
4428
|
+
"example": "2026-01-01",
|
|
4539
4429
|
"schema": {
|
|
4540
4430
|
"type": "string"
|
|
4541
4431
|
}
|
|
@@ -4544,7 +4434,7 @@
|
|
|
4544
4434
|
"required": false,
|
|
4545
4435
|
"name": "until",
|
|
4546
4436
|
"in": "query",
|
|
4547
|
-
"description": "Only
|
|
4437
|
+
"description": "Only executions at or before this time: epoch milliseconds or a date.",
|
|
4548
4438
|
"schema": {
|
|
4549
4439
|
"type": "string"
|
|
4550
4440
|
}
|
|
@@ -4561,27 +4451,15 @@
|
|
|
4561
4451
|
"markdown"
|
|
4562
4452
|
]
|
|
4563
4453
|
}
|
|
4564
|
-
},
|
|
4565
|
-
{
|
|
4566
|
-
"required": false,
|
|
4567
|
-
"name": "project",
|
|
4568
|
-
"in": "query",
|
|
4569
|
-
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
4570
|
-
"example": "todo-app",
|
|
4571
|
-
"schema": {
|
|
4572
|
-
"type": "string",
|
|
4573
|
-
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4574
|
-
"maxLength": 64
|
|
4575
|
-
}
|
|
4576
4454
|
}
|
|
4577
4455
|
],
|
|
4578
4456
|
"responses": {
|
|
4579
4457
|
"200": {
|
|
4580
|
-
"description": "The
|
|
4458
|
+
"description": "The reliability of the test in the scope.",
|
|
4581
4459
|
"content": {
|
|
4582
4460
|
"application/json": {
|
|
4583
4461
|
"schema": {
|
|
4584
|
-
"$ref": "#/components/schemas/
|
|
4462
|
+
"$ref": "#/components/schemas/TestReliability"
|
|
4585
4463
|
}
|
|
4586
4464
|
}
|
|
4587
4465
|
}
|
|
@@ -4589,6 +4467,16 @@
|
|
|
4589
4467
|
"304": {
|
|
4590
4468
|
"description": "Unchanged since the `If-None-Match` ETag."
|
|
4591
4469
|
},
|
|
4470
|
+
"400": {
|
|
4471
|
+
"description": "No `key`.",
|
|
4472
|
+
"content": {
|
|
4473
|
+
"application/problem+json": {
|
|
4474
|
+
"schema": {
|
|
4475
|
+
"$ref": "#/components/schemas/Problem"
|
|
4476
|
+
}
|
|
4477
|
+
}
|
|
4478
|
+
}
|
|
4479
|
+
},
|
|
4592
4480
|
"401": {
|
|
4593
4481
|
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4594
4482
|
"content": {
|
|
@@ -4599,6 +4487,16 @@
|
|
|
4599
4487
|
}
|
|
4600
4488
|
}
|
|
4601
4489
|
},
|
|
4490
|
+
"404": {
|
|
4491
|
+
"description": "No test in the report has that key.",
|
|
4492
|
+
"content": {
|
|
4493
|
+
"application/problem+json": {
|
|
4494
|
+
"schema": {
|
|
4495
|
+
"$ref": "#/components/schemas/Problem"
|
|
4496
|
+
}
|
|
4497
|
+
}
|
|
4498
|
+
}
|
|
4499
|
+
},
|
|
4602
4500
|
"503": {
|
|
4603
4501
|
"description": "The server is still reading its backends. Retry after the number of seconds in `Retry-After`.",
|
|
4604
4502
|
"content": {
|
|
@@ -4612,14 +4510,14 @@
|
|
|
4612
4510
|
}
|
|
4613
4511
|
}
|
|
4614
4512
|
},
|
|
4615
|
-
"/api/
|
|
4513
|
+
"/api/reports/artifact-tags": {
|
|
4616
4514
|
"get": {
|
|
4617
|
-
"operationId": "
|
|
4515
|
+
"operationId": "getArtifactTags",
|
|
4618
4516
|
"tags": [
|
|
4619
4517
|
"Report"
|
|
4620
4518
|
],
|
|
4621
|
-
"summary": "
|
|
4622
|
-
"description": "
|
|
4519
|
+
"summary": "Reviewer tags of attachments: every recorded edit",
|
|
4520
|
+
"description": "The audit trail of tags that reviewers added to and removed from attachments after upload, oldest first. Each entry says which attachment (`target`), which normalized tags were added and removed, the name of the token that made the edit (`by`, never the token) and when (`atMs`). The layers themselves are never rewritten, so a producer's own `tags` on an attachment stay as uploaded; fold the entries (oldest first, the last edit of a tag wins) to get the reviewer tags that stand now. Tags are normalized: `#Demo` and `demo` are `demo`.\n\nRole needed: `read`.",
|
|
4623
4521
|
"x-atlas-role": "read",
|
|
4624
4522
|
"security": [
|
|
4625
4523
|
{
|
|
@@ -4631,9 +4529,9 @@
|
|
|
4631
4529
|
],
|
|
4632
4530
|
"parameters": [
|
|
4633
4531
|
{
|
|
4634
|
-
"required":
|
|
4532
|
+
"required": false,
|
|
4635
4533
|
"name": "project",
|
|
4636
|
-
"in": "
|
|
4534
|
+
"in": "query",
|
|
4637
4535
|
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
4638
4536
|
"example": "todo-app",
|
|
4639
4537
|
"schema": {
|
|
@@ -4641,162 +4539,226 @@
|
|
|
4641
4539
|
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4642
4540
|
"maxLength": 64
|
|
4643
4541
|
}
|
|
4644
|
-
}
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
"
|
|
4649
|
-
"
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4542
|
+
}
|
|
4543
|
+
],
|
|
4544
|
+
"responses": {
|
|
4545
|
+
"200": {
|
|
4546
|
+
"description": "The edits.",
|
|
4547
|
+
"content": {
|
|
4548
|
+
"application/json": {
|
|
4549
|
+
"schema": {
|
|
4550
|
+
"$ref": "#/components/schemas/ArtifactTags"
|
|
4551
|
+
}
|
|
4552
|
+
}
|
|
4653
4553
|
}
|
|
4654
4554
|
},
|
|
4655
|
-
{
|
|
4656
|
-
"
|
|
4657
|
-
"
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4555
|
+
"401": {
|
|
4556
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4557
|
+
"content": {
|
|
4558
|
+
"application/problem+json": {
|
|
4559
|
+
"schema": {
|
|
4560
|
+
"$ref": "#/components/schemas/Problem"
|
|
4561
|
+
}
|
|
4562
|
+
}
|
|
4662
4563
|
}
|
|
4663
|
-
}
|
|
4564
|
+
}
|
|
4565
|
+
}
|
|
4566
|
+
},
|
|
4567
|
+
"post": {
|
|
4568
|
+
"operationId": "editArtifactTags",
|
|
4569
|
+
"tags": [
|
|
4570
|
+
"Report"
|
|
4571
|
+
],
|
|
4572
|
+
"summary": "Tag or untag one attachment after upload",
|
|
4573
|
+
"description": "Records one edit of the reviewer tags of one attachment, by the name of the publish (or admin) token that sends it. It adds an immutable entry to the audit trail and changes nothing else: not the layer, not the movie, not any result. The tags it removes are reviewer tags only; a producer's tags are part of the layer and stay. A reader-only token, a browser sign-in box and an anonymous reader are refused. Name the attachment as `artifactRef` does (`id:<id>`, else `key:<bundleKey>`, else `name:<name>`).\n\nRole needed: `publish`.",
|
|
4574
|
+
"x-atlas-role": "publish",
|
|
4575
|
+
"security": [
|
|
4664
4576
|
{
|
|
4665
|
-
"
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
"schema": {
|
|
4670
|
-
"type": "string"
|
|
4671
|
-
}
|
|
4672
|
-
},
|
|
4577
|
+
"bearer": []
|
|
4578
|
+
}
|
|
4579
|
+
],
|
|
4580
|
+
"parameters": [
|
|
4673
4581
|
{
|
|
4674
4582
|
"required": false,
|
|
4675
|
-
"name": "
|
|
4583
|
+
"name": "project",
|
|
4676
4584
|
"in": "query",
|
|
4677
|
-
"description": "
|
|
4585
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
4586
|
+
"example": "todo-app",
|
|
4678
4587
|
"schema": {
|
|
4679
|
-
"type": "
|
|
4588
|
+
"type": "string",
|
|
4589
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4590
|
+
"maxLength": 64
|
|
4680
4591
|
}
|
|
4681
|
-
}
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
"
|
|
4688
|
-
"
|
|
4592
|
+
}
|
|
4593
|
+
],
|
|
4594
|
+
"requestBody": {
|
|
4595
|
+
"required": true,
|
|
4596
|
+
"description": "The attachment and the tags to add and remove. At most 20 of each, 64 KiB.",
|
|
4597
|
+
"content": {
|
|
4598
|
+
"application/json": {
|
|
4599
|
+
"schema": {
|
|
4600
|
+
"$ref": "#/components/schemas/ArtifactTagEdit"
|
|
4601
|
+
}
|
|
4689
4602
|
}
|
|
4690
|
-
}
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
"
|
|
4695
|
-
"
|
|
4696
|
-
|
|
4697
|
-
|
|
4603
|
+
}
|
|
4604
|
+
},
|
|
4605
|
+
"responses": {
|
|
4606
|
+
"201": {
|
|
4607
|
+
"description": "The recorded entry.",
|
|
4608
|
+
"content": {
|
|
4609
|
+
"application/json": {
|
|
4610
|
+
"schema": {
|
|
4611
|
+
"$ref": "#/components/schemas/ArtifactTagEntry"
|
|
4612
|
+
}
|
|
4613
|
+
}
|
|
4698
4614
|
}
|
|
4699
4615
|
},
|
|
4700
|
-
{
|
|
4701
|
-
"
|
|
4702
|
-
"
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
|
|
4616
|
+
"401": {
|
|
4617
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4618
|
+
"content": {
|
|
4619
|
+
"application/problem+json": {
|
|
4620
|
+
"schema": {
|
|
4621
|
+
"$ref": "#/components/schemas/Problem"
|
|
4622
|
+
}
|
|
4623
|
+
}
|
|
4707
4624
|
}
|
|
4708
4625
|
},
|
|
4709
|
-
{
|
|
4710
|
-
"
|
|
4711
|
-
"
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
|
|
4715
|
-
|
|
4626
|
+
"403": {
|
|
4627
|
+
"description": "The token is known but its role may not do this.",
|
|
4628
|
+
"content": {
|
|
4629
|
+
"application/problem+json": {
|
|
4630
|
+
"schema": {
|
|
4631
|
+
"$ref": "#/components/schemas/Problem"
|
|
4632
|
+
}
|
|
4633
|
+
}
|
|
4716
4634
|
}
|
|
4717
4635
|
},
|
|
4718
|
-
{
|
|
4719
|
-
"
|
|
4720
|
-
"
|
|
4721
|
-
|
|
4722
|
-
|
|
4723
|
-
|
|
4724
|
-
|
|
4636
|
+
"413": {
|
|
4637
|
+
"description": "Request too large.",
|
|
4638
|
+
"content": {
|
|
4639
|
+
"application/problem+json": {
|
|
4640
|
+
"schema": {
|
|
4641
|
+
"$ref": "#/components/schemas/Problem"
|
|
4642
|
+
}
|
|
4643
|
+
}
|
|
4725
4644
|
}
|
|
4726
4645
|
},
|
|
4727
|
-
{
|
|
4728
|
-
"
|
|
4729
|
-
"
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4646
|
+
"422": {
|
|
4647
|
+
"description": "Not a tag edit: a bad target, an empty or over-long tag, or nothing to change.",
|
|
4648
|
+
"content": {
|
|
4649
|
+
"application/problem+json": {
|
|
4650
|
+
"schema": {
|
|
4651
|
+
"$ref": "#/components/schemas/Problem"
|
|
4652
|
+
}
|
|
4653
|
+
}
|
|
4734
4654
|
}
|
|
4735
|
-
}
|
|
4655
|
+
}
|
|
4656
|
+
}
|
|
4657
|
+
}
|
|
4658
|
+
},
|
|
4659
|
+
"/api/projects/{project}/reports/artifact-tags": {
|
|
4660
|
+
"get": {
|
|
4661
|
+
"operationId": "getArtifactTagsForProject",
|
|
4662
|
+
"tags": [
|
|
4663
|
+
"Report"
|
|
4664
|
+
],
|
|
4665
|
+
"summary": "Reviewer tags of attachments: every recorded edit",
|
|
4666
|
+
"description": "The audit trail of tags that reviewers added to and removed from attachments after upload, oldest first. Each entry says which attachment (`target`), which normalized tags were added and removed, the name of the token that made the edit (`by`, never the token) and when (`atMs`). The layers themselves are never rewritten, so a producer's own `tags` on an attachment stay as uploaded; fold the entries (oldest first, the last edit of a tag wins) to get the reviewer tags that stand now. Tags are normalized: `#Demo` and `demo` are `demo`.\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `read`.",
|
|
4667
|
+
"x-atlas-role": "read",
|
|
4668
|
+
"security": [
|
|
4736
4669
|
{
|
|
4737
|
-
"
|
|
4738
|
-
"name": "outcome",
|
|
4739
|
-
"in": "query",
|
|
4740
|
-
"description": "Statuses: `passed`, `failed`, `running`, `not-run`. A run's outcome is `failed` when any result failed, else `running`, else `passed`, else `not-run`.",
|
|
4741
|
-
"schema": {
|
|
4742
|
-
"type": "string"
|
|
4743
|
-
}
|
|
4670
|
+
"bearer": []
|
|
4744
4671
|
},
|
|
4745
4672
|
{
|
|
4746
|
-
"
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
|
|
4750
|
-
"schema": {
|
|
4751
|
-
"type": "string"
|
|
4752
|
-
}
|
|
4753
|
-
},
|
|
4673
|
+
"basic": []
|
|
4674
|
+
}
|
|
4675
|
+
],
|
|
4676
|
+
"parameters": [
|
|
4754
4677
|
{
|
|
4755
|
-
"required":
|
|
4756
|
-
"name": "
|
|
4757
|
-
"in": "
|
|
4758
|
-
"description": "
|
|
4678
|
+
"required": true,
|
|
4679
|
+
"name": "project",
|
|
4680
|
+
"in": "path",
|
|
4681
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
4682
|
+
"example": "todo-app",
|
|
4759
4683
|
"schema": {
|
|
4760
|
-
"type": "string"
|
|
4684
|
+
"type": "string",
|
|
4685
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4686
|
+
"maxLength": 64
|
|
4761
4687
|
}
|
|
4762
|
-
}
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
"
|
|
4767
|
-
"
|
|
4768
|
-
|
|
4769
|
-
|
|
4688
|
+
}
|
|
4689
|
+
],
|
|
4690
|
+
"responses": {
|
|
4691
|
+
"200": {
|
|
4692
|
+
"description": "The edits.",
|
|
4693
|
+
"content": {
|
|
4694
|
+
"application/json": {
|
|
4695
|
+
"schema": {
|
|
4696
|
+
"$ref": "#/components/schemas/ArtifactTags"
|
|
4697
|
+
}
|
|
4698
|
+
}
|
|
4770
4699
|
}
|
|
4771
4700
|
},
|
|
4701
|
+
"401": {
|
|
4702
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4703
|
+
"content": {
|
|
4704
|
+
"application/problem+json": {
|
|
4705
|
+
"schema": {
|
|
4706
|
+
"$ref": "#/components/schemas/Problem"
|
|
4707
|
+
}
|
|
4708
|
+
}
|
|
4709
|
+
}
|
|
4710
|
+
}
|
|
4711
|
+
}
|
|
4712
|
+
},
|
|
4713
|
+
"post": {
|
|
4714
|
+
"operationId": "editArtifactTagsForProject",
|
|
4715
|
+
"tags": [
|
|
4716
|
+
"Report"
|
|
4717
|
+
],
|
|
4718
|
+
"summary": "Tag or untag one attachment after upload",
|
|
4719
|
+
"description": "Records one edit of the reviewer tags of one attachment, by the name of the publish (or admin) token that sends it. It adds an immutable entry to the audit trail and changes nothing else: not the layer, not the movie, not any result. The tags it removes are reviewer tags only; a producer's tags are part of the layer and stay. A reader-only token, a browser sign-in box and an anonymous reader are refused. Name the attachment as `artifactRef` does (`id:<id>`, else `key:<bundleKey>`, else `name:<name>`).\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `publish`.",
|
|
4720
|
+
"x-atlas-role": "publish",
|
|
4721
|
+
"security": [
|
|
4772
4722
|
{
|
|
4773
|
-
"
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4723
|
+
"bearer": []
|
|
4724
|
+
}
|
|
4725
|
+
],
|
|
4726
|
+
"parameters": [
|
|
4727
|
+
{
|
|
4728
|
+
"required": true,
|
|
4729
|
+
"name": "project",
|
|
4730
|
+
"in": "path",
|
|
4731
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
4732
|
+
"example": "todo-app",
|
|
4777
4733
|
"schema": {
|
|
4778
4734
|
"type": "string",
|
|
4779
|
-
"
|
|
4780
|
-
|
|
4781
|
-
"markdown"
|
|
4782
|
-
]
|
|
4735
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4736
|
+
"maxLength": 64
|
|
4783
4737
|
}
|
|
4784
4738
|
}
|
|
4785
4739
|
],
|
|
4740
|
+
"requestBody": {
|
|
4741
|
+
"required": true,
|
|
4742
|
+
"description": "The attachment and the tags to add and remove. At most 20 of each, 64 KiB.",
|
|
4743
|
+
"content": {
|
|
4744
|
+
"application/json": {
|
|
4745
|
+
"schema": {
|
|
4746
|
+
"$ref": "#/components/schemas/ArtifactTagEdit"
|
|
4747
|
+
}
|
|
4748
|
+
}
|
|
4749
|
+
}
|
|
4750
|
+
},
|
|
4786
4751
|
"responses": {
|
|
4787
|
-
"
|
|
4788
|
-
"description": "The
|
|
4752
|
+
"201": {
|
|
4753
|
+
"description": "The recorded entry.",
|
|
4789
4754
|
"content": {
|
|
4790
4755
|
"application/json": {
|
|
4791
4756
|
"schema": {
|
|
4792
|
-
"$ref": "#/components/schemas/
|
|
4757
|
+
"$ref": "#/components/schemas/ArtifactTagEntry"
|
|
4793
4758
|
}
|
|
4794
4759
|
}
|
|
4795
4760
|
}
|
|
4796
4761
|
},
|
|
4797
|
-
"304": {
|
|
4798
|
-
"description": "Unchanged since the `If-None-Match` ETag."
|
|
4799
|
-
},
|
|
4800
4762
|
"401": {
|
|
4801
4763
|
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4802
4764
|
"content": {
|
|
@@ -4807,8 +4769,28 @@
|
|
|
4807
4769
|
}
|
|
4808
4770
|
}
|
|
4809
4771
|
},
|
|
4810
|
-
"
|
|
4811
|
-
"description": "The
|
|
4772
|
+
"403": {
|
|
4773
|
+
"description": "The token is known but its role may not do this.",
|
|
4774
|
+
"content": {
|
|
4775
|
+
"application/problem+json": {
|
|
4776
|
+
"schema": {
|
|
4777
|
+
"$ref": "#/components/schemas/Problem"
|
|
4778
|
+
}
|
|
4779
|
+
}
|
|
4780
|
+
}
|
|
4781
|
+
},
|
|
4782
|
+
"413": {
|
|
4783
|
+
"description": "Request too large.",
|
|
4784
|
+
"content": {
|
|
4785
|
+
"application/problem+json": {
|
|
4786
|
+
"schema": {
|
|
4787
|
+
"$ref": "#/components/schemas/Problem"
|
|
4788
|
+
}
|
|
4789
|
+
}
|
|
4790
|
+
}
|
|
4791
|
+
},
|
|
4792
|
+
"422": {
|
|
4793
|
+
"description": "Not a tag edit: a bad target, an empty or over-long tag, or nothing to change.",
|
|
4812
4794
|
"content": {
|
|
4813
4795
|
"application/problem+json": {
|
|
4814
4796
|
"schema": {
|
|
@@ -4820,14 +4802,14 @@
|
|
|
4820
4802
|
}
|
|
4821
4803
|
}
|
|
4822
4804
|
},
|
|
4823
|
-
"/api/reports/
|
|
4805
|
+
"/api/reports/runs": {
|
|
4824
4806
|
"get": {
|
|
4825
|
-
"operationId": "
|
|
4807
|
+
"operationId": "getReportRuns",
|
|
4826
4808
|
"tags": [
|
|
4827
4809
|
"Report"
|
|
4828
4810
|
],
|
|
4829
|
-
"summary": "
|
|
4830
|
-
"description": "Every
|
|
4811
|
+
"summary": "The runs that recorded the report",
|
|
4812
|
+
"description": "Every run, newest first: layers grouped by their CI run URL (else branch and commit), with their environments, producers, how many tests they recorded, their results by status, the time they spanned, up to twenty failures, their video counts (references, distinct playable recordings, unavailable) and the artifact tags, media types and labels their results carry. Filters narrow the list before `limit`: AND across the parameters, OR within one; `filters` in the answer names those that were applied and `facets` offers each dimension's values with counts. A server that does not know a filter ignores it and does not name it in `filters`. Send `format=markdown` for Markdown.\n\nRole needed: `read`.",
|
|
4831
4813
|
"x-atlas-role": "read",
|
|
4832
4814
|
"security": [
|
|
4833
4815
|
{
|
|
@@ -4842,7 +4824,7 @@
|
|
|
4842
4824
|
"required": false,
|
|
4843
4825
|
"name": "limit",
|
|
4844
4826
|
"in": "query",
|
|
4845
|
-
"description": "At most this many
|
|
4827
|
+
"description": "At most this many runs (default 100).",
|
|
4846
4828
|
"schema": {
|
|
4847
4829
|
"type": "integer",
|
|
4848
4830
|
"minimum": 0
|
|
@@ -4850,57 +4832,29 @@
|
|
|
4850
4832
|
},
|
|
4851
4833
|
{
|
|
4852
4834
|
"required": false,
|
|
4853
|
-
"name": "
|
|
4835
|
+
"name": "video",
|
|
4854
4836
|
"in": "query",
|
|
4855
|
-
"description": "
|
|
4837
|
+
"description": "`true` to list only runs that have a playable video recording. Applied to every run before `limit`; `total` counts the matches. A server that does not know it answers with every run.",
|
|
4856
4838
|
"schema": {
|
|
4857
|
-
"type": "
|
|
4858
|
-
"minimum": 0
|
|
4839
|
+
"type": "boolean"
|
|
4859
4840
|
}
|
|
4860
4841
|
},
|
|
4861
4842
|
{
|
|
4862
4843
|
"required": false,
|
|
4863
|
-
"name": "
|
|
4844
|
+
"name": "artifactTag",
|
|
4864
4845
|
"in": "query",
|
|
4865
|
-
"description": "`
|
|
4846
|
+
"description": "Artifact tags (`demo` and `#demo` are the same), repeatable or comma-separated. A comma or backslash inside a value is written `\\,` or `\\\\`. OR within the parameter, AND with the other filters.",
|
|
4866
4847
|
"schema": {
|
|
4867
|
-
"type": "
|
|
4848
|
+
"type": "string"
|
|
4868
4849
|
}
|
|
4869
4850
|
},
|
|
4870
4851
|
{
|
|
4871
4852
|
"required": false,
|
|
4872
|
-
"name": "
|
|
4853
|
+
"name": "inherited",
|
|
4873
4854
|
"in": "query",
|
|
4874
|
-
"description": "
|
|
4855
|
+
"description": "`1` with `artifactTag` to also match the tags attachments inherit from their check and run. Default: the exact artifact query.",
|
|
4875
4856
|
"schema": {
|
|
4876
|
-
"type": "
|
|
4877
|
-
}
|
|
4878
|
-
},
|
|
4879
|
-
{
|
|
4880
|
-
"required": false,
|
|
4881
|
-
"name": "spec",
|
|
4882
|
-
"in": "query",
|
|
4883
|
-
"description": "Spec paths.",
|
|
4884
|
-
"schema": {
|
|
4885
|
-
"type": "string"
|
|
4886
|
-
}
|
|
4887
|
-
},
|
|
4888
|
-
{
|
|
4889
|
-
"required": false,
|
|
4890
|
-
"name": "artifactTag",
|
|
4891
|
-
"in": "query",
|
|
4892
|
-
"description": "Artifact tags (`demo` and `#demo` are the same), repeatable or comma-separated. A comma or backslash inside a value is written `\\,` or `\\\\`. OR within the parameter, AND with the other filters.",
|
|
4893
|
-
"schema": {
|
|
4894
|
-
"type": "string"
|
|
4895
|
-
}
|
|
4896
|
-
},
|
|
4897
|
-
{
|
|
4898
|
-
"required": false,
|
|
4899
|
-
"name": "inherited",
|
|
4900
|
-
"in": "query",
|
|
4901
|
-
"description": "`1` with `artifactTag` to also match the tags attachments inherit from their check and run. Default: the exact artifact query.",
|
|
4902
|
-
"schema": {
|
|
4903
|
-
"type": "boolean"
|
|
4857
|
+
"type": "boolean"
|
|
4904
4858
|
}
|
|
4905
4859
|
},
|
|
4906
4860
|
{
|
|
@@ -5021,11 +4975,11 @@
|
|
|
5021
4975
|
],
|
|
5022
4976
|
"responses": {
|
|
5023
4977
|
"200": {
|
|
5024
|
-
"description": "The
|
|
4978
|
+
"description": "The runs.",
|
|
5025
4979
|
"content": {
|
|
5026
4980
|
"application/json": {
|
|
5027
4981
|
"schema": {
|
|
5028
|
-
"$ref": "#/components/schemas/
|
|
4982
|
+
"$ref": "#/components/schemas/RunList"
|
|
5029
4983
|
}
|
|
5030
4984
|
}
|
|
5031
4985
|
}
|
|
@@ -5056,14 +5010,14 @@
|
|
|
5056
5010
|
}
|
|
5057
5011
|
}
|
|
5058
5012
|
},
|
|
5059
|
-
"/api/projects/{project}/reports/
|
|
5013
|
+
"/api/projects/{project}/reports/runs": {
|
|
5060
5014
|
"get": {
|
|
5061
|
-
"operationId": "
|
|
5015
|
+
"operationId": "getReportRunsForProject",
|
|
5062
5016
|
"tags": [
|
|
5063
5017
|
"Report"
|
|
5064
5018
|
],
|
|
5065
|
-
"summary": "
|
|
5066
|
-
"description": "Every
|
|
5019
|
+
"summary": "The runs that recorded the report",
|
|
5020
|
+
"description": "Every run, newest first: layers grouped by their CI run URL (else branch and commit), with their environments, producers, how many tests they recorded, their results by status, the time they spanned, up to twenty failures, their video counts (references, distinct playable recordings, unavailable) and the artifact tags, media types and labels their results carry. Filters narrow the list before `limit`: AND across the parameters, OR within one; `filters` in the answer names those that were applied and `facets` offers each dimension's values with counts. A server that does not know a filter ignores it and does not name it in `filters`. Send `format=markdown` for Markdown.\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `read`.",
|
|
5067
5021
|
"x-atlas-role": "read",
|
|
5068
5022
|
"security": [
|
|
5069
5023
|
{
|
|
@@ -5090,17 +5044,7 @@
|
|
|
5090
5044
|
"required": false,
|
|
5091
5045
|
"name": "limit",
|
|
5092
5046
|
"in": "query",
|
|
5093
|
-
"description": "At most this many
|
|
5094
|
-
"schema": {
|
|
5095
|
-
"type": "integer",
|
|
5096
|
-
"minimum": 0
|
|
5097
|
-
}
|
|
5098
|
-
},
|
|
5099
|
-
{
|
|
5100
|
-
"required": false,
|
|
5101
|
-
"name": "offset",
|
|
5102
|
-
"in": "query",
|
|
5103
|
-
"description": "Skip this many matches (default 0).",
|
|
5047
|
+
"description": "At most this many runs (default 100).",
|
|
5104
5048
|
"schema": {
|
|
5105
5049
|
"type": "integer",
|
|
5106
5050
|
"minimum": 0
|
|
@@ -5110,29 +5054,11 @@
|
|
|
5110
5054
|
"required": false,
|
|
5111
5055
|
"name": "video",
|
|
5112
5056
|
"in": "query",
|
|
5113
|
-
"description": "`true`
|
|
5057
|
+
"description": "`true` to list only runs that have a playable video recording. Applied to every run before `limit`; `total` counts the matches. A server that does not know it answers with every run.",
|
|
5114
5058
|
"schema": {
|
|
5115
5059
|
"type": "boolean"
|
|
5116
5060
|
}
|
|
5117
5061
|
},
|
|
5118
|
-
{
|
|
5119
|
-
"required": false,
|
|
5120
|
-
"name": "domain",
|
|
5121
|
-
"in": "query",
|
|
5122
|
-
"description": "The feature domain of the result's spec.",
|
|
5123
|
-
"schema": {
|
|
5124
|
-
"type": "string"
|
|
5125
|
-
}
|
|
5126
|
-
},
|
|
5127
|
-
{
|
|
5128
|
-
"required": false,
|
|
5129
|
-
"name": "spec",
|
|
5130
|
-
"in": "query",
|
|
5131
|
-
"description": "Spec paths.",
|
|
5132
|
-
"schema": {
|
|
5133
|
-
"type": "string"
|
|
5134
|
-
}
|
|
5135
|
-
},
|
|
5136
5062
|
{
|
|
5137
5063
|
"required": false,
|
|
5138
5064
|
"name": "artifactTag",
|
|
@@ -5257,11 +5183,11 @@
|
|
|
5257
5183
|
],
|
|
5258
5184
|
"responses": {
|
|
5259
5185
|
"200": {
|
|
5260
|
-
"description": "The
|
|
5186
|
+
"description": "The runs.",
|
|
5261
5187
|
"content": {
|
|
5262
5188
|
"application/json": {
|
|
5263
5189
|
"schema": {
|
|
5264
|
-
"$ref": "#/components/schemas/
|
|
5190
|
+
"$ref": "#/components/schemas/RunList"
|
|
5265
5191
|
}
|
|
5266
5192
|
}
|
|
5267
5193
|
}
|
|
@@ -5292,14 +5218,14 @@
|
|
|
5292
5218
|
}
|
|
5293
5219
|
}
|
|
5294
5220
|
},
|
|
5295
|
-
"/api/reports/
|
|
5221
|
+
"/api/reports/artifacts": {
|
|
5296
5222
|
"get": {
|
|
5297
|
-
"operationId": "
|
|
5223
|
+
"operationId": "getReportArtifacts",
|
|
5298
5224
|
"tags": [
|
|
5299
5225
|
"Report"
|
|
5300
5226
|
],
|
|
5301
|
-
"summary": "
|
|
5302
|
-
"description": "
|
|
5227
|
+
"summary": "Recorded results that carry evidence, across the whole history",
|
|
5228
|
+
"description": "Every recorded result that has attachments (recordings, screenshots, traces), newest first, found in the history and not only among the current winners: a recording tagged `demo` is found with its original run, revision and status even when a later attempt is untagged. Narrow it by artifact tag, media type, label, feature (`domain`, `spec`), environment or device, producer, branch, revision, outcome and time: AND across the parameters, OR within one; with both `artifactTag` and `type`, one artifact must be both. `filters` names the filters that were applied and `facets` offers each dimension's values with counts: the count beside a value is what the list would hold if that value alone were chosen in its dimension, every other filter applied. Tags written by reviewers after upload are not searched; only those in the layer are. Send `format=markdown` for Markdown.\n\nRole needed: `read`.",
|
|
5303
5229
|
"x-atlas-role": "read",
|
|
5304
5230
|
"security": [
|
|
5305
5231
|
{
|
|
@@ -5311,10 +5237,156 @@
|
|
|
5311
5237
|
],
|
|
5312
5238
|
"parameters": [
|
|
5313
5239
|
{
|
|
5314
|
-
"required":
|
|
5315
|
-
"name": "
|
|
5240
|
+
"required": false,
|
|
5241
|
+
"name": "limit",
|
|
5316
5242
|
"in": "query",
|
|
5317
|
-
"description": "
|
|
5243
|
+
"description": "At most this many results (default 100).",
|
|
5244
|
+
"schema": {
|
|
5245
|
+
"type": "integer",
|
|
5246
|
+
"minimum": 0
|
|
5247
|
+
}
|
|
5248
|
+
},
|
|
5249
|
+
{
|
|
5250
|
+
"required": false,
|
|
5251
|
+
"name": "offset",
|
|
5252
|
+
"in": "query",
|
|
5253
|
+
"description": "Skip this many matches (default 0).",
|
|
5254
|
+
"schema": {
|
|
5255
|
+
"type": "integer",
|
|
5256
|
+
"minimum": 0
|
|
5257
|
+
}
|
|
5258
|
+
},
|
|
5259
|
+
{
|
|
5260
|
+
"required": false,
|
|
5261
|
+
"name": "video",
|
|
5262
|
+
"in": "query",
|
|
5263
|
+
"description": "`true` for results with a playable video recording (the same as `type=video`).",
|
|
5264
|
+
"schema": {
|
|
5265
|
+
"type": "boolean"
|
|
5266
|
+
}
|
|
5267
|
+
},
|
|
5268
|
+
{
|
|
5269
|
+
"required": false,
|
|
5270
|
+
"name": "domain",
|
|
5271
|
+
"in": "query",
|
|
5272
|
+
"description": "The feature domain of the result's spec.",
|
|
5273
|
+
"schema": {
|
|
5274
|
+
"type": "string"
|
|
5275
|
+
}
|
|
5276
|
+
},
|
|
5277
|
+
{
|
|
5278
|
+
"required": false,
|
|
5279
|
+
"name": "spec",
|
|
5280
|
+
"in": "query",
|
|
5281
|
+
"description": "Spec paths.",
|
|
5282
|
+
"schema": {
|
|
5283
|
+
"type": "string"
|
|
5284
|
+
}
|
|
5285
|
+
},
|
|
5286
|
+
{
|
|
5287
|
+
"required": false,
|
|
5288
|
+
"name": "artifactTag",
|
|
5289
|
+
"in": "query",
|
|
5290
|
+
"description": "Artifact tags (`demo` and `#demo` are the same), repeatable or comma-separated. A comma or backslash inside a value is written `\\,` or `\\\\`. OR within the parameter, AND with the other filters.",
|
|
5291
|
+
"schema": {
|
|
5292
|
+
"type": "string"
|
|
5293
|
+
}
|
|
5294
|
+
},
|
|
5295
|
+
{
|
|
5296
|
+
"required": false,
|
|
5297
|
+
"name": "inherited",
|
|
5298
|
+
"in": "query",
|
|
5299
|
+
"description": "`1` with `artifactTag` to also match the tags attachments inherit from their check and run. Default: the exact artifact query.",
|
|
5300
|
+
"schema": {
|
|
5301
|
+
"type": "boolean"
|
|
5302
|
+
}
|
|
5303
|
+
},
|
|
5304
|
+
{
|
|
5305
|
+
"required": false,
|
|
5306
|
+
"name": "type",
|
|
5307
|
+
"in": "query",
|
|
5308
|
+
"description": "Media types as roles (`video`, `image`, `audio`, `snapshot`, `text`, `file`, or a producer's own). `video` means a playable recording. With `artifactTag`, one artifact must be both where the report says which videos carry which tags.",
|
|
5309
|
+
"schema": {
|
|
5310
|
+
"type": "string"
|
|
5311
|
+
}
|
|
5312
|
+
},
|
|
5313
|
+
{
|
|
5314
|
+
"required": false,
|
|
5315
|
+
"name": "label",
|
|
5316
|
+
"in": "query",
|
|
5317
|
+
"description": "`key=value`, or `key` for any value.",
|
|
5318
|
+
"schema": {
|
|
5319
|
+
"type": "string"
|
|
5320
|
+
}
|
|
5321
|
+
},
|
|
5322
|
+
{
|
|
5323
|
+
"required": false,
|
|
5324
|
+
"name": "environment",
|
|
5325
|
+
"in": "query",
|
|
5326
|
+
"description": "Environments or devices (`ios`, `desktop-web`).",
|
|
5327
|
+
"schema": {
|
|
5328
|
+
"type": "string"
|
|
5329
|
+
}
|
|
5330
|
+
},
|
|
5331
|
+
{
|
|
5332
|
+
"required": false,
|
|
5333
|
+
"name": "producer",
|
|
5334
|
+
"in": "query",
|
|
5335
|
+
"description": "Producers.",
|
|
5336
|
+
"schema": {
|
|
5337
|
+
"type": "string"
|
|
5338
|
+
}
|
|
5339
|
+
},
|
|
5340
|
+
{
|
|
5341
|
+
"required": false,
|
|
5342
|
+
"name": "branch",
|
|
5343
|
+
"in": "query",
|
|
5344
|
+
"description": "Branches.",
|
|
5345
|
+
"schema": {
|
|
5346
|
+
"type": "string"
|
|
5347
|
+
}
|
|
5348
|
+
},
|
|
5349
|
+
{
|
|
5350
|
+
"required": false,
|
|
5351
|
+
"name": "sha",
|
|
5352
|
+
"in": "query",
|
|
5353
|
+
"description": "Revisions: a full commit id or a prefix of at least seven characters.",
|
|
5354
|
+
"schema": {
|
|
5355
|
+
"type": "string"
|
|
5356
|
+
}
|
|
5357
|
+
},
|
|
5358
|
+
{
|
|
5359
|
+
"required": false,
|
|
5360
|
+
"name": "outcome",
|
|
5361
|
+
"in": "query",
|
|
5362
|
+
"description": "Statuses: `passed`, `failed`, `running`, `not-run`. A run's outcome is `failed` when any result failed, else `running`, else `passed`, else `not-run`.",
|
|
5363
|
+
"schema": {
|
|
5364
|
+
"type": "string"
|
|
5365
|
+
}
|
|
5366
|
+
},
|
|
5367
|
+
{
|
|
5368
|
+
"required": false,
|
|
5369
|
+
"name": "q",
|
|
5370
|
+
"in": "query",
|
|
5371
|
+
"description": "Words that must all appear in the title, id, spec, branch, producer, environment, tags or labels.",
|
|
5372
|
+
"schema": {
|
|
5373
|
+
"type": "string"
|
|
5374
|
+
}
|
|
5375
|
+
},
|
|
5376
|
+
{
|
|
5377
|
+
"required": false,
|
|
5378
|
+
"name": "since",
|
|
5379
|
+
"in": "query",
|
|
5380
|
+
"description": "Only records at or after this time: epoch milliseconds or an ISO date (a date alone is UTC). A result's recording time; a run's end.",
|
|
5381
|
+
"schema": {
|
|
5382
|
+
"type": "string"
|
|
5383
|
+
}
|
|
5384
|
+
},
|
|
5385
|
+
{
|
|
5386
|
+
"required": false,
|
|
5387
|
+
"name": "until",
|
|
5388
|
+
"in": "query",
|
|
5389
|
+
"description": "Only records at or before this time (same forms as `since`).",
|
|
5318
5390
|
"schema": {
|
|
5319
5391
|
"type": "string"
|
|
5320
5392
|
}
|
|
@@ -5347,11 +5419,11 @@
|
|
|
5347
5419
|
],
|
|
5348
5420
|
"responses": {
|
|
5349
5421
|
"200": {
|
|
5350
|
-
"description": "The
|
|
5422
|
+
"description": "The matching results and the facets.",
|
|
5351
5423
|
"content": {
|
|
5352
5424
|
"application/json": {
|
|
5353
5425
|
"schema": {
|
|
5354
|
-
"$ref": "#/components/schemas/
|
|
5426
|
+
"$ref": "#/components/schemas/ArtifactList"
|
|
5355
5427
|
}
|
|
5356
5428
|
}
|
|
5357
5429
|
}
|
|
@@ -5359,16 +5431,6 @@
|
|
|
5359
5431
|
"304": {
|
|
5360
5432
|
"description": "Unchanged since the `If-None-Match` ETag."
|
|
5361
5433
|
},
|
|
5362
|
-
"400": {
|
|
5363
|
-
"description": "No `key`.",
|
|
5364
|
-
"content": {
|
|
5365
|
-
"application/problem+json": {
|
|
5366
|
-
"schema": {
|
|
5367
|
-
"$ref": "#/components/schemas/Problem"
|
|
5368
|
-
}
|
|
5369
|
-
}
|
|
5370
|
-
}
|
|
5371
|
-
},
|
|
5372
5434
|
"401": {
|
|
5373
5435
|
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
5374
5436
|
"content": {
|
|
@@ -5379,18 +5441,8 @@
|
|
|
5379
5441
|
}
|
|
5380
5442
|
}
|
|
5381
5443
|
},
|
|
5382
|
-
"
|
|
5383
|
-
"description": "
|
|
5384
|
-
"content": {
|
|
5385
|
-
"application/problem+json": {
|
|
5386
|
-
"schema": {
|
|
5387
|
-
"$ref": "#/components/schemas/Problem"
|
|
5388
|
-
}
|
|
5389
|
-
}
|
|
5390
|
-
}
|
|
5391
|
-
},
|
|
5392
|
-
"503": {
|
|
5393
|
-
"description": "The server is still reading its backends. Retry after the number of seconds in `Retry-After`.",
|
|
5444
|
+
"503": {
|
|
5445
|
+
"description": "The server is still reading its backends. Retry after the number of seconds in `Retry-After`.",
|
|
5394
5446
|
"content": {
|
|
5395
5447
|
"application/problem+json": {
|
|
5396
5448
|
"schema": {
|
|
@@ -5402,14 +5454,14 @@
|
|
|
5402
5454
|
}
|
|
5403
5455
|
}
|
|
5404
5456
|
},
|
|
5405
|
-
"/api/projects/{project}/reports/
|
|
5457
|
+
"/api/projects/{project}/reports/artifacts": {
|
|
5406
5458
|
"get": {
|
|
5407
|
-
"operationId": "
|
|
5459
|
+
"operationId": "getReportArtifactsForProject",
|
|
5408
5460
|
"tags": [
|
|
5409
5461
|
"Report"
|
|
5410
5462
|
],
|
|
5411
|
-
"summary": "
|
|
5412
|
-
"description": "
|
|
5463
|
+
"summary": "Recorded results that carry evidence, across the whole history",
|
|
5464
|
+
"description": "Every recorded result that has attachments (recordings, screenshots, traces), newest first, found in the history and not only among the current winners: a recording tagged `demo` is found with its original run, revision and status even when a later attempt is untagged. Narrow it by artifact tag, media type, label, feature (`domain`, `spec`), environment or device, producer, branch, revision, outcome and time: AND across the parameters, OR within one; with both `artifactTag` and `type`, one artifact must be both. `filters` names the filters that were applied and `facets` offers each dimension's values with counts: the count beside a value is what the list would hold if that value alone were chosen in its dimension, every other filter applied. Tags written by reviewers after upload are not searched; only those in the layer are. Send `format=markdown` for Markdown.\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `read`.",
|
|
5413
5465
|
"x-atlas-role": "read",
|
|
5414
5466
|
"security": [
|
|
5415
5467
|
{
|
|
@@ -5433,10 +5485,156 @@
|
|
|
5433
5485
|
}
|
|
5434
5486
|
},
|
|
5435
5487
|
{
|
|
5436
|
-
"required":
|
|
5437
|
-
"name": "
|
|
5488
|
+
"required": false,
|
|
5489
|
+
"name": "limit",
|
|
5438
5490
|
"in": "query",
|
|
5439
|
-
"description": "
|
|
5491
|
+
"description": "At most this many results (default 100).",
|
|
5492
|
+
"schema": {
|
|
5493
|
+
"type": "integer",
|
|
5494
|
+
"minimum": 0
|
|
5495
|
+
}
|
|
5496
|
+
},
|
|
5497
|
+
{
|
|
5498
|
+
"required": false,
|
|
5499
|
+
"name": "offset",
|
|
5500
|
+
"in": "query",
|
|
5501
|
+
"description": "Skip this many matches (default 0).",
|
|
5502
|
+
"schema": {
|
|
5503
|
+
"type": "integer",
|
|
5504
|
+
"minimum": 0
|
|
5505
|
+
}
|
|
5506
|
+
},
|
|
5507
|
+
{
|
|
5508
|
+
"required": false,
|
|
5509
|
+
"name": "video",
|
|
5510
|
+
"in": "query",
|
|
5511
|
+
"description": "`true` for results with a playable video recording (the same as `type=video`).",
|
|
5512
|
+
"schema": {
|
|
5513
|
+
"type": "boolean"
|
|
5514
|
+
}
|
|
5515
|
+
},
|
|
5516
|
+
{
|
|
5517
|
+
"required": false,
|
|
5518
|
+
"name": "domain",
|
|
5519
|
+
"in": "query",
|
|
5520
|
+
"description": "The feature domain of the result's spec.",
|
|
5521
|
+
"schema": {
|
|
5522
|
+
"type": "string"
|
|
5523
|
+
}
|
|
5524
|
+
},
|
|
5525
|
+
{
|
|
5526
|
+
"required": false,
|
|
5527
|
+
"name": "spec",
|
|
5528
|
+
"in": "query",
|
|
5529
|
+
"description": "Spec paths.",
|
|
5530
|
+
"schema": {
|
|
5531
|
+
"type": "string"
|
|
5532
|
+
}
|
|
5533
|
+
},
|
|
5534
|
+
{
|
|
5535
|
+
"required": false,
|
|
5536
|
+
"name": "artifactTag",
|
|
5537
|
+
"in": "query",
|
|
5538
|
+
"description": "Artifact tags (`demo` and `#demo` are the same), repeatable or comma-separated. A comma or backslash inside a value is written `\\,` or `\\\\`. OR within the parameter, AND with the other filters.",
|
|
5539
|
+
"schema": {
|
|
5540
|
+
"type": "string"
|
|
5541
|
+
}
|
|
5542
|
+
},
|
|
5543
|
+
{
|
|
5544
|
+
"required": false,
|
|
5545
|
+
"name": "inherited",
|
|
5546
|
+
"in": "query",
|
|
5547
|
+
"description": "`1` with `artifactTag` to also match the tags attachments inherit from their check and run. Default: the exact artifact query.",
|
|
5548
|
+
"schema": {
|
|
5549
|
+
"type": "boolean"
|
|
5550
|
+
}
|
|
5551
|
+
},
|
|
5552
|
+
{
|
|
5553
|
+
"required": false,
|
|
5554
|
+
"name": "type",
|
|
5555
|
+
"in": "query",
|
|
5556
|
+
"description": "Media types as roles (`video`, `image`, `audio`, `snapshot`, `text`, `file`, or a producer's own). `video` means a playable recording. With `artifactTag`, one artifact must be both where the report says which videos carry which tags.",
|
|
5557
|
+
"schema": {
|
|
5558
|
+
"type": "string"
|
|
5559
|
+
}
|
|
5560
|
+
},
|
|
5561
|
+
{
|
|
5562
|
+
"required": false,
|
|
5563
|
+
"name": "label",
|
|
5564
|
+
"in": "query",
|
|
5565
|
+
"description": "`key=value`, or `key` for any value.",
|
|
5566
|
+
"schema": {
|
|
5567
|
+
"type": "string"
|
|
5568
|
+
}
|
|
5569
|
+
},
|
|
5570
|
+
{
|
|
5571
|
+
"required": false,
|
|
5572
|
+
"name": "environment",
|
|
5573
|
+
"in": "query",
|
|
5574
|
+
"description": "Environments or devices (`ios`, `desktop-web`).",
|
|
5575
|
+
"schema": {
|
|
5576
|
+
"type": "string"
|
|
5577
|
+
}
|
|
5578
|
+
},
|
|
5579
|
+
{
|
|
5580
|
+
"required": false,
|
|
5581
|
+
"name": "producer",
|
|
5582
|
+
"in": "query",
|
|
5583
|
+
"description": "Producers.",
|
|
5584
|
+
"schema": {
|
|
5585
|
+
"type": "string"
|
|
5586
|
+
}
|
|
5587
|
+
},
|
|
5588
|
+
{
|
|
5589
|
+
"required": false,
|
|
5590
|
+
"name": "branch",
|
|
5591
|
+
"in": "query",
|
|
5592
|
+
"description": "Branches.",
|
|
5593
|
+
"schema": {
|
|
5594
|
+
"type": "string"
|
|
5595
|
+
}
|
|
5596
|
+
},
|
|
5597
|
+
{
|
|
5598
|
+
"required": false,
|
|
5599
|
+
"name": "sha",
|
|
5600
|
+
"in": "query",
|
|
5601
|
+
"description": "Revisions: a full commit id or a prefix of at least seven characters.",
|
|
5602
|
+
"schema": {
|
|
5603
|
+
"type": "string"
|
|
5604
|
+
}
|
|
5605
|
+
},
|
|
5606
|
+
{
|
|
5607
|
+
"required": false,
|
|
5608
|
+
"name": "outcome",
|
|
5609
|
+
"in": "query",
|
|
5610
|
+
"description": "Statuses: `passed`, `failed`, `running`, `not-run`. A run's outcome is `failed` when any result failed, else `running`, else `passed`, else `not-run`.",
|
|
5611
|
+
"schema": {
|
|
5612
|
+
"type": "string"
|
|
5613
|
+
}
|
|
5614
|
+
},
|
|
5615
|
+
{
|
|
5616
|
+
"required": false,
|
|
5617
|
+
"name": "q",
|
|
5618
|
+
"in": "query",
|
|
5619
|
+
"description": "Words that must all appear in the title, id, spec, branch, producer, environment, tags or labels.",
|
|
5620
|
+
"schema": {
|
|
5621
|
+
"type": "string"
|
|
5622
|
+
}
|
|
5623
|
+
},
|
|
5624
|
+
{
|
|
5625
|
+
"required": false,
|
|
5626
|
+
"name": "since",
|
|
5627
|
+
"in": "query",
|
|
5628
|
+
"description": "Only records at or after this time: epoch milliseconds or an ISO date (a date alone is UTC). A result's recording time; a run's end.",
|
|
5629
|
+
"schema": {
|
|
5630
|
+
"type": "string"
|
|
5631
|
+
}
|
|
5632
|
+
},
|
|
5633
|
+
{
|
|
5634
|
+
"required": false,
|
|
5635
|
+
"name": "until",
|
|
5636
|
+
"in": "query",
|
|
5637
|
+
"description": "Only records at or before this time (same forms as `since`).",
|
|
5440
5638
|
"schema": {
|
|
5441
5639
|
"type": "string"
|
|
5442
5640
|
}
|
|
@@ -5457,11 +5655,11 @@
|
|
|
5457
5655
|
],
|
|
5458
5656
|
"responses": {
|
|
5459
5657
|
"200": {
|
|
5460
|
-
"description": "The
|
|
5658
|
+
"description": "The matching results and the facets.",
|
|
5461
5659
|
"content": {
|
|
5462
5660
|
"application/json": {
|
|
5463
5661
|
"schema": {
|
|
5464
|
-
"$ref": "#/components/schemas/
|
|
5662
|
+
"$ref": "#/components/schemas/ArtifactList"
|
|
5465
5663
|
}
|
|
5466
5664
|
}
|
|
5467
5665
|
}
|
|
@@ -5469,16 +5667,6 @@
|
|
|
5469
5667
|
"304": {
|
|
5470
5668
|
"description": "Unchanged since the `If-None-Match` ETag."
|
|
5471
5669
|
},
|
|
5472
|
-
"400": {
|
|
5473
|
-
"description": "No `key`.",
|
|
5474
|
-
"content": {
|
|
5475
|
-
"application/problem+json": {
|
|
5476
|
-
"schema": {
|
|
5477
|
-
"$ref": "#/components/schemas/Problem"
|
|
5478
|
-
}
|
|
5479
|
-
}
|
|
5480
|
-
}
|
|
5481
|
-
},
|
|
5482
5670
|
"401": {
|
|
5483
5671
|
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
5484
5672
|
"content": {
|
|
@@ -5489,16 +5677,6 @@
|
|
|
5489
5677
|
}
|
|
5490
5678
|
}
|
|
5491
5679
|
},
|
|
5492
|
-
"404": {
|
|
5493
|
-
"description": "No run has that key.",
|
|
5494
|
-
"content": {
|
|
5495
|
-
"application/problem+json": {
|
|
5496
|
-
"schema": {
|
|
5497
|
-
"$ref": "#/components/schemas/Problem"
|
|
5498
|
-
}
|
|
5499
|
-
}
|
|
5500
|
-
}
|
|
5501
|
-
},
|
|
5502
5680
|
"503": {
|
|
5503
5681
|
"description": "The server is still reading its backends. Retry after the number of seconds in `Retry-After`.",
|
|
5504
5682
|
"content": {
|
|
@@ -5512,14 +5690,14 @@
|
|
|
5512
5690
|
}
|
|
5513
5691
|
}
|
|
5514
5692
|
},
|
|
5515
|
-
"/api/reports/
|
|
5693
|
+
"/api/reports/runs/detail": {
|
|
5516
5694
|
"get": {
|
|
5517
|
-
"operationId": "
|
|
5695
|
+
"operationId": "getReportRun",
|
|
5518
5696
|
"tags": [
|
|
5519
5697
|
"Report"
|
|
5520
5698
|
],
|
|
5521
|
-
"summary": "
|
|
5522
|
-
"description": "
|
|
5699
|
+
"summary": "Every test one run recorded",
|
|
5700
|
+
"description": "One run and its last result for every test, environment and producer it recorded, failures first, and `layers`: each layer of the run with its backend, how many checks it recorded (zero means evidence only, never a pass) and how many files it carries as a whole. Open a layer's files with `/api/reports/evidence/detail/{backend}/{id}`. Send `format=markdown` for Markdown.\n\nRole needed: `read`.",
|
|
5523
5701
|
"x-atlas-role": "read",
|
|
5524
5702
|
"security": [
|
|
5525
5703
|
{
|
|
@@ -5530,6 +5708,28 @@
|
|
|
5530
5708
|
}
|
|
5531
5709
|
],
|
|
5532
5710
|
"parameters": [
|
|
5711
|
+
{
|
|
5712
|
+
"required": true,
|
|
5713
|
+
"name": "key",
|
|
5714
|
+
"in": "query",
|
|
5715
|
+
"description": "The run's `key` from `/api/reports/runs`, URL-encoded.",
|
|
5716
|
+
"schema": {
|
|
5717
|
+
"type": "string"
|
|
5718
|
+
}
|
|
5719
|
+
},
|
|
5720
|
+
{
|
|
5721
|
+
"required": false,
|
|
5722
|
+
"name": "format",
|
|
5723
|
+
"in": "query",
|
|
5724
|
+
"description": "`markdown` for Markdown instead of JSON.",
|
|
5725
|
+
"schema": {
|
|
5726
|
+
"type": "string",
|
|
5727
|
+
"enum": [
|
|
5728
|
+
"json",
|
|
5729
|
+
"markdown"
|
|
5730
|
+
]
|
|
5731
|
+
}
|
|
5732
|
+
},
|
|
5533
5733
|
{
|
|
5534
5734
|
"required": false,
|
|
5535
5735
|
"name": "project",
|
|
@@ -5545,11 +5745,24 @@
|
|
|
5545
5745
|
],
|
|
5546
5746
|
"responses": {
|
|
5547
5747
|
"200": {
|
|
5548
|
-
"description": "The
|
|
5748
|
+
"description": "The run and its results.",
|
|
5549
5749
|
"content": {
|
|
5550
5750
|
"application/json": {
|
|
5551
5751
|
"schema": {
|
|
5552
|
-
"$ref": "#/components/schemas/
|
|
5752
|
+
"$ref": "#/components/schemas/RunDetail"
|
|
5753
|
+
}
|
|
5754
|
+
}
|
|
5755
|
+
}
|
|
5756
|
+
},
|
|
5757
|
+
"304": {
|
|
5758
|
+
"description": "Unchanged since the `If-None-Match` ETag."
|
|
5759
|
+
},
|
|
5760
|
+
"400": {
|
|
5761
|
+
"description": "No `key`.",
|
|
5762
|
+
"content": {
|
|
5763
|
+
"application/problem+json": {
|
|
5764
|
+
"schema": {
|
|
5765
|
+
"$ref": "#/components/schemas/Problem"
|
|
5553
5766
|
}
|
|
5554
5767
|
}
|
|
5555
5768
|
}
|
|
@@ -5563,26 +5776,211 @@
|
|
|
5563
5776
|
}
|
|
5564
5777
|
}
|
|
5565
5778
|
}
|
|
5566
|
-
}
|
|
5567
|
-
}
|
|
5568
|
-
}
|
|
5569
|
-
},
|
|
5570
|
-
"/api/projects/{project}/reports/outline": {
|
|
5571
|
-
"get": {
|
|
5572
|
-
"operationId": "getOutlineForProject",
|
|
5573
|
-
"tags": [
|
|
5574
|
-
"Report"
|
|
5575
|
-
],
|
|
5576
|
-
"summary": "The specs a report is laid over",
|
|
5577
|
-
"description": "The specs of the newest committed spec set (of `main`, else the newest), so the report needs no checkout. Without a spec set, the specs the layers recorded (`specs[]`), newest per path. A spec here with no result shows as having none.\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `read`.",
|
|
5578
|
-
"x-atlas-role": "read",
|
|
5579
|
-
"security": [
|
|
5580
|
-
{
|
|
5581
|
-
"bearer": []
|
|
5582
5779
|
},
|
|
5583
|
-
{
|
|
5584
|
-
"
|
|
5585
|
-
|
|
5780
|
+
"404": {
|
|
5781
|
+
"description": "No run has that key.",
|
|
5782
|
+
"content": {
|
|
5783
|
+
"application/problem+json": {
|
|
5784
|
+
"schema": {
|
|
5785
|
+
"$ref": "#/components/schemas/Problem"
|
|
5786
|
+
}
|
|
5787
|
+
}
|
|
5788
|
+
}
|
|
5789
|
+
},
|
|
5790
|
+
"503": {
|
|
5791
|
+
"description": "The server is still reading its backends. Retry after the number of seconds in `Retry-After`.",
|
|
5792
|
+
"content": {
|
|
5793
|
+
"application/problem+json": {
|
|
5794
|
+
"schema": {
|
|
5795
|
+
"$ref": "#/components/schemas/Problem"
|
|
5796
|
+
}
|
|
5797
|
+
}
|
|
5798
|
+
}
|
|
5799
|
+
}
|
|
5800
|
+
}
|
|
5801
|
+
}
|
|
5802
|
+
},
|
|
5803
|
+
"/api/projects/{project}/reports/runs/detail": {
|
|
5804
|
+
"get": {
|
|
5805
|
+
"operationId": "getReportRunForProject",
|
|
5806
|
+
"tags": [
|
|
5807
|
+
"Report"
|
|
5808
|
+
],
|
|
5809
|
+
"summary": "Every test one run recorded",
|
|
5810
|
+
"description": "One run and its last result for every test, environment and producer it recorded, failures first, and `layers`: each layer of the run with its backend, how many checks it recorded (zero means evidence only, never a pass) and how many files it carries as a whole. Open a layer's files with `/api/reports/evidence/detail/{backend}/{id}`. Send `format=markdown` for Markdown.\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `read`.",
|
|
5811
|
+
"x-atlas-role": "read",
|
|
5812
|
+
"security": [
|
|
5813
|
+
{
|
|
5814
|
+
"bearer": []
|
|
5815
|
+
},
|
|
5816
|
+
{
|
|
5817
|
+
"basic": []
|
|
5818
|
+
}
|
|
5819
|
+
],
|
|
5820
|
+
"parameters": [
|
|
5821
|
+
{
|
|
5822
|
+
"required": true,
|
|
5823
|
+
"name": "project",
|
|
5824
|
+
"in": "path",
|
|
5825
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
5826
|
+
"example": "todo-app",
|
|
5827
|
+
"schema": {
|
|
5828
|
+
"type": "string",
|
|
5829
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
5830
|
+
"maxLength": 64
|
|
5831
|
+
}
|
|
5832
|
+
},
|
|
5833
|
+
{
|
|
5834
|
+
"required": true,
|
|
5835
|
+
"name": "key",
|
|
5836
|
+
"in": "query",
|
|
5837
|
+
"description": "The run's `key` from `/api/reports/runs`, URL-encoded.",
|
|
5838
|
+
"schema": {
|
|
5839
|
+
"type": "string"
|
|
5840
|
+
}
|
|
5841
|
+
},
|
|
5842
|
+
{
|
|
5843
|
+
"required": false,
|
|
5844
|
+
"name": "format",
|
|
5845
|
+
"in": "query",
|
|
5846
|
+
"description": "`markdown` for Markdown instead of JSON.",
|
|
5847
|
+
"schema": {
|
|
5848
|
+
"type": "string",
|
|
5849
|
+
"enum": [
|
|
5850
|
+
"json",
|
|
5851
|
+
"markdown"
|
|
5852
|
+
]
|
|
5853
|
+
}
|
|
5854
|
+
}
|
|
5855
|
+
],
|
|
5856
|
+
"responses": {
|
|
5857
|
+
"200": {
|
|
5858
|
+
"description": "The run and its results.",
|
|
5859
|
+
"content": {
|
|
5860
|
+
"application/json": {
|
|
5861
|
+
"schema": {
|
|
5862
|
+
"$ref": "#/components/schemas/RunDetail"
|
|
5863
|
+
}
|
|
5864
|
+
}
|
|
5865
|
+
}
|
|
5866
|
+
},
|
|
5867
|
+
"304": {
|
|
5868
|
+
"description": "Unchanged since the `If-None-Match` ETag."
|
|
5869
|
+
},
|
|
5870
|
+
"400": {
|
|
5871
|
+
"description": "No `key`.",
|
|
5872
|
+
"content": {
|
|
5873
|
+
"application/problem+json": {
|
|
5874
|
+
"schema": {
|
|
5875
|
+
"$ref": "#/components/schemas/Problem"
|
|
5876
|
+
}
|
|
5877
|
+
}
|
|
5878
|
+
}
|
|
5879
|
+
},
|
|
5880
|
+
"401": {
|
|
5881
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
5882
|
+
"content": {
|
|
5883
|
+
"application/problem+json": {
|
|
5884
|
+
"schema": {
|
|
5885
|
+
"$ref": "#/components/schemas/Problem"
|
|
5886
|
+
}
|
|
5887
|
+
}
|
|
5888
|
+
}
|
|
5889
|
+
},
|
|
5890
|
+
"404": {
|
|
5891
|
+
"description": "No run has that key.",
|
|
5892
|
+
"content": {
|
|
5893
|
+
"application/problem+json": {
|
|
5894
|
+
"schema": {
|
|
5895
|
+
"$ref": "#/components/schemas/Problem"
|
|
5896
|
+
}
|
|
5897
|
+
}
|
|
5898
|
+
}
|
|
5899
|
+
},
|
|
5900
|
+
"503": {
|
|
5901
|
+
"description": "The server is still reading its backends. Retry after the number of seconds in `Retry-After`.",
|
|
5902
|
+
"content": {
|
|
5903
|
+
"application/problem+json": {
|
|
5904
|
+
"schema": {
|
|
5905
|
+
"$ref": "#/components/schemas/Problem"
|
|
5906
|
+
}
|
|
5907
|
+
}
|
|
5908
|
+
}
|
|
5909
|
+
}
|
|
5910
|
+
}
|
|
5911
|
+
}
|
|
5912
|
+
},
|
|
5913
|
+
"/api/reports/outline": {
|
|
5914
|
+
"get": {
|
|
5915
|
+
"operationId": "getOutline",
|
|
5916
|
+
"tags": [
|
|
5917
|
+
"Report"
|
|
5918
|
+
],
|
|
5919
|
+
"summary": "The specs a report is laid over",
|
|
5920
|
+
"description": "The specs of the newest committed spec set (of `main`, else the newest), so the report needs no checkout. Without a spec set, the specs the layers recorded (`specs[]`), newest per path. A spec here with no result shows as having none.\n\nRole needed: `read`.",
|
|
5921
|
+
"x-atlas-role": "read",
|
|
5922
|
+
"security": [
|
|
5923
|
+
{
|
|
5924
|
+
"bearer": []
|
|
5925
|
+
},
|
|
5926
|
+
{
|
|
5927
|
+
"basic": []
|
|
5928
|
+
}
|
|
5929
|
+
],
|
|
5930
|
+
"parameters": [
|
|
5931
|
+
{
|
|
5932
|
+
"required": false,
|
|
5933
|
+
"name": "project",
|
|
5934
|
+
"in": "query",
|
|
5935
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
5936
|
+
"example": "todo-app",
|
|
5937
|
+
"schema": {
|
|
5938
|
+
"type": "string",
|
|
5939
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
5940
|
+
"maxLength": 64
|
|
5941
|
+
}
|
|
5942
|
+
}
|
|
5943
|
+
],
|
|
5944
|
+
"responses": {
|
|
5945
|
+
"200": {
|
|
5946
|
+
"description": "The outline.",
|
|
5947
|
+
"content": {
|
|
5948
|
+
"application/json": {
|
|
5949
|
+
"schema": {
|
|
5950
|
+
"$ref": "#/components/schemas/Outline"
|
|
5951
|
+
}
|
|
5952
|
+
}
|
|
5953
|
+
}
|
|
5954
|
+
},
|
|
5955
|
+
"401": {
|
|
5956
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
5957
|
+
"content": {
|
|
5958
|
+
"application/problem+json": {
|
|
5959
|
+
"schema": {
|
|
5960
|
+
"$ref": "#/components/schemas/Problem"
|
|
5961
|
+
}
|
|
5962
|
+
}
|
|
5963
|
+
}
|
|
5964
|
+
}
|
|
5965
|
+
}
|
|
5966
|
+
}
|
|
5967
|
+
},
|
|
5968
|
+
"/api/projects/{project}/reports/outline": {
|
|
5969
|
+
"get": {
|
|
5970
|
+
"operationId": "getOutlineForProject",
|
|
5971
|
+
"tags": [
|
|
5972
|
+
"Report"
|
|
5973
|
+
],
|
|
5974
|
+
"summary": "The specs a report is laid over",
|
|
5975
|
+
"description": "The specs of the newest committed spec set (of `main`, else the newest), so the report needs no checkout. Without a spec set, the specs the layers recorded (`specs[]`), newest per path. A spec here with no result shows as having none.\n\nScoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.\n\nRole needed: `read`.",
|
|
5976
|
+
"x-atlas-role": "read",
|
|
5977
|
+
"security": [
|
|
5978
|
+
{
|
|
5979
|
+
"bearer": []
|
|
5980
|
+
},
|
|
5981
|
+
{
|
|
5982
|
+
"basic": []
|
|
5983
|
+
}
|
|
5586
5984
|
],
|
|
5587
5985
|
"parameters": [
|
|
5588
5986
|
{
|
|
@@ -8946,6 +9344,19 @@
|
|
|
8946
9344
|
"minimum": 0,
|
|
8947
9345
|
"maximum": 9007199254740991
|
|
8948
9346
|
},
|
|
9347
|
+
"attemptStatuses": {
|
|
9348
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
9349
|
+
"type": "array",
|
|
9350
|
+
"items": {
|
|
9351
|
+
"type": "string",
|
|
9352
|
+
"enum": [
|
|
9353
|
+
"passed",
|
|
9354
|
+
"failed",
|
|
9355
|
+
"running",
|
|
9356
|
+
"not-run"
|
|
9357
|
+
]
|
|
9358
|
+
}
|
|
9359
|
+
},
|
|
8949
9360
|
"links": {
|
|
8950
9361
|
"type": "integer",
|
|
8951
9362
|
"minimum": 0,
|
|
@@ -9339,6 +9750,19 @@
|
|
|
9339
9750
|
"minimum": 0,
|
|
9340
9751
|
"maximum": 9007199254740991
|
|
9341
9752
|
},
|
|
9753
|
+
"attemptStatuses": {
|
|
9754
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
9755
|
+
"type": "array",
|
|
9756
|
+
"items": {
|
|
9757
|
+
"type": "string",
|
|
9758
|
+
"enum": [
|
|
9759
|
+
"passed",
|
|
9760
|
+
"failed",
|
|
9761
|
+
"running",
|
|
9762
|
+
"not-run"
|
|
9763
|
+
]
|
|
9764
|
+
}
|
|
9765
|
+
},
|
|
9342
9766
|
"links": {
|
|
9343
9767
|
"type": "integer",
|
|
9344
9768
|
"minimum": 0,
|
|
@@ -9840,6 +10264,19 @@
|
|
|
9840
10264
|
"minimum": 0,
|
|
9841
10265
|
"maximum": 9007199254740991
|
|
9842
10266
|
},
|
|
10267
|
+
"attemptStatuses": {
|
|
10268
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
10269
|
+
"type": "array",
|
|
10270
|
+
"items": {
|
|
10271
|
+
"type": "string",
|
|
10272
|
+
"enum": [
|
|
10273
|
+
"passed",
|
|
10274
|
+
"failed",
|
|
10275
|
+
"running",
|
|
10276
|
+
"not-run"
|
|
10277
|
+
]
|
|
10278
|
+
}
|
|
10279
|
+
},
|
|
9843
10280
|
"links": {
|
|
9844
10281
|
"type": "integer",
|
|
9845
10282
|
"minimum": 0,
|
|
@@ -10233,6 +10670,19 @@
|
|
|
10233
10670
|
"minimum": 0,
|
|
10234
10671
|
"maximum": 9007199254740991
|
|
10235
10672
|
},
|
|
10673
|
+
"attemptStatuses": {
|
|
10674
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
10675
|
+
"type": "array",
|
|
10676
|
+
"items": {
|
|
10677
|
+
"type": "string",
|
|
10678
|
+
"enum": [
|
|
10679
|
+
"passed",
|
|
10680
|
+
"failed",
|
|
10681
|
+
"running",
|
|
10682
|
+
"not-run"
|
|
10683
|
+
]
|
|
10684
|
+
}
|
|
10685
|
+
},
|
|
10236
10686
|
"links": {
|
|
10237
10687
|
"type": "integer",
|
|
10238
10688
|
"minimum": 0,
|
|
@@ -13628,6 +14078,19 @@
|
|
|
13628
14078
|
"minimum": 0,
|
|
13629
14079
|
"maximum": 9007199254740991
|
|
13630
14080
|
},
|
|
14081
|
+
"attemptStatuses": {
|
|
14082
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
14083
|
+
"type": "array",
|
|
14084
|
+
"items": {
|
|
14085
|
+
"type": "string",
|
|
14086
|
+
"enum": [
|
|
14087
|
+
"passed",
|
|
14088
|
+
"failed",
|
|
14089
|
+
"running",
|
|
14090
|
+
"not-run"
|
|
14091
|
+
]
|
|
14092
|
+
}
|
|
14093
|
+
},
|
|
13631
14094
|
"links": {
|
|
13632
14095
|
"type": "integer",
|
|
13633
14096
|
"minimum": 0,
|
|
@@ -14109,6 +14572,19 @@
|
|
|
14109
14572
|
"minimum": 0,
|
|
14110
14573
|
"maximum": 9007199254740991
|
|
14111
14574
|
},
|
|
14575
|
+
"attemptStatuses": {
|
|
14576
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
14577
|
+
"type": "array",
|
|
14578
|
+
"items": {
|
|
14579
|
+
"type": "string",
|
|
14580
|
+
"enum": [
|
|
14581
|
+
"passed",
|
|
14582
|
+
"failed",
|
|
14583
|
+
"running",
|
|
14584
|
+
"not-run"
|
|
14585
|
+
]
|
|
14586
|
+
}
|
|
14587
|
+
},
|
|
14112
14588
|
"links": {
|
|
14113
14589
|
"type": "integer",
|
|
14114
14590
|
"minimum": 0,
|
|
@@ -17263,6 +17739,10 @@
|
|
|
17263
17739
|
"type": "string",
|
|
17264
17740
|
"description": "Why it has its status, at most 500 characters"
|
|
17265
17741
|
},
|
|
17742
|
+
"specRevision": {
|
|
17743
|
+
"description": "The fingerprint of its spec text that the layer recorded, when it recorded one. Two results with different revisions were recorded against different promises. Absent: not recorded, never assumed to match",
|
|
17744
|
+
"type": "string"
|
|
17745
|
+
},
|
|
17266
17746
|
"evidence": {
|
|
17267
17747
|
"type": "object",
|
|
17268
17748
|
"properties": {
|
|
@@ -17286,6 +17766,19 @@
|
|
|
17286
17766
|
"minimum": 0,
|
|
17287
17767
|
"maximum": 9007199254740991
|
|
17288
17768
|
},
|
|
17769
|
+
"attemptStatuses": {
|
|
17770
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
17771
|
+
"type": "array",
|
|
17772
|
+
"items": {
|
|
17773
|
+
"type": "string",
|
|
17774
|
+
"enum": [
|
|
17775
|
+
"passed",
|
|
17776
|
+
"failed",
|
|
17777
|
+
"running",
|
|
17778
|
+
"not-run"
|
|
17779
|
+
]
|
|
17780
|
+
}
|
|
17781
|
+
},
|
|
17289
17782
|
"links": {
|
|
17290
17783
|
"type": "integer",
|
|
17291
17784
|
"minimum": 0,
|
|
@@ -18395,6 +18888,10 @@
|
|
|
18395
18888
|
"type": "string",
|
|
18396
18889
|
"description": "Why it has its status, at most 500 characters"
|
|
18397
18890
|
},
|
|
18891
|
+
"specRevision": {
|
|
18892
|
+
"description": "The fingerprint of its spec text that the layer recorded, when it recorded one. Two results with different revisions were recorded against different promises. Absent: not recorded, never assumed to match",
|
|
18893
|
+
"type": "string"
|
|
18894
|
+
},
|
|
18398
18895
|
"evidence": {
|
|
18399
18896
|
"type": "object",
|
|
18400
18897
|
"properties": {
|
|
@@ -18418,7 +18915,20 @@
|
|
|
18418
18915
|
"minimum": 0,
|
|
18419
18916
|
"maximum": 9007199254740991
|
|
18420
18917
|
},
|
|
18421
|
-
"
|
|
18918
|
+
"attemptStatuses": {
|
|
18919
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
18920
|
+
"type": "array",
|
|
18921
|
+
"items": {
|
|
18922
|
+
"type": "string",
|
|
18923
|
+
"enum": [
|
|
18924
|
+
"passed",
|
|
18925
|
+
"failed",
|
|
18926
|
+
"running",
|
|
18927
|
+
"not-run"
|
|
18928
|
+
]
|
|
18929
|
+
}
|
|
18930
|
+
},
|
|
18931
|
+
"links": {
|
|
18422
18932
|
"type": "integer",
|
|
18423
18933
|
"minimum": 0,
|
|
18424
18934
|
"maximum": 9007199254740991
|
|
@@ -19031,6 +19541,10 @@
|
|
|
19031
19541
|
"type": "string",
|
|
19032
19542
|
"description": "Why it has its status, at most 500 characters"
|
|
19033
19543
|
},
|
|
19544
|
+
"specRevision": {
|
|
19545
|
+
"description": "The fingerprint of its spec text that the layer recorded, when it recorded one. Two results with different revisions were recorded against different promises. Absent: not recorded, never assumed to match",
|
|
19546
|
+
"type": "string"
|
|
19547
|
+
},
|
|
19034
19548
|
"evidence": {
|
|
19035
19549
|
"type": "object",
|
|
19036
19550
|
"properties": {
|
|
@@ -19054,6 +19568,19 @@
|
|
|
19054
19568
|
"minimum": 0,
|
|
19055
19569
|
"maximum": 9007199254740991
|
|
19056
19570
|
},
|
|
19571
|
+
"attemptStatuses": {
|
|
19572
|
+
"description": "The status of each recorded try, in the order they were made. Absent when no try was recorded, and in reports written before this was recorded: a first try is then unknown, never assumed to have passed",
|
|
19573
|
+
"type": "array",
|
|
19574
|
+
"items": {
|
|
19575
|
+
"type": "string",
|
|
19576
|
+
"enum": [
|
|
19577
|
+
"passed",
|
|
19578
|
+
"failed",
|
|
19579
|
+
"running",
|
|
19580
|
+
"not-run"
|
|
19581
|
+
]
|
|
19582
|
+
}
|
|
19583
|
+
},
|
|
19057
19584
|
"links": {
|
|
19058
19585
|
"type": "integer",
|
|
19059
19586
|
"minimum": 0,
|
|
@@ -19358,6 +19885,633 @@
|
|
|
19358
19885
|
],
|
|
19359
19886
|
"additionalProperties": {}
|
|
19360
19887
|
},
|
|
19888
|
+
"TestReliability": {
|
|
19889
|
+
"type": "object",
|
|
19890
|
+
"properties": {
|
|
19891
|
+
"schemaVersion": {
|
|
19892
|
+
"type": "number",
|
|
19893
|
+
"const": 1
|
|
19894
|
+
},
|
|
19895
|
+
"key": {
|
|
19896
|
+
"type": "string",
|
|
19897
|
+
"description": "The test's key"
|
|
19898
|
+
},
|
|
19899
|
+
"scope": {
|
|
19900
|
+
"type": "object",
|
|
19901
|
+
"properties": {
|
|
19902
|
+
"environment": {
|
|
19903
|
+
"type": "array",
|
|
19904
|
+
"items": {
|
|
19905
|
+
"type": "string"
|
|
19906
|
+
}
|
|
19907
|
+
},
|
|
19908
|
+
"producer": {
|
|
19909
|
+
"type": "array",
|
|
19910
|
+
"items": {
|
|
19911
|
+
"type": "string"
|
|
19912
|
+
}
|
|
19913
|
+
},
|
|
19914
|
+
"parameter": {
|
|
19915
|
+
"type": "array",
|
|
19916
|
+
"items": {
|
|
19917
|
+
"type": "string"
|
|
19918
|
+
}
|
|
19919
|
+
},
|
|
19920
|
+
"branch": {
|
|
19921
|
+
"type": "array",
|
|
19922
|
+
"items": {
|
|
19923
|
+
"type": "string"
|
|
19924
|
+
}
|
|
19925
|
+
},
|
|
19926
|
+
"sha": {
|
|
19927
|
+
"type": "array",
|
|
19928
|
+
"items": {
|
|
19929
|
+
"type": "string"
|
|
19930
|
+
}
|
|
19931
|
+
},
|
|
19932
|
+
"specRevision": {
|
|
19933
|
+
"type": "array",
|
|
19934
|
+
"items": {
|
|
19935
|
+
"type": "string"
|
|
19936
|
+
}
|
|
19937
|
+
},
|
|
19938
|
+
"revision": {
|
|
19939
|
+
"type": "string",
|
|
19940
|
+
"enum": [
|
|
19941
|
+
"current",
|
|
19942
|
+
"any"
|
|
19943
|
+
]
|
|
19944
|
+
},
|
|
19945
|
+
"since": {
|
|
19946
|
+
"type": "number"
|
|
19947
|
+
},
|
|
19948
|
+
"until": {
|
|
19949
|
+
"type": "number"
|
|
19950
|
+
}
|
|
19951
|
+
},
|
|
19952
|
+
"additionalProperties": {},
|
|
19953
|
+
"description": "What was asked: the selection the figures are about"
|
|
19954
|
+
},
|
|
19955
|
+
"minimumExecutions": {
|
|
19956
|
+
"type": "integer",
|
|
19957
|
+
"exclusiveMinimum": 0,
|
|
19958
|
+
"maximum": 9007199254740991,
|
|
19959
|
+
"description": "Completed executions below which the sample is `insufficient`"
|
|
19960
|
+
},
|
|
19961
|
+
"sample": {
|
|
19962
|
+
"type": "string",
|
|
19963
|
+
"enum": [
|
|
19964
|
+
"none",
|
|
19965
|
+
"insufficient",
|
|
19966
|
+
"sufficient"
|
|
19967
|
+
],
|
|
19968
|
+
"description": "A count only: it says nothing about whether the executions are representative; read `notes`"
|
|
19969
|
+
},
|
|
19970
|
+
"eventual": {
|
|
19971
|
+
"type": "object",
|
|
19972
|
+
"properties": {
|
|
19973
|
+
"executions": {
|
|
19974
|
+
"type": "integer",
|
|
19975
|
+
"minimum": 0,
|
|
19976
|
+
"maximum": 9007199254740991,
|
|
19977
|
+
"description": "Independent executions that passed or failed"
|
|
19978
|
+
},
|
|
19979
|
+
"passed": {
|
|
19980
|
+
"type": "integer",
|
|
19981
|
+
"minimum": 0,
|
|
19982
|
+
"maximum": 9007199254740991
|
|
19983
|
+
},
|
|
19984
|
+
"failed": {
|
|
19985
|
+
"type": "integer",
|
|
19986
|
+
"minimum": 0,
|
|
19987
|
+
"maximum": 9007199254740991
|
|
19988
|
+
},
|
|
19989
|
+
"rate": {
|
|
19990
|
+
"description": "passed / executions, or null with none",
|
|
19991
|
+
"type": [
|
|
19992
|
+
"number",
|
|
19993
|
+
"null"
|
|
19994
|
+
]
|
|
19995
|
+
}
|
|
19996
|
+
},
|
|
19997
|
+
"required": [
|
|
19998
|
+
"executions",
|
|
19999
|
+
"passed",
|
|
20000
|
+
"failed",
|
|
20001
|
+
"rate"
|
|
20002
|
+
],
|
|
20003
|
+
"additionalProperties": {},
|
|
20004
|
+
"description": "Executions that passed in the end, over those that passed or failed"
|
|
20005
|
+
},
|
|
20006
|
+
"interval": {
|
|
20007
|
+
"anyOf": [
|
|
20008
|
+
{
|
|
20009
|
+
"type": "object",
|
|
20010
|
+
"properties": {
|
|
20011
|
+
"method": {
|
|
20012
|
+
"type": "string",
|
|
20013
|
+
"const": "wilson"
|
|
20014
|
+
},
|
|
20015
|
+
"level": {
|
|
20016
|
+
"type": "number"
|
|
20017
|
+
},
|
|
20018
|
+
"lower": {
|
|
20019
|
+
"type": "number"
|
|
20020
|
+
},
|
|
20021
|
+
"upper": {
|
|
20022
|
+
"type": "number"
|
|
20023
|
+
},
|
|
20024
|
+
"assumptions": {
|
|
20025
|
+
"type": "string"
|
|
20026
|
+
}
|
|
20027
|
+
},
|
|
20028
|
+
"required": [
|
|
20029
|
+
"method",
|
|
20030
|
+
"level",
|
|
20031
|
+
"lower",
|
|
20032
|
+
"upper",
|
|
20033
|
+
"assumptions"
|
|
20034
|
+
],
|
|
20035
|
+
"additionalProperties": {}
|
|
20036
|
+
},
|
|
20037
|
+
{
|
|
20038
|
+
"type": "null"
|
|
20039
|
+
}
|
|
20040
|
+
],
|
|
20041
|
+
"description": "An interval estimate with the assumptions it needs; null without an execution"
|
|
20042
|
+
},
|
|
20043
|
+
"firstAttempt": {
|
|
20044
|
+
"type": "object",
|
|
20045
|
+
"properties": {
|
|
20046
|
+
"executions": {
|
|
20047
|
+
"type": "integer",
|
|
20048
|
+
"minimum": 0,
|
|
20049
|
+
"maximum": 9007199254740991,
|
|
20050
|
+
"description": "Independent executions that passed or failed"
|
|
20051
|
+
},
|
|
20052
|
+
"passed": {
|
|
20053
|
+
"type": "integer",
|
|
20054
|
+
"minimum": 0,
|
|
20055
|
+
"maximum": 9007199254740991
|
|
20056
|
+
},
|
|
20057
|
+
"failed": {
|
|
20058
|
+
"type": "integer",
|
|
20059
|
+
"minimum": 0,
|
|
20060
|
+
"maximum": 9007199254740991
|
|
20061
|
+
},
|
|
20062
|
+
"rate": {
|
|
20063
|
+
"description": "passed / executions, or null with none",
|
|
20064
|
+
"type": [
|
|
20065
|
+
"number",
|
|
20066
|
+
"null"
|
|
20067
|
+
]
|
|
20068
|
+
}
|
|
20069
|
+
},
|
|
20070
|
+
"required": [
|
|
20071
|
+
"executions",
|
|
20072
|
+
"passed",
|
|
20073
|
+
"failed",
|
|
20074
|
+
"rate"
|
|
20075
|
+
],
|
|
20076
|
+
"additionalProperties": {},
|
|
20077
|
+
"description": "Over the executions that recorded their tries: those whose first try passed"
|
|
20078
|
+
},
|
|
20079
|
+
"unrecordedAttempts": {
|
|
20080
|
+
"type": "integer",
|
|
20081
|
+
"minimum": 0,
|
|
20082
|
+
"maximum": 9007199254740991,
|
|
20083
|
+
"description": "Counted executions that recorded no tries: their first try is unknown, never assumed to have passed"
|
|
20084
|
+
},
|
|
20085
|
+
"attempts": {
|
|
20086
|
+
"type": "object",
|
|
20087
|
+
"properties": {
|
|
20088
|
+
"total": {
|
|
20089
|
+
"type": "integer",
|
|
20090
|
+
"minimum": 0,
|
|
20091
|
+
"maximum": 9007199254740991
|
|
20092
|
+
},
|
|
20093
|
+
"retried": {
|
|
20094
|
+
"type": "integer",
|
|
20095
|
+
"minimum": 0,
|
|
20096
|
+
"maximum": 9007199254740991
|
|
20097
|
+
},
|
|
20098
|
+
"recovered": {
|
|
20099
|
+
"type": "integer",
|
|
20100
|
+
"minimum": 0,
|
|
20101
|
+
"maximum": 9007199254740991
|
|
20102
|
+
}
|
|
20103
|
+
},
|
|
20104
|
+
"required": [
|
|
20105
|
+
"total",
|
|
20106
|
+
"retried",
|
|
20107
|
+
"recovered"
|
|
20108
|
+
],
|
|
20109
|
+
"additionalProperties": {}
|
|
20110
|
+
},
|
|
20111
|
+
"currentRevision": {
|
|
20112
|
+
"description": "The spec revision `revision=current` counted, or null",
|
|
20113
|
+
"type": [
|
|
20114
|
+
"string",
|
|
20115
|
+
"null"
|
|
20116
|
+
]
|
|
20117
|
+
},
|
|
20118
|
+
"historical": {
|
|
20119
|
+
"type": "object",
|
|
20120
|
+
"properties": {
|
|
20121
|
+
"executions": {
|
|
20122
|
+
"type": "integer",
|
|
20123
|
+
"minimum": 0,
|
|
20124
|
+
"maximum": 9007199254740991
|
|
20125
|
+
},
|
|
20126
|
+
"passed": {
|
|
20127
|
+
"type": "integer",
|
|
20128
|
+
"minimum": 0,
|
|
20129
|
+
"maximum": 9007199254740991
|
|
20130
|
+
},
|
|
20131
|
+
"failed": {
|
|
20132
|
+
"type": "integer",
|
|
20133
|
+
"minimum": 0,
|
|
20134
|
+
"maximum": 9007199254740991
|
|
20135
|
+
},
|
|
20136
|
+
"revisions": {
|
|
20137
|
+
"type": "array",
|
|
20138
|
+
"items": {
|
|
20139
|
+
"type": "object",
|
|
20140
|
+
"properties": {
|
|
20141
|
+
"specRevision": {
|
|
20142
|
+
"type": "string"
|
|
20143
|
+
},
|
|
20144
|
+
"executions": {
|
|
20145
|
+
"type": "integer",
|
|
20146
|
+
"minimum": 0,
|
|
20147
|
+
"maximum": 9007199254740991
|
|
20148
|
+
}
|
|
20149
|
+
},
|
|
20150
|
+
"required": [
|
|
20151
|
+
"specRevision",
|
|
20152
|
+
"executions"
|
|
20153
|
+
],
|
|
20154
|
+
"additionalProperties": {}
|
|
20155
|
+
}
|
|
20156
|
+
}
|
|
20157
|
+
},
|
|
20158
|
+
"required": [
|
|
20159
|
+
"executions",
|
|
20160
|
+
"passed",
|
|
20161
|
+
"failed",
|
|
20162
|
+
"revisions"
|
|
20163
|
+
],
|
|
20164
|
+
"additionalProperties": {},
|
|
20165
|
+
"description": "Earlier spec revisions: context only, counted nowhere above"
|
|
20166
|
+
},
|
|
20167
|
+
"excluded": {
|
|
20168
|
+
"type": "object",
|
|
20169
|
+
"propertyNames": {
|
|
20170
|
+
"type": "string"
|
|
20171
|
+
},
|
|
20172
|
+
"additionalProperties": {
|
|
20173
|
+
"type": "integer",
|
|
20174
|
+
"minimum": 0,
|
|
20175
|
+
"maximum": 9007199254740991
|
|
20176
|
+
},
|
|
20177
|
+
"description": "Executions in the scope that are not trials, by reason: `not-run`, `unfinished`, `unknown-status`, `historical-revision`, `revision-not-recorded`"
|
|
20178
|
+
},
|
|
20179
|
+
"outsideScope": {
|
|
20180
|
+
"type": "integer",
|
|
20181
|
+
"minimum": 0,
|
|
20182
|
+
"maximum": 9007199254740991,
|
|
20183
|
+
"description": "Executions the scope did not select"
|
|
20184
|
+
},
|
|
20185
|
+
"snapshots": {
|
|
20186
|
+
"type": "integer",
|
|
20187
|
+
"minimum": 0,
|
|
20188
|
+
"maximum": 9007199254740991,
|
|
20189
|
+
"description": "Raw recorded snapshots behind the counted executions"
|
|
20190
|
+
},
|
|
20191
|
+
"cohorts": {
|
|
20192
|
+
"type": "array",
|
|
20193
|
+
"items": {
|
|
20194
|
+
"type": "object",
|
|
20195
|
+
"properties": {
|
|
20196
|
+
"executions": {
|
|
20197
|
+
"type": "integer",
|
|
20198
|
+
"minimum": 0,
|
|
20199
|
+
"maximum": 9007199254740991,
|
|
20200
|
+
"description": "Independent executions that passed or failed"
|
|
20201
|
+
},
|
|
20202
|
+
"passed": {
|
|
20203
|
+
"type": "integer",
|
|
20204
|
+
"minimum": 0,
|
|
20205
|
+
"maximum": 9007199254740991
|
|
20206
|
+
},
|
|
20207
|
+
"failed": {
|
|
20208
|
+
"type": "integer",
|
|
20209
|
+
"minimum": 0,
|
|
20210
|
+
"maximum": 9007199254740991
|
|
20211
|
+
},
|
|
20212
|
+
"rate": {
|
|
20213
|
+
"description": "passed / executions, or null with none",
|
|
20214
|
+
"type": [
|
|
20215
|
+
"number",
|
|
20216
|
+
"null"
|
|
20217
|
+
]
|
|
20218
|
+
},
|
|
20219
|
+
"environment": {
|
|
20220
|
+
"type": [
|
|
20221
|
+
"string",
|
|
20222
|
+
"null"
|
|
20223
|
+
]
|
|
20224
|
+
},
|
|
20225
|
+
"producer": {
|
|
20226
|
+
"type": "string"
|
|
20227
|
+
},
|
|
20228
|
+
"parameters": {
|
|
20229
|
+
"type": "object",
|
|
20230
|
+
"propertyNames": {
|
|
20231
|
+
"type": "string"
|
|
20232
|
+
},
|
|
20233
|
+
"additionalProperties": {
|
|
20234
|
+
"type": "string"
|
|
20235
|
+
}
|
|
20236
|
+
}
|
|
20237
|
+
},
|
|
20238
|
+
"required": [
|
|
20239
|
+
"executions",
|
|
20240
|
+
"passed",
|
|
20241
|
+
"failed",
|
|
20242
|
+
"rate",
|
|
20243
|
+
"environment",
|
|
20244
|
+
"producer",
|
|
20245
|
+
"parameters"
|
|
20246
|
+
],
|
|
20247
|
+
"additionalProperties": {}
|
|
20248
|
+
}
|
|
20249
|
+
},
|
|
20250
|
+
"available": {
|
|
20251
|
+
"type": "object",
|
|
20252
|
+
"properties": {
|
|
20253
|
+
"environments": {
|
|
20254
|
+
"type": "array",
|
|
20255
|
+
"items": {
|
|
20256
|
+
"type": "object",
|
|
20257
|
+
"properties": {
|
|
20258
|
+
"value": {
|
|
20259
|
+
"type": "string"
|
|
20260
|
+
},
|
|
20261
|
+
"count": {
|
|
20262
|
+
"type": "integer",
|
|
20263
|
+
"minimum": 0,
|
|
20264
|
+
"maximum": 9007199254740991
|
|
20265
|
+
}
|
|
20266
|
+
},
|
|
20267
|
+
"required": [
|
|
20268
|
+
"value",
|
|
20269
|
+
"count"
|
|
20270
|
+
],
|
|
20271
|
+
"additionalProperties": {}
|
|
20272
|
+
}
|
|
20273
|
+
},
|
|
20274
|
+
"producers": {
|
|
20275
|
+
"type": "array",
|
|
20276
|
+
"items": {
|
|
20277
|
+
"type": "object",
|
|
20278
|
+
"properties": {
|
|
20279
|
+
"value": {
|
|
20280
|
+
"type": "string"
|
|
20281
|
+
},
|
|
20282
|
+
"count": {
|
|
20283
|
+
"type": "integer",
|
|
20284
|
+
"minimum": 0,
|
|
20285
|
+
"maximum": 9007199254740991
|
|
20286
|
+
}
|
|
20287
|
+
},
|
|
20288
|
+
"required": [
|
|
20289
|
+
"value",
|
|
20290
|
+
"count"
|
|
20291
|
+
],
|
|
20292
|
+
"additionalProperties": {}
|
|
20293
|
+
}
|
|
20294
|
+
},
|
|
20295
|
+
"branches": {
|
|
20296
|
+
"type": "array",
|
|
20297
|
+
"items": {
|
|
20298
|
+
"type": "object",
|
|
20299
|
+
"properties": {
|
|
20300
|
+
"value": {
|
|
20301
|
+
"type": "string"
|
|
20302
|
+
},
|
|
20303
|
+
"count": {
|
|
20304
|
+
"type": "integer",
|
|
20305
|
+
"minimum": 0,
|
|
20306
|
+
"maximum": 9007199254740991
|
|
20307
|
+
}
|
|
20308
|
+
},
|
|
20309
|
+
"required": [
|
|
20310
|
+
"value",
|
|
20311
|
+
"count"
|
|
20312
|
+
],
|
|
20313
|
+
"additionalProperties": {}
|
|
20314
|
+
}
|
|
20315
|
+
},
|
|
20316
|
+
"specRevisions": {
|
|
20317
|
+
"type": "array",
|
|
20318
|
+
"items": {
|
|
20319
|
+
"type": "object",
|
|
20320
|
+
"properties": {
|
|
20321
|
+
"value": {
|
|
20322
|
+
"type": "string"
|
|
20323
|
+
},
|
|
20324
|
+
"count": {
|
|
20325
|
+
"type": "integer",
|
|
20326
|
+
"minimum": 0,
|
|
20327
|
+
"maximum": 9007199254740991
|
|
20328
|
+
}
|
|
20329
|
+
},
|
|
20330
|
+
"required": [
|
|
20331
|
+
"value",
|
|
20332
|
+
"count"
|
|
20333
|
+
],
|
|
20334
|
+
"additionalProperties": {}
|
|
20335
|
+
}
|
|
20336
|
+
}
|
|
20337
|
+
},
|
|
20338
|
+
"required": [
|
|
20339
|
+
"environments",
|
|
20340
|
+
"producers",
|
|
20341
|
+
"branches",
|
|
20342
|
+
"specRevisions"
|
|
20343
|
+
],
|
|
20344
|
+
"additionalProperties": {},
|
|
20345
|
+
"description": "What a scope could choose among, with independent executions"
|
|
20346
|
+
},
|
|
20347
|
+
"notes": {
|
|
20348
|
+
"type": "array",
|
|
20349
|
+
"items": {
|
|
20350
|
+
"type": "object",
|
|
20351
|
+
"properties": {
|
|
20352
|
+
"code": {
|
|
20353
|
+
"type": "string",
|
|
20354
|
+
"description": "An open set: treat a code you do not know as informational"
|
|
20355
|
+
},
|
|
20356
|
+
"severity": {
|
|
20357
|
+
"type": "string",
|
|
20358
|
+
"enum": [
|
|
20359
|
+
"warning",
|
|
20360
|
+
"info"
|
|
20361
|
+
]
|
|
20362
|
+
},
|
|
20363
|
+
"message": {
|
|
20364
|
+
"type": "string"
|
|
20365
|
+
}
|
|
20366
|
+
},
|
|
20367
|
+
"required": [
|
|
20368
|
+
"code",
|
|
20369
|
+
"severity",
|
|
20370
|
+
"message"
|
|
20371
|
+
],
|
|
20372
|
+
"additionalProperties": {}
|
|
20373
|
+
}
|
|
20374
|
+
},
|
|
20375
|
+
"executions": {
|
|
20376
|
+
"type": "array",
|
|
20377
|
+
"items": {
|
|
20378
|
+
"type": "object",
|
|
20379
|
+
"properties": {
|
|
20380
|
+
"run": {
|
|
20381
|
+
"type": "string"
|
|
20382
|
+
},
|
|
20383
|
+
"at": {
|
|
20384
|
+
"type": "number"
|
|
20385
|
+
},
|
|
20386
|
+
"status": {
|
|
20387
|
+
"type": "string"
|
|
20388
|
+
},
|
|
20389
|
+
"counted": {
|
|
20390
|
+
"type": "boolean"
|
|
20391
|
+
},
|
|
20392
|
+
"excluded": {
|
|
20393
|
+
"type": "string"
|
|
20394
|
+
},
|
|
20395
|
+
"environment": {
|
|
20396
|
+
"type": [
|
|
20397
|
+
"string",
|
|
20398
|
+
"null"
|
|
20399
|
+
]
|
|
20400
|
+
},
|
|
20401
|
+
"producer": {
|
|
20402
|
+
"type": "string"
|
|
20403
|
+
},
|
|
20404
|
+
"kind": {
|
|
20405
|
+
"type": "string"
|
|
20406
|
+
},
|
|
20407
|
+
"parameters": {
|
|
20408
|
+
"type": "object",
|
|
20409
|
+
"propertyNames": {
|
|
20410
|
+
"type": "string"
|
|
20411
|
+
},
|
|
20412
|
+
"additionalProperties": {
|
|
20413
|
+
"type": "string"
|
|
20414
|
+
}
|
|
20415
|
+
},
|
|
20416
|
+
"branch": {
|
|
20417
|
+
"type": [
|
|
20418
|
+
"string",
|
|
20419
|
+
"null"
|
|
20420
|
+
]
|
|
20421
|
+
},
|
|
20422
|
+
"sha": {
|
|
20423
|
+
"type": [
|
|
20424
|
+
"string",
|
|
20425
|
+
"null"
|
|
20426
|
+
]
|
|
20427
|
+
},
|
|
20428
|
+
"runUrl": {
|
|
20429
|
+
"type": [
|
|
20430
|
+
"string",
|
|
20431
|
+
"null"
|
|
20432
|
+
]
|
|
20433
|
+
},
|
|
20434
|
+
"layer": {
|
|
20435
|
+
"type": "string"
|
|
20436
|
+
},
|
|
20437
|
+
"backend": {
|
|
20438
|
+
"type": "string"
|
|
20439
|
+
},
|
|
20440
|
+
"durationMs": {
|
|
20441
|
+
"type": [
|
|
20442
|
+
"number",
|
|
20443
|
+
"null"
|
|
20444
|
+
]
|
|
20445
|
+
},
|
|
20446
|
+
"specRevision": {
|
|
20447
|
+
"type": "string"
|
|
20448
|
+
},
|
|
20449
|
+
"snapshots": {
|
|
20450
|
+
"type": "integer",
|
|
20451
|
+
"exclusiveMinimum": 0,
|
|
20452
|
+
"maximum": 9007199254740991
|
|
20453
|
+
},
|
|
20454
|
+
"attempts": {
|
|
20455
|
+
"description": "The status of each recorded try, in order",
|
|
20456
|
+
"type": "array",
|
|
20457
|
+
"items": {
|
|
20458
|
+
"type": "string"
|
|
20459
|
+
}
|
|
20460
|
+
},
|
|
20461
|
+
"firstAttempt": {
|
|
20462
|
+
"type": "string"
|
|
20463
|
+
},
|
|
20464
|
+
"republished": {
|
|
20465
|
+
"type": "boolean",
|
|
20466
|
+
"description": "A failed snapshot of this execution was followed by a later one"
|
|
20467
|
+
}
|
|
20468
|
+
},
|
|
20469
|
+
"required": [
|
|
20470
|
+
"run",
|
|
20471
|
+
"at",
|
|
20472
|
+
"status",
|
|
20473
|
+
"counted",
|
|
20474
|
+
"environment",
|
|
20475
|
+
"producer",
|
|
20476
|
+
"kind",
|
|
20477
|
+
"parameters",
|
|
20478
|
+
"branch",
|
|
20479
|
+
"sha",
|
|
20480
|
+
"runUrl",
|
|
20481
|
+
"layer",
|
|
20482
|
+
"backend",
|
|
20483
|
+
"durationMs",
|
|
20484
|
+
"snapshots",
|
|
20485
|
+
"republished"
|
|
20486
|
+
],
|
|
20487
|
+
"additionalProperties": {}
|
|
20488
|
+
},
|
|
20489
|
+
"description": "Every independent execution of the selection, newest first: the denominator, open to inspection"
|
|
20490
|
+
}
|
|
20491
|
+
},
|
|
20492
|
+
"required": [
|
|
20493
|
+
"schemaVersion",
|
|
20494
|
+
"key",
|
|
20495
|
+
"scope",
|
|
20496
|
+
"minimumExecutions",
|
|
20497
|
+
"sample",
|
|
20498
|
+
"eventual",
|
|
20499
|
+
"interval",
|
|
20500
|
+
"firstAttempt",
|
|
20501
|
+
"unrecordedAttempts",
|
|
20502
|
+
"attempts",
|
|
20503
|
+
"currentRevision",
|
|
20504
|
+
"historical",
|
|
20505
|
+
"excluded",
|
|
20506
|
+
"outsideScope",
|
|
20507
|
+
"snapshots",
|
|
20508
|
+
"cohorts",
|
|
20509
|
+
"available",
|
|
20510
|
+
"notes",
|
|
20511
|
+
"executions"
|
|
20512
|
+
],
|
|
20513
|
+
"additionalProperties": {}
|
|
20514
|
+
},
|
|
19361
20515
|
"RunList": {
|
|
19362
20516
|
"type": "object",
|
|
19363
20517
|
"properties": {
|