at.turtleme.game.strike

turtleme.at

Schema Diff

+4 -11

From

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

To

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

Compatibility Analysis

Breaking Changes Detected

5 breaking changes, 1 non-breaking change.

Breaking Changes (5)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.strike:input", src: "at.turtleme.game.strike:input", tgt: "at.turtleme.game.strike:input.offset", kind: "prop", name: Some("offset") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.turtleme.game.strike:input", src: "at.turtleme.game.strike:input", tgt: "at.turtleme.game.strike:input.at", kind: "prop", name: Some("at") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.turtleme.game.strike:input", src: "at.turtleme.game.strike:input", tgt: "at.turtleme.game.strike:input.index", kind: "prop", name: Some("index") }
  • RemovedVertex RemovedVertex { vertex_id: "at.turtleme.game.strike:input.at" }
  • RemovedVertex RemovedVertex { vertex_id: "at.turtleme.game.strike:input.index" }
Non-Breaking Changes (1)
  • AddedVertex AddedVertex { vertex_id: "at.turtleme.game.strike:input.offset" }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "at.turtleme.game.strike:input.at" }
  • RemovedVertex { vertex_id: "at.turtleme.game.strike:input.index" }

Added Elements

  • AddedVertex { vertex_id: "at.turtleme.game.strike:input.offset" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.strike:input", src: "at.turtleme.game.strike:input", tgt: "at.turtleme.game.strike:input.offset", kind: "prop", name: Some("offset") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "at.turtleme.game.strike:input", src: "at.turtleme.game.strike:input", tgt: "at.turtleme.game.strike:input.at", kind: "prop", name: Some("at") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "at.turtleme.game.strike:input", src: "at.turtleme.game.strike:input", tgt: "at.turtleme.game.strike:input.index", kind: "prop", name: Some("index") }
1 1
{
2 2
  "id": "at.turtleme.game.strike",
3 3
  "defs": {
4 4
    "main": {
5 5
      "type": "procedure",
6 6
      "input": {
7 7
        "schema": {
8 8
          "type": "object",
9 9
          "required": [
10 -
            "index",
11 -
            "at"
10 +
            "offset"
12 11
          ],
13 12
          "properties": {
14 -
            "at": {
15 -
              "type": "integer",
16 -
              "maximum": 100,
17 -
              "minimum": 0,
18 -
              "description": "Where the marker was across the bar, as a percentage of it."
19 -
            },
20 -
            "index": {
13 +
            "offset": {
21 14
              "type": "integer",
22 15
              "minimum": 0,
23 -
              "description": "Which placement of the run's windows was being watched. Placements only go forward, so a caller cannot go back for a window it liked the look of."
16 +
              "description": "Milliseconds into the cast at which the strike was thrown, by the caller's own clock, which it sets from the elapsed time the cast replied with. One ahead of the run's elapsed time is refused, as is one far enough behind it that the caller cannot have been watching the bar."
24 17
            }
25 18
          }
26 19
        },
27 20
        "encoding": "application/json"
28 21
      },
29 22
      "output": {
30 23
        "schema": {
31 24
          "ref": "at.turtleme.game.defs#state",
32 25
          "type": "ref"
33 26
        },
34 27
        "encoding": "application/json"
35 28
      },
36 -
      "description": "Strike at the marker. The caller says which of the run's windows it was watching and where across the bar the marker was; turtle meat works out the window from its own seed and decides what landed. This is the one method whose outcome depends on something only the browser can know, so where the marker was is taken on trust. What is not: the width of the window, where the sliver sits inside it, how many strikes a cast is good for, how fast strikes may follow one another, and the minute the water rests afterwards. Requires an atproto service auth token addressed to did:web:turtleme.at#turtle_game and naming this method, so a token issued for one call cannot be spent on another."
29 +
      "description": "Strike at the marker. The caller says how far into the cast the finger came down, in milliseconds, and nothing else: where the marker was at that moment, which of the run's windows it had laid down on the way, how wide that window is and where the sliver sits in it are all worked out by turtle meat from the run's own seed and the clock it started on. The moment itself is the one thing no server can see, and it is held between the run's elapsed time, past which nothing has happened yet, and the splash still playing over the last strike. Requires an atproto service auth token addressed to did:web:turtleme.at#turtle_game and naming this method, so a token issued for one call cannot be spent on another."
37 30
    }
38 31
  },
39 32
  "$type": "com.atproto.lexicon.schema",
40 33
  "lexicon": 1
41 34
}

Compare Other Versions

Lexicon Garden

@