com.getorbyt.getServiceInfo
Schema Diff
+93 -0
Compatibility Analysis
Breaking Changes Detected
6 breaking changes, 24 non-breaking changes.
Breaking Changes (6)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#config", src: "com.getorbyt.getServiceInfo#config", tgt: "com.getorbyt.getServiceInfo#config.values", kind: "prop", name: Some("values") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.value", kind: "prop", name: Some("value") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.key", kind: "prop", name: Some("key") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.version", kind: "prop", name: Some("version") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items", kind: "prop", name: Some("items") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNote", src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.title", kind: "prop", name: Some("title") }
Non-Breaking Changes (24)
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values:items" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.key" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.value" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.detail" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.title" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items:items" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.version" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.config" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.releaseNotes" }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#config.values", tgt: "com.getorbyt.getServiceInfo#config.values:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#config.values:items", tgt: "com.getorbyt.getServiceInfo#configValue", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.detail", kind: "prop", name: Some("detail") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items:items", tgt: "com.getorbyt.getServiceInfo#releaseNote", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.config", kind: "prop", name: Some("config") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.releaseNotes", kind: "prop", name: Some("releaseNotes") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output.config", tgt: "com.getorbyt.getServiceInfo#config", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output.releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values:items" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.key" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.value" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.detail" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.title" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items:items" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.version" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.config" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.releaseNotes" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#config", src: "com.getorbyt.getServiceInfo#config", tgt: "com.getorbyt.getServiceInfo#config.values", kind: "prop", name: Some("values") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.value", kind: "prop", name: Some("value") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.key", kind: "prop", name: Some("key") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNote", src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.title", kind: "prop", name: Some("title") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.version", kind: "prop", name: Some("version") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items", kind: "prop", name: Some("items") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#config.values", tgt: "com.getorbyt.getServiceInfo#config.values:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#config.values:items", tgt: "com.getorbyt.getServiceInfo#configValue", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.detail", kind: "prop", name: Some("detail") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items:items", tgt: "com.getorbyt.getServiceInfo#releaseNote", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.config", kind: "prop", name: Some("config") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.releaseNotes", kind: "prop", name: Some("releaseNotes") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output.config", tgt: "com.getorbyt.getServiceInfo#config", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output.releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"config": {
5
+
"description": "Client settings decided by the service. Every value is optional for the client: it keeps a built-in default for each key it reads and ignores keys it does not know.",
6
+
"properties": {
7
+
"values": {
8
+
"description": "Already filtered to the requesting platform and version.",
9
+
"items": {
10
+
"ref": "#configValue",
11
+
"type": "ref"
12
+
},
13
+
"maxLength": 64,
14
+
"type": "array"
15
+
}
16
+
},
17
+
"required": [
18
+
"values"
19
+
],
20
+
"type": "object"
21
+
},
22
+
"configValue": {
23
+
"description": "One setting. Values are strings so new keys need no schema change; the client parses each key it reads and falls back to its default when the value does not parse.",
24
+
"properties": {
25
+
"key": {
26
+
"maxLength": 64,
27
+
"type": "string"
28
+
},
29
+
"value": {
30
+
"maxLength": 256,
31
+
"type": "string"
32
+
}
33
+
},
34
+
"required": [
35
+
"key",
36
+
"value"
37
+
],
38
+
"type": "object"
39
+
},
4
40
"main": {
5
41
"description": "What this deployment of the Orbyt service can currently do, for clients that cannot be upgraded in step with it. Clients feature-detect against `capabilities` rather than comparing version numbers: only one version of this service is ever live, while many client builds run for months. Every field is optional and the whole call is optional — a client that cannot reach it, or reads an older service that does not serve it, must behave exactly as it did before. Unauthenticated.",
6
42
"output": {
7
43
"encoding": "application/json",
8
44
"schema": {
9
45
"properties": {
10
46
"capabilities": {
11
47
"description": "Behaviours this deployment supports, as opaque identifiers a client tests for membership of. Deliberately not `knownValues`: the whole point is that a client meets identifiers it has never heard of and ignores them. Removing one is how a feature is turned off in already-installed clients.",
12
48
"items": {
13
49
"maxLength": 64,
14
50
"type": "string"
15
51
},
16
52
"maxLength": 128,
17
53
"type": "array"
18
54
},
55
+
"config": {
56
+
"description": "Values the client reads instead of building them in, so they can change without a release. Absent from an older service; a client that finds it absent, or a key missing from it, keeps its built-in default.",
57
+
"ref": "#config",
58
+
"type": "ref"
59
+
},
19
60
"minimumClient": {
20
61
"description": "The oldest client version this service still answers correctly for the requested platform, as a semantic version. Advisory: this service does not refuse older clients, it tells them. A client below it should prompt for an update.",
21
62
"maxLength": 32,
22
63
"type": "string"
23
64
},
24
65
"notices": {
25
66
"description": "Messages for the viewer, such as a degraded subsystem or a scheduled maintenance window.",
26
67
"items": {
27
68
"ref": "#notice",
28
69
"type": "ref"
29
70
},
30
71
"maxLength": 8,
31
72
"type": "array"
32
73
},
33
74
"providers": {
34
75
"description": "Which external services this deployment is attached to, so a client can aim `atproto-proxy` at them without a release. Absent from an older service; a client that finds it absent keeps its built-in defaults.",
35
76
"ref": "#providers",
36
77
"type": "ref"
37
78
},
38
79
"recommendedClient": {
39
80
"description": "The newest released client version for the requested platform, so a client can offer a soft update prompt without a separate service.",
40
81
"maxLength": 32,
41
82
"type": "string"
83
+
},
84
+
"releaseNotes": {
85
+
"description": "What is new in the asking client's own version, for the sheet a client shows once on its first launch after an update. Present only when the request names a platform and a readable version this service has notes for. Absent from an older service; a client that finds it absent shows nothing.",
86
+
"ref": "#releaseNotes",
87
+
"type": "ref"
42
88
}
43
89
},
44
90
"required": [
45
91
"capabilities"
46
92
],
47
93
"type": "object"
48
94
}
49
95
},
50
96
"parameters": {
51
97
"properties": {
52
98
"platform": {
53
99
"description": "Which client is asking, so version advice can be answered for it. An unknown or absent platform is answered without version advice rather than refused.",
54
100
"knownValues": [
55
101
"ios",
56
102
"web"
57
103
],
58
104
"type": "string"
105
+
},
106
+
"version": {
107
+
"description": "The asking client's own version, as a semantic version. Lets the service aim `config` values at particular builds, for example to turn something off only in the builds that have a bug. Absent or unreadable is answered as if no build were targeted.",
108
+
"maxLength": 32,
109
+
"type": "string"
59
110
}
60
111
},
61
112
"type": "params"
62
113
},
63
114
"type": "query"
64
115
},
65
116
"notice": {
66
117
"description": "One operator message. `id` is stable so a client can remember that this viewer has already dismissed it.",
67
118
"properties": {
68
119
"id": {
69
120
"maxLength": 64,
70
121
"type": "string"
71
122
},
72
123
"message": {
73
124
"maxLength": 1000,
74
125
"type": "string"
75
126
},
76
127
"severity": {
77
128
"description": "Absent means info. A severity this client does not recognise must be presented as info rather than dropped or treated as blocking.",
78
129
"knownValues": [
79
130
"info",
80
131
"warning",
81
132
"blocking"
82
133
],
83
134
"type": "string"
84
135
},
85
136
"url": {
86
137
"format": "uri",
87
138
"type": "string"
88
139
}
89
140
},
90
141
"required": [
91
142
"id",
92
143
"message"
93
144
],
94
145
"type": "object"
95
146
},
96
147
"providers": {
97
148
"description": "Service identities only, never operational endpoints. Each service field is absent when this deployment has none; for `appView` that means standard social reads are unavailable and the client should not attempt them.",
98
149
"properties": {
99
150
"appView": {
100
151
"description": "Service DID with fragment answering `app.bsky.*` reads, e.g. `did:web:api.bsky.app#bsky_appview`.",
101
152
"maxLength": 256,
102
153
"type": "string"
103
154
},
104
155
"chat": {
105
156
"description": "Service DID with fragment for chat.",
106
157
"maxLength": 256,
107
158
"type": "string"
108
159
},
109
160
"discoveryFeed": {
110
161
"description": "The feed generator behind Your Mix.",
111
162
"format": "at-uri",
112
163
"type": "string"
113
164
},
114
165
"discoveryFeedService": {
115
166
"description": "Service DID with fragment for `discoveryFeed`.",
116
167
"maxLength": 256,
117
168
"type": "string"
118
169
},
119
170
"network": {
120
171
"description": "A stable label for the connected network, such as `bluesky`.",
121
172
"maxLength": 32,
122
173
"type": "string"
123
174
}
124
175
},
125
176
"required": [
126
177
"network"
127
178
],
128
179
"type": "object"
180
+
},
181
+
"releaseNote": {
182
+
"description": "One new thing: a short name and a sentence or two about it.",
183
+
"properties": {
184
+
"detail": {
185
+
"maxLength": 500,
186
+
"type": "string"
187
+
},
188
+
"title": {
189
+
"maxLength": 100,
190
+
"type": "string"
191
+
}
192
+
},
193
+
"required": [
194
+
"title"
195
+
],
196
+
"type": "object"
197
+
},
198
+
"releaseNotes": {
199
+
"description": "Notes for one released client version. Written by people for people, in the service so they can be written or corrected without a release.",
200
+
"properties": {
201
+
"items": {
202
+
"description": "What is new, most important first.",
203
+
"items": {
204
+
"ref": "#releaseNote",
205
+
"type": "ref"
206
+
},
207
+
"maxLength": 8,
208
+
"minLength": 1,
209
+
"type": "array"
210
+
},
211
+
"version": {
212
+
"description": "The version these notes describe, as a semantic version. A client shows them only when it is its own version.",
213
+
"maxLength": 32,
214
+
"type": "string"
215
+
}
216
+
},
217
+
"required": [
218
+
"version",
219
+
"items"
220
+
],
221
+
"type": "object"
129
222
}
130
223
},
131
224
"id": "com.getorbyt.getServiceInfo",
132
225
"lexicon": 1
133
226
}