games.cavu.tier-madness.defs

chris.pardy.family

Schema Diff

+28 -0

From

CID
bafyreigvkqkhqrz...
Indexed At
2026-10-02 18:09 UTC
View this version

To

CID
bafyreif26rnuquv...
Indexed At
2026-10-02 19:52 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 8 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "games.cavu.tier-madness.defs#rematch", src: "games.cavu.tier-madness.defs#rematch", tgt: "games.cavu.tier-madness.defs#rematch.code", kind: "prop", name: Some("code") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "games.cavu.tier-madness.defs#rematch", src: "games.cavu.tier-madness.defs#rematch", tgt: "games.cavu.tier-madness.defs#rematch.host", kind: "prop", name: Some("host") }
Non-Breaking Changes (8)
  • AddedVertex AddedVertex { vertex_id: "games.cavu.tier-madness.defs#gameView.rematch" }
  • AddedVertex AddedVertex { vertex_id: "games.cavu.tier-madness.defs#player.bot" }
  • AddedVertex AddedVertex { vertex_id: "games.cavu.tier-madness.defs#rematch" }
  • AddedVertex AddedVertex { vertex_id: "games.cavu.tier-madness.defs#rematch.code" }
  • AddedVertex AddedVertex { vertex_id: "games.cavu.tier-madness.defs#rematch.host" }
  • AddedEdge AddedEdge { src: "games.cavu.tier-madness.defs#gameView", tgt: "games.cavu.tier-madness.defs#gameView.rematch", kind: "prop", name: Some("rematch") }
  • AddedEdge AddedEdge { src: "games.cavu.tier-madness.defs#gameView.rematch", tgt: "games.cavu.tier-madness.defs#rematch", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "games.cavu.tier-madness.defs#player", tgt: "games.cavu.tier-madness.defs#player.bot", kind: "prop", name: Some("bot") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "games.cavu.tier-madness.defs#gameView.rematch" }
  • AddedVertex { vertex_id: "games.cavu.tier-madness.defs#player.bot" }
  • AddedVertex { vertex_id: "games.cavu.tier-madness.defs#rematch" }
  • AddedVertex { vertex_id: "games.cavu.tier-madness.defs#rematch.code" }
  • AddedVertex { vertex_id: "games.cavu.tier-madness.defs#rematch.host" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "games.cavu.tier-madness.defs#rematch", src: "games.cavu.tier-madness.defs#rematch", tgt: "games.cavu.tier-madness.defs#rematch.code", kind: "prop", name: Some("code") }
  • Breaking: RequiredEdgeAdded { vertex_id: "games.cavu.tier-madness.defs#rematch", src: "games.cavu.tier-madness.defs#rematch", tgt: "games.cavu.tier-madness.defs#rematch.host", kind: "prop", name: Some("host") }
  • Non-breaking: AddedEdge { src: "games.cavu.tier-madness.defs#gameView", tgt: "games.cavu.tier-madness.defs#gameView.rematch", kind: "prop", name: Some("rematch") }
  • Non-breaking: AddedEdge { src: "games.cavu.tier-madness.defs#gameView.rematch", tgt: "games.cavu.tier-madness.defs#rematch", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "games.cavu.tier-madness.defs#player", tgt: "games.cavu.tier-madness.defs#player.bot", kind: "prop", name: Some("bot") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "cardPoints": {
5 5
      "description": "Points one card scored for the viewer against the other players.",
6 6
      "properties": {
7 7
        "item": {
8 8
          "maxLength": 300,
9 9
          "type": "string"
10 10
        },
11 11
        "points": {
12 12
          "type": "integer"
13 13
        }
14 14
      },
15 15
      "required": [
16 16
        "item",
17 17
        "points"
18 18
      ],
19 19
      "type": "object"
20 20
    },
21 21
    "cardResult": {
22 22
      "description": "How one card scored for the viewer.",
23 23
      "properties": {
24 24
        "doubled": {
25 25
          "type": "boolean"
26 26
        },
27 27
        "fromPlayers": {
28 28
          "description": "The part of `points` scored against the other players, already counted during the reveal.",
29 29
          "type": "integer"
30 30
        },
31 31
        "group": {
32 32
          "ref": "#tier",
33 33
          "type": "ref"
34 34
        },
35 35
        "item": {
36 36
          "maxLength": 300,
37 37
          "type": "string"
38 38
        },
39 39
        "points": {
40 40
          "type": "integer"
41 41
        },
42 42
        "yours": {
43 43
          "ref": "#tier",
44 44
          "type": "ref"
45 45
        }
46 46
      },
47 47
      "required": [
48 48
        "item",
49 49
        "yours",
50 50
        "group",
51 51
        "points",
52 52
        "fromPlayers"
53 53
      ],
54 54
      "type": "object"
55 55
    },
56 56
    "gamePlayer": {
57 57
      "properties": {
58 58
        "did": {
59 59
          "format": "did",
60 60
          "type": "string"
61 61
        },
62 62
        "initials": {
63 63
          "maxLength": 3,
64 64
          "minLength": 3,
65 65
          "type": "string"
66 66
        }
67 67
      },
68 68
      "required": [
69 69
        "did",
70 70
        "initials"
71 71
      ],
72 72
      "type": "object"
73 73
    },
74 74
    "gameView": {
75 75
      "description": "The game as one viewer may see it. Secrets (other players' moves, items not yet dealt to this viewer) are left out until revealed.",
76 76
      "properties": {
77 77
        "ballot": {
78 78
          "description": "Categories to vote on (vote phase).",
79 79
          "items": {
80 80
            "maxLength": 300,
81 81
            "type": "string"
82 82
          },
83 83
          "type": "array"
84 84
        },
85 85
        "category": {
86 86
          "maxLength": 300,
87 87
          "type": "string"
88 88
        },
89 89
        "code": {
90 90
          "description": "The join code, for players and spectators (who already know it).",
91 91
          "maxLength": 4,
92 92
          "minLength": 4,
93 93
          "type": "string"
94 94
        },
95 95
        "criteria": {
96 96
          "maxLength": 300,
97 97
          "type": "string"
98 98
        },
99 99
        "criteriaOptions": {
100 100
          "items": {
101 101
            "maxLength": 300,
102 102
            "type": "string"
103 103
          },
104 104
          "type": "array"
105 105
        },
106 106
        "criteriaPicker": {
107 107
          "format": "did",
108 108
          "type": "string"
109 109
        },
110 110
        "deadline": {
111 111
          "description": "When the server stops waiting on stalled players (ms since epoch), if it's counting down.",
112 112
          "type": "integer"
113 113
        },
114 114
        "game": {
115 115
          "maxLength": 64,
116 116
          "type": "string"
117 117
        },
118 118
        "group": {
119 119
          "description": "The group's median list (final phase).",
120 120
          "items": {
121 121
            "ref": "#placement",
122 122
            "type": "ref"
123 123
          },
124 124
          "type": "array"
125 125
        },
126 126
        "hand": {
127 127
          "description": "Cards this viewer may see: during the deal, a player's cards so far (the next is dealt once the previous placement is committed); from the reveal on, the whole round, for everyone.",
128 128
          "items": {
129 129
            "ref": "#item",
130 130
            "type": "ref"
131 131
          },
132 132
          "type": "array"
133 133
        },
134 134
        "host": {
135 135
          "format": "did",
136 136
          "type": "string"
137 137
        },
138 138
        "joinable": {
139 139
          "description": "Whether the lobby still takes players.",
140 140
          "type": "boolean"
141 141
        },
142 142
        "mine": {
143 143
          "ref": "#mine",
144 144
          "type": "ref"
145 145
        },
146 146
        "phase": {
147 147
          "ref": "#phase",
148 148
          "type": "ref"
149 149
        },
150 150
        "players": {
151 151
          "items": {
152 152
            "ref": "#player",
153 153
            "type": "ref"
154 154
          },
155 155
          "type": "array"
156 156
        },
157 +
        "rematch": {
158 +
          "description": "Game over: the rematch someone started, while it still takes players.",
159 +
          "ref": "#rematch",
160 +
          "type": "ref"
161 +
        },
157 162
        "results": {
158 163
          "description": "After the reveal: how each of the viewer's cards scored.",
159 164
          "items": {
160 165
            "ref": "#cardResult",
161 166
            "type": "ref"
162 167
          },
163 168
          "type": "array"
164 169
        },
165 170
        "reveal": {
166 171
          "ref": "#reveal",
167 172
          "type": "ref"
168 173
        },
169 174
        "revealIndex": {
170 175
          "description": "Reveal phase: which card (in deal order) is being revealed.",
171 176
          "minimum": 0,
172 177
          "type": "integer"
173 178
        },
174 179
        "revealPoints": {
175 180
          "description": "Reveal phase: the viewer's points against the other players, for each card revealed so far.",
176 181
          "items": {
177 182
            "ref": "#cardPoints",
178 183
            "type": "ref"
179 184
          },
180 185
          "type": "array"
181 186
        },
182 187
        "reveals": {
183 188
          "description": "Spectators, once a round is revealed: every item's picks at once, so a spectator screen can play the reveal on timers instead of following the host.",
184 189
          "items": {
185 190
            "ref": "#reveal",
186 191
            "type": "ref"
187 192
          },
188 193
          "type": "array"
189 194
        },
190 195
        "round": {
191 196
          "minimum": 0,
192 197
          "type": "integer"
193 198
        },
194 199
        "totalRounds": {
195 200
          "minimum": 1,
196 201
          "type": "integer"
197 202
        },
198 203
        "viewer": {
199 204
          "ref": "#viewer",
200 205
          "type": "ref"
201 206
        }
202 207
      },
203 208
      "required": [
204 209
        "game",
205 210
        "phase",
206 211
        "round",
207 212
        "totalRounds",
208 213
        "players",
209 214
        "viewer"
210 215
      ],
211 216
      "type": "object"
212 217
    },
213 218
    "item": {
214 219
      "description": "A card, sourced from a Wikipedia article.",
215 220
      "properties": {
216 221
        "extract": {
217 222
          "maxLength": 10000,
218 223
          "type": "string"
219 224
        },
220 225
        "id": {
221 226
          "maxLength": 300,
222 227
          "type": "string"
223 228
        },
224 229
        "imageUrl": {
225 230
          "format": "uri",
226 231
          "type": "string"
227 232
        },
228 233
        "name": {
229 234
          "maxLength": 300,
230 235
          "type": "string"
231 236
        },
232 237
        "sourceUrl": {
233 238
          "format": "uri",
234 239
          "type": "string"
235 240
        },
236 241
        "summary": {
237 242
          "maxLength": 1000,
238 243
          "type": "string"
239 244
        }
240 245
      },
241 246
      "required": [
242 247
        "id",
243 248
        "name",
244 249
        "summary"
245 250
      ],
246 251
      "type": "object"
247 252
    },
248 253
    "mine": {
249 254
      "description": "The viewer's own round so far (only ever sent to that player).",
250 255
      "properties": {
251 256
        "double": {
252 257
          "maxLength": 300,
253 258
          "type": "string"
254 259
        },
255 260
        "doubleChosen": {
256 261
          "type": "boolean"
257 262
        },
258 263
        "placements": {
259 264
          "description": "As placed, before any swap.",
260 265
          "items": {
261 266
            "ref": "#placement",
262 267
            "type": "ref"
263 268
          },
264 269
          "type": "array"
265 270
        },
266 271
        "swap": {
267 272
          "description": "The swap, once chosen ([] = skipped).",
268 273
          "items": {
269 274
            "maxLength": 300,
270 275
            "type": "string"
271 276
          },
272 277
          "maxLength": 2,
273 278
          "type": "array"
274 279
        },
275 280
        "swapChosen": {
276 281
          "type": "boolean"
277 282
        }
278 283
      },
279 284
      "required": [
280 285
        "placements"
281 286
      ],
282 287
      "type": "object"
283 288
    },
284 289
    "phase": {
285 290
      "knownValues": [
286 291
        "lobby",
287 292
        "vote",
288 293
        "pickCriteria",
289 294
        "deal",
290 295
        "swap",
291 296
        "double",
292 297
        "waiting",
293 298
        "reveal",
294 299
        "final",
295 300
        "scores",
296 301
        "gameover"
297 302
      ],
298 303
      "type": "string"
299 304
    },
300 305
    "placement": {
301 306
      "properties": {
302 307
        "item": {
303 308
          "maxLength": 300,
304 309
          "type": "string"
305 310
        },
306 311
        "tier": {
307 312
          "ref": "#tier",
308 313
          "type": "ref"
309 314
        }
310 315
      },
311 316
      "required": [
312 317
        "item",
313 318
        "tier"
314 319
      ],
315 320
      "type": "object"
316 321
    },
317 322
    "player": {
318 323
      "properties": {
324 +
        "bot": {
325 +
          "description": "Played by the server (a Jev bot), not a person.",
326 +
          "type": "boolean"
327 +
        },
319 328
        "connected": {
320 329
          "type": "boolean"
321 330
        },
322 331
        "did": {
323 332
          "format": "did",
324 333
          "type": "string"
325 334
        },
326 335
        "forfeit": {
327 336
          "description": "This round's moves didn't verify, so they don't count.",
328 337
          "type": "boolean"
329 338
        },
330 339
        "host": {
331 340
          "type": "boolean"
332 341
        },
333 342
        "initials": {
334 343
          "maxLength": 3,
335 344
          "type": "string"
336 345
        },
337 346
        "progress": {
338 347
          "description": "Moves committed this phase, for 'waiting on…' indicators.",
339 348
          "minimum": 0,
340 349
          "type": "integer"
341 350
        },
342 351
        "roundPoints": {
343 352
          "description": "Points from the last scored round (may be negative).",
344 353
          "type": "integer"
345 354
        },
346 355
        "score": {
347 356
          "minimum": 0,
348 357
          "type": "integer"
349 358
        },
350 359
        "scoreAfter": {
351 360
          "description": "While a round is being revealed: this player's total once it's banked, so a spectator screen can play the round out on its own clock.",
352 361
          "type": "integer"
353 362
        }
354 363
      },
355 364
      "required": [
356 365
        "did",
357 366
        "initials",
358 367
        "score",
359 368
        "progress"
360 369
      ],
361 370
      "type": "object"
362 371
    },
363 372
    "prompt": {
364 373
      "description": "What a rating answers, embedded rather than written as a garden.lexicon.dazzling-boarfish.rating.prompt record. Its scale is the game's.",
365 374
      "properties": {
366 375
        "langs": {
367 376
          "items": {
368 377
            "format": "language",
369 378
            "type": "string"
370 379
          },
371 380
          "maxLength": 3,
372 381
          "type": "array"
373 382
        },
374 383
        "text": {
375 384
          "maxLength": 1024,
376 385
          "type": "string"
377 386
        }
378 387
      },
379 388
      "required": [
380 389
        "text"
381 390
      ],
382 391
      "type": "object"
383 392
    },
393 +
    "rematch": {
394 +
      "description": "A rematch lobby for the same table.",
395 +
      "properties": {
396 +
        "code": {
397 +
          "maxLength": 4,
398 +
          "minLength": 4,
399 +
          "type": "string"
400 +
        },
401 +
        "host": {
402 +
          "format": "did",
403 +
          "type": "string"
404 +
        }
405 +
      },
406 +
      "required": [
407 +
        "code",
408 +
        "host"
409 +
      ],
410 +
      "type": "object"
411 +
    },
384 412
    "reveal": {
385 413
      "properties": {
386 414
        "item": {
387 415
          "ref": "#item",
388 416
          "type": "ref"
389 417
        },
390 418
        "votes": {
391 419
          "items": {
392 420
            "ref": "#vote",
393 421
            "type": "ref"
394 422
          },
395 423
          "type": "array"
396 424
        }
397 425
      },
398 426
      "required": [
399 427
        "item",
400 428
        "votes"
401 429
      ],
402 430
      "type": "object"
403 431
    },
404 432
    "scale": {
405 433
      "description": "A rating scale, embedded rather than written as a garden.lexicon.dazzling-boarfish.rating.scale record: the same fields, minus record bookkeeping.",
406 434
      "properties": {
407 435
        "code": {
408 436
          "refs": [
409 437
            "garden.lexicon.dazzling-boarfish.rating.scale#nominal",
410 438
            "garden.lexicon.dazzling-boarfish.rating.scale#ordinal",
411 439
            "garden.lexicon.dazzling-boarfish.rating.scale#interval",
412 440
            "garden.lexicon.dazzling-boarfish.rating.scale#ratio"
413 441
          ],
414 442
          "type": "union"
415 443
        },
416 444
        "description": {
417 445
          "maxLength": 1024,
418 446
          "type": "string"
419 447
        },
420 448
        "langs": {
421 449
          "items": {
422 450
            "format": "language",
423 451
            "type": "string"
424 452
          },
425 453
          "maxLength": 3,
426 454
          "type": "array"
427 455
        },
428 456
        "name": {
429 457
          "maxLength": 256,
430 458
          "type": "string"
431 459
        }
432 460
      },
433 461
      "required": [
434 462
        "name",
435 463
        "code"
436 464
      ],
437 465
      "type": "object"
438 466
    },
439 467
    "tier": {
440 468
      "knownValues": [
441 469
        "S",
442 470
        "A",
443 471
        "B",
444 472
        "C",
445 473
        "D",
446 474
        "F"
447 475
      ],
448 476
      "type": "string"
449 477
    },
450 478
    "viewer": {
451 479
      "properties": {
452 480
        "did": {
453 481
          "format": "did",
454 482
          "type": "string"
455 483
        },
456 484
        "role": {
457 485
          "knownValues": [
458 486
            "host",
459 487
            "player",
460 488
            "spectator"
461 489
          ],
462 490
          "type": "string"
463 491
        }
464 492
      },
465 493
      "required": [
466 494
        "role"
467 495
      ],
468 496
      "type": "object"
469 497
    },
470 498
    "vote": {
471 499
      "description": "Where one player put the item being revealed.",
472 500
      "properties": {
473 501
        "did": {
474 502
          "format": "did",
475 503
          "type": "string"
476 504
        },
477 505
        "tier": {
478 506
          "ref": "#tier",
479 507
          "type": "ref"
480 508
        }
481 509
      },
482 510
      "required": [
483 511
        "did",
484 512
        "tier"
485 513
      ],
486 514
      "type": "object"
487 515
    }
488 516
  },
489 517
  "id": "games.cavu.tier-madness.defs",
490 518
  "lexicon": 1
491 519
}

Compare Other Versions

Lexicon Garden

@