com.getorbyt.getServiceInfo

getorbyt.com

Schema Diff

+93 -0

From

CID
bafyreicz4ovlij3...
Indexed At
2026-09-24 19:31 UTC
View this version

To

CID
bafyreibzhtg4few...
Indexed At
2026-10-10 20:16 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@