fyi.opensocial.defs

lexicons.opensocial.fyi

Schema Diff

+19 -1

From

CID
bafyreib7xgq4wm7...
Indexed At
2026-10-08 18:10 UTC
View this version

To

CID
bafyreiegrwzxbpa...
Indexed At
2026-10-09 00:22 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 12 non-breaking changes.

Non-Breaking Changes (12)
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#actorView.description" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes:items" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy" }
  • AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy:items" }
  • AddedEdge AddedEdge { src: "fyi.opensocial.defs#actorView", tgt: "fyi.opensocial.defs#actorView.description", kind: "prop", name: Some("description") }
  • AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.credentialScopes", kind: "prop", name: Some("credentialScopes") }
  • AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.writableBy", kind: "prop", name: Some("writableBy") }
  • AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes", tgt: "fyi.opensocial.defs#spaceView.credentialScopes:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView.writableBy", tgt: "fyi.opensocial.defs#spaceView.writableBy:items", kind: "items", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }
  • AddedVertex { vertex_id: "fyi.opensocial.defs#actorView.description" }
  • AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes" }
  • AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes:items" }
  • AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy" }
  • AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy:items" }

Additional Notes

  • Non-breaking: AddedEdge { src: "fyi.opensocial.defs#actorView", tgt: "fyi.opensocial.defs#actorView.description", kind: "prop", name: Some("description") }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.credentialScopes", kind: "prop", name: Some("credentialScopes") }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.writableBy", kind: "prop", name: Some("writableBy") }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes", tgt: "fyi.opensocial.defs#spaceView.credentialScopes:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView.writableBy", tgt: "fyi.opensocial.defs#spaceView.writableBy:items", kind: "items", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "actorView": {
5 -
      "description": "A person, as a view names them: their handle from their DID document, their name and face from the Bluesky profile in their own repo.",
5 +
      "description": "A person, as a view names them: their handle from their DID document, their name, words about themselves and face from the Bluesky profile in their own repo, or Grain's for somebody with none.",
6 6
      "properties": {
7 7
        "avatar": {
8 8
          "description": "Served renderably by the host, at /img/actor/{did}/{cid}.",
9 9
          "format": "uri",
10 10
          "type": "string"
11 11
        },
12 +
        "description": {
13 +
          "type": "string"
14 +
        },
12 15
        "did": {
13 16
          "format": "did",
14 17
          "type": "string"
15 18
        },
16 19
        "displayName": {
17 20
          "type": "string"
18 21
        },
19 22
        "handle": {
20 23
          "format": "handle",
21 24
          "type": "string"
22 25
        }
23 26
      },
24 27
      "required": [
25 28
        "did"
26 29
      ],
27 30
      "type": "object"
28 31
    },
29 32
    "eventView": {
30 33
      "properties": {
31 34
        "actor": {
32 35
          "format": "did",
33 36
          "type": "string"
34 37
        },
35 38
        "createdAt": {
36 39
          "format": "datetime",
37 40
          "type": "string"
38 41
        },
39 42
        "note": {
40 43
          "type": "string"
41 44
        },
42 45
        "reason": {
43 46
          "type": "string"
44 47
        },
45 48
        "reasonType": {
46 49
          "type": "string"
47 50
        },
48 51
        "type": {
49 52
          "knownValues": [
50 53
            "report",
51 54
            "label",
52 55
            "negate",
53 56
            "resolve",
54 57
            "escalate",
55 58
            "note",
56 59
            "eject"
57 60
          ],
58 61
          "type": "string"
59 62
        },
60 63
        "val": {
61 64
          "type": "string"
62 65
        }
63 66
      },
64 67
      "required": [
65 68
        "type",
66 69
        "createdAt"
67 70
      ],
68 71
      "type": "object"
69 72
    },
