at.turtleme.game.defs

turtleme.at

Schema Diff

+85 -10

From

CID
bafyreibtcyd23pj...
Indexed At
2026-09-16 13:52 UTC
View this version

To

CID
bafyreicc7y24mon...
Indexed At
2026-09-30 19:58 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

13 breaking changes, 22 non-breaking changes.

Breaking Changes (13)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.index", kind: "prop", name: Some("index") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.count", kind: "prop", name: Some("count") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.dir", kind: "prop", name: Some("dir") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.index", kind: "prop", name: Some("index") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.at", kind: "prop", name: Some("at") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.since", kind: "prop", name: Some("since") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.elapsed", kind: "prop", name: Some("elapsed") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.level", kind: "prop", name: Some("level") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.mark", kind: "prop", name: Some("mark") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.span", kind: "prop", name: Some("span") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.index", kind: "prop", name: Some("index") }
  • RemovedVertex RemovedVertex { vertex_id: "at.turtleme.game.defs#cast.index" }
  • RemovedVertex RemovedVertex { vertex_id: "at.turtleme.game.defs#cast.span" }
Non-Breaking Changes (22)
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.elapsed" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.level" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.mark" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.at" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.dir" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.index" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.since" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#patch" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#patch.count" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#patch.index" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known:items" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened:items" }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#cast.mark", tgt: "at.turtleme.game.defs#mark", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.known", kind: "prop", name: Some("known") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.opened", kind: "prop", name: Some("opened") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.known", tgt: "at.turtleme.game.defs#reef.known:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.known:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.opened", tgt: "at.turtleme.game.defs#reef.opened:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.opened:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "at.turtleme.game.defs#cast.index" }
  • RemovedVertex { vertex_id: "at.turtleme.game.defs#cast.span" }

