{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "dailyStats": {
      "description": "Aggregate statistics for one (lang, puzzleNumber), computed in the browser. Counts are read live from Constellation and never stored on any record.",
      "properties": {
        "averageGuesses": {
          "description": "Average winning guess count, scaled by 100 (integer to avoid float ambiguity); e.g. 412 means 4.12. Absent when there are no solvers.",
          "type": "integer"
        },
        "guessDistribution": {
          "description": "Histogram of winning guess counts across all solvers.",
          "items": {
            "ref": "bzh.herve.atmot.stats#guessBucket",
            "type": "ref"
          },
          "maxLength": 6,
          "type": "array"
        },
        "lang": {
          "description": "Language series.",
          "format": "language",
          "type": "string"
        },
        "players": {
          "description": "Distinct DIDs that recorded a result for this puzzle.",
          "minimum": 0,
          "type": "integer"
        },
        "puzzleNumber": {
          "description": "Per-language puzzle index.",
          "minimum": 1,
          "type": "integer"
        },
        "solvers": {
          "description": "How many of those players solved it.",
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "lang",
        "puzzleNumber",
        "players"
      ],
      "type": "object"
    },
    "leaderboardEntry": {
      "description": "One aggregated row of a daily leaderboard, computed in the browser from result records discovered via Constellation.",
      "properties": {
        "did": {
          "description": "DID of the player.",
          "format": "did",
          "type": "string"
        },
        "guessCount": {
          "description": "Guesses used; present only when solved.",
          "maximum": 6,
          "minimum": 1,
          "type": "integer"
        },
        "handle": {
          "description": "Resolved handle of the player, if available.",
          "format": "handle",
          "type": "string"
        },
        "solved": {
          "description": "Whether the player solved the puzzle.",
          "type": "boolean"
        }
      },
      "required": [
        "did",
        "solved"
      ],
      "type": "object"
    },
    "resultView": {
      "description": "Client-side view of one player's result, assembled in the browser after reading records (there is no server implementing query lexicons in v1).",
      "properties": {
        "did": {
          "description": "DID of the player who recorded this result.",
          "format": "did",
          "type": "string"
        },
        "guessCount": {
          "description": "Guesses used; present only when solved.",
          "maximum": 6,
          "minimum": 1,
          "type": "integer"
        },
        "handle": {
          "description": "Resolved handle of the player, if available.",
          "format": "handle",
          "type": "string"
        },
        "lang": {
          "description": "Language series of the puzzle.",
          "format": "language",
          "type": "string"
        },
        "puzzleNumber": {
          "description": "Per-language puzzle index.",
          "minimum": 1,
          "type": "integer"
        },
        "solved": {
          "description": "Whether the player solved the puzzle.",
          "type": "boolean"
        }
      },
      "required": [
        "did",
        "lang",
        "puzzleNumber",
        "solved"
      ],
      "type": "object"
    }
  },
  "id": "bzh.herve.atmot.defs",
  "lexicon": 1
}
