@crvouga/atlas 0.16.0 → 0.17.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 +6 -0
- package/dist/reports/src/attachment-files.d.ts +3 -1
- package/dist/reports/src/attachment-files.js +14 -4
- package/dist/reports/src/evidence-types.d.ts +22 -0
- package/dist/reports/src/layer-merge.js +5 -0
- package/dist/reports/src/layer-types.d.ts +1 -1
- package/dist/reports/src/publish-checks.js +11 -3
- package/dist/reports/src/recording-receipt.d.ts +48 -0
- package/dist/reports/src/recording-receipt.js +103 -0
- package/dist/reports/src/report-cli.d.ts +1 -1
- package/dist/reports/src/report-cli.js +20 -2
- package/dist/reports/src/report-status.d.ts +2 -0
- package/dist/reports/src/report-status.js +17 -1
- package/dist/reports/src/reports-explorer-route.d.ts +8 -0
- package/dist/reports/src/reports-route.d.ts +8 -0
- package/dist/schema/src/api.d.ts +65 -0
- package/dist/schema/src/api.js +7 -2
- package/dist/schema/src/cli-results.d.ts +107 -2
- package/dist/schema/src/cli-results.js +11 -3
- package/dist/schema/src/layer.d.ts +165 -0
- package/dist/schema/src/layer.js +72 -1
- package/docs/reference/cli.md +5 -0
- package/docs/reference/reports.md +94 -2
- package/docs/reference/schema.md +59 -0
- package/docs/rich-evidence.md +29 -0
- package/llms-full.txt +34 -0
- package/package.json +1 -1
- package/packages/schema/schemas/check-detail.schema.json +20 -0
- package/packages/schema/schemas/effective-delta.schema.json +61 -0
- package/packages/schema/schemas/effective-evidence.schema.json +61 -0
- package/packages/schema/schemas/evidence-page.schema.json +45 -0
- package/packages/schema/schemas/layer-rows.schema.json +16 -0
- package/packages/schema/schemas/layer.schema.json +153 -0
- package/packages/schema/schemas/publish-checks.schema.json +24 -0
- package/packages/schema/schemas/publish-result.schema.json +161 -1
- package/packages/schema/schemas/report-status.schema.json +104 -0
- package/packages/server/openapi.json +331 -0
- package/packages/visualizer/src/evidence/marks.tsx +16 -0
|
@@ -7882,6 +7882,22 @@
|
|
|
7882
7882
|
"roles"
|
|
7883
7883
|
],
|
|
7884
7884
|
"additionalProperties": {}
|
|
7885
|
+
},
|
|
7886
|
+
"recording": {
|
|
7887
|
+
"description": "What became of the check's expected recording: uploaded, referenced, skipped, unresolved or not-applicable. Independent of `status`",
|
|
7888
|
+
"type": "object",
|
|
7889
|
+
"properties": {
|
|
7890
|
+
"state": {
|
|
7891
|
+
"type": "string"
|
|
7892
|
+
},
|
|
7893
|
+
"reason": {
|
|
7894
|
+
"type": "string"
|
|
7895
|
+
}
|
|
7896
|
+
},
|
|
7897
|
+
"required": [
|
|
7898
|
+
"state"
|
|
7899
|
+
],
|
|
7900
|
+
"additionalProperties": {}
|
|
7885
7901
|
}
|
|
7886
7902
|
},
|
|
7887
7903
|
"required": [
|
|
@@ -8156,6 +8172,51 @@
|
|
|
8156
8172
|
"roles"
|
|
8157
8173
|
],
|
|
8158
8174
|
"additionalProperties": {}
|
|
8175
|
+
},
|
|
8176
|
+
"recordings": {
|
|
8177
|
+
"description": "How many of the recordings the layer expected were published. Absent: the layer declared no expectations, so its completeness is unknown, not complete",
|
|
8178
|
+
"type": "object",
|
|
8179
|
+
"properties": {
|
|
8180
|
+
"expected": {
|
|
8181
|
+
"type": "integer",
|
|
8182
|
+
"minimum": 0,
|
|
8183
|
+
"maximum": 9007199254740991
|
|
8184
|
+
},
|
|
8185
|
+
"uploaded": {
|
|
8186
|
+
"type": "integer",
|
|
8187
|
+
"minimum": 0,
|
|
8188
|
+
"maximum": 9007199254740991
|
|
8189
|
+
},
|
|
8190
|
+
"referenced": {
|
|
8191
|
+
"type": "integer",
|
|
8192
|
+
"minimum": 0,
|
|
8193
|
+
"maximum": 9007199254740991
|
|
8194
|
+
},
|
|
8195
|
+
"skipped": {
|
|
8196
|
+
"type": "integer",
|
|
8197
|
+
"minimum": 0,
|
|
8198
|
+
"maximum": 9007199254740991
|
|
8199
|
+
},
|
|
8200
|
+
"unresolved": {
|
|
8201
|
+
"type": "integer",
|
|
8202
|
+
"minimum": 0,
|
|
8203
|
+
"maximum": 9007199254740991
|
|
8204
|
+
},
|
|
8205
|
+
"notApplicable": {
|
|
8206
|
+
"type": "integer",
|
|
8207
|
+
"minimum": 0,
|
|
8208
|
+
"maximum": 9007199254740991
|
|
8209
|
+
}
|
|
8210
|
+
},
|
|
8211
|
+
"required": [
|
|
8212
|
+
"expected",
|
|
8213
|
+
"uploaded",
|
|
8214
|
+
"referenced",
|
|
8215
|
+
"skipped",
|
|
8216
|
+
"unresolved",
|
|
8217
|
+
"notApplicable"
|
|
8218
|
+
],
|
|
8219
|
+
"additionalProperties": {}
|
|
8159
8220
|
}
|
|
8160
8221
|
},
|
|
8161
8222
|
"required": [
|
|
@@ -8451,6 +8512,22 @@
|
|
|
8451
8512
|
"roles"
|
|
8452
8513
|
],
|
|
8453
8514
|
"additionalProperties": {}
|
|
8515
|
+
},
|
|
8516
|
+
"recording": {
|
|
8517
|
+
"description": "What became of the check's expected recording: uploaded, referenced, skipped, unresolved or not-applicable. Independent of `status`",
|
|
8518
|
+
"type": "object",
|
|
8519
|
+
"properties": {
|
|
8520
|
+
"state": {
|
|
8521
|
+
"type": "string"
|
|
8522
|
+
},
|
|
8523
|
+
"reason": {
|
|
8524
|
+
"type": "string"
|
|
8525
|
+
}
|
|
8526
|
+
},
|
|
8527
|
+
"required": [
|
|
8528
|
+
"state"
|
|
8529
|
+
],
|
|
8530
|
+
"additionalProperties": {}
|
|
8454
8531
|
}
|
|
8455
8532
|
},
|
|
8456
8533
|
"required": [
|
|
@@ -8725,6 +8802,51 @@
|
|
|
8725
8802
|
"roles"
|
|
8726
8803
|
],
|
|
8727
8804
|
"additionalProperties": {}
|
|
8805
|
+
},
|
|
8806
|
+
"recordings": {
|
|
8807
|
+
"description": "How many of the recordings the layer expected were published. Absent: the layer declared no expectations, so its completeness is unknown, not complete",
|
|
8808
|
+
"type": "object",
|
|
8809
|
+
"properties": {
|
|
8810
|
+
"expected": {
|
|
8811
|
+
"type": "integer",
|
|
8812
|
+
"minimum": 0,
|
|
8813
|
+
"maximum": 9007199254740991
|
|
8814
|
+
},
|
|
8815
|
+
"uploaded": {
|
|
8816
|
+
"type": "integer",
|
|
8817
|
+
"minimum": 0,
|
|
8818
|
+
"maximum": 9007199254740991
|
|
8819
|
+
},
|
|
8820
|
+
"referenced": {
|
|
8821
|
+
"type": "integer",
|
|
8822
|
+
"minimum": 0,
|
|
8823
|
+
"maximum": 9007199254740991
|
|
8824
|
+
},
|
|
8825
|
+
"skipped": {
|
|
8826
|
+
"type": "integer",
|
|
8827
|
+
"minimum": 0,
|
|
8828
|
+
"maximum": 9007199254740991
|
|
8829
|
+
},
|
|
8830
|
+
"unresolved": {
|
|
8831
|
+
"type": "integer",
|
|
8832
|
+
"minimum": 0,
|
|
8833
|
+
"maximum": 9007199254740991
|
|
8834
|
+
},
|
|
8835
|
+
"notApplicable": {
|
|
8836
|
+
"type": "integer",
|
|
8837
|
+
"minimum": 0,
|
|
8838
|
+
"maximum": 9007199254740991
|
|
8839
|
+
}
|
|
8840
|
+
},
|
|
8841
|
+
"required": [
|
|
8842
|
+
"expected",
|
|
8843
|
+
"uploaded",
|
|
8844
|
+
"referenced",
|
|
8845
|
+
"skipped",
|
|
8846
|
+
"unresolved",
|
|
8847
|
+
"notApplicable"
|
|
8848
|
+
],
|
|
8849
|
+
"additionalProperties": {}
|
|
8728
8850
|
}
|
|
8729
8851
|
},
|
|
8730
8852
|
"required": [
|
|
@@ -9164,6 +9286,110 @@
|
|
|
9164
9286
|
"additionalProperties": {}
|
|
9165
9287
|
},
|
|
9166
9288
|
"description": "Each slot whose newest completed result failed, or that is still running"
|
|
9289
|
+
},
|
|
9290
|
+
"recordings": {
|
|
9291
|
+
"description": "Whether the recordings the producers expected were published, separately from `ok`. It never changes `ok`",
|
|
9292
|
+
"type": "object",
|
|
9293
|
+
"properties": {
|
|
9294
|
+
"state": {
|
|
9295
|
+
"type": "string",
|
|
9296
|
+
"enum": [
|
|
9297
|
+
"complete",
|
|
9298
|
+
"incomplete",
|
|
9299
|
+
"none-expected",
|
|
9300
|
+
"unknown"
|
|
9301
|
+
]
|
|
9302
|
+
},
|
|
9303
|
+
"expected": {
|
|
9304
|
+
"type": "integer",
|
|
9305
|
+
"minimum": 0,
|
|
9306
|
+
"maximum": 9007199254740991
|
|
9307
|
+
},
|
|
9308
|
+
"uploaded": {
|
|
9309
|
+
"type": "integer",
|
|
9310
|
+
"minimum": 0,
|
|
9311
|
+
"maximum": 9007199254740991
|
|
9312
|
+
},
|
|
9313
|
+
"referenced": {
|
|
9314
|
+
"type": "integer",
|
|
9315
|
+
"minimum": 0,
|
|
9316
|
+
"maximum": 9007199254740991
|
|
9317
|
+
},
|
|
9318
|
+
"skipped": {
|
|
9319
|
+
"type": "integer",
|
|
9320
|
+
"minimum": 0,
|
|
9321
|
+
"maximum": 9007199254740991
|
|
9322
|
+
},
|
|
9323
|
+
"unresolved": {
|
|
9324
|
+
"type": "integer",
|
|
9325
|
+
"minimum": 0,
|
|
9326
|
+
"maximum": 9007199254740991
|
|
9327
|
+
},
|
|
9328
|
+
"notApplicable": {
|
|
9329
|
+
"type": "integer",
|
|
9330
|
+
"minimum": 0,
|
|
9331
|
+
"maximum": 9007199254740991
|
|
9332
|
+
},
|
|
9333
|
+
"layersWithoutReceipt": {
|
|
9334
|
+
"type": "integer",
|
|
9335
|
+
"minimum": 0,
|
|
9336
|
+
"maximum": 9007199254740991,
|
|
9337
|
+
"description": "Layers that contribute results but declared no recording expectations: their completeness is unknown"
|
|
9338
|
+
},
|
|
9339
|
+
"gaps": {
|
|
9340
|
+
"type": "array",
|
|
9341
|
+
"items": {
|
|
9342
|
+
"type": "object",
|
|
9343
|
+
"properties": {
|
|
9344
|
+
"spec": {
|
|
9345
|
+
"type": [
|
|
9346
|
+
"string",
|
|
9347
|
+
"null"
|
|
9348
|
+
]
|
|
9349
|
+
},
|
|
9350
|
+
"check": {
|
|
9351
|
+
"type": "string"
|
|
9352
|
+
},
|
|
9353
|
+
"layer": {
|
|
9354
|
+
"type": "string"
|
|
9355
|
+
},
|
|
9356
|
+
"environment": {
|
|
9357
|
+
"type": [
|
|
9358
|
+
"string",
|
|
9359
|
+
"null"
|
|
9360
|
+
]
|
|
9361
|
+
},
|
|
9362
|
+
"state": {
|
|
9363
|
+
"type": "string"
|
|
9364
|
+
},
|
|
9365
|
+
"reason": {
|
|
9366
|
+
"type": "string"
|
|
9367
|
+
}
|
|
9368
|
+
},
|
|
9369
|
+
"required": [
|
|
9370
|
+
"spec",
|
|
9371
|
+
"check",
|
|
9372
|
+
"layer",
|
|
9373
|
+
"environment",
|
|
9374
|
+
"state"
|
|
9375
|
+
],
|
|
9376
|
+
"additionalProperties": {}
|
|
9377
|
+
},
|
|
9378
|
+
"description": "Each expected recording that is skipped or unresolved"
|
|
9379
|
+
}
|
|
9380
|
+
},
|
|
9381
|
+
"required": [
|
|
9382
|
+
"state",
|
|
9383
|
+
"expected",
|
|
9384
|
+
"uploaded",
|
|
9385
|
+
"referenced",
|
|
9386
|
+
"skipped",
|
|
9387
|
+
"unresolved",
|
|
9388
|
+
"notApplicable",
|
|
9389
|
+
"layersWithoutReceipt",
|
|
9390
|
+
"gaps"
|
|
9391
|
+
],
|
|
9392
|
+
"additionalProperties": {}
|
|
9167
9393
|
}
|
|
9168
9394
|
},
|
|
9169
9395
|
"required": [
|
|
@@ -9254,6 +9480,10 @@
|
|
|
9254
9480
|
"type": "number",
|
|
9255
9481
|
"minimum": 0
|
|
9256
9482
|
},
|
|
9483
|
+
"recordingExpectation": {
|
|
9484
|
+
"description": "`required`: expect a video of this check, and report whether it was published. `not-applicable`: intentionally unrecorded. Absent: no expectation. Never changes the check's status",
|
|
9485
|
+
"type": "string"
|
|
9486
|
+
},
|
|
9257
9487
|
"tags": {
|
|
9258
9488
|
"description": "Free labels to filter and group by: smoke, slow, flaky…",
|
|
9259
9489
|
"type": "array",
|
|
@@ -9350,6 +9580,10 @@
|
|
|
9350
9580
|
"description": {
|
|
9351
9581
|
"type": "string"
|
|
9352
9582
|
},
|
|
9583
|
+
"omitted": {
|
|
9584
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
9585
|
+
"type": "string"
|
|
9586
|
+
},
|
|
9353
9587
|
"tags": {
|
|
9354
9588
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
9355
9589
|
"type": "array",
|
|
@@ -9594,6 +9828,10 @@
|
|
|
9594
9828
|
"description": {
|
|
9595
9829
|
"type": "string"
|
|
9596
9830
|
},
|
|
9831
|
+
"omitted": {
|
|
9832
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
9833
|
+
"type": "string"
|
|
9834
|
+
},
|
|
9597
9835
|
"tags": {
|
|
9598
9836
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
9599
9837
|
"type": "array",
|
|
@@ -9875,6 +10113,10 @@
|
|
|
9875
10113
|
"description": {
|
|
9876
10114
|
"type": "string"
|
|
9877
10115
|
},
|
|
10116
|
+
"omitted": {
|
|
10117
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
10118
|
+
"type": "string"
|
|
10119
|
+
},
|
|
9878
10120
|
"tags": {
|
|
9879
10121
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
9880
10122
|
"type": "array",
|
|
@@ -10092,6 +10334,10 @@
|
|
|
10092
10334
|
"description": {
|
|
10093
10335
|
"type": "string"
|
|
10094
10336
|
},
|
|
10337
|
+
"omitted": {
|
|
10338
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
10339
|
+
"type": "string"
|
|
10340
|
+
},
|
|
10095
10341
|
"tags": {
|
|
10096
10342
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
10097
10343
|
"type": "array",
|
|
@@ -10479,6 +10725,10 @@
|
|
|
10479
10725
|
"description": {
|
|
10480
10726
|
"type": "string"
|
|
10481
10727
|
},
|
|
10728
|
+
"omitted": {
|
|
10729
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
10730
|
+
"type": "string"
|
|
10731
|
+
},
|
|
10482
10732
|
"tags": {
|
|
10483
10733
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
10484
10734
|
"type": "array",
|
|
@@ -11021,6 +11271,51 @@
|
|
|
11021
11271
|
"roles"
|
|
11022
11272
|
],
|
|
11023
11273
|
"additionalProperties": {}
|
|
11274
|
+
},
|
|
11275
|
+
"recordings": {
|
|
11276
|
+
"description": "How many of the recordings the layer expected were published. Absent: the layer declared no expectations, so its completeness is unknown, not complete",
|
|
11277
|
+
"type": "object",
|
|
11278
|
+
"properties": {
|
|
11279
|
+
"expected": {
|
|
11280
|
+
"type": "integer",
|
|
11281
|
+
"minimum": 0,
|
|
11282
|
+
"maximum": 9007199254740991
|
|
11283
|
+
},
|
|
11284
|
+
"uploaded": {
|
|
11285
|
+
"type": "integer",
|
|
11286
|
+
"minimum": 0,
|
|
11287
|
+
"maximum": 9007199254740991
|
|
11288
|
+
},
|
|
11289
|
+
"referenced": {
|
|
11290
|
+
"type": "integer",
|
|
11291
|
+
"minimum": 0,
|
|
11292
|
+
"maximum": 9007199254740991
|
|
11293
|
+
},
|
|
11294
|
+
"skipped": {
|
|
11295
|
+
"type": "integer",
|
|
11296
|
+
"minimum": 0,
|
|
11297
|
+
"maximum": 9007199254740991
|
|
11298
|
+
},
|
|
11299
|
+
"unresolved": {
|
|
11300
|
+
"type": "integer",
|
|
11301
|
+
"minimum": 0,
|
|
11302
|
+
"maximum": 9007199254740991
|
|
11303
|
+
},
|
|
11304
|
+
"notApplicable": {
|
|
11305
|
+
"type": "integer",
|
|
11306
|
+
"minimum": 0,
|
|
11307
|
+
"maximum": 9007199254740991
|
|
11308
|
+
}
|
|
11309
|
+
},
|
|
11310
|
+
"required": [
|
|
11311
|
+
"expected",
|
|
11312
|
+
"uploaded",
|
|
11313
|
+
"referenced",
|
|
11314
|
+
"skipped",
|
|
11315
|
+
"unresolved",
|
|
11316
|
+
"notApplicable"
|
|
11317
|
+
],
|
|
11318
|
+
"additionalProperties": {}
|
|
11024
11319
|
}
|
|
11025
11320
|
},
|
|
11026
11321
|
"required": [
|
|
@@ -11296,6 +11591,22 @@
|
|
|
11296
11591
|
"roles"
|
|
11297
11592
|
],
|
|
11298
11593
|
"additionalProperties": {}
|
|
11594
|
+
},
|
|
11595
|
+
"recording": {
|
|
11596
|
+
"description": "What became of the check's expected recording: uploaded, referenced, skipped, unresolved or not-applicable. Independent of `status`",
|
|
11597
|
+
"type": "object",
|
|
11598
|
+
"properties": {
|
|
11599
|
+
"state": {
|
|
11600
|
+
"type": "string"
|
|
11601
|
+
},
|
|
11602
|
+
"reason": {
|
|
11603
|
+
"type": "string"
|
|
11604
|
+
}
|
|
11605
|
+
},
|
|
11606
|
+
"required": [
|
|
11607
|
+
"state"
|
|
11608
|
+
],
|
|
11609
|
+
"additionalProperties": {}
|
|
11299
11610
|
}
|
|
11300
11611
|
},
|
|
11301
11612
|
"required": [
|
|
@@ -11404,6 +11715,10 @@
|
|
|
11404
11715
|
"type": "number",
|
|
11405
11716
|
"minimum": 0
|
|
11406
11717
|
},
|
|
11718
|
+
"recordingExpectation": {
|
|
11719
|
+
"description": "`required`: expect a video of this check, and report whether it was published. `not-applicable`: intentionally unrecorded. Absent: no expectation. Never changes the check's status",
|
|
11720
|
+
"type": "string"
|
|
11721
|
+
},
|
|
11407
11722
|
"tags": {
|
|
11408
11723
|
"description": "Free labels to filter and group by: smoke, slow, flaky…",
|
|
11409
11724
|
"type": "array",
|
|
@@ -11500,6 +11815,10 @@
|
|
|
11500
11815
|
"description": {
|
|
11501
11816
|
"type": "string"
|
|
11502
11817
|
},
|
|
11818
|
+
"omitted": {
|
|
11819
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
11820
|
+
"type": "string"
|
|
11821
|
+
},
|
|
11503
11822
|
"tags": {
|
|
11504
11823
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
11505
11824
|
"type": "array",
|
|
@@ -11735,6 +12054,10 @@
|
|
|
11735
12054
|
"description": {
|
|
11736
12055
|
"type": "string"
|
|
11737
12056
|
},
|
|
12057
|
+
"omitted": {
|
|
12058
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
12059
|
+
"type": "string"
|
|
12060
|
+
},
|
|
11738
12061
|
"tags": {
|
|
11739
12062
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
11740
12063
|
"type": "array",
|
|
@@ -12007,6 +12330,10 @@
|
|
|
12007
12330
|
"description": {
|
|
12008
12331
|
"type": "string"
|
|
12009
12332
|
},
|
|
12333
|
+
"omitted": {
|
|
12334
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
12335
|
+
"type": "string"
|
|
12336
|
+
},
|
|
12010
12337
|
"tags": {
|
|
12011
12338
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
12012
12339
|
"type": "array",
|
|
@@ -12214,6 +12541,10 @@
|
|
|
12214
12541
|
"description": {
|
|
12215
12542
|
"type": "string"
|
|
12216
12543
|
},
|
|
12544
|
+
"omitted": {
|
|
12545
|
+
"description": "Why the producer did not include its bytes, in an open vocabulary: too-large, not-found, not-allowed, over-budget, policy… Present on a metadata-only attachment, so a reader can tell \"left out\" from \"never recorded\"",
|
|
12546
|
+
"type": "string"
|
|
12547
|
+
},
|
|
12217
12548
|
"tags": {
|
|
12218
12549
|
"description": "Free labels of this one attachment, such as `demo`: shown as `#demo`, searchable, and normalized by `normalizeTag` (a leading `#` and letter case never matter). Unlike the tags of a check they say nothing about its result",
|
|
12219
12550
|
"type": "array",
|
|
@@ -82,12 +82,28 @@ export function CountLine({ summary, noun, nouns }: { summary: SpecSummary; noun
|
|
|
82
82
|
export function backendLabel(backends: readonly BackendInfo[], id: string) {
|
|
83
83
|
return backends.find((backend) => backend.id === id)?.label ?? id;
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Recording completeness of a layer, apart from its test outcomes: how many expected videos were published. A layer
|
|
87
|
+
* that declared no expectations returns null (its completeness is unknown, so nothing is claimed).
|
|
88
|
+
*/
|
|
89
|
+
export function recordingLabel(layer: Pick<LayerHeader, 'recordings'>): { text: string; incomplete: boolean } | null {
|
|
90
|
+
const recordings = layer.recordings;
|
|
91
|
+
if (!recordings || recordings.expected === 0) return null;
|
|
92
|
+
const published = recordings.uploaded + recordings.referenced;
|
|
93
|
+
return { text: `Recordings ${published} of ${recordings.expected}`, incomplete: recordings.skipped + recordings.unresolved > 0 };
|
|
94
|
+
}
|
|
85
95
|
/** A result's provenance; incomplete origin data is stated explicitly. */
|
|
86
96
|
export function Origin({ layer, backends, now }: { layer: LayerHeader; backends: readonly BackendInfo[]; now: number }) {
|
|
87
97
|
const sha = shortSha(layer.sha);
|
|
98
|
+
const recording = recordingLabel(layer);
|
|
88
99
|
return (
|
|
89
100
|
<Flex component="span" display="inline-flex" wrap="wrap" gap="xs" align="center" c="dimmed" fz="xs">
|
|
90
101
|
{layer.live && <Badge size="sm">Running now</Badge>}
|
|
102
|
+
{recording && (
|
|
103
|
+
<Badge size="sm" variant="light" color={recording.incomplete ? 'orange' : 'gray'} title={recording.incomplete ? 'Some expected recordings were not published. The test outcomes are unaffected.' : 'Every expected recording was published.'}>
|
|
104
|
+
{recording.incomplete ? `${recording.text}: incomplete` : recording.text}
|
|
105
|
+
</Badge>
|
|
106
|
+
)}
|
|
91
107
|
<Text span inherit>
|
|
92
108
|
{backendLabel(backends, layer.backend)}
|
|
93
109
|
</Text>
|