games.cavu.tier-madness.clientFrame
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"advance": {
"description": "Host only: move the reveal along (next card, next screen).",
"properties": {},
"type": "object"
},
"auth": {
"description": "Sign in as a player: an atproto service-auth JWT from the player's PDS (com.atproto.server.getServiceAuth) with aud = the game server's DID and lxm = games.cavu.tier-madness.subscribeGame. Spectators don't sign in.",
"properties": {
"token": {
"maxLength": 4096,
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"create": {
"description": "Signed in: host a new game. The server replies with #created (the join code, and the hash the host puts in its lobby record).",
"properties": {
"initials": {
"maxLength": 3,
"minLength": 3,
"type": "string"
},
"totalRounds": {
"maximum": 20,
"minimum": 1,
"type": "integer"
}
},
"required": [
"initials"
],
"type": "object"
},
"double": {
"description": "Double down on one placed card, or none.",
"properties": {
"item": {
"maxLength": 300,
"type": "string"
}
},
"type": "object"
},
"join": {
"description": "Signed in: join a game's lobby by its 4-character code (Crockford base32; case and separators don't matter). Attempts are rate limited.",
"properties": {
"code": {
"maxLength": 9,
"minLength": 4,
"type": "string"
},
"initials": {
"maxLength": 3,
"minLength": 3,
"type": "string"
}
},
"required": [
"code",
"initials"
],
"type": "object"
},
"kick": {
"description": "Host only, in the lobby: remove a player.",
"properties": {
"did": {
"format": "did",
"type": "string"
}
},
"required": [
"did"
],
"type": "object"
},
"leave": {
"description": "Leave the lobby (before the game starts).",
"properties": {},
"type": "object"
},
"main": {
"description": "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.",
"properties": {
"frame": {
"refs": [
"#auth",
"#create",
"#join",
"#spectate",
"#leave",
"#start",
"#vote",
"#pickCriteria",
"#place",
"#swap",
"#double",
"#advance",
"#kick",
"#skip"
],
"type": "union"
}
},
"required": [
"frame"
],
"type": "object"
},
"pickCriteria": {
"description": "The round's criteria picker chooses one of the offered criteria. Not secret.",
"properties": {
"criteria": {
"maxLength": 300,
"type": "string"
}
},
"required": [
"criteria"
],
"type": "object"
},
"place": {
"description": "Place the card dealt at `index` into a tier. Final once accepted; the next card is dealt.",
"properties": {
"index": {
"maximum": 19,
"minimum": 0,
"type": "integer"
},
"tier": {
"ref": "games.cavu.tier-madness.defs#tier",
"type": "ref"
}
},
"required": [
"index",
"tier"
],
"type": "object"
},
"skip": {
"description": "Host only: stop waiting on stalled players now (as if the deadline passed): unvoted players don't vote, an absent picker's criteria is picked for them, unfinished players sit the round out.",
"properties": {},
"type": "object"
},
"spectate": {
"description": "Watch a game by its code, anonymously: no sign-in, and only what anyone may see. Attempts are rate limited.",
"properties": {
"code": {
"maxLength": 9,
"minLength": 4,
"type": "string"
}
},
"required": [
"code"
],
"type": "object"
},
"start": {
"description": "Host only: start the game.",
"properties": {},
"type": "object"
},
"swap": {
"description": "The round's one swap: two placed cards in different tiers, or none.",
"properties": {
"items": {
"items": {
"maxLength": 300,
"type": "string"
},
"maxLength": 2,
"minLength": 0,
"type": "array"
}
},
"required": [
"items"
],
"type": "object"
},
"vote": {
"description": "Secret pre-game vote: up to 3 categories from the ballot.",
"properties": {
"categories": {
"items": {
"maxLength": 300,
"type": "string"
},
"maxLength": 3,
"minLength": 1,
"type": "array"
}
},
"required": [
"categories"
],
"type": "object"
}
},
"id": "games.cavu.tier-madness.clientFrame",
"lexicon": 1
}
Metadata
- DID
-
did:plc:dp7v5b5kejmmzzpwmqyf5wj6 - CID
-
bafyreigvpoclku3okd27ujbslmt2nrbjejiuuwlumykfwq4nplfrdx2nwq - Indexed At
- 2026-10-02 18:09 UTC
- AT-URI
-
at://did:plc:dp7v5b5kejmmzzpwmqyf5wj6/com.atproto.lexicon.schema/games.cavu.tier-madness.clientFrame
Version History (3 versions)
Referenced Schemas (1)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
games.cavu.clientFrame object
Frames a client sends up the games.cavu.subscribeSession socket (DAG-CBOR event-stream framing: header {op:1, t:'#join'|'#intent'|'#ping'} + body).
-
games.cavu.tier-madness.subscribeGame subscription
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…
-
An end-of-game superlative and the bonus points it paid.