at.turtleme.game.defs

turtleme.at

Schema Diff

+222 -0

From

CID
bafyreifvmkozceo...
Indexed At
2026-09-15 20:03 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

15 breaking changes, 63 non-breaking changes.

Breaking Changes (15)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#market", src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.low", kind: "prop", name: Some("low") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#market", src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.high", kind: "prop", name: Some("high") }
  • 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") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.streak", kind: "prop", name: Some("streak") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.left", kind: "prop", name: Some("left") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.seed", kind: "prop", name: Some("seed") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#spot", src: "at.turtleme.game.defs#spot", tgt: "at.turtleme.game.defs#spot.since", kind: "prop", name: Some("since") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#reef", src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.shoal", kind: "prop", name: Some("shoal") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#reef", src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.across", kind: "prop", name: Some("across") }
Non-Breaking Changes (63)
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.elapsed" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.left" }
  • 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#cast.seed" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.streak" }
  • 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#market" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.at" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.high" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.low" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.stale" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.across" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.laid" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.over" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.shoal" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.swept" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#rest" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#rest.reef" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#rest.strike" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#spot" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#spot.movesAt" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#spot.since" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.bankedTurtles" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.cast" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.gp" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.items" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.market" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.outcome" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.reef" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.rest" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.shop" }
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.spot" }
  • 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#market", tgt: "at.turtleme.game.defs#market.at", kind: "prop", name: Some("at") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.stale", kind: "prop", name: Some("stale") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.laid", kind: "prop", name: Some("laid") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.over", kind: "prop", name: Some("over") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.swept", kind: "prop", name: Some("swept") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#rest", tgt: "at.turtleme.game.defs#rest.reef", kind: "prop", name: Some("reef") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#rest", tgt: "at.turtleme.game.defs#rest.strike", kind: "prop", name: Some("strike") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#spot", tgt: "at.turtleme.game.defs#spot.movesAt", kind: "prop", name: Some("movesAt") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.bankedTurtles", kind: "prop", name: Some("bankedTurtles") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.cast", kind: "prop", name: Some("cast") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.gp", kind: "prop", name: Some("gp") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.items", kind: "prop", name: Some("items") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.market", kind: "prop", name: Some("market") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.outcome", kind: "prop", name: Some("outcome") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.reef", kind: "prop", name: Some("reef") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.rest", kind: "prop", name: Some("rest") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.shop", kind: "prop", name: Some("shop") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.spot", kind: "prop", name: Some("spot") }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.cast", tgt: "at.turtleme.game.defs#cast", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.market", tgt: "at.turtleme.game.defs#market", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.reef", tgt: "at.turtleme.game.defs#reef", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.rest", tgt: "at.turtleme.game.defs#rest", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.spot", tgt: "at.turtleme.game.defs#spot", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "at.turtleme.game.defs#cast" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#cast.elapsed" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#cast.left" }
  • 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#cast.seed" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#cast.streak" }
  • 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#market" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#market.at" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#market.high" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#market.low" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#market.stale" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.across" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.laid" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.over" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.shoal" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#reef.swept" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#rest" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#rest.reef" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#rest.strike" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#spot" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#spot.movesAt" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#spot.since" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.bankedTurtles" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.cast" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.gp" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.items" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.market" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.outcome" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.reef" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.rest" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.shop" }
  • AddedVertex { vertex_id: "at.turtleme.game.defs#state.spot" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@