com.getorbyt.getServiceInfo
Schema Diff
+47 -0
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 13 non-breaking changes.
Breaking Changes (3)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNote", src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.title", kind: "prop", name: Some("title") }
- 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") }
Non-Breaking Changes (13)
- 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.releaseNotes" }
- 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.releaseNotes", kind: "prop", name: Some("releaseNotes") }
- 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#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.releaseNotes" }
Additional Notes
- 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#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.releaseNotes", kind: "prop", name: Some("releaseNotes") }
- 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
4
"config": {
5
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
6
"properties": {
7
7
"values": {
8
8
"description": "Already filtered to the requesting platform and version.",
9
9
"items": {
10
10
"ref": "#configValue",
11
11
"type": "ref"
12
12
},
13
13
"maxLength": 64,
14
14
"type": "array"
15
15
}
16
16
},
17
17
"required": [
18
18
"values"
19
19
],
20
20
"type": "object"
21
21
},
22
22
"configValue": {
23
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
24
"properties": {
25
25
"key": {
26
26
"maxLength": 64,
27
27
"type": "string"
28
28
},
29
29
"value": {
30
30
"maxLength": 256,
31
31
"type": "string"
32
32
}
33
33
},
34
34
"required": [
35
35
"key",
36
36
"value"
37
37
],
38
38
"type": "object"
39
39
},
40
40
"main": {
41
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.",
42
42
"output": {
43
43
"encoding": "application/json",
44
44
"schema": {
45
45
"properties": {
46
46
"capabilities": {
47
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.",
48
48
"items": {
49
49
"maxLength": 64,
50
50
"type": "string"
51
51
},
52
52
"maxLength": 128,
53
53
"type": "array"
54
54
},
55
55
"config": {
56
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
57
"ref": "#config",
58
58
"type": "ref"
59
59
},
60
60
"minimumClient": {
61
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.",
62
62
"maxLength": 32,
63
63
"type": "string"
64
64
},
65
65
"notices": {
66
66
"description": "Messages for the viewer, such as a degraded subsystem or a scheduled maintenance window.",
67
67
"items": {
68
68
"ref": "#notice",
69
69
"type": "ref"
70
70
},
71
71
"maxLength": 8,
72
72
"type": "array"
73
73
},
74
74
"providers": {
75
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.",
76
76
"ref": "#providers",
77
77
"type": "ref"
78
78
},
79
79
"recommendedClient": {
80
80
"description": "The newest released client version for the requested platform, so a client can offer a soft update prompt without a separate service.",
81
81
"maxLength": 32,
82
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"
83
88
}
84
89
},
85
90
"required": [
86
91
"capabilities"
87
92
],
88
93
"type": "object"
89
94
}
90
95
},
91
96
"parameters": {
92
97
"properties": {
93
98
"platform": {
94
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.",
95
100
"knownValues": [
96
101
"ios",
97
102
"web"
98
103
],
99
104
"type": "string"
100
105
},
101
106
"version": {
102
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.",
103
108
"maxLength": 32,
104
109
"type": "string"
105
110
}
106
111
},
107
112
"type": "params"
108
113
},
109
114
"type": "query"
110
115
},
111
116
"notice": {
112
117
"description": "One operator message. `id` is stable so a client can remember that this viewer has already dismissed it.",
113
118
"properties": {
114
119
"id": {
115
120
"maxLength": 64,
116
121
"type": "string"
117
122
},
118
123
"message": {
119
124
"maxLength": 1000,
120
125
"type": "string"
121
126
},
122
127
"severity": {
123
128
"description": "Absent means info. A severity this client does not recognise must be presented as info rather than dropped or treated as blocking.",
124
129
"knownValues": [
125
130
"info",
126
131
"warning",
127
132
"blocking"
128
133
],
129
134
"type": "string"
130
135
},
131
136
"url": {
132
137
"format": "uri",
133
138
"type": "string"
134
139
}
135
140
},
136
141
"required": [
137
142
"id",
138
143
"message"
139
144
],
140
145
"type": "object"
141
146
},
142
147
"providers": {
143
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.",
144
149
"properties": {
145
150
"appView": {
146
151
"description": "Service DID with fragment answering `app.bsky.*` reads, e.g. `did:web:api.bsky.app#bsky_appview`.",
147
152
"maxLength": 256,
148
153
"type": "string"
149
154
},
150
155
"chat": {
151
156
"description": "Service DID with fragment for chat.",
152
157
"maxLength": 256,
153
158
"type": "string"
154
159
},
155
160
"discoveryFeed": {
156
161
"description": "The feed generator behind Your Mix.",
157
162
"format": "at-uri",
158
163
"type": "string"
159
164
},
160
165
"discoveryFeedService": {
161
166
"description": "Service DID with fragment for `discoveryFeed`.",
162
167
"maxLength": 256,
163
168
"type": "string"
164
169
},
165
170
"network": {
166
171
"description": "A stable label for the connected network, such as `bluesky`.",
167
172
"maxLength": 32,
168
173
"type": "string"
169
174
}
170
175
},
171
176
"required": [
172
177
"network"
173
178
],
174
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"
175
222
}
176
223
},
177
224
"id": "com.getorbyt.getServiceInfo",
178
225
"lexicon": 1
179
226
}