games.cavu.tier-madness.subscribeGame

chris.pardy.family

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "created": {
      "description": "Reply to #create: the join code to share, and what goes in the host's games.cavu.tier-madness.lobby record.",
      "properties": {
        "code": {
          "maxLength": 4,
          "minLength": 4,
          "type": "string"
        },
        "codeHash": {
          "maxLength": 128,
          "type": "string"
        },
        "expiresAt": {
          "format": "datetime",
          "type": "string"
        },
        "game": {
          "maxLength": 64,
          "type": "string"
        },
        "spaceHost": {
          "format": "did",
          "type": "string"
        }
      },
      "required": [
        "game",
        "code",
        "codeHash",
        "expiresAt"
      ],
      "type": "object"
    },
    "main": {
      "description": "A game's live channel. The socket is bidirectional: the client sends games.cavu.tier-madness.clientFrame frames (#auth then #create/#join to play, or just #spectate to watch); the server sends a #snapshot of the game as that viewer may see it whenever it changes.",
      "errors": [
        {
          "name": "GameNotFound"
        },
        {
          "name": "AuthRequired"
        },
        {
          "name": "BadFrame"
        },
        {
          "name": "IllegalAction"
        },
        {
          "name": "RateLimited"
        },
        {
          "name": "GameStarted"
        },
        {
          "description": "Couldn't record the move in the player's PDS; it wasn't applied.",
          "name": "WriteFailed"
        }
      ],
      "message": {
        "schema": {
          "refs": [
            "#snapshot",
            "#created"
          ],
          "type": "union"
        }
      },
      "parameters": {
        "properties": {},
        "type": "params"
      },
      "type": "subscription"
    },
    "snapshot": {
      "properties": {
        "now": {
          "description": "Server time, ms since epoch.",
          "type": "integer"
        },
        "seq": {
          "minimum": 0,
          "type": "integer"
        },
        "view": {
          "ref": "games.cavu.tier-madness.defs#gameView",
          "type": "ref"
        }
      },
      "required": [
        "seq",
        "now",
        "view"
      ],
      "type": "object"
    }
  },
  "id": "games.cavu.tier-madness.subscribeGame",
  "lexicon": 1
}

Validate Record

Validate a record against games.cavu.tier-madness.subscribeGame

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:dp7v5b5kejmmzzpwmqyf5wj6
CID
bafyreief6qk3w7o6j2c4sqtgqcu56tukpbaw3lyt54rro4fxy6sxybnhje
Indexed At
2026-10-02 18:11 UTC
AT-URI
at://did:plc:dp7v5b5kejmmzzpwmqyf5wj6/com.atproto.lexicon.schema/games.cavu.tier-madness.subscribeGame

Referenced Schemas (1)

Similar Lexicons

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

  • Bidirectional game session. Server->client messages are below; client->server frames are games.cavu.clientFrame.

  • Frames a client sends up the games.cavu.tier-madness.subscribeGame socket. Intents only: the server validates each, records it in the player's own PDS (secret move + public commitment), and only then applies it.

  • Frames a client sends up the games.cavu.subscribeSession socket (DAG-CBOR event-stream framing: header {op:1, t:'#join'|'#intent'|'#ping'} + body).

Lexicon Garden

@