Added Elements

  • AddedVertex { vertex_id: "at.turtleme.game.defs#cast.elapsed" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#cast.level" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#cast.mark" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#mark" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#mark.at" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#mark.dir" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#mark.index" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#mark.since" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#patch" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#patch.count" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#patch.index" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known:items" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened:items" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.index", kind: "prop", name: Some("index") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.count", kind: "prop", name: Some("count") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.dir", kind: "prop", name: Some("dir") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.index", kind: "prop", name: Some("index") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.at", kind: "prop", name: Some("at") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.since", kind: "prop", name: Some("since") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.elapsed", kind: "prop", name: Some("elapsed") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.level", kind: "prop", name: Some("level") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.mark", kind: "prop", name: Some("mark") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.span", kind: "prop", name: Some("span") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.index", kind: "prop", name: Some("index") }
  • Non-breaking: AddedEdge { src: "at.turtleme.game.defs#cast.mark", tgt: "at.turtleme.game.defs#mark", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.known", kind: "prop", name: Some("known") }
  • Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.opened", kind: "prop", name: Some("opened") }
  • Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.known", tgt: "at.turtleme.game.defs#reef.known:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.known:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.opened", tgt: "at.turtleme.game.defs#reef.opened:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.opened:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "cast": {
5 -
      "description": "A run of strikes. The seed is what every window of the run is drawn from, and it is turtle meat's, so a client can render the bar without being able to widen it or move the gold sliver.",
5 +
      "description": "A run of strikes. The seed every window is drawn from, the level the run opened at and the marker's state are all turtle meat's, so a client can draw the bar to the millisecond without being able to widen it, slow it or move the gold sliver.",
6 6
      "properties": {
7 -
        "index": {
8 -
          "description": "The earliest placement a strike may still name. Placements only go forward.",
7 +
        "elapsed": {
8 +
          "description": "How far into the run this reply reckons it is. A client sets its own clock from it, so the offset it reports for a strike is measured against the run turtle meat is timing.",
9 9
          "minimum": 0,
10 10
          "type": "integer"
11 11
        },
12 12
        "left": {
13 13
          "description": "Strikes the cast has left, landed or missed.",
14 14
          "minimum": 0,
15 15
          "type": "integer"
16 16
        },
17 +
        "level": {
18 +
          "description": "The Fishing level the cast opened at, which with the streak gives the width of the window and the pace of the marker. Held for the run, so a level gained mid-cast does not widen the bar under the player.",
19 +
          "maximum": 99,
20 +
          "minimum": 0,
21 +
          "type": "integer"
22 +
        },
23 +
        "mark": {
24 +
          "ref": "at.turtleme.game.defs#mark",
25 +
          "type": "ref"
26 +
        },
17 27
        "seed": {
18 28
          "description": "What the run's windows are drawn from.",
19 29
          "type": "integer"
20 -
        },
21 -
        "span": {
22 -
          "description": "How wide the window is now, at this level and this streak. Worked out by turtle meat, not asked for.",
23 -
          "type": "number"
24 30
        },
25 31
        "streak": {
26 32
          "description": "Strikes landed in a row, which is what narrows the window and quickens the marker.",
27 33
          "minimum": 0,
28 34
          "type": "integer"
29 35
        }
30 36
      },
31 37
      "required": [
32 38
        "seed",
39 +
        "level",
33 40
        "streak",
34 41
        "left",
35 -
        "index",
36 -
        "span"
42 +
        "mark",
43 +
        "elapsed"
37 44
      ],
38 45
      "type": "object"
39 46
    },
47 +
    "mark": {
48 +
      "description": "Where the marker was left after the last strike, and which window that laid down. With the run's seed, level and streak it is the whole bar: where the marker is at any later moment of the run follows from it and the clock, which is how a client and turtle meat draw and judge the same bar without describing it to one another.",
49 +
      "properties": {
50 +
        "at": {
51 +
          "description": "Where across the bar the marker was left, as a percentage of it.",
52 +
          "maximum": 100,
53 +
          "minimum": 0,
54 +
          "type": "number"
55 +
        },
56 +
        "dir": {
57 +
          "description": "Which way it is travelling: 1 towards the right end, -1 towards the left.",
58 +
          "type": "integer"
59 +
        },
60 +
        "index": {
61 +
          "description": "Which placement of the run's windows is on the bar. A turn at either end lays down the next one.",
62 +
          "minimum": 0,
63 +
          "type": "integer"
64 +
        },
65 +
        "since": {
66 +
          "description": "The moment of the run, in milliseconds, at which it started moving again. Until then it is held still for the splash to play over, and a strike thrown before it is refused.",
67 +
          "minimum": 0,
68 +
          "type": "integer"
69 +
        }
70 +
      },
71 +
      "required": [
72 +
        "at",
73 +
        "dir",
74 +
        "since",
75 +
        "index"
76 +
      ],
77 +
      "type": "object"
78 +
    },
40 79
    "market": {
41 80
      "description": "The Grand Exchange quote the server settles against, fetched from the Old School RuneScape Wiki's real-time API rather than taken from the caller. The graph on the page is drawn from the same API directly; this is the number a trade actually happens at.",
42 81
      "properties": {
43 82
        "at": {
44 83
          "description": "When turtle meat fetched it.",
45 84
          "format": "datetime",
46 85
          "type": "string"
47 86
        },
48 87
        "high": {
49 88
          "description": "What buyers are paying, so what a buy offer fills at.",
50 89
          "minimum": 1,
51 90
          "type": "integer"
52 91
        },
53 92
        "low": {
54 93
          "description": "What sellers are getting, so what a sell offer fills at, before the 2% tax.",
55 94
          "minimum": 1,
56 95
          "type": "integer"
57 96
        },
58 97
        "stale": {
59 98
          "description": "True when the price service could not be reached and this is the last quote that arrived. Still traded on, up to a point, because a price from twenty minutes ago is a price.",
60 99
          "type": "boolean"
61 100
        }
62 101
      },
63 102
      "required": [
64 103
        "high",
65 104
        "low"
66 105
      ],
67 106
      "type": "object"
68 107
    },
69 108
    "net": {
70 109
      "description": "The drift net, when it is in the water. Absent when it is not.",
71 110
      "properties": {
72 111
        "holding": {
73 112
          "description": "What the net would yield if hauled now. A readout for drawing, not a promise: nothing is banked until it is hauled, and the server works the figure out again at that point.",
74 113
          "minimum": 0,
75 114
          "type": "integer"
76 115
        },
77 116
        "setAt": {
78 117
          "format": "datetime",
79 118
          "type": "string"
80 119
        }
81 120
      },
82 121
      "type": "object"
83 122
    },
123 +
    "patch": {
124 +
      "description": "One patch of a reef and how many of the eight patches around it a turtle is under.",
125 +
      "properties": {
126 +
        "count": {
127 +
          "maximum": 8,
128 +
          "minimum": 0,
129 +
          "type": "integer"
130 +
        },
131 +
        "index": {
132 +
          "description": "Which patch, counted along each row from the top left.",
133 +
          "minimum": 0,
134 +
          "type": "integer"
135 +
        }
136 +
      },
137 +
      "required": [
138 +
        "index",
139 +
        "count"
140 +
      ],
141 +
      "type": "object"
142 +
    },
84 143
    "reef": {
85 144
      "description": "A reef board, as much of it as a player is allowed to know. Where the shoal lies is deliberately absent: a board laid out in the page is a board whose shoal is sitting in memory, and a player who looked would not be guessing at anything.",
86 145
      "properties": {
87 146
        "across": {
88 147
          "description": "How many patches across the board is. It is square.",
89 148
          "type": "integer"
90 149
        },
150 +
        "known": {
151 +
          "description": "Covered patches the open numbers prove safe, with what each one counts, alongside `opened`. What sweepReef hands over as `known`, for the whole board at once.",
152 +
          "items": {
153 +
            "ref": "#patch",
154 +
            "type": "ref"
155 +
          },
156 +
          "type": "array"
157 +
        },
91 158
        "laid": {
92 159
          "description": "Whether the shoal has gone down yet. It goes down on the first sweep, clear of it.",
93 160
          "type": "boolean"
94 161
        },
162 +
        "opened": {
163 +
          "description": "Every patch opened so far and what each one counts, on getState while the board is being played, so a page that has lost the board can draw it again. Nothing the sweeps that opened them did not already say.",
164 +
          "items": {
165 +
            "ref": "#patch",
166 +
            "type": "ref"
167 +
          },
168 +
          "type": "array"
169 +
        },
95 170
        "over": {
96 171
          "description": "How the board ended, or null while it is still being played.",
97 172
          "knownValues": [
98 173
            "clear",
99 174
            "scattered",
100 175
            "left"
101 176
          ],
102 177
          "type": "string"
103 178
        },
104 179
        "shoal": {
105 180
          "description": "How many sea turtles are under it, which the nets in the corner count down.",
106 181
          "type": "integer"
107 182
        },
108 183
        "swept": {
109 184
          "description": "How many patches have been opened.",
110 185
          "minimum": 0,
111 186
          "type": "integer"
112 187
        }
113 188
      },
114 189
      "required": [
115 190
        "across",
116 191
        "shoal"
117 192
      ],
118 193
      "type": "object"
119 194
    },
120 195
    "rest": {
121 196
      "description": "The moments two stretches of water are worth working again. Held as the moment it is up rather than a countdown, so closing the page does not hand the time back.",
122 197
      "properties": {
123 198
        "reef": {
124 199
          "description": "After a reef, however it ended.",
125 200
          "format": "datetime",
126 201
          "type": "string"
127 202
        },
128 203
        "strike": {
129 204
          "description": "After a run of strikes, however it ended. Null when the water has never been worked.",
130 205
          "format": "datetime",
131 206
          "type": "string"
132 207
        }
133 208
      },
134 209
      "type": "object"
135 210
    },
136 211
    "skill": {
137 212
      "properties": {
138 213
        "xp": {
139 214
          "minimum": 0,
140 215
          "type": "integer"
141 216
        }
142 217
      },
143 218
      "required": [
144 219
        "xp"
145 220
      ],
146 221
      "type": "object"
147 222
    },
148 223
    "spot": {
149 224
      "description": "A fishing spot. Where it is on the water is the page's business; when it leaves is not, because casting at water nobody is standing over has to be refusable.",
150 225
      "properties": {
151 226
        "movesAt": {
152 227
          "description": "When it wanders off, drawn from the moment it appeared and nothing else, so that both sides get the same answer without being told it.",
153 228
          "format": "datetime",
154 229
          "type": "string"
155 230
        },
156 231
        "since": {
157 232
          "description": "When this spot appeared.",
158 233
          "format": "datetime",
159 234
          "type": "string"
160 235
        }
161 236
      },
162 237
      "required": [
163 238
        "since"
164 239
      ],
165 240
      "type": "object"
166 241
    },
167 242
    "state": {
168 243
      "description": "A player's progress as the server holds it, with a receipt for publishing it. Every method returns this, so that a client always leaves a call holding something it can write to its own repository.",
169 244
      "properties": {
170 245
        "bankedTurtles": {
171 246
          "description": "Turtles held at the Grand Exchange rather than in the inventory.",
172 247
          "minimum": 0,
173 248
          "type": "integer"
174 249
        },
175 250
        "cast": {
176 -
          "description": "The run of strikes being played, when there is one. Null between casts.",
251 +
          "description": "The run of strikes being played, when there is one. Null between casts, and once a run has ended by itself: what that leaves behind is a rest, which `rest` carries.",
177 252
          "ref": "#cast",
178 253
          "type": "ref"
179 254
        },
180 255
        "cooking": {
181 256
          "ref": "#skill",
182 257
          "type": "ref"
183 258
        },
184 259
        "did": {
185 260
          "format": "did",
186 261
          "type": "string"
187 262
        },
188 263
        "fishing": {
189 264
          "ref": "#skill",
190 265
          "type": "ref"
191 266
        },
192 267
        "gp": {
193 268
          "description": "Coins. Held here rather than by the client because a shop, an exchange and a player's own claim about what they can afford are the same question.",
194 269
          "minimum": 0,
195 270
          "type": "integer"
196 271
        },
197 272
        "items": {
198 273
          "description": "How many of each kind the player is carrying, keyed by item. Which of the inventory's slots a stack sits in is the client's business and is not recorded.",
199 274
          "type": "unknown"
200 275
        },
201 276
        "market": {
202 277
          "description": "What a sea turtle is going for, as turtle meat last fetched it. Present only on the methods that need a price, and null when none recent enough to trade on could be had.",
203 278
          "ref": "#market",
204 279
          "type": "ref"
205 280
        },
206 281
        "net": {
207 282
          "ref": "#net",
208 283
          "type": "ref"
209 284
        },
210 285
        "outcome": {
211 286
          "description": "What the call just did, in facts rather than sentences: what was caught, bought, cooked or refused. The page puts it into words, because phrasing is not a number anyone else can see. Absent on a read. An outcome carrying `stale: true` means another call settled first and nothing was written; the state beside it is what is actually true.",
212 287
          "type": "unknown"
213 288
        },
214 289
        "proof": {
215 290
          "description": "A compact JWS over these figures, signed by turtle meat. Writing it into at.turtleme.player.state is what puts a player on the leaderboard; not writing it is how they stay off.",
216 291
          "maxLength": 4096,
217 292
          "type": "string"
218 293
        },
219 294
        "reef": {
220 295
          "description": "The reef board being played, when there is one. Null between boards.",
221 296
          "ref": "#reef",
222 297
          "type": "ref"
223 298
        },
224 299
        "rest": {
225 300
          "description": "When the two stretches of water that rest are worth working again.",
226 301
          "ref": "#rest",
227 302
          "type": "ref"
228 303
        },
229 304
        "seq": {
230 305
          "description": "Increases whenever the state changes, and never otherwise. Publishing a receipt whose sequence has already been counted is a no-op rather than an error.",
231 306
          "minimum": 0,
232 307
          "type": "integer"
233 308
        },
234 309
        "shop": {
235 310
          "description": "What each of the shop's shelves is holding right now, keyed by item, for a page that has to draw a counter. A shelf nobody has traded at is absent and sits at its usual quantity.",
236 311
          "type": "unknown"
237 312
        },
238 313
        "spot": {
239 314
          "description": "The fishing spot being stood over, when there is one. Null when there is not.",
240 315
          "ref": "#spot",
241 316
          "type": "ref"
242 317
        },
243 318
        "stats": {
244 319
          "description": "Lifetime tallies.",
245 320
          "type": "unknown"
246 321
        }
247 322
      },
248 323
      "required": [
249 324
        "did",
250 325
        "seq",
251 326
        "proof"
252 327
      ],
253 328
      "type": "object"
254 329
    }
255 330
  },
256 331
  "id": "at.turtleme.game.defs",
257 332
  "lexicon": 1
258 333
}

Compare Other Versions

Lexicon Garden

@