org.lichess.puzzle.attempt
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "A record of a user's attempt at solving an org.lichess.puzzle. Ranked attempts carry a detached signature (sig) from the service proving the submitted moves were judged server-side. Rating is not part of the record: it is each scoring service's (appview's) own business.",
"key": "tid",
"record": {
"properties": {
"createdAt": {
"description": "client-declared timestamp when this attempt record was created.",
"format": "datetime",
"type": "string"
},
"fen": {
"description": "The FEN of the puzzle's starting position (position before the opponent's setup move). Advisory context denormalized from the puzzle; derivable from puzzleId and not covered by sig.",
"maxLength": 128,
"type": "string"
},
"mode": {
"default": "casual",
"description": "Whether this attempt was played for rating and should be counted towards the user's rating.",
"knownValues": [
"casual",
"ranked"
],
"type": "string"
},
"nonce": {
"description": "Idempotency key echoed back by submitAttempt (the challenge's jti). Uniquely identifies the issued challenge, so duplicate records for one attempt can be detected. Covered by sig.",
"maxLength": 64,
"type": "string"
},
"playerMoves": {
"description": "the moves played by the solver during the attempt, in the same notation as the puzzle's solution moves. For ranked attempts this must be the line submitted to submitAttempt verbatim: it is covered by sig.",
"type": "string"
},
"puzzleId": {
"description": "Lichess puzzle ID.",
"maxLength": 32,
"type": "string"
},
"service": {
"description": "DID of the puzzle/scoring service that issued this puzzle and owns the rating it affects. This is traditionally a did:web of the web server, not a user's identity. Needed to be able to find the puzzle",
"format": "did",
"type": "string"
},
"sig": {
"description": "base64url (unpadded) detached signature by the service proving it judged playerMoves against the puzzle's solution with the given solved result. Signs the canonical DAG-CBOR encoding of an org.lichess.puzzle.defs#resultAttestation rebuilt from this record's fields — see that def for the exact verification recipe. Present only when the attempt was rated (ranked and not flagged).",
"maxLength": 128,
"type": "string"
},
"solved": {
"description": "Whether the puzzle was solved. Advisory (client-claimed) unless sig is present, in which case it is the server-judged result and covered by the signature.",
"type": "boolean"
}
},
"required": [
"puzzleId",
"service",
"solved",
"playerMoves",
"createdAt"
],
"type": "object"
},
"type": "record"
}
},
"id": "org.lichess.puzzle.attempt",
"lexicon": 1
}
Metadata
- DID
-
did:plc:rnpkyqnmsw4ipey6eotbdnnf - CID
-
bafyreiauarwqckkpfvmnml4b6m7ouf4bcnmbvqhdowuqrbvcfjkt6l2hwa - Indexed At
- 2026-07-26 20:13 UTC
- AT-URI
-
at://did:plc:rnpkyqnmsw4ipey6eotbdnnf/com.atproto.lexicon.schema/org.lichess.puzzle.attempt
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
org.lichess.puzzle.defs not from the namespace authority
The shared representation of a chess puzzle returned by the puzzle queries.
-
Submits the outcome of a ranked puzzle previously issued by getNextRanked. The challenge token issued with the puzzle must be passed back verbatim, along with the full solution line the player played. The server validat…
-
Fetches the next ranked puzzle for the authenticated player. Each puzzle needs to be solved or failed before requesting another; if the player already holds an unresolved ranked puzzle, that same puzzle (with a freshly …