70 73
    "groupRule": {
71 74
      "properties": {
72 75
        "createdAt": {
73 76
          "format": "datetime",
74 77
          "type": "string"
75 78
        },
76 79
        "rkey": {
77 80
          "type": "string"
78 81
        },
79 82
        "text": {
80 83
          "type": "string"
81 84
        },
82 85
        "title": {
83 86
          "type": "string"
84 87
        }
85 88
      },
86 89
      "required": [
87 90
        "rkey",
88 91
        "title"
89 92
      ],
90 93
      "type": "object"
91 94
    },
92 95
    "groupView": {
93 96
      "properties": {
94 97
        "avatar": {
95 98
          "description": "CID of the avatar blob; the host serves it at /img/{did}/avatar.",
96 99
          "type": "string"
97 100
        },
98 101
        "banner": {
99 102
          "description": "CID of the banner blob; the host serves it at /img/{did}/banner.",
100 103
          "type": "string"
101 104
        },
102 105
        "deactivated": {
103 106
          "description": "Set while a steward has the group switched off. Its spaces cannot be read until one of the stewards who could switch it off switches it back on.",
104 107
          "type": "boolean"
105 108
        },
106 109
        "description": {
107 110
          "type": "string"
108 111
        },
109 112
        "did": {
110 113
          "format": "did",
111 114
          "type": "string"
112 115
        },
113 116
        "displayName": {
114 117
          "type": "string"
115 118
        },
116 119
        "handle": {
117 120
          "format": "handle",
118 121
          "type": "string"
119 122
        },
120 123
        "joinPolicy": {
121 124
          "description": "How new members get in, as the profile states it.",
122 125
          "type": "string"
123 126
        },
124 127
        "members": {
125 128
          "format": "space-ref",
126 129
          "type": "string"
127 130
        },
128 131
        "meta": {
129 132
          "format": "space-ref",
130 133
          "type": "string"
131 134
        },
132 135
        "rules": {
133 136
          "items": {
134 137
            "ref": "#groupRule",
135 138
            "type": "ref"
136 139
          },
137 140
          "type": "array"
138 141
        },
139 142
        "url": {
140 143
          "description": "The group's own site, if it keeps one.",
141 144
          "format": "uri",
142 145
          "type": "string"
143 146
        }
144 147
      },
145 148
      "required": [
146 149
        "did",
147 150
        "handle",
148 151
        "meta",
149 152
        "members"
150 153
      ],
151 154
      "type": "object"
152 155
    },
153 156
    "groupViewBasic": {
154 157
      "properties": {
155 158
        "avatar": {
156 159
          "description": "CID of the group's picture.",
157 160
          "type": "string"
158 161
        },
159 162
        "did": {
160 163
          "format": "did",
161 164
          "type": "string"
162 165
        },
163 166
        "displayName": {
164 167
          "type": "string"
165 168
        },
166 169
        "handle": {
167 170
          "format": "handle",
168 171
          "type": "string"
169 172
        },
170 173
        "url": {
171 174
          "description": "The group's own site, if not at its handle.",
172 175
          "format": "uri",
173 176
          "type": "string"
174 177
        }
175 178
      },
176 179
      "required": [
177 180
        "did",
178 181
        "handle"
179 182
      ],
180 183
      "type": "object"
181 184
    },
