···1616 LexiconTypeID string `json:"$type" cborgen:"$type,const=org.lichess.puzzle.attempt"`
1717 // createdAt: client-declared timestamp when this attempt record was created.
1818 CreatedAt string `json:"createdAt" cborgen:"createdAt"`
1919+ // fen: 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.
2020+ Fen *string `json:"fen,omitempty" cborgen:"fen,omitempty"`
1921 // mode: Whether this attempt was played for rating and should be counted towards the user's rating.
2022 Mode *string `json:"mode,omitempty" cborgen:"mode,omitempty"`
2123 // nonce: 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.
···482482 description:
483483 "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.",
484484 },
485485+ fen: {
486486+ type: 'string',
487487+ maxLength: 128,
488488+ description:
489489+ "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.",
490490+ },
485491 createdAt: {
486492 type: 'string',
487493 format: 'datetime',
···2828 nonce?: string
2929 /** 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. */
3030 playerMoves: string
3131+ /** 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. */
3232+ fen?: string
3133 /** client-declared timestamp when this attempt record was created. */
3234 createdAt: string
3335 /** 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). */
···4545 "type": "string",
4646 "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."
4747 },
4848+ "fen": {
4949+ "type": "string",
5050+ "maxLength": 128,
5151+ "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."
5252+ },
4853 "createdAt": {
4954 "type": "string",
5055 "format": "datetime",