games.cavu.tier-madness.defs
Schema Diff
+28 -0
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
}