at.turtleme.player.state

turtleme.at

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A player's game progress, as adjudicated by turtle meat and published by the player. The record lives in the player's own repository and can be deleted by them at any time, which removes them from the public leaderboard. It is a complete snapshot rather than a change since last time, so withholding an unflattering one gains nothing: any later snapshot already accounts for it.",
      "key": "literal:self",
      "record": {
        "properties": {
          "cooking": {
            "description": "Transcription of the Cooking numbers in the proof.",
            "ref": "#skill",
            "type": "ref"
          },
          "fishing": {
            "description": "Transcription of the Fishing numbers in the proof.",
            "ref": "#skill",
            "type": "ref"
          },
          "gp": {
            "description": "Transcription of the coins in the proof: the balance the player held when it was signed. Absent when the proof carries no coin figure.",
            "minimum": 0,
            "type": "integer"
          },
          "proof": {
            "description": "A compact JWS signed by turtle meat, whose payload carries the authoritative numbers. THIS IS THE ONLY FIELD THAT COUNTS. The fields beside it are a readable transcription for other clients and for anyone browsing the repository; a reader that cares whether the numbers are real must verify this and use the payload, ignoring the transcription. If the two disagree the record is malformed. The signing key is published in the DID document at did:web:turtleme.at.",
            "maxLength": 4096,
            "type": "string"
          },
          "seq": {
            "description": "Monotonic counter issued with each proof. A reader must reject any state at or below the highest sequence it has already accepted for this player, which is what stops an older and richer snapshot being republished to undo spending.",
            "minimum": 1,
            "type": "integer"
          },
          "stats": {
            "description": "Transcription of the lifetime tallies in the proof.",
            "ref": "#stats",
            "type": "ref"
          },
          "updatedAt": {
            "description": "When the player wrote this record. The proof carries its own issue time, which is the one to trust.",
            "format": "datetime",
            "type": "string"
          }
        },
        "required": [
          "proof",
          "seq",
          "updatedAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "skill": {
      "properties": {
        "level": {
          "description": "The level the experience works out to. Derived, and included only so a reader does not have to know the curve.",
          "maximum": 99,
          "minimum": 0,
          "type": "integer"
        },
        "xp": {
          "description": "Experience earned. Levels here start at zero and gate nothing, so this is a progress count rather than a requirement.",
          "maximum": 200000000,
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "xp"
      ],
      "type": "object"
    },
    "stats": {
      "properties": {
        "castsMade": {
          "minimum": 0,
          "type": "integer"
        },
        "reefsCleared": {
          "minimum": 0,
          "type": "integer"
        },
        "turtlesBurnt": {
          "minimum": 0,
          "type": "integer"
        },
        "turtlesCaught": {
          "minimum": 0,
          "type": "integer"
        },
        "turtlesCooked": {
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    }
  },
  "id": "at.turtleme.player.state",
  "lexicon": 1
}

Validate Record

Validate a record against at.turtleme.player.state

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:f4h4tl43o4vx4hv2xps6siuz
CID
bafyreib2o65trvtzvvthe7lko5lrtxnnozcpyiaknw4ejbf6q2yyyr53em
Indexed At
2026-09-25 02:49 UTC
AT-URI
at://did:plc:f4h4tl43o4vx4hv2xps6siuz/com.atproto.lexicon.schema/at.turtleme.player.state

Version History (2 versions)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • One adjudicated session of play, published by the player as a public trail of how their progress was earned. The leaderboard does not need these records; at.turtleme.player.state alone is enough to rank someone. They ex…

  • A declaration that an account plays turtle meat, and optionally that it is playing right now. Written by the player's own client and not verified by anyone: nothing here affects scoring, so there is nothing to gain by l…

  • net.anisota.chronicle.progress recordnot from the namespace authority

    Signed player progression state. Singleton (rkey: self), overwritten via putRecord. Backend validates XP claims before signing.

  • net.anisota.chronicle.level recordnot from the namespace authority

    Immutable level milestone record. Created once on level-up with createRecord. rkey is zero-padded level (001-099).

  • A record that holds a did:key for verifying a players stats. This is intended to be written at a verification authorities repo

Lexicon Garden

@