app.golfthesky.round

golfthesky.app

Documentation

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.

main record

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.

Record Key tid Timestamp-based ID

Properties

courseId string Required

Permanent identity of the course played. Append-only: ids are never reordered, renamed, or reused.

maxLength: 64 bytes
Known values: skyline-links
createdAt string datetime Required

An RFC 3339 formatted timestamp.

field integer Optional

How many players were in that live round.

minimum: 1
holes array of ref #hole Required

No description available.

maxLength: 18 items
mode string Optional

solo: against local bots. live: against other players on a synced clock — the only mode in which placing means anything.

Known values: solo, live
placing integer Optional

Advisory finishing position in a live round, 1 = won.

minimum: 1
players array of ref #player Optional

Everyone else who played this round, each with their own shot logs, so a replay of this one record shows the whole field. Bots carry a did of the form bot:N. Advisory, like placing: only the owner's own holes are theirs to prove.

maxLength: 7 items
simVersion integer Required

Which physics produced these shots. A verifier must replay under the matching version or refuse the round.

minimum: 1
target integer Optional

The pills (hole wins) the round was played to.

minimum: 1maximum: 9
View raw schema
{
  "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.",
  "key": "tid",
  "record": {
    "properties": {
      "courseId": {
        "description": "Permanent identity of the course played. Append-only: ids are never reordered, renamed, or reused.",
        "knownValues": [
          "skyline-links"
        ],
        "maxLength": 64,
        "type": "string"
      },
      "createdAt": {
        "format": "datetime",
        "type": "string"
      },
      "field": {
        "description": "How many players were in that live round.",
        "minimum": 1,
        "type": "integer"
      },
      "holes": {
        "items": {
          "ref": "#hole",
          "type": "ref"
        },
        "maxLength": 18,
        "type": "array"
      },
      "mode": {
        "description": "solo: against local bots. live: against other players on a synced clock — the only mode in which placing means anything.",
        "knownValues": [
          "solo",
          "live"
        ],
        "type": "string"
      },
      "placing": {
        "description": "Advisory finishing position in a live round, 1 = won.",
        "minimum": 1,
        "type": "integer"
      },
      "players": {
        "description": "Everyone else who played this round, each with their own shot logs, so a replay of this one record shows the whole field. Bots carry a did of the form bot:N. Advisory, like placing: only the owner's own holes are theirs to prove.",
        "items": {
          "ref": "#player",
          "type": "ref"
        },
        "maxLength": 7,
        "type": "array"
      },
      "simVersion": {
        "description": "Which physics produced these shots. A verifier must replay under the matching version or refuse the round.",
        "minimum": 1,
        "type": "integer"
      },
      "target": {
        "description": "The pills (hole wins) the round was played to.",
        "maximum": 9,
        "minimum": 1,
        "type": "integer"
      }
    },
    "required": [
      "courseId",
      "simVersion",
      "holes",
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}
hole object

No description available.

Properties

holeId string Required

Permanent identity of the hole within the course.

maxLength: 64 bytes
Known values: opening-drive, dogleg, sky-ramp, slick-slope, bunker-alley, island-hop, first-light, sticky-situation, ice-cave, archipelago, clockwork, mill-race, skyhook, paddle-alley, crater
shots string Required

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`.

maxLength: 8000 bytes
strokes integer Required

Advisory stroke count, including out-of-bounds penalties.

minimum: 0
ticks integer Optional

Advisory: the tick the ball dropped. Absent if the hole was never finished.

minimum: 1
View raw schema
{
  "properties": {
    "holeId": {
      "description": "Permanent identity of the hole within the course.",
      "knownValues": [
        "opening-drive",
        "dogleg",
        "sky-ramp",
        "slick-slope",
        "bunker-alley",
        "island-hop",
        "first-light",
        "sticky-situation",
        "ice-cave",
        "archipelago",
        "clockwork",
        "mill-race",
        "skyhook",
        "paddle-alley",
        "crater"
      ],
      "maxLength": 64,
      "type": "string"
    },
    "shots": {
      "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`.",
      "maxLength": 8000,
      "type": "string"
    },
    "strokes": {
      "description": "Advisory stroke count, including out-of-bounds penalties.",
      "minimum": 0,
      "type": "integer"
    },
    "ticks": {
      "description": "Advisory: the tick the ball dropped. Absent if the hole was never finished.",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "holeId",
    "shots",
    "strokes"
  ],
  "type": "object"
}
player object

No description available.

Properties

did string Required

Their DID, or bot:N for a local bot.

maxLength: 300 bytes
handle string Required

Their handle when the round was played (advisory).

maxLength: 100 bytes
holes array of ref#hole Required

No description available.

maxLength: 18 items
View raw schema
{
  "properties": {
    "did": {
      "description": "Their DID, or bot:N for a local bot.",
      "maxLength": 300,
      "type": "string"
    },
    "handle": {
      "description": "Their handle when the round was played (advisory).",
      "maxLength": 100,
      "type": "string"
    },
    "holes": {
      "items": {
        "ref": "#hole",
        "type": "ref"
      },
      "maxLength": 18,
      "type": "array"
    }
  },
  "required": [
    "did",
    "handle",
    "holes"
  ],
  "type": "object"
}

Lexicon Garden

@