182 185
    "groupViewDetailed": {
183 186
      "description": "A group in full, as the viewer may see it. Profile fields and rules are present only when the viewer may read the meta space.",
184 187
      "properties": {
185 188
        "avatar": {
186 189
          "description": "CID of the avatar blob; the host serves it at /img/{did}/avatar.",
187 190
          "type": "string"
188 191
        },
189 192
        "banner": {
190 193
          "description": "CID of the banner blob; the host serves it at /img/{did}/banner.",
191 194
          "type": "string"
192 195
        },
193 196
        "deactivated": {
194 197
          "description": "Set while a steward has the group switched off. Its spaces cannot be read until one of the stewards who could switch it off switches it back on.",
195 198
          "type": "boolean"
196 199
        },
197 200
        "description": {
198 201
          "type": "string"
199 202
        },
200 203
        "did": {
201 204
          "format": "did",
202 205
          "type": "string"
203 206
        },
204 207
        "displayName": {
205 208
          "type": "string"
206 209
        },
207 210
        "handle": {
208 211
          "format": "handle",
209 212
          "type": "string"
210 213
        },
211 214
        "joinPolicy": {
212 215
          "description": "How new members get in, as the profile states it.",
213 216
          "type": "string"
214 217
        },
215 218
        "members": {
216 219
          "format": "space-ref",
217 220
          "type": "string"
218 221
        },
219 222
        "meta": {
220 223
          "format": "space-ref",
221 224
          "type": "string"
222 225
        },
223 226
        "rules": {
224 227
          "description": "In the order they are presented. Absent when the meta space is closed to the viewer.",
225 228
          "items": {
226 229
            "ref": "#groupRule",
227 230
            "type": "ref"
228 231
          },
229 232
          "type": "array"
230 233
        },
231 234
        "url": {
232 235
          "description": "The group's own site, if it keeps one.",
233 236
          "format": "uri",
234 237
          "type": "string"
235 238
        },
236 239
        "viewer": {
237 240
          "ref": "#viewerState",
238 241
          "type": "ref"
239 242
        }
240 243
      },
241 244
      "required": [
242 245
        "did",
243 246
        "handle",
244 247
        "meta",
245 248
        "members"
246 249
      ],
247 250
      "type": "object"
248 251
    },
249 252
    "inviteView": {
250 253
      "properties": {
251 254
        "createdAt": {
252 255
          "format": "datetime",
253 256
          "type": "string"
254 257
        },
255 258
        "expiresAt": {
256 259
          "format": "datetime",
257 260
          "type": "string"
258 261
        },
259 262
        "invitee": {
260 263
          "format": "did",
261 264
          "type": "string"
262 265
        },
263 266
        "message": {
264 267
          "type": "string"
265 268
        },
266 269
        "uri": {
267 270
          "format": "at-uri",
268 271
          "type": "string"
269 272
        }
270 273
      },
271 274
      "required": [
272 275
        "uri",
273 276
        "invitee",
274 277
        "createdAt"
275 278
      ],
276 279
      "type": "object"
277 280
    },
278 281
    "joinRequestView": {
279 282
      "properties": {
280 283
        "actor": {
281 284
          "description": "Who is asking, as a view names them.",
282 285
          "ref": "#actorView",
283 286
          "type": "ref"
284 287
        },
285 288
        "createdAt": {
286 289
          "format": "datetime",
287 290
          "type": "string"
288 291
        },
289 292
        "did": {
290 293
          "format": "did",
291 294
          "type": "string"
292 295
        },
293 296
        "invite": {
294 297
          "format": "at-uri",
295 298
          "type": "string"
296 299
        },
297 300
        "message": {
298 301
          "type": "string"
299 302
        }
300 303
      },
301 304
      "required": [
302 305
        "did",
303 306
        "createdAt"
304 307
      ],
305 308
      "type": "object"
306 309
    },
307 310
    "memberView": {
308 311
      "properties": {
309 312
        "actor": {
310 313
          "ref": "#actorView",
311 314
          "type": "ref"
312 315
        },
313 316
        "roles": {
314 317
          "items": {
315 318
            "type": "string"
316 319
          },
317 320
          "type": "array"
318 321
        }
319 322
      },
320 323
      "required": [
321 324
        "actor",
322 325
        "roles"
323 326
      ],
324 327
      "type": "object"
325 328
    },
326 329
    "roleView": {
327 330
      "properties": {
328 331
        "description": {
329 332
          "type": "string"
330 333
        },
331 334
        "key": {
332 335
          "description": "The role id: its record key.",
333 336
          "type": "string"
334 337
        },
335 338
        "name": {
336 339
          "type": "string"
337 340
        }
338 341
      },
339 342
      "required": [
340 343
        "key"
341 344
      ],
342 345
      "type": "object"
343 346
    },
