at.turtleme.game.defs

turtleme.at

Schema Diff

+37 -1

From

CID
bafyreifwwt2hrto...
Indexed At
2026-09-16 15:59 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 13 non-breaking changes.

Breaking Changes (2)
  • 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") }
Non-Breaking Changes (13)
  • 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#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

Added Elements

  • 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") }
  • 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 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 7
        "elapsed": {
8 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 17
        "level": {
18 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 19
          "maximum": 99,
20 20
          "minimum": 0,
21 21
          "type": "integer"
22 22
        },
23 23
        "mark": {
24 24
          "ref": "at.turtleme.game.defs#mark",
25 25
          "type": "ref"
26 26
        },
27 27
        "seed": {
28 28
          "description": "What the run's windows are drawn from.",
29 29
          "type": "integer"
30 30
        },
31 31
        "streak": {
32 32
          "description": "Strikes landed in a row, which is what narrows the window and quickens the marker.",
33 33
          "minimum": 0,
34 34
          "type": "integer"
35 35
        }
36 36
      },
37 37
      "required": [
38 38
        "seed",
39 39
        "level",
40 40
        "streak",
41 41
        "left",
42 42
        "mark",
43 43
        "elapsed"
44 44
      ],
45 45
      "type": "object"
46 46
    },
47 47
    "mark": {
48 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 49
      "properties": {
50 50
        "at": {
51 51
          "description": "Where across the bar the marker was left, as a percentage of it.",
52 52
          "maximum": 100,
53 53
          "minimum": 0,
54 54
          "type": "number"
55 55
        },
56 56
        "dir": {
57 57
          "description": "Which way it is travelling: 1 towards the right end, -1 towards the left.",
58 58
          "type": "integer"
59 59
        },
60 60
        "index": {
61 61
          "description": "Which placement of the run's windows is on the bar. A turn at either end lays down the next one.",
62 62
          "minimum": 0,
63 63
          "type": "integer"
64 64
        },
65 65
        "since": {
66 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 67
          "minimum": 0,
68 68
          "type": "integer"
69 69
        }
70 70
      },
71 71
      "required": [
72 72
        "at",
73 73
        "dir",
74 74
        "since",
75 75
        "index"
76 76
      ],
77 77
      "type": "object"
78 78
    },
79 79
    "market": {
80 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.",
81 81
      "properties": {
82 82
        "at": {
83 83
          "description": "When turtle meat fetched it.",
84 84
          "format": "datetime",
85 85
          "type": "string"
86 86
        },
87 87
        "high": {
88 88
          "description": "What buyers are paying, so what a buy offer fills at.",
89 89
          "minimum": 1,
90 90
          "type": "integer"
91 91
        },
92 92
        "low": {
93 93
          "description": "What sellers are getting, so what a sell offer fills at, before the 2% tax.",
94 94
          "minimum": 1,
95 95
          "type": "integer"
96 96
        },
97 97
        "stale": {
98 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.",
99 99
          "type": "boolean"
100 100
        }
101 101
      },
102 102
      "required": [
103 103
        "high",
104 104
        "low"
105 105
      ],
106 106
      "type": "object"
107 107
    },
108 108
    "net": {
109 109
      "description": "The drift net, when it is in the water. Absent when it is not.",
110 110
      "properties": {
111 111
        "holding": {
112 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.",
113 113
          "minimum": 0,
114 114
          "type": "integer"
115 115
        },
116 116
        "setAt": {
117 117
          "format": "datetime",
118 118
          "type": "string"
119 119
        }
120 120
      },
121 121
      "type": "object"
122 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 +
    },
123 143
    "reef": {
124 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.",
125 145
      "properties": {
126 146
        "across": {
127 147
          "description": "How many patches across the board is. It is square.",
128 148
          "type": "integer"
129 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 +
        },
130 158
        "laid": {
131 159
          "description": "Whether the shoal has gone down yet. It goes down on the first sweep, clear of it.",
132 160
          "type": "boolean"
133 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 +
        },
134 170
        "over": {
135 171
          "description": "How the board ended, or null while it is still being played.",
136 172
          "knownValues": [
137 173
            "clear",
138 174
            "scattered",
139 175
            "left"
140 176
          ],
141 177
          "type": "string"
142 178
        },
143 179
        "shoal": {
144 180
          "description": "How many sea turtles are under it, which the nets in the corner count down.",
145 181
          "type": "integer"
146 182
        },
147 183
        "swept": {
148 184
          "description": "How many patches have been opened.",
149 185
          "minimum": 0,
150 186
          "type": "integer"
151 187
        }
152 188
      },
153 189
      "required": [
154 190
        "across",
155 191
        "shoal"
156 192
      ],
157 193
      "type": "object"
158 194
    },
