social.colibri.beta.sync.defs

colibri.social

Schema Diff

+33 -0

From

CID
bafyreicrkbh5tdv...
Indexed At
2026-08-23 12:32 UTC
View this version

To

CID
bafyreid4zxvtiub...
Indexed At
2026-08-25 14:45 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 8 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.sync.defs#preferencesEvent", src: "social.colibri.beta.sync.defs#preferencesEvent", tgt: "social.colibri.beta.sync.defs#preferencesEvent.preferences", kind: "prop", name: Some("preferences") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.sync.defs#wroteTo", src: "social.colibri.beta.sync.defs#wroteTo", tgt: "social.colibri.beta.sync.defs#wroteTo.space", kind: "prop", name: Some("space") }
Non-Breaking Changes (8)
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#preferences" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.sync.defs#preferencesEvent" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.sync.defs#preferencesEvent.preferences" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.sync.defs#wroteTo" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.sync.defs#wroteTo.rev" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.sync.defs#wroteTo.space" }
  • AddedEdge AddedEdge { src: "social.colibri.beta.sync.defs#preferencesEvent.preferences", tgt: "social.colibri.beta.actor.defs#preferences", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.beta.sync.defs#wroteTo", tgt: "social.colibri.beta.sync.defs#wroteTo.rev", kind: "prop", name: Some("rev") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#preferences" }
  • AddedVertex { vertex_id: "social.colibri.beta.sync.defs#preferencesEvent" }
  • AddedVertex { vertex_id: "social.colibri.beta.sync.defs#preferencesEvent.preferences" }
  • AddedVertex { vertex_id: "social.colibri.beta.sync.defs#wroteTo" }
  • AddedVertex { vertex_id: "social.colibri.beta.sync.defs#wroteTo.rev" }
  • AddedVertex { vertex_id: "social.colibri.beta.sync.defs#wroteTo.space" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.sync.defs#preferencesEvent", src: "social.colibri.beta.sync.defs#preferencesEvent", tgt: "social.colibri.beta.sync.defs#preferencesEvent.preferences", kind: "prop", name: Some("preferences") }
  • Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.sync.defs#wroteTo", src: "social.colibri.beta.sync.defs#wroteTo", tgt: "social.colibri.beta.sync.defs#wroteTo.space", kind: "prop", name: Some("space") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.sync.defs#preferencesEvent.preferences", tgt: "social.colibri.beta.actor.defs#preferences", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.sync.defs#wroteTo", tgt: "social.colibri.beta.sync.defs#wroteTo.rev", kind: "prop", name: Some("rev") }
1 1
{
2 2
  "id": "social.colibri.beta.sync.defs",
3 3
  "defs": {
4 4
    "ack": {
5 5
      "type": "object",
6 6
      "required": [],
7 7
      "properties": {},
8 8
      "description": "Answers a heartbeat."
9 9
    },
10 10
    "error": {
11 11
      "type": "object",
12 12
      "required": [
13 13
        "error"
14 14
      ],
15 15
      "properties": {
16 16
        "error": {
17 17
          "type": "string",
18 18
          "description": "Error name.",
19 19
          "knownValues": [
20 20
            "InvalidFrame",
21 21
            "Forbidden",
22 22
            "NotFound",
23 23
            "RateLimited"
24 24
          ]
25 25
        },
26 26
        "message": {
27 27
          "type": "string",
28 28
          "description": "Human-readable detail."
29 29
        }
30 30
      },
31 31
      "description": "Something the client sent could not be acted on."
32 32
    },
33 33
    "typing": {
34 34
      "type": "object",
35 35
      "required": [
36 36
        "channel"
37 37
      ],
38 38
      "properties": {
39 39
        "channel": {
40 40
          "type": "string",
41 41
          "format": "space-ref",
42 42
          "description": "The channel being typed in."
43 43
        }
44 44
      },
45 45
      "description": "Reports that the user is typing in a channel."
46 46
    },
47 +
    "wroteTo": {
48 +
      "type": "object",
49 +
      "required": [
50 +
        "space"
51 +
      ],
52 +
      "properties": {
53 +
        "rev": {
54 +
          "type": "string",
55 +
          "format": "tid",
56 +
          "description": "The revision the write produced, when the client knows it."
57 +
        },
58 +
        "space": {
59 +
          "type": "string",
60 +
          "format": "space-ref",
61 +
          "description": "The space that was written to."
62 +
        }
63 +
      },
64 +
      "description": "Reports that the user just wrote a record to a space, so the AppView can pull it without waiting for the space host to forward a notification. Honoured only for a space this connection already receives."
65 +
    },
47 66
    "heartbeat": {
48 67
      "type": "object",
49 68
      "required": [],
50 69
      "properties": {},
51 70
      "description": "Keeps the connection alive and tells the AppView the user is still present. The server answers with an ack."
52 71
    },
53 72
    "roleEvent": {
54 73
      "type": "object",
55 74
      "required": [
56 75
        "event",
57 76
        "community"
58 77
      ],
59 78
      "properties": {
60 79
        "rkey": {
61 80
          "type": "string",
62 81
          "format": "record-key",
63 82
          "description": "Which role, for deletes."
64 83
        },
65 84
        "role": {
66 85
          "ref": "social.colibri.beta.community.defs#roleView",
67 86
          "type": "ref",
68 87
          "description": "The role. Absent on delete."
69 88
        },
70 89
        "event": {
71 90
          "type": "string",
72 91
          "description": "What happened.",
73 92
          "knownValues": [
74 93
            "create",
75 94
            "update",
76 95
            "delete"
77 96
          ]
78 97
        },
79 98
        "community": {
80 99
          "type": "string",
81 100
          "format": "did",
82 101
          "description": "The community it belongs to."
83 102
        }
84 103
      },
85 104
      "description": "A role was created, changed, or deleted."
86 105
    },
87 106
    "seenEvent": {
88 107
      "type": "object",
89 108
      "required": [
90 109
        "unread"
91 110
      ],
92 111
      "properties": {
93 112
        "seenAt": {
94 113
          "type": "string",
95 114
          "format": "datetime",
96 115
          "description": "The point everything was marked seen up to."
97 116
        },
98 117
        "unread": {
99 118
          "type": "integer",
100 119
          "description": "The user's remaining unread count."
101 120
        },
102 121
        "channel": {
103 122
          "type": "string",
104 123
          "format": "space-ref",
105 124
          "description": "The channel that was marked seen, when it was a single channel."
106 125
        }
107 126
      },
108 127
      "description": "The connected user marked notifications seen somewhere else, so this client should clear the same badges."
109 128
    },
110 129
    "subscribe": {
111 130
      "type": "object",
112 131
      "required": [],
113 132
      "properties": {
114 133
        "channels": {
115 134
          "type": "array",
116 135
          "items": {
117 136
            "type": "string",
118 137
            "format": "space-ref",
119 138
            "description": "A channel."
120 139
          },
121 140
          "description": "Channels to start receiving messages for."
122 141
        },
123 142
        "communities": {
124 143
          "type": "array",
125 144
          "items": {
126 145
            "type": "string",
127 146
            "format": "did",
128 147
            "description": "A community."
129 148
          },
130 149
          "description": "Communities to start receiving events for."
131 150
        }
132 151
      },
133 152
      "description": "Adds communities and channels to what this connection receives. Subscription is explicit: a connection is sent nothing it did not ask for."
134 153
    },
135 154
    "labelEvent": {
136 155
      "type": "object",
137 156
      "required": [
138 157
        "event",
139 158
        "space",
140 159
        "subject",
141 160
        "val",
142 161
        "src"
143 162
      ],
144 163
      "properties": {
145 164
        "src": {
146 165
          "type": "string",
147 166
          "format": "did",
148 167
          "description": "The labeler."
149 168
        },
150 169
        "val": {
151 170
          "type": "string",
152 171
          "description": "The label value."
153 172
        },
154 173
        "event": {
155 174
          "type": "string",
156 175
          "description": "What happened.",
157 176
          "knownValues": [
158 177
            "create",
159 178
            "negate"
160 179
          ]
161 180
        },
162 181
        "space": {
163 182
          "type": "string",
164 183
          "format": "space-ref",
165 184
          "description": "The space the labelled record lives in."
166 185
        },
167 186
        "subject": {
168 187
          "ref": "social.colibri.beta.label#subject",
169 188
          "type": "ref",
170 189
          "description": "The labelled record."
171 190
        }
172 191
      },
173 192
      "description": "A label was applied or retracted on a record in a subscribed space."
174 193
    },
175 194
    "subscribed": {
176 195
      "type": "object",
177 196
      "required": [
178 197
        "communities",
179 198
        "channels"
180 199
      ],
181 200
      "properties": {
182 201
        "channels": {
183 202
          "type": "array",
184 203
          "items": {
185 204
            "type": "string",
186 205
            "format": "space-ref",
187 206
            "description": "A channel."
188 207
          },
189 208
          "description": "Channels being received."
190 209
        },
191 210
        "communities": {
192 211
          "type": "array",
193 212
          "items": {
194 213
            "type": "string",
195 214
            "format": "did",
196 215
            "description": "A community."
197 216
          },
198 217
          "description": "Communities being received."
199 218
        }
200 219
      },
201 220
      "description": "Confirms what this connection is now receiving, after a subscribe or unsubscribe. Anything the user is not entitled to read is silently absent."
202 221
    },
203 222
    "voiceEvent": {
204 223
      "type": "object",
205 224
      "required": [
206 225
        "event",
207 226
        "channel",
208 227
        "did"
209 228
      ],
210 229
      "properties": {
211 230
        "did": {
212 231
          "type": "string",
213 232
          "format": "did",
214 233
          "description": "Who."
215 234
        },
216 235
        "event": {
217 236
          "type": "string",
218 237
          "description": "What happened.",
219 238
          "knownValues": [
220 239
            "join",
221 240
            "leave",
222 241
            "update",
223 242
            "speaking"
224 243
          ]
225 244
        },
226 245
        "voice": {
227 246
          "ref": "social.colibri.beta.actor.defs#voiceState",
228 247
          "type": "ref",
229 248
          "description": "Their voice state. Absent on leave."
230 249
        },
231 250
        "channel": {
232 251
          "type": "string",
233 252
          "format": "space-ref",
234 253
          "description": "The voice channel."
235 254
        },
236 255
        "speaking": {
237 256
          "type": "boolean",
238 257
          "description": "Whether they are currently speaking, on speaking events."
239 258
        }
240 259
      },
241 260
      "description": "A voice channel's participants changed."
242 261
    },
243 262
    "memberEvent": {
244 263
      "type": "object",
245 264
      "required": [
246 265
        "event",
247 266
        "community"
248 267
      ],
249 268
      "properties": {
250 269
        "event": {
251 270
          "type": "string",
252 271
          "description": "What happened. A kick or a ban arrives as a leave.",
253 272
          "knownValues": [
254 273
            "join",
255 274
            "leave",
256 275
            "update"
257 276
          ]
258 277
        },
259 278
        "member": {
260 279
          "ref": "social.colibri.beta.community.defs#memberView",
261 280
          "type": "ref",
262 281
          "description": "The member. Absent on leave."
263 282
        },
264 283
        "subject": {
265 284
          "type": "string",
266 285
          "format": "did",
267 286
          "description": "Who, for leaves."
268 287
        },
269 288
        "community": {
270 289
          "type": "string",
271 290
          "format": "did",
272 291
          "description": "The community."
273 292
        }
274 293
      },
275 294
      "description": "Someone joined, left, or had their roles changed."
276 295
    },
277 296
    "setPresence": {
278 297
      "type": "object",
279 298
      "required": [],
280 299
      "properties": {
281 300
        "voice": {
282 301
          "ref": "#voiceSelfState",
283 302
          "type": "ref",
284 303
          "description": "The user's own voice state, when connected to a voice channel."
285 304
        },
286 305
        "onlineState": {
287 306
          "type": "string",
288 307
          "description": "Requested online state.",
289 308
          "knownValues": [
290 309
            "online",
291 310
            "away",
292 311
            "dnd",
293 312
            "offline"
294 313
          ]
295 314
        }
296 315
      },
297 316
      "description": "Updates the user's own presence over the socket."
298 317
    },
299 318
    "typingEvent": {
300 319
      "type": "object",
301 320
      "required": [
302 321
        "did",
303 322
        "channel"
304 323
      ],
305 324
      "properties": {
306 325
        "did": {
307 326
          "type": "string",
308 327
          "format": "did",
309 328
          "description": "Who is typing."
310 329
        },
311 330
        "channel": {
312 331
          "type": "string",
313 332
          "format": "space-ref",
314 333
          "description": "Where."
315 334
        }
316 335
      },
317 336
      "description": "Someone is typing in a subscribed channel."
318 337
    },
319 338
    "unsubscribe": {
320 339
      "type": "object",
321 340
      "required": [],
322 341
      "properties": {
323 342
        "channels": {
324 343
          "type": "array",
325 344
          "items": {
326 345
            "type": "string",
327 346
            "format": "space-ref",
328 347
            "description": "A channel."
329 348
          },
330 349
          "description": "Channels to stop receiving messages for."
331 350
        },
332 351
        "communities": {
333 352
          "type": "array",
334 353
          "items": {
335 354
            "type": "string",
336 355
            "format": "did",
337 356
            "description": "A community."
338 357
          },
339 358
          "description": "Communities to stop receiving events for."
340 359
        }
341 360
      },
342 361
      "description": "Removes communities and channels from what this connection receives."
343 362
    },
344 363
    "viewChannel": {
345 364
      "type": "object",
346 365
      "required": [],
347 366
      "properties": {
348 367
        "channel": {
349 368
          "type": "string",
350 369
          "format": "space-ref",
351 370
          "description": "The channel now in view."
352 371
        }
353 372
      },
354 373
      "description": "Reports which channel the user is looking at, which drives read state and away detection. An absent channel means they are looking at none."
355 374
    },
356 375
    "channelEvent": {
357 376
      "type": "object",
358 377
      "required": [
359 378
        "event",
360 379
        "community"
361 380
      ],
362 381
      "properties": {
363 382
        "event": {
364 383
          "type": "string",
365 384
          "description": "What happened.",
366 385
          "knownValues": [
367 386
            "create",
368 387
            "update",
369 388
            "delete"
370 389
          ]
371 390
        },
372 391
        "space": {
373 392
          "type": "string",
374 393
          "format": "space-ref",
375 394
          "description": "Which channel, for deletes."
376 395
        },
377 396
        "channel": {
378 397
          "ref": "social.colibri.beta.community.defs#channelView",
379 398
          "type": "ref",
380 399
          "description": "The channel. Absent on delete."
381 400
        },
382 401
        "community": {
383 402
          "type": "string",
384 403
          "format": "did",
385 404
          "description": "The community it belongs to."
386 405
        }
387 406
      },
388 407
      "description": "A channel was created, changed, or deleted."
389 408
    },
390 409
    "messageEvent": {
391 410
      "type": "object",
392 411
      "required": [
393 412
        "event",
394 413
        "channel"
395 414
      ],
396 415
      "properties": {
397 416
        "event": {
398 417
          "type": "string",
399 418
          "description": "What happened.",
400 419
          "knownValues": [
401 420
            "create",
402 421
            "update",
403 422
            "delete"
404 423
          ]
405 424
        },
406 425
        "channel": {
407 426
          "type": "string",
408 427
          "format": "space-ref",
409 428
          "description": "The channel it happened in."
410 429
        },
411 430
        "message": {
412 431
          "ref": "social.colibri.beta.channel.defs#messageView",
413 432
          "type": "ref",
414 433
          "description": "The message. Absent on delete, where the reference alone identifies it."
415 434
        },
416 435
        "subject": {
417 436
          "ref": "social.colibri.beta.defs#recordRef",
418 437
          "type": "ref",
419 438
          "description": "Which message, for deletes."
420 439
        }
421 440
      },
422 441
      "description": "A message was written, edited, or deleted in a subscribed channel."
423 442
    },
424 443
    "categoryEvent": {
425 444
      "type": "object",
426 445
      "required": [
427 446
        "event",
428 447
        "community"
429 448
      ],
430 449
      "properties": {
431 450
        "rkey": {
432 451
          "type": "string",
433 452
          "format": "record-key",
434 453
          "description": "Which category, for deletes."
435 454
        },
436 455
        "event": {
437 456
          "type": "string",
438 457
          "description": "What happened.",
439 458
          "knownValues": [
440 459
            "create",
441 460
            "update",
442 461
            "delete"
443 462
          ]
444 463
        },
445 464
        "category": {
446 465
          "ref": "social.colibri.beta.community.defs#categoryView",
447 466
          "type": "ref",
448 467
          "description": "The category. Absent on delete."
449 468
        },
450 469
        "community": {
451 470
          "type": "string",
452 471
          "format": "did",
453 472
          "description": "The community it belongs to."
454 473
        }
455 474
      },
456 475
      "description": "A category was created, changed, or deleted."
457 476
    },
458 477
    "presenceEvent": {
459 478
      "type": "object",
460 479
      "required": [
461 480
        "did",
462 481
        "presence"
463 482
      ],
464 483
      "properties": {
465 484
        "did": {
466 485
          "type": "string",
467 486
          "format": "did",
468 487
          "description": "Whose presence changed."
469 488
        },
470 489
        "presence": {
471 490
          "ref": "social.colibri.beta.actor.defs#presence",
472 491
          "type": "ref",
473 492
          "description": "Their new presence."
474 493
        }
475 494
      },
476 495
      "description": "Someone's presence changed."
477 496
    },
478 497
    "reactionEvent": {
479 498
      "type": "object",
480 499
      "required": [
481 500
        "event",
482 501
        "channel",
483 502
        "target",
484 503
        "emoji",
485 504
        "actor"
486 505
      ],
487 506
      "properties": {
488 507
        "actor": {
489 508
          "type": "string",
490 509
          "format": "did",
491 510
          "description": "Who reacted."
492 511
        },
493 512
        "emoji": {
494 513
          "type": "string",
495 514
          "description": "The emoji or custom shortcode."
496 515
        },
497 516
        "event": {
498 517
          "type": "string",
499 518
          "description": "What happened.",
500 519
          "knownValues": [
501 520
            "create",
502 521
            "delete"
503 522
          ]
504 523
        },
505 524
        "target": {
506 525
          "ref": "social.colibri.beta.defs#recordRef",
507 526
          "type": "ref",
508 527
          "description": "The message reacted to."
509 528
        },
510 529
        "channel": {
511 530
          "type": "string",
512 531
          "format": "space-ref",
513 532
          "description": "The channel it happened in."
514 533
        }
515 534
      },
516 535
      "description": "A reaction was added or removed in a subscribed channel."
517 536
    },
518 537
    "communityEvent": {
519 538
      "type": "object",
520 539
      "required": [
521 540
        "event",
522 541
        "community"
523 542
      ],
524 543
      "properties": {
525 544
        "view": {
526 545
          "ref": "social.colibri.beta.community.defs#communityView",
527 546
          "type": "ref",
528 547
          "description": "The community. Absent on delete."
529 548
        },
530 549
        "event": {
531 550
          "type": "string",
532 551
          "description": "What happened.",
533 552
          "knownValues": [
534 553
            "update",
535 554
            "delete"
536 555
          ]
537 556
        },
538 557
        "community": {
539 558
          "type": "string",
540 559
          "format": "did",
541 560
          "description": "The community."
542 561
        }
543 562
      },
544 563
      "description": "A community's profile or settings changed."
545 564
    },
546 565
    "voiceSelfState": {
547 566
      "type": "object",
548 567
      "required": [
549 568
        "channel"
550 569
      ],
551 570
      "properties": {
552 571
        "muted": {
553 572
          "type": "boolean",
554 573
          "description": "Whether the microphone is muted."
555 574
        },
556 575
        "channel": {
557 576
          "type": "string",
558 577
          "format": "space-ref",
559 578
          "description": "The voice channel."
560 579
        },
561 580
        "deafened": {
562 581
          "type": "boolean",
563 582
          "description": "Whether the user has deafened themselves."
564 583
        }
565 584
      },
566 585
      "description": "A user's own voice state."
567 586
    },
568 587
    "moderationEvent": {
569 588
      "type": "object",
570 589
      "required": [
571 590
        "community",
572 591
        "entry"
573 592
      ],
574 593
      "properties": {
575 594
        "entry": {
576 595
          "ref": "social.colibri.beta.community.defs#moderationView",
577 596
          "type": "ref",
578 597
          "description": "The log entry."
579 598
        },
580 599
        "community": {
581 600
          "type": "string",
582 601
          "format": "did",
583 602
          "description": "The community."
584 603
        }
585 604
      },
586 605
      "description": "A moderation action was logged. Only sent to members who can read the log."
587 606
    },
588 607
    "applicationEvent": {
589 608
      "type": "object",
590 609
      "required": [
591 610
        "event",
592 611
        "community",
593 612
        "subject"
594 613
      ],
595 614
      "properties": {
596 615
        "event": {
597 616
          "type": "string",
598 617
          "description": "What happened.",
599 618
          "knownValues": [
600 619
            "create",
601 620
            "approve",
602 621
            "dismiss",
603 622
            "undismiss"
604 623
          ]
605 624
        },
606 625
        "subject": {
607 626
          "type": "string",
608 627
          "format": "did",
609 628
          "description": "The applicant."
610 629
        },
611 630
        "community": {
612 631
          "type": "string",
613 632
          "format": "did",
614 633
          "description": "The community."
615 634
        },
616 635
        "application": {
617 636
          "ref": "social.colibri.beta.community.defs#applicationView",
618 637
          "type": "ref",
619 638
          "description": "The application. Absent on approve."
620 639
        }
621 640
      },
622 641
      "description": "The pending-application queue changed. Only sent to members who can manage approvals."
623 642
    },
643 +
    "preferencesEvent": {
644 +
      "type": "object",
645 +
      "required": [
646 +
        "preferences"
647 +
      ],
648 +
      "properties": {
649 +
        "preferences": {
650 +
          "ref": "social.colibri.beta.actor.defs#preferences",
651 +
          "type": "ref",
652 +
          "description": "Their preferences as they now stand."
653 +
        }
654 +
      },
655 +
      "description": "The connected user changed their own preferences somewhere else."
656 +
    },
624 657
    "notificationEvent": {
625 658
      "type": "object",
626 659
      "required": [
627 660
        "notification"
628 661
      ],
629 662
      "properties": {
630 663
        "notification": {
631 664
          "ref": "social.colibri.beta.notification.defs#notificationView",
632 665
          "type": "ref",
633 666
          "description": "The notification."
634 667
        }
635 668
      },
636 669
      "description": "A notification was raised for the connected user."
637 670
    },
638 671
    "communityProgressEvent": {
639 672
      "type": "object",
640 673
      "required": [
641 674
        "step",
642 675
        "completed",
643 676
        "total"
644 677
      ],
645 678
      "properties": {
646 679
        "step": {
647 680
          "type": "string",
648 681
          "description": "What the AppView is doing now.",
649 682
          "knownValues": [
650 683
            "creatingAccount",
651 684
            "creatingSpaces",
652 685
            "writingProfile",
653 686
            "creatingOwnerRole",
654 687
            "creatingStarterChannels",
655 688
            "done",
656 689
            "failed"
657 690
          ]
658 691
        },
659 692
        "total": {
660 693
          "type": "integer",
661 694
          "description": "Steps in total."
662 695
        },
663 696
        "message": {
664 697
          "type": "string",
665 698
          "description": "Human-readable detail, set on failure."
666 699
        },
667 700
        "community": {
668 701
          "type": "string",
669 702
          "format": "did",
670 703
          "description": "The community, once its account exists."
671 704
        },
672 705
        "completed": {
673 706
          "type": "integer",
674 707
          "description": "Steps finished."
675 708
        }
676 709
      },
677 710
      "description": "Progress while a community is being created, which takes several PDS round-trips."
678 711
    }
679 712
  },
680 713
  "$type": "com.atproto.lexicon.schema",
681 714
  "lexicon": 1
682 715
}

Compare Other Versions

Lexicon Garden

@