org.lichess.puzzle.attempt

pds.dad

Documentation

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.

main record

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.

Record Key tid Timestamp-based ID

Properties

createdAt string datetime Required

client-declared timestamp when this attempt record was created.

fen string Optional

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 bytes
mode string Optional

Whether this attempt was played for rating and should be counted towards the user's rating.

Known values: casual, ranked
Default: casual
nonce string Optional

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 bytes
playerMoves string Required

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.

puzzleId string Required

Lichess puzzle ID.

maxLength: 32 bytes
service string did Required

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

sig string Optional

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 bytes
solved boolean Required

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.

View raw schema
{
  "key": "tid",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "puzzleId",
      "service",
      "solved",
      "playerMoves",
      "createdAt"
    ],
    "properties": {
      "fen": {
        "type": "string",
        "maxLength": 128,
        "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."
      },
      "sig": {
        "type": "string",
        "maxLength": 128,
        "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)."
      },
      "mode": {
        "type": "string",
        "default": "casual",
        "description": "Whether this attempt was played for rating and should be counted towards the user's rating.",
        "knownValues": [
          "casual",
          "ranked"
        ]
      },
      "nonce": {
        "type": "string",
        "maxLength": 64,
        "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."
      },
      "solved": {
        "type": "boolean",
        "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."
      },
      "service": {
        "type": "string",
        "format": "did",
        "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"
      },
      "puzzleId": {
        "type": "string",
        "maxLength": 32,
        "description": "Lichess puzzle ID."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "description": "client-declared timestamp when this attempt record was created."
      },
      "playerMoves": {
        "type": "string",
        "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."
      }
    }
  },
  "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."
}

Lexicon Garden

@