159 195
    "rest": {
160 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.",
161 197
      "properties": {
162 198
        "reef": {
163 199
          "description": "After a reef, however it ended.",
164 200
          "format": "datetime",
165 201
          "type": "string"
166 202
        },
167 203
        "strike": {
168 204
          "description": "After a run of strikes, however it ended. Null when the water has never been worked.",
169 205
          "format": "datetime",
170 206
          "type": "string"
171 207
        }
172 208
      },
173 209
      "type": "object"
174 210
    },
175 211
    "skill": {
176 212
      "properties": {
177 213
        "xp": {
178 214
          "minimum": 0,
179 215
          "type": "integer"
180 216
        }
181 217
      },
182 218
      "required": [
183 219
        "xp"
184 220
      ],
185 221
      "type": "object"
186 222
    },
187 223
    "spot": {
188 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.",
189 225
      "properties": {
190 226
        "movesAt": {
191 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.",
192 228
          "format": "datetime",
193 229
          "type": "string"
194 230
        },
195 231
        "since": {
196 232
          "description": "When this spot appeared.",
197 233
          "format": "datetime",
198 234
          "type": "string"
199 235
        }
200 236
      },
201 237
      "required": [
202 238
        "since"
203 239
      ],
204 240
      "type": "object"
205 241
    },
206 242
    "state": {
207 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.",
208 244
      "properties": {
209 245
        "bankedTurtles": {
210 246
          "description": "Turtles held at the Grand Exchange rather than in the inventory.",
211 247
          "minimum": 0,
212 248
          "type": "integer"
213 249
        },
214 250
        "cast": {
215 -
          "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.",
216 252
          "ref": "#cast",
217 253
          "type": "ref"
218 254
        },
219 255
        "cooking": {
220 256
          "ref": "#skill",
221 257
          "type": "ref"
222 258
        },
223 259
        "did": {
224 260
          "format": "did",
225 261
          "type": "string"
226 262
        },
227 263
        "fishing": {
228 264
          "ref": "#skill",
229 265
          "type": "ref"
230 266
        },
231 267
        "gp": {
232 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.",
233 269
          "minimum": 0,
234 270
          "type": "integer"
235 271
        },
236 272
        "items": {
237 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.",
238 274
          "type": "unknown"
239 275
        },
240 276
        "market": {
241 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.",
242 278
          "ref": "#market",
243 279
          "type": "ref"
244 280
        },
245 281
        "net": {
246 282
          "ref": "#net",
247 283
          "type": "ref"
248 284
        },
249 285
        "outcome": {
250 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.",
251 287
          "type": "unknown"
252 288
        },
253 289
        "proof": {
254 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.",
255 291
          "maxLength": 4096,
256 292
          "type": "string"
257 293
        },
258 294
        "reef": {
259 295
          "description": "The reef board being played, when there is one. Null between boards.",
260 296
          "ref": "#reef",
261 297
          "type": "ref"
262 298
        },
263 299
        "rest": {
264 300
          "description": "When the two stretches of water that rest are worth working again.",
265 301
          "ref": "#rest",
266 302
          "type": "ref"
267 303
        },
268 304
        "seq": {
269 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.",
270 306
          "minimum": 0,
271 307
          "type": "integer"
272 308
        },
273 309
        "shop": {
274 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.",
275 311
          "type": "unknown"
276 312
        },
277 313
        "spot": {
278 314
          "description": "The fishing spot being stood over, when there is one. Null when there is not.",
279 315
          "ref": "#spot",
280 316
          "type": "ref"
281 317
        },
282 318
        "stats": {
283 319
          "description": "Lifetime tallies.",
284 320
          "type": "unknown"
285 321
        }
286 322
      },
287 323
      "required": [
288 324
        "did",
289 325
        "seq",
290 326
        "proof"
291 327
      ],
292 328
      "type": "object"
293 329
    }
294 330
  },
295 331
  "id": "at.turtleme.game.defs",
296 332
  "lexicon": 1
297 333
}

Compare Other Versions

Lexicon Garden

@