344 347
    "spaceView": {
345 348
      "properties": {
349 +
        "credentialScopes": {
350 +
          "description": "What each role may write there as the group, when the viewer may read the space.",
351 +
          "items": {
352 +
            "ref": "fyi.opensocial.access#roleScopes",
353 +
            "type": "ref"
354 +
          },
355 +
          "type": "array"
356 +
        },
346 357
        "name": {
347 358
          "type": "string"
348 359
        },
349 360
        "readableBy": {
350 361
          "description": "The space's read gate, when the viewer may read the space.",
351 362
          "items": {
352 363
            "type": "string"
353 364
          },
354 365
          "type": "array"
355 366
        },
356 367
        "type": {
357 368
          "format": "nsid",
358 369
          "type": "string"
359 370
        },
360 371
        "uri": {
361 372
          "format": "space-ref",
362 373
          "type": "string"
374 +
        },
375 +
        "writableBy": {
376 +
          "description": "Who may write there in their own name, when the viewer may read the space. Absent is any member.",
377 +
          "items": {
378 +
            "type": "string"
379 +
          },
380 +
          "type": "array"
363 381
        }
364 382
      },
365 383
      "required": [
366 384
        "uri",
367 385
        "type"
368 386
      ],
369 387
      "type": "object"
370 388
    },
371 389
    "subjectView": {
372 390
      "properties": {
373 391
        "createdAt": {
374 392
          "format": "datetime",
375 393
          "type": "string"
376 394
        },
377 395
        "lastReportedAt": {
378 396
          "format": "datetime",
379 397
          "type": "string"
380 398
        },
381 399
        "reportCount": {
382 400
          "type": "integer"
383 401
        },
384 402
        "status": {
385 403
          "knownValues": [
386 404
            "open",
387 405
            "escalated",
388 406
            "resolved"
389 407
          ],
390 408
          "type": "string"
391 409
        },
392 410
        "subject": {
393 411
          "description": "A record's at-uri, or an account's DID.",
394 412
          "format": "uri",
395 413
          "type": "string"
396 414
        },
397 415
        "updatedAt": {
398 416
          "format": "datetime",
399 417
          "type": "string"
400 418
        }
401 419
      },
402 420
      "required": [
403 421
        "subject",
404 422
        "status",
405 423
        "createdAt"
406 424
      ],
407 425
      "type": "object"
408 426
    },
409 427
    "viewerState": {
410 428
      "description": "The requesting account's standing in the group. Only present for authed requests.",
411 429
      "properties": {
412 430
        "accepted": {
413 431
          "description": "For a member: whether their own acceptance is in the members space.",
414 432
          "type": "boolean"
415 433
        },
416 434
        "actions": {
417 435
          "description": "The union of actions across the viewer's roles: what the host would let them do.",
418 436
          "items": {
419 437
            "ref": "fyi.opensocial.permissions#action",
420 438
            "type": "ref"
421 439
          },
422 440
          "type": "array"
423 441
        },
424 442
        "member": {
425 443
          "type": "boolean"
426 444
        },
427 445
        "request": {
428 446
          "description": "The viewer's own pending request to join, when they are not a member and have one.",
429 447
          "ref": "#joinRequestView",
430 448
          "type": "ref"
431 449
        },
432 450
        "roles": {
433 451
          "items": {
434 452
            "type": "string"
435 453
          },
436 454
          "type": "array"
437 455
        }
438 456
      },
439 457
      "required": [
440 458
        "member",
441 459
        "roles",
442 460
        "actions"
443 461
      ],
444 462
      "type": "object"
445 463
    }
446 464
  },
447 465
  "id": "fyi.opensocial.defs",
448 466
  "lexicon": 1
449 467
}

Compare Other Versions

Lexicon Garden

@