app.golfthesky.round

golfthesky.app

Schema Diff

+1 -1

From

CID
bafyreifrt33q25h...
Indexed At
2026-10-09 06:54 UTC
View this version

To

CID
bafyreicvuz7tuvp...
Indexed At
2026-10-09 09:00 UTC
View this version

Compatibility Analysis

Backward Compatible

No changes detected.

1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "hole": {
5 5
      "properties": {
6 6
        "holeId": {
7 7
          "description": "Permanent identity of the hole within the course.",
8 8
          "knownValues": [
9 9
            "opening-drive",
10 10
            "dogleg",
11 11
            "sky-ramp",
12 12
            "slick-slope",
13 13
            "bunker-alley",
14 14
            "island-hop",
15 15
            "first-light",
16 16
            "sticky-situation",
17 17
            "ice-cave",
18 18
            "archipelago"
19 19
          ],
20 20
          "maxLength": 64,
21 21
          "type": "string"
22 22
        },
23 23
        "shots": {
24 -
          "description": "The whole hole as the only input the game takes. Comma-separated `<dtick>.<angle>.<mod>.<power>` entries: dtick is 120 Hz ticks since the previous entry, angle is milliradians counter-clockwise from +x (0–6283), mod is the ball type applied to that swing (0 none, 1 sticky, 2 super, 3 nitro, 4 air brakes), power 1–100. An entry with power 0 is an event, not a swing: mod 4 is an Air Brakes tap, mod 5 a Mulligan. Power-ups cost energy; a verifier recomputes energy from the clock (starts at 4, +1 every 360 ticks, max 10; costs sticky 4, super 3, nitro 4, brakes 5, mulligan 6) and refuses a log that overspends. Example: `360.785.0.80,540.0.4.0`.",
24 +
          "description": "The whole hole as the only input the game takes. Comma-separated `<dtick>.<angle>.<mod>.<power>` entries: dtick is 120 Hz ticks since the previous entry, angle is milliradians counter-clockwise from +x (0–6283), mod is the ball type applied to that swing (0 none, 1 sticky, 2 super, 3 nitro, 4 air brakes, 5 sniper), power 1–100. An entry with power 0 is an event, not a swing: mod 4 is an Air Brakes tap, mod 5 a Mulligan. Power-ups cost energy; a verifier recomputes energy from the clock (starts at 4, +1 every 360 ticks, max 10; costs sticky 4, super 3, nitro 4, brakes 5, mulligan 6, sniper 6) and refuses a log that overspends. Example: `360.785.0.80,540.0.4.0`.",
25 25
          "maxLength": 8000,
26 26
          "type": "string"
27 27
        },
28 28
        "strokes": {
29 29
          "description": "Advisory stroke count, including out-of-bounds penalties.",
30 30
          "minimum": 0,
31 31
          "type": "integer"
32 32
        },
33 33
        "ticks": {
34 34
          "description": "Advisory: the tick the ball dropped. Absent if the hole was never finished.",
35 35
          "minimum": 1,
36 36
          "type": "integer"
37 37
        }
38 38
      },
39 39
      "required": [
40 40
        "holeId",
41 41
        "shots",
42 42
        "strokes"
43 43
      ],
44 44
      "type": "object"
45 45
    },
46 46
    "main": {
47 47
      "description": "One Golf the Sky round, published by the player into their own repo. The record stores every shot rather than a score: the game's ball physics are deterministic, so re-simulating the shots reproduces the round exactly. Owning the record is the identity proof, and replaying it is the score proof — strokes and ticks in this record are advisory and never trusted by a leaderboard.",
48 48
      "key": "tid",
49 49
      "record": {
50 50
        "properties": {
51 51
          "courseId": {
52 52
            "description": "Permanent identity of the course played. Append-only: ids are never reordered, renamed, or reused.",
53 53
            "knownValues": [
54 54
              "skyline-links"
55 55
            ],
56 56
            "maxLength": 64,
57 57
            "type": "string"
58 58
          },
59 59
          "createdAt": {
60 60
            "format": "datetime",
61 61
            "type": "string"
62 62
          },
63 63
          "field": {
64 64
            "description": "How many players were in that live round.",
65 65
            "minimum": 1,
66 66
            "type": "integer"
67 67
          },
68 68
          "holes": {
69 69
            "items": {
70 70
              "ref": "#hole",
71 71
              "type": "ref"
72 72
            },
73 73
            "maxLength": 18,
74 74
            "type": "array"
75 75
          },
76 76
          "mode": {
77 77
            "description": "solo: against local bots. live: against other players on a synced clock — the only mode in which placing means anything.",
78 78
            "knownValues": [
79 79
              "solo",
80 80
              "live"
81 81
            ],
82 82
            "type": "string"
83 83
          },
84 84
          "placing": {
85 85
            "description": "Advisory finishing position in a live round, 1 = won.",
86 86
            "minimum": 1,
87 87
            "type": "integer"
88 88
          },
89 89
          "simVersion": {
90 90
            "description": "Which physics produced these shots. A verifier must replay under the matching version or refuse the round.",
91 91
            "minimum": 1,
92 92
            "type": "integer"
93 93
          }
94 94
        },
95 95
        "required": [
96 96
          "courseId",
97 97
          "simVersion",
98 98
          "holes",
99 99
          "createdAt"
100 100
        ],
101 101
        "type": "object"
102 102
      },
103 103
      "type": "record"
104 104
    }
105 105
  },
106 106
  "id": "app.golfthesky.round",
107 107
  "lexicon": 1
108 108
}

Compare Other Versions

Lexicon Garden

@