# app.racethesky.run

> Published by [racethesky.app](https://lexicon.garden/identity/did:plc:37slmbx2v4gh6sa4ncfz7yid)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:37slmbx2v4gh6sa4ncfz7yid/app.racethesky.run)
- [Documentation](https://lexicon.garden/lexicon/did:plc:37slmbx2v4gh6sa4ncfz7yid/app.racethesky.run/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:37slmbx2v4gh6sa4ncfz7yid/app.racethesky.run/examples)

## Definitions

### `app.racethesky.run`

**Type**: `record`

A single Race the Sky time-trial run, published by the player into their own repo. The record stores the raw input log rather than a result: the game's physics are deterministic, so re-simulating the log reproduces the run exactly. Owning the record is the identity proof, and replaying it is the time proof — the claimed time in this record is advisory and is never trusted by a leaderboard.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `laps` | `integer` | No | Laps the session ran. Session length is a player preference, not a fairness variable — circuits rank best single lap — but the replay must run the same number of laps to reproduce it. |
| `style` | `string` | No | Opaque encoding of the player's ship livery, so a replayed ghost looks like the ship that set the time. |
| `track` | `integer` | No | DEPRECATED. The course's index in the client's built-in roster, which is a display-order detail and may change. Present only so a client and server deployed minutes apart still agree. Readers must prefer trackId and ignore this whenever trackId is present. |
| `bestMs` | `integer` | No | The client's own best-lap figure in milliseconds, for display before a run is verified. Advisory only — the authoritative time is whatever replaying `events` produces. |
| `events` | `string` | Yes | The whole run, as the only input the game takes: when the tether was held. Comma-separated `<delta><d\|u>` pairs, where delta is ticks since the previous event at a fixed 120 Hz step, `d` is press and `u` is release. Example: `43d,17u,29d`. |
| `trackId` | `string` | Yes | Permanent identity of the course raced. Append-only: ids are never reordered, renamed, or reused. |
| `weather` | `string` | No | Conditions the run was set under. Non-clear conditions change the physics and are ranked separately from clear times. |
| `createdAt` | `string` (datetime) | Yes | Client-reported time the run was set. |
| `simVersion` | `integer` | Yes | Which physics produced this log. A verifier must replay under the matching version or refuse the run — replaying under different physics yields a plausible wrong time rather than an error. |

## Raw Schema

```json
{
  "id": "app.racethesky.run",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "trackId",
          "simVersion",
          "events",
          "createdAt"
        ],
        "properties": {
          "laps": {
            "type": "integer",
            "maximum": 9,
            "minimum": 1,
            "description": "Laps the session ran. Session length is a player preference, not a fairness variable — circuits rank best single lap — but the replay must run the same number of laps to reproduce it."
          },
          "style": {
            "type": "string",
            "maxLength": 64,
            "description": "Opaque encoding of the player's ship livery, so a replayed ghost looks like the ship that set the time."
          },
          "track": {
            "type": "integer",
            "minimum": 0,
            "description": "DEPRECATED. The course's index in the client's built-in roster, which is a display-order detail and may change. Present only so a client and server deployed minutes apart still agree. Readers must prefer trackId and ignore this whenever trackId is present."
          },
          "bestMs": {
            "type": "integer",
            "minimum": 0,
            "description": "The client's own best-lap figure in milliseconds, for display before a run is verified. Advisory only — the authoritative time is whatever replaying `events` produces."
          },
          "events": {
            "type": "string",
            "maxLength": 20000,
            "description": "The whole run, as the only input the game takes: when the tether was held. Comma-separated `<delta><d|u>` pairs, where delta is ticks since the previous event at a fixed 120 Hz step, `d` is press and `u` is release. Example: `43d,17u,29d`."
          },
          "trackId": {
            "type": "string",
            "maxLength": 64,
            "description": "Permanent identity of the course raced. Append-only: ids are never reordered, renamed, or reused.",
            "knownValues": [
              "nebula-weave",
              "solar-loop",
              "quasar-gp",
              "photon-oval",
              "aurora-run",
              "eclipse",
              "baja"
            ]
          },
          "weather": {
            "type": "string",
            "description": "Conditions the run was set under. Non-clear conditions change the physics and are ranked separately from clear times.",
            "knownValues": [
              "clear",
              "rain",
              "fog",
              "night"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "Client-reported time the run was set."
          },
          "simVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Which physics produced this log. A verifier must replay under the matching version or refuse the run — replaying under different physics yields a plausible wrong time rather than an error."
          }
        }
      },
      "description": "A single Race the Sky time-trial run, published by the player into their own repo. The record stores the raw input log rather than a result: the game's physics are deterministic, so re-simulating the log reproduces the run exactly. Owning the record is the identity proof, and replaying it is the time proof — the claimed time in this record is advisory and is never trusted by a leaderboard."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
