@crvouga/atlas 0.14.0 → 0.15.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/artifact-tag-store.d.ts +20 -0
- package/dist/reports/src/artifact-tag-store.js +70 -0
- package/dist/reports/src/artifact-tags.d.ts +96 -0
- package/dist/reports/src/artifact-tags.js +96 -0
- package/dist/reports/src/evidence-detail.d.ts +1 -1
- package/dist/reports/src/evidence-detail.js +6 -2
- package/dist/reports/src/evidence-types.d.ts +2 -0
- package/dist/reports/src/reports-explorer-route.d.ts +8 -0
- package/dist/reports/src/reports-route.d.ts +8 -0
- package/dist/reports/src/test-catalog.d.ts +11 -23
- package/dist/reports/src/test-catalog.js +42 -4
- package/dist/schema/src/api.d.ts +79 -0
- package/dist/schema/src/api.js +31 -1
- package/dist/schema/src/layer.d.ts +33 -0
- package/dist/schema/src/layer.js +11 -1
- package/dist/server/src/app.js +32 -1
- package/dist/server/src/openapi.d.ts +1 -1
- package/dist/server/src/openapi.js +18 -2
- package/docs/extending.md +3 -0
- package/docs/reference/http-api.md +48 -0
- package/docs/reference/reports.md +217 -2
- package/docs/reference/schema.md +32 -0
- package/docs/rich-evidence.md +28 -0
- package/docs/server.md +24 -0
- package/llms-full.txt +103 -0
- package/package.json +1 -1
- package/packages/schema/schemas/check-detail.schema.json +28 -0
- package/packages/schema/schemas/effective-delta.schema.json +14 -0
- package/packages/schema/schemas/effective-evidence.schema.json +14 -0
- package/packages/schema/schemas/evidence-page.schema.json +7 -0
- package/packages/schema/schemas/layer-rows.schema.json +7 -0
- package/packages/schema/schemas/layer.schema.json +70 -0
- package/packages/schema/schemas/publish-checks.schema.json +35 -0
- package/packages/schema/schemas/test-catalog.schema.json +42 -0
- package/packages/schema/schemas/test-history.schema.json +28 -0
- package/packages/server/openapi.json +732 -1
- package/packages/visualizer/src/evidence/artifact-tags.tsx +285 -0
- package/packages/visualizer/src/evidence/artifacts.tsx +18 -12
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "Atlas server API",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.5.0",
|
|
6
6
|
"summary": "Take in test results from every environment, keep them, and show everyone the combined report, live.",
|
|
7
7
|
"description": "One Atlas node serves multiple projects. Clients select a project using ?project=<slug>, X-Atlas-Project, or /api/projects/<slug>/… . Each project has independent specs, layers, recordings, status, and event streams. Within each project, the newest completed result of every check wins its slot. Unqualified requests address the legacy default project.\n\n**Authentication.** With tokens configured, send `Authorization: Bearer <token>`. Roles: `read` < `publish` < `admin`. Uploading needs a Bearer token; a browser's HTTP Basic sign-in (any user name, the token as the password) is accepted for reading only. A server with no tokens is open and listens on this machine only unless told otherwise.\n\n**Errors** are [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) problem documents (`application/problem+json`) with a `detail` that says what to do. `401` send a token, `403` that token may not, `409` upload what this depends on first or you are changing something immutable, `413` too large, `422` not valid, `503` still starting (retry after `Retry-After`).\n\n**Compatibility.** Within `/api` the API only grows: optional parameters, optional response fields, new events. Ignore what you do not know.\n\nGuides: `/llms.txt`. Source: https://github.com/crvouga/atlas.",
|
|
8
8
|
"license": {
|
|
@@ -3058,6 +3058,29 @@
|
|
|
3058
3058
|
"type": "string"
|
|
3059
3059
|
}
|
|
3060
3060
|
},
|
|
3061
|
+
{
|
|
3062
|
+
"required": false,
|
|
3063
|
+
"name": "artifactTag",
|
|
3064
|
+
"in": "query",
|
|
3065
|
+
"description": "Only tests with an attachment tagged this (`demo` and `#demo` are the same tag), not counting tags inherited from a check or run: the exact artifact query. `inherited=1` widens it to the tags inherited from the check and run. Repeatable or comma-separated.",
|
|
3066
|
+
"example": "demo",
|
|
3067
|
+
"schema": {
|
|
3068
|
+
"type": "string"
|
|
3069
|
+
}
|
|
3070
|
+
},
|
|
3071
|
+
{
|
|
3072
|
+
"required": false,
|
|
3073
|
+
"name": "inherited",
|
|
3074
|
+
"in": "query",
|
|
3075
|
+
"description": "With `artifactTag`: `1` also matches the tags an attachment inherits from its check and run, so a recording without a tag of its own under a run tagged `demo` is found. Without it the query is exact.",
|
|
3076
|
+
"schema": {
|
|
3077
|
+
"type": "string",
|
|
3078
|
+
"enum": [
|
|
3079
|
+
"1",
|
|
3080
|
+
"true"
|
|
3081
|
+
]
|
|
3082
|
+
}
|
|
3083
|
+
},
|
|
3061
3084
|
{
|
|
3062
3085
|
"required": false,
|
|
3063
3086
|
"name": "run",
|
|
@@ -3274,6 +3297,29 @@
|
|
|
3274
3297
|
"type": "string"
|
|
3275
3298
|
}
|
|
3276
3299
|
},
|
|
3300
|
+
{
|
|
3301
|
+
"required": false,
|
|
3302
|
+
"name": "artifactTag",
|
|
3303
|
+
"in": "query",
|
|
3304
|
+
"description": "Only tests with an attachment tagged this (`demo` and `#demo` are the same tag), not counting tags inherited from a check or run: the exact artifact query. `inherited=1` widens it to the tags inherited from the check and run. Repeatable or comma-separated.",
|
|
3305
|
+
"example": "demo",
|
|
3306
|
+
"schema": {
|
|
3307
|
+
"type": "string"
|
|
3308
|
+
}
|
|
3309
|
+
},
|
|
3310
|
+
{
|
|
3311
|
+
"required": false,
|
|
3312
|
+
"name": "inherited",
|
|
3313
|
+
"in": "query",
|
|
3314
|
+
"description": "With `artifactTag`: `1` also matches the tags an attachment inherits from its check and run, so a recording without a tag of its own under a run tagged `demo` is found. Without it the query is exact.",
|
|
3315
|
+
"schema": {
|
|
3316
|
+
"type": "string",
|
|
3317
|
+
"enum": [
|
|
3318
|
+
"1",
|
|
3319
|
+
"true"
|
|
3320
|
+
]
|
|
3321
|
+
}
|
|
3322
|
+
},
|
|
3277
3323
|
{
|
|
3278
3324
|
"required": false,
|
|
3279
3325
|
"name": "run",
|
|
@@ -3801,6 +3847,298 @@
|
|
|
3801
3847
|
}
|
|
3802
3848
|
}
|
|
3803
3849
|
},
|
|
3850
|
+
"/api/reports/artifact-tags": {
|
|
3851
|
+
"get": {
|
|
3852
|
+
"operationId": "getArtifactTags",
|
|
3853
|
+
"tags": [
|
|
3854
|
+
"Report"
|
|
3855
|
+
],
|
|
3856
|
+
"summary": "Reviewer tags of attachments: every recorded edit",
|
|
3857
|
+
"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`.",
|
|
3858
|
+
"x-atlas-role": "read",
|
|
3859
|
+
"security": [
|
|
3860
|
+
{
|
|
3861
|
+
"bearer": []
|
|
3862
|
+
},
|
|
3863
|
+
{
|
|
3864
|
+
"basic": []
|
|
3865
|
+
}
|
|
3866
|
+
],
|
|
3867
|
+
"parameters": [
|
|
3868
|
+
{
|
|
3869
|
+
"required": false,
|
|
3870
|
+
"name": "project",
|
|
3871
|
+
"in": "query",
|
|
3872
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
3873
|
+
"example": "todo-app",
|
|
3874
|
+
"schema": {
|
|
3875
|
+
"type": "string",
|
|
3876
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
3877
|
+
"maxLength": 64
|
|
3878
|
+
}
|
|
3879
|
+
}
|
|
3880
|
+
],
|
|
3881
|
+
"responses": {
|
|
3882
|
+
"200": {
|
|
3883
|
+
"description": "The edits.",
|
|
3884
|
+
"content": {
|
|
3885
|
+
"application/json": {
|
|
3886
|
+
"schema": {
|
|
3887
|
+
"$ref": "#/components/schemas/ArtifactTags"
|
|
3888
|
+
}
|
|
3889
|
+
}
|
|
3890
|
+
}
|
|
3891
|
+
},
|
|
3892
|
+
"401": {
|
|
3893
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
3894
|
+
"content": {
|
|
3895
|
+
"application/problem+json": {
|
|
3896
|
+
"schema": {
|
|
3897
|
+
"$ref": "#/components/schemas/Problem"
|
|
3898
|
+
}
|
|
3899
|
+
}
|
|
3900
|
+
}
|
|
3901
|
+
}
|
|
3902
|
+
}
|
|
3903
|
+
},
|
|
3904
|
+
"post": {
|
|
3905
|
+
"operationId": "editArtifactTags",
|
|
3906
|
+
"tags": [
|
|
3907
|
+
"Report"
|
|
3908
|
+
],
|
|
3909
|
+
"summary": "Tag or untag one attachment after upload",
|
|
3910
|
+
"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`.",
|
|
3911
|
+
"x-atlas-role": "publish",
|
|
3912
|
+
"security": [
|
|
3913
|
+
{
|
|
3914
|
+
"bearer": []
|
|
3915
|
+
}
|
|
3916
|
+
],
|
|
3917
|
+
"parameters": [
|
|
3918
|
+
{
|
|
3919
|
+
"required": false,
|
|
3920
|
+
"name": "project",
|
|
3921
|
+
"in": "query",
|
|
3922
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
3923
|
+
"example": "todo-app",
|
|
3924
|
+
"schema": {
|
|
3925
|
+
"type": "string",
|
|
3926
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
3927
|
+
"maxLength": 64
|
|
3928
|
+
}
|
|
3929
|
+
}
|
|
3930
|
+
],
|
|
3931
|
+
"requestBody": {
|
|
3932
|
+
"required": true,
|
|
3933
|
+
"description": "The attachment and the tags to add and remove. At most 20 of each, 64 KiB.",
|
|
3934
|
+
"content": {
|
|
3935
|
+
"application/json": {
|
|
3936
|
+
"schema": {
|
|
3937
|
+
"$ref": "#/components/schemas/ArtifactTagEdit"
|
|
3938
|
+
}
|
|
3939
|
+
}
|
|
3940
|
+
}
|
|
3941
|
+
},
|
|
3942
|
+
"responses": {
|
|
3943
|
+
"201": {
|
|
3944
|
+
"description": "The recorded entry.",
|
|
3945
|
+
"content": {
|
|
3946
|
+
"application/json": {
|
|
3947
|
+
"schema": {
|
|
3948
|
+
"$ref": "#/components/schemas/ArtifactTagEntry"
|
|
3949
|
+
}
|
|
3950
|
+
}
|
|
3951
|
+
}
|
|
3952
|
+
},
|
|
3953
|
+
"401": {
|
|
3954
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
3955
|
+
"content": {
|
|
3956
|
+
"application/problem+json": {
|
|
3957
|
+
"schema": {
|
|
3958
|
+
"$ref": "#/components/schemas/Problem"
|
|
3959
|
+
}
|
|
3960
|
+
}
|
|
3961
|
+
}
|
|
3962
|
+
},
|
|
3963
|
+
"403": {
|
|
3964
|
+
"description": "The token is known but its role may not do this.",
|
|
3965
|
+
"content": {
|
|
3966
|
+
"application/problem+json": {
|
|
3967
|
+
"schema": {
|
|
3968
|
+
"$ref": "#/components/schemas/Problem"
|
|
3969
|
+
}
|
|
3970
|
+
}
|
|
3971
|
+
}
|
|
3972
|
+
},
|
|
3973
|
+
"413": {
|
|
3974
|
+
"description": "Request too large.",
|
|
3975
|
+
"content": {
|
|
3976
|
+
"application/problem+json": {
|
|
3977
|
+
"schema": {
|
|
3978
|
+
"$ref": "#/components/schemas/Problem"
|
|
3979
|
+
}
|
|
3980
|
+
}
|
|
3981
|
+
}
|
|
3982
|
+
},
|
|
3983
|
+
"422": {
|
|
3984
|
+
"description": "Not a tag edit: a bad target, an empty or over-long tag, or nothing to change.",
|
|
3985
|
+
"content": {
|
|
3986
|
+
"application/problem+json": {
|
|
3987
|
+
"schema": {
|
|
3988
|
+
"$ref": "#/components/schemas/Problem"
|
|
3989
|
+
}
|
|
3990
|
+
}
|
|
3991
|
+
}
|
|
3992
|
+
}
|
|
3993
|
+
}
|
|
3994
|
+
}
|
|
3995
|
+
},
|
|
3996
|
+
"/api/projects/{project}/reports/artifact-tags": {
|
|
3997
|
+
"get": {
|
|
3998
|
+
"operationId": "getArtifactTagsForProject",
|
|
3999
|
+
"tags": [
|
|
4000
|
+
"Report"
|
|
4001
|
+
],
|
|
4002
|
+
"summary": "Reviewer tags of attachments: every recorded edit",
|
|
4003
|
+
"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`.",
|
|
4004
|
+
"x-atlas-role": "read",
|
|
4005
|
+
"security": [
|
|
4006
|
+
{
|
|
4007
|
+
"bearer": []
|
|
4008
|
+
},
|
|
4009
|
+
{
|
|
4010
|
+
"basic": []
|
|
4011
|
+
}
|
|
4012
|
+
],
|
|
4013
|
+
"parameters": [
|
|
4014
|
+
{
|
|
4015
|
+
"required": true,
|
|
4016
|
+
"name": "project",
|
|
4017
|
+
"in": "path",
|
|
4018
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
4019
|
+
"example": "todo-app",
|
|
4020
|
+
"schema": {
|
|
4021
|
+
"type": "string",
|
|
4022
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4023
|
+
"maxLength": 64
|
|
4024
|
+
}
|
|
4025
|
+
}
|
|
4026
|
+
],
|
|
4027
|
+
"responses": {
|
|
4028
|
+
"200": {
|
|
4029
|
+
"description": "The edits.",
|
|
4030
|
+
"content": {
|
|
4031
|
+
"application/json": {
|
|
4032
|
+
"schema": {
|
|
4033
|
+
"$ref": "#/components/schemas/ArtifactTags"
|
|
4034
|
+
}
|
|
4035
|
+
}
|
|
4036
|
+
}
|
|
4037
|
+
},
|
|
4038
|
+
"401": {
|
|
4039
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4040
|
+
"content": {
|
|
4041
|
+
"application/problem+json": {
|
|
4042
|
+
"schema": {
|
|
4043
|
+
"$ref": "#/components/schemas/Problem"
|
|
4044
|
+
}
|
|
4045
|
+
}
|
|
4046
|
+
}
|
|
4047
|
+
}
|
|
4048
|
+
}
|
|
4049
|
+
},
|
|
4050
|
+
"post": {
|
|
4051
|
+
"operationId": "editArtifactTagsForProject",
|
|
4052
|
+
"tags": [
|
|
4053
|
+
"Report"
|
|
4054
|
+
],
|
|
4055
|
+
"summary": "Tag or untag one attachment after upload",
|
|
4056
|
+
"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`.",
|
|
4057
|
+
"x-atlas-role": "publish",
|
|
4058
|
+
"security": [
|
|
4059
|
+
{
|
|
4060
|
+
"bearer": []
|
|
4061
|
+
}
|
|
4062
|
+
],
|
|
4063
|
+
"parameters": [
|
|
4064
|
+
{
|
|
4065
|
+
"required": true,
|
|
4066
|
+
"name": "project",
|
|
4067
|
+
"in": "path",
|
|
4068
|
+
"description": "Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.",
|
|
4069
|
+
"example": "todo-app",
|
|
4070
|
+
"schema": {
|
|
4071
|
+
"type": "string",
|
|
4072
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
|
|
4073
|
+
"maxLength": 64
|
|
4074
|
+
}
|
|
4075
|
+
}
|
|
4076
|
+
],
|
|
4077
|
+
"requestBody": {
|
|
4078
|
+
"required": true,
|
|
4079
|
+
"description": "The attachment and the tags to add and remove. At most 20 of each, 64 KiB.",
|
|
4080
|
+
"content": {
|
|
4081
|
+
"application/json": {
|
|
4082
|
+
"schema": {
|
|
4083
|
+
"$ref": "#/components/schemas/ArtifactTagEdit"
|
|
4084
|
+
}
|
|
4085
|
+
}
|
|
4086
|
+
}
|
|
4087
|
+
},
|
|
4088
|
+
"responses": {
|
|
4089
|
+
"201": {
|
|
4090
|
+
"description": "The recorded entry.",
|
|
4091
|
+
"content": {
|
|
4092
|
+
"application/json": {
|
|
4093
|
+
"schema": {
|
|
4094
|
+
"$ref": "#/components/schemas/ArtifactTagEntry"
|
|
4095
|
+
}
|
|
4096
|
+
}
|
|
4097
|
+
}
|
|
4098
|
+
},
|
|
4099
|
+
"401": {
|
|
4100
|
+
"description": "No token, or an unknown one. Send `Authorization: Bearer <token>`.",
|
|
4101
|
+
"content": {
|
|
4102
|
+
"application/problem+json": {
|
|
4103
|
+
"schema": {
|
|
4104
|
+
"$ref": "#/components/schemas/Problem"
|
|
4105
|
+
}
|
|
4106
|
+
}
|
|
4107
|
+
}
|
|
4108
|
+
},
|
|
4109
|
+
"403": {
|
|
4110
|
+
"description": "The token is known but its role may not do this.",
|
|
4111
|
+
"content": {
|
|
4112
|
+
"application/problem+json": {
|
|
4113
|
+
"schema": {
|
|
4114
|
+
"$ref": "#/components/schemas/Problem"
|
|
4115
|
+
}
|
|
4116
|
+
}
|
|
4117
|
+
}
|
|
4118
|
+
},
|
|
4119
|
+
"413": {
|
|
4120
|
+
"description": "Request too large.",
|
|
4121
|
+
"content": {
|
|
4122
|
+
"application/problem+json": {
|
|
4123
|
+
"schema": {
|
|
4124
|
+
"$ref": "#/components/schemas/Problem"
|
|
4125
|
+
}
|
|
4126
|
+
}
|
|
4127
|
+
}
|
|
4128
|
+
},
|
|
4129
|
+
"422": {
|
|
4130
|
+
"description": "Not a tag edit: a bad target, an empty or over-long tag, or nothing to change.",
|
|
4131
|
+
"content": {
|
|
4132
|
+
"application/problem+json": {
|
|
4133
|
+
"schema": {
|
|
4134
|
+
"$ref": "#/components/schemas/Problem"
|
|
4135
|
+
}
|
|
4136
|
+
}
|
|
4137
|
+
}
|
|
4138
|
+
}
|
|
4139
|
+
}
|
|
4140
|
+
}
|
|
4141
|
+
},
|
|
3804
4142
|
"/api/reports/runs": {
|
|
3805
4143
|
"get": {
|
|
3806
4144
|
"operationId": "getReportRuns",
|
|
@@ -7451,6 +7789,13 @@
|
|
|
7451
7789
|
"type": "string"
|
|
7452
7790
|
}
|
|
7453
7791
|
},
|
|
7792
|
+
"artifactTags": {
|
|
7793
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
7794
|
+
"type": "array",
|
|
7795
|
+
"items": {
|
|
7796
|
+
"type": "string"
|
|
7797
|
+
}
|
|
7798
|
+
},
|
|
7454
7799
|
"labels": {
|
|
7455
7800
|
"type": "object",
|
|
7456
7801
|
"propertyNames": {
|
|
@@ -7677,6 +8022,13 @@
|
|
|
7677
8022
|
"type": "string"
|
|
7678
8023
|
}
|
|
7679
8024
|
},
|
|
8025
|
+
"artifactTags": {
|
|
8026
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
8027
|
+
"type": "array",
|
|
8028
|
+
"items": {
|
|
8029
|
+
"type": "string"
|
|
8030
|
+
}
|
|
8031
|
+
},
|
|
7680
8032
|
"labels": {
|
|
7681
8033
|
"type": "object",
|
|
7682
8034
|
"propertyNames": {
|
|
@@ -7924,6 +8276,13 @@
|
|
|
7924
8276
|
"type": "string"
|
|
7925
8277
|
}
|
|
7926
8278
|
},
|
|
8279
|
+
"artifactTags": {
|
|
8280
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
8281
|
+
"type": "array",
|
|
8282
|
+
"items": {
|
|
8283
|
+
"type": "string"
|
|
8284
|
+
}
|
|
8285
|
+
},
|
|
7927
8286
|
"labels": {
|
|
7928
8287
|
"type": "object",
|
|
7929
8288
|
"propertyNames": {
|
|
@@ -8150,6 +8509,13 @@
|
|
|
8150
8509
|
"type": "string"
|
|
8151
8510
|
}
|
|
8152
8511
|
},
|
|
8512
|
+
"artifactTags": {
|
|
8513
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
8514
|
+
"type": "array",
|
|
8515
|
+
"items": {
|
|
8516
|
+
"type": "string"
|
|
8517
|
+
}
|
|
8518
|
+
},
|
|
8153
8519
|
"labels": {
|
|
8154
8520
|
"type": "object",
|
|
8155
8521
|
"propertyNames": {
|
|
@@ -8802,6 +9168,13 @@
|
|
|
8802
9168
|
"description": {
|
|
8803
9169
|
"type": "string"
|
|
8804
9170
|
},
|
|
9171
|
+
"tags": {
|
|
9172
|
+
"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",
|
|
9173
|
+
"type": "array",
|
|
9174
|
+
"items": {
|
|
9175
|
+
"type": "string"
|
|
9176
|
+
}
|
|
9177
|
+
},
|
|
8805
9178
|
"at": {
|
|
8806
9179
|
"type": "object",
|
|
8807
9180
|
"properties": {
|
|
@@ -9039,6 +9412,13 @@
|
|
|
9039
9412
|
"description": {
|
|
9040
9413
|
"type": "string"
|
|
9041
9414
|
},
|
|
9415
|
+
"tags": {
|
|
9416
|
+
"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",
|
|
9417
|
+
"type": "array",
|
|
9418
|
+
"items": {
|
|
9419
|
+
"type": "string"
|
|
9420
|
+
}
|
|
9421
|
+
},
|
|
9042
9422
|
"at": {
|
|
9043
9423
|
"type": "object",
|
|
9044
9424
|
"properties": {
|
|
@@ -9313,6 +9693,13 @@
|
|
|
9313
9693
|
"description": {
|
|
9314
9694
|
"type": "string"
|
|
9315
9695
|
},
|
|
9696
|
+
"tags": {
|
|
9697
|
+
"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",
|
|
9698
|
+
"type": "array",
|
|
9699
|
+
"items": {
|
|
9700
|
+
"type": "string"
|
|
9701
|
+
}
|
|
9702
|
+
},
|
|
9316
9703
|
"at": {
|
|
9317
9704
|
"type": "object",
|
|
9318
9705
|
"properties": {
|
|
@@ -9523,6 +9910,13 @@
|
|
|
9523
9910
|
"description": {
|
|
9524
9911
|
"type": "string"
|
|
9525
9912
|
},
|
|
9913
|
+
"tags": {
|
|
9914
|
+
"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",
|
|
9915
|
+
"type": "array",
|
|
9916
|
+
"items": {
|
|
9917
|
+
"type": "string"
|
|
9918
|
+
}
|
|
9919
|
+
},
|
|
9526
9920
|
"at": {
|
|
9527
9921
|
"type": "object",
|
|
9528
9922
|
"properties": {
|
|
@@ -9903,6 +10297,13 @@
|
|
|
9903
10297
|
"description": {
|
|
9904
10298
|
"type": "string"
|
|
9905
10299
|
},
|
|
10300
|
+
"tags": {
|
|
10301
|
+
"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",
|
|
10302
|
+
"type": "array",
|
|
10303
|
+
"items": {
|
|
10304
|
+
"type": "string"
|
|
10305
|
+
}
|
|
10306
|
+
},
|
|
9906
10307
|
"at": {
|
|
9907
10308
|
"type": "object",
|
|
9908
10309
|
"properties": {
|
|
@@ -10363,6 +10764,13 @@
|
|
|
10363
10764
|
"type": "string"
|
|
10364
10765
|
}
|
|
10365
10766
|
},
|
|
10767
|
+
"artifactTags": {
|
|
10768
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
10769
|
+
"type": "array",
|
|
10770
|
+
"items": {
|
|
10771
|
+
"type": "string"
|
|
10772
|
+
}
|
|
10773
|
+
},
|
|
10366
10774
|
"labels": {
|
|
10367
10775
|
"type": "object",
|
|
10368
10776
|
"propertyNames": {
|
|
@@ -10590,6 +10998,13 @@
|
|
|
10590
10998
|
"type": "string"
|
|
10591
10999
|
}
|
|
10592
11000
|
},
|
|
11001
|
+
"artifactTags": {
|
|
11002
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
11003
|
+
"type": "array",
|
|
11004
|
+
"items": {
|
|
11005
|
+
"type": "string"
|
|
11006
|
+
}
|
|
11007
|
+
},
|
|
10593
11008
|
"labels": {
|
|
10594
11009
|
"type": "object",
|
|
10595
11010
|
"propertyNames": {
|
|
@@ -10821,6 +11236,13 @@
|
|
|
10821
11236
|
"description": {
|
|
10822
11237
|
"type": "string"
|
|
10823
11238
|
},
|
|
11239
|
+
"tags": {
|
|
11240
|
+
"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",
|
|
11241
|
+
"type": "array",
|
|
11242
|
+
"items": {
|
|
11243
|
+
"type": "string"
|
|
11244
|
+
}
|
|
11245
|
+
},
|
|
10824
11246
|
"at": {
|
|
10825
11247
|
"type": "object",
|
|
10826
11248
|
"properties": {
|
|
@@ -11049,6 +11471,13 @@
|
|
|
11049
11471
|
"description": {
|
|
11050
11472
|
"type": "string"
|
|
11051
11473
|
},
|
|
11474
|
+
"tags": {
|
|
11475
|
+
"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",
|
|
11476
|
+
"type": "array",
|
|
11477
|
+
"items": {
|
|
11478
|
+
"type": "string"
|
|
11479
|
+
}
|
|
11480
|
+
},
|
|
11052
11481
|
"at": {
|
|
11053
11482
|
"type": "object",
|
|
11054
11483
|
"properties": {
|
|
@@ -11314,6 +11743,13 @@
|
|
|
11314
11743
|
"description": {
|
|
11315
11744
|
"type": "string"
|
|
11316
11745
|
},
|
|
11746
|
+
"tags": {
|
|
11747
|
+
"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",
|
|
11748
|
+
"type": "array",
|
|
11749
|
+
"items": {
|
|
11750
|
+
"type": "string"
|
|
11751
|
+
}
|
|
11752
|
+
},
|
|
11317
11753
|
"at": {
|
|
11318
11754
|
"type": "object",
|
|
11319
11755
|
"properties": {
|
|
@@ -11514,6 +11950,13 @@
|
|
|
11514
11950
|
"description": {
|
|
11515
11951
|
"type": "string"
|
|
11516
11952
|
},
|
|
11953
|
+
"tags": {
|
|
11954
|
+
"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",
|
|
11955
|
+
"type": "array",
|
|
11956
|
+
"items": {
|
|
11957
|
+
"type": "string"
|
|
11958
|
+
}
|
|
11959
|
+
},
|
|
11517
11960
|
"at": {
|
|
11518
11961
|
"type": "object",
|
|
11519
11962
|
"properties": {
|
|
@@ -11684,6 +12127,224 @@
|
|
|
11684
12127
|
],
|
|
11685
12128
|
"additionalProperties": {}
|
|
11686
12129
|
},
|
|
12130
|
+
"ArtifactTagEdit": {
|
|
12131
|
+
"type": "object",
|
|
12132
|
+
"properties": {
|
|
12133
|
+
"target": {
|
|
12134
|
+
"type": "object",
|
|
12135
|
+
"properties": {
|
|
12136
|
+
"layer": {
|
|
12137
|
+
"type": "string",
|
|
12138
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
12139
|
+
"description": "The id of the archived layer that holds the check"
|
|
12140
|
+
},
|
|
12141
|
+
"check": {
|
|
12142
|
+
"type": "string",
|
|
12143
|
+
"minLength": 1,
|
|
12144
|
+
"description": "The check's id"
|
|
12145
|
+
},
|
|
12146
|
+
"kind": {
|
|
12147
|
+
"description": "The kind of the part holding the check, when the same id exists in several parts",
|
|
12148
|
+
"type": "string",
|
|
12149
|
+
"minLength": 1
|
|
12150
|
+
},
|
|
12151
|
+
"artifact": {
|
|
12152
|
+
"type": "string",
|
|
12153
|
+
"minLength": 1,
|
|
12154
|
+
"maxLength": 1024,
|
|
12155
|
+
"description": "The attachment: `id:<id>` when it has an id, else `key:<bundleKey>`, else `name:<name>` (see `artifactRef`)"
|
|
12156
|
+
}
|
|
12157
|
+
},
|
|
12158
|
+
"required": [
|
|
12159
|
+
"layer",
|
|
12160
|
+
"check",
|
|
12161
|
+
"artifact"
|
|
12162
|
+
],
|
|
12163
|
+
"additionalProperties": {}
|
|
12164
|
+
},
|
|
12165
|
+
"add": {
|
|
12166
|
+
"description": "Tags to add. `demo` and `#demo` are the same tag",
|
|
12167
|
+
"maxItems": 20,
|
|
12168
|
+
"type": "array",
|
|
12169
|
+
"items": {
|
|
12170
|
+
"type": "string"
|
|
12171
|
+
}
|
|
12172
|
+
},
|
|
12173
|
+
"remove": {
|
|
12174
|
+
"description": "Reviewer tags to remove. Tags the producer wrote are part of the immutable layer and stay",
|
|
12175
|
+
"maxItems": 20,
|
|
12176
|
+
"type": "array",
|
|
12177
|
+
"items": {
|
|
12178
|
+
"type": "string"
|
|
12179
|
+
}
|
|
12180
|
+
}
|
|
12181
|
+
},
|
|
12182
|
+
"required": [
|
|
12183
|
+
"target"
|
|
12184
|
+
],
|
|
12185
|
+
"additionalProperties": {}
|
|
12186
|
+
},
|
|
12187
|
+
"ArtifactTagEntry": {
|
|
12188
|
+
"type": "object",
|
|
12189
|
+
"properties": {
|
|
12190
|
+
"id": {
|
|
12191
|
+
"type": "string",
|
|
12192
|
+
"description": "Unique and time-ordered"
|
|
12193
|
+
},
|
|
12194
|
+
"target": {
|
|
12195
|
+
"type": "object",
|
|
12196
|
+
"properties": {
|
|
12197
|
+
"layer": {
|
|
12198
|
+
"type": "string",
|
|
12199
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
12200
|
+
"description": "The id of the archived layer that holds the check"
|
|
12201
|
+
},
|
|
12202
|
+
"check": {
|
|
12203
|
+
"type": "string",
|
|
12204
|
+
"minLength": 1,
|
|
12205
|
+
"description": "The check's id"
|
|
12206
|
+
},
|
|
12207
|
+
"kind": {
|
|
12208
|
+
"description": "The kind of the part holding the check, when the same id exists in several parts",
|
|
12209
|
+
"type": "string",
|
|
12210
|
+
"minLength": 1
|
|
12211
|
+
},
|
|
12212
|
+
"artifact": {
|
|
12213
|
+
"type": "string",
|
|
12214
|
+
"minLength": 1,
|
|
12215
|
+
"maxLength": 1024,
|
|
12216
|
+
"description": "The attachment: `id:<id>` when it has an id, else `key:<bundleKey>`, else `name:<name>` (see `artifactRef`)"
|
|
12217
|
+
}
|
|
12218
|
+
},
|
|
12219
|
+
"required": [
|
|
12220
|
+
"layer",
|
|
12221
|
+
"check",
|
|
12222
|
+
"artifact"
|
|
12223
|
+
],
|
|
12224
|
+
"additionalProperties": {}
|
|
12225
|
+
},
|
|
12226
|
+
"add": {
|
|
12227
|
+
"type": "array",
|
|
12228
|
+
"items": {
|
|
12229
|
+
"type": "string"
|
|
12230
|
+
},
|
|
12231
|
+
"description": "Normalized tags added"
|
|
12232
|
+
},
|
|
12233
|
+
"remove": {
|
|
12234
|
+
"type": "array",
|
|
12235
|
+
"items": {
|
|
12236
|
+
"type": "string"
|
|
12237
|
+
},
|
|
12238
|
+
"description": "Normalized tags removed"
|
|
12239
|
+
},
|
|
12240
|
+
"by": {
|
|
12241
|
+
"type": "string",
|
|
12242
|
+
"description": "The name of the token that made the edit (never the token)"
|
|
12243
|
+
},
|
|
12244
|
+
"atMs": {
|
|
12245
|
+
"type": "number",
|
|
12246
|
+
"description": "When the server recorded it, epoch milliseconds"
|
|
12247
|
+
}
|
|
12248
|
+
},
|
|
12249
|
+
"required": [
|
|
12250
|
+
"id",
|
|
12251
|
+
"target",
|
|
12252
|
+
"add",
|
|
12253
|
+
"remove",
|
|
12254
|
+
"by",
|
|
12255
|
+
"atMs"
|
|
12256
|
+
],
|
|
12257
|
+
"additionalProperties": {}
|
|
12258
|
+
},
|
|
12259
|
+
"ArtifactTags": {
|
|
12260
|
+
"type": "object",
|
|
12261
|
+
"properties": {
|
|
12262
|
+
"schemaVersion": {
|
|
12263
|
+
"type": "number",
|
|
12264
|
+
"const": 1
|
|
12265
|
+
},
|
|
12266
|
+
"entries": {
|
|
12267
|
+
"type": "array",
|
|
12268
|
+
"items": {
|
|
12269
|
+
"type": "object",
|
|
12270
|
+
"properties": {
|
|
12271
|
+
"id": {
|
|
12272
|
+
"type": "string",
|
|
12273
|
+
"description": "Unique and time-ordered"
|
|
12274
|
+
},
|
|
12275
|
+
"target": {
|
|
12276
|
+
"type": "object",
|
|
12277
|
+
"properties": {
|
|
12278
|
+
"layer": {
|
|
12279
|
+
"type": "string",
|
|
12280
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
12281
|
+
"description": "The id of the archived layer that holds the check"
|
|
12282
|
+
},
|
|
12283
|
+
"check": {
|
|
12284
|
+
"type": "string",
|
|
12285
|
+
"minLength": 1,
|
|
12286
|
+
"description": "The check's id"
|
|
12287
|
+
},
|
|
12288
|
+
"kind": {
|
|
12289
|
+
"description": "The kind of the part holding the check, when the same id exists in several parts",
|
|
12290
|
+
"type": "string",
|
|
12291
|
+
"minLength": 1
|
|
12292
|
+
},
|
|
12293
|
+
"artifact": {
|
|
12294
|
+
"type": "string",
|
|
12295
|
+
"minLength": 1,
|
|
12296
|
+
"maxLength": 1024,
|
|
12297
|
+
"description": "The attachment: `id:<id>` when it has an id, else `key:<bundleKey>`, else `name:<name>` (see `artifactRef`)"
|
|
12298
|
+
}
|
|
12299
|
+
},
|
|
12300
|
+
"required": [
|
|
12301
|
+
"layer",
|
|
12302
|
+
"check",
|
|
12303
|
+
"artifact"
|
|
12304
|
+
],
|
|
12305
|
+
"additionalProperties": {}
|
|
12306
|
+
},
|
|
12307
|
+
"add": {
|
|
12308
|
+
"type": "array",
|
|
12309
|
+
"items": {
|
|
12310
|
+
"type": "string"
|
|
12311
|
+
},
|
|
12312
|
+
"description": "Normalized tags added"
|
|
12313
|
+
},
|
|
12314
|
+
"remove": {
|
|
12315
|
+
"type": "array",
|
|
12316
|
+
"items": {
|
|
12317
|
+
"type": "string"
|
|
12318
|
+
},
|
|
12319
|
+
"description": "Normalized tags removed"
|
|
12320
|
+
},
|
|
12321
|
+
"by": {
|
|
12322
|
+
"type": "string",
|
|
12323
|
+
"description": "The name of the token that made the edit (never the token)"
|
|
12324
|
+
},
|
|
12325
|
+
"atMs": {
|
|
12326
|
+
"type": "number",
|
|
12327
|
+
"description": "When the server recorded it, epoch milliseconds"
|
|
12328
|
+
}
|
|
12329
|
+
},
|
|
12330
|
+
"required": [
|
|
12331
|
+
"id",
|
|
12332
|
+
"target",
|
|
12333
|
+
"add",
|
|
12334
|
+
"remove",
|
|
12335
|
+
"by",
|
|
12336
|
+
"atMs"
|
|
12337
|
+
],
|
|
12338
|
+
"additionalProperties": {}
|
|
12339
|
+
}
|
|
12340
|
+
}
|
|
12341
|
+
},
|
|
12342
|
+
"required": [
|
|
12343
|
+
"schemaVersion",
|
|
12344
|
+
"entries"
|
|
12345
|
+
],
|
|
12346
|
+
"additionalProperties": {}
|
|
12347
|
+
},
|
|
11687
12348
|
"TestCatalog": {
|
|
11688
12349
|
"type": "object",
|
|
11689
12350
|
"properties": {
|
|
@@ -12274,6 +12935,27 @@
|
|
|
12274
12935
|
"additionalProperties": {}
|
|
12275
12936
|
}
|
|
12276
12937
|
},
|
|
12938
|
+
"artifactTags": {
|
|
12939
|
+
"type": "array",
|
|
12940
|
+
"items": {
|
|
12941
|
+
"type": "object",
|
|
12942
|
+
"properties": {
|
|
12943
|
+
"value": {
|
|
12944
|
+
"type": "string"
|
|
12945
|
+
},
|
|
12946
|
+
"count": {
|
|
12947
|
+
"type": "integer",
|
|
12948
|
+
"minimum": 0,
|
|
12949
|
+
"maximum": 9007199254740991
|
|
12950
|
+
}
|
|
12951
|
+
},
|
|
12952
|
+
"required": [
|
|
12953
|
+
"value",
|
|
12954
|
+
"count"
|
|
12955
|
+
],
|
|
12956
|
+
"additionalProperties": {}
|
|
12957
|
+
}
|
|
12958
|
+
},
|
|
12277
12959
|
"branches": {
|
|
12278
12960
|
"type": "array",
|
|
12279
12961
|
"items": {
|
|
@@ -12540,6 +13222,13 @@
|
|
|
12540
13222
|
"type": "string"
|
|
12541
13223
|
}
|
|
12542
13224
|
},
|
|
13225
|
+
"artifactTags": {
|
|
13226
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
13227
|
+
"type": "array",
|
|
13228
|
+
"items": {
|
|
13229
|
+
"type": "string"
|
|
13230
|
+
}
|
|
13231
|
+
},
|
|
12543
13232
|
"labels": {
|
|
12544
13233
|
"type": "object",
|
|
12545
13234
|
"propertyNames": {
|
|
@@ -12734,6 +13423,20 @@
|
|
|
12734
13423
|
"type": "string"
|
|
12735
13424
|
}
|
|
12736
13425
|
},
|
|
13426
|
+
"artifactTags": {
|
|
13427
|
+
"description": "Normalized tags of the attachments of its current results, such as `demo` (shown `#demo`). Not inherited from a check or run, unlike `tags`",
|
|
13428
|
+
"type": "array",
|
|
13429
|
+
"items": {
|
|
13430
|
+
"type": "string"
|
|
13431
|
+
}
|
|
13432
|
+
},
|
|
13433
|
+
"inheritedArtifactTags": {
|
|
13434
|
+
"description": "Normalized tags its attachments inherit from their check and run, apart from `artifactTags`: what `?artifactTag=…&inherited=1` also matches",
|
|
13435
|
+
"type": "array",
|
|
13436
|
+
"items": {
|
|
13437
|
+
"type": "string"
|
|
13438
|
+
}
|
|
13439
|
+
},
|
|
12737
13440
|
"labels": {
|
|
12738
13441
|
"type": "object",
|
|
12739
13442
|
"propertyNames": {
|
|
@@ -13412,6 +14115,13 @@
|
|
|
13412
14115
|
"type": "string"
|
|
13413
14116
|
}
|
|
13414
14117
|
},
|
|
14118
|
+
"artifactTags": {
|
|
14119
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
14120
|
+
"type": "array",
|
|
14121
|
+
"items": {
|
|
14122
|
+
"type": "string"
|
|
14123
|
+
}
|
|
14124
|
+
},
|
|
13415
14125
|
"labels": {
|
|
13416
14126
|
"type": "object",
|
|
13417
14127
|
"propertyNames": {
|
|
@@ -13606,6 +14316,20 @@
|
|
|
13606
14316
|
"type": "string"
|
|
13607
14317
|
}
|
|
13608
14318
|
},
|
|
14319
|
+
"artifactTags": {
|
|
14320
|
+
"description": "Normalized tags of the attachments of its current results, such as `demo` (shown `#demo`). Not inherited from a check or run, unlike `tags`",
|
|
14321
|
+
"type": "array",
|
|
14322
|
+
"items": {
|
|
14323
|
+
"type": "string"
|
|
14324
|
+
}
|
|
14325
|
+
},
|
|
14326
|
+
"inheritedArtifactTags": {
|
|
14327
|
+
"description": "Normalized tags its attachments inherit from their check and run, apart from `artifactTags`: what `?artifactTag=…&inherited=1` also matches",
|
|
14328
|
+
"type": "array",
|
|
14329
|
+
"items": {
|
|
14330
|
+
"type": "string"
|
|
14331
|
+
}
|
|
14332
|
+
},
|
|
13609
14333
|
"labels": {
|
|
13610
14334
|
"type": "object",
|
|
13611
14335
|
"propertyNames": {
|
|
@@ -13788,6 +14512,13 @@
|
|
|
13788
14512
|
"type": "string"
|
|
13789
14513
|
}
|
|
13790
14514
|
},
|
|
14515
|
+
"artifactTags": {
|
|
14516
|
+
"description": "Normalized tags of the attachments themselves, sorted and distinct. Absent when no attachment is tagged; never inherited from a check or run",
|
|
14517
|
+
"type": "array",
|
|
14518
|
+
"items": {
|
|
14519
|
+
"type": "string"
|
|
14520
|
+
}
|
|
14521
|
+
},
|
|
13791
14522
|
"labels": {
|
|
13792
14523
|
"type": "object",
|
|
13793
14524
|
"propertyNames": {
|