{
  "schemaVersion": 1,
  "reviewedOn": "2026-07-19",
  "sources": [
    {
      "id": "lichess-chess-openings",
      "name": "lichess chess-openings catalogue",
      "sourceUrl": "https://github.com/lichess-org/chess-openings",
      "sourceFiles": "a.tsv through e.tsv from the recorded repository commit",
      "sourceRevision": "51a55d956b7ed0b9cd7853893744b1ca39cd2a05",
      "sourceArchive": "https://github.com/lichess-org/chess-openings/archive/51a55d956b7ed0b9cd7853893744b1ca39cd2a05.tar.gz",
      "license": "CC0-1.0",
      "licenseUrl": "https://github.com/lichess-org/chess-openings/blob/51a55d956b7ed0b9cd7853893744b1ca39cd2a05/LICENSE",
      "buildScript": "scripts/build-data.mjs",
      "outputs": [
        {
          "path": "scripts/data/openings-full.json",
          "sha256": "084d8608ed8ec483571cf7d7d7094de3868d0b4adafe04152984dcce22b4b3df"
        },
        {
          "path": "src/data/openings.json",
          "sha256": "5246ba9630a3b8414d98209376b04c6b3a913b823c9e32171d8080dc06916f30"
        }
      ]
    },
    {
      "id": "lichess-puzzles",
      "name": "lichess open puzzle database",
      "sourceUrl": "https://database.lichess.org/#puzzles",
      "sourceFiles": "The first 80,000 rows of the first official Lichess/Hugging Face parquet shard, projected into the source CSV columns and filtered deterministically by the historical generator",
      "sourceRevision": "8e7ac6ec246b96ae3943c2c3a1e4dcb72262d6df",
      "sourceArchive": "https://huggingface.co/datasets/Lichess/chess-puzzles/resolve/8e7ac6ec246b96ae3943c2c3a1e4dcb72262d6df/data/train-00000-of-00003.parquet",
      "sourcePublishedAt": "2026-06-11T16:08:20.000Z",
      "sourceObjectSha256": "e754f2327229caff9880506dfc9541ec7ec7b79bf6d1a19f05c6d3e07e634b09",
      "sourceObjectBytes": 288424217,
      "canonicalCsvSliceSha256": "b01f8f987ba8ae9f0909e1e9afbaf953e52433fae423adcf03b3f9caf99c08f9",
      "canonicalCsvSliceRows": 80000,
      "historicalGeneratorRevision": "f056236667405de0b9455c47019b6999112e2701",
      "auditScript": "scripts/audit-puzzle-snapshot.mjs",
      "auditTool": {
        "name": "DuckDB CLI",
        "version": "1.5.4",
        "releaseUrl": "https://github.com/duckdb/duckdb/releases/tag/v1.5.4"
      },
      "license": "CC0-1.0",
      "licenseUrl": "https://database.lichess.org/",
      "buildScript": "scripts/build-data.mjs",
      "outputs": [
        {
          "path": "src/data/puzzles.json",
          "sha256": "b6bdd4ace6f3425d120cf6f28551dde32a6f895c199408a2f20e9367ef086287"
        },
        {
          "path": "src/data/mate-puzzles.json",
          "sha256": "829ddca7b3a05036299f0be947539e6a78b4df74491db3d3d5c6c4a1617584ac"
        }
      ]
    },
    {
      "id": "classic-game-scores",
      "name": "Chess Database — selected classic game scores",
      "sourceUrl": "https://figshare.com/articles/dataset/Chess_Database/4276523/1",
      "sourceFiles": "129 exact score records selected from all.pgn in Figshare file 6971717; immutable ids, slugs, display metadata, score hashes and expected source occurrence counts are recorded in scripts/data/classic-game-selection.json",
      "sourceRevision": "10.6084/m9.figshare.4276523.v1",
      "sourceArchive": "https://ndownloader.figshare.com/files/6971717",
      "sourcePublishedAt": "2016-12-02T14:30:45Z",
      "sourceObjectSha256": "86732c0a23421da5985f5ba40d9db9bf2be1f6e2456b88629c35740ae71be54d",
      "sourceObjectBytes": 870891090,
      "sourceObjectMd5": "90bed9e33640e7eab354a40dfd1eddb8",
      "selectionManifest": "scripts/data/classic-game-selection.json",
      "selectionManifestSha256": "567d00c0d53fbc8948da30f3f33403f2146a5c086c5110d593c6a454a5ef7224",
      "publicSelectionManifest": "classic-game-selection.json",
      "provenanceNote": "The importer verifies the complete source archive, streams its sole 3,076,796,490-byte PGN member, scans all 3,561,471 games and requires every selected score to occur exactly the recorded number of times before writing the byte-pinned corpus.",
      "attribution": "Schaigorodsky, Ana (2016). Chess Database. figshare. Dataset. https://doi.org/10.6084/m9.figshare.4276523.v1",
      "license": "CC-BY-4.0",
      "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
      "rightsStatus": "licensed",
      "buildScript": "scripts/build-classics.mjs",
      "outputs": [
        {
          "path": "src/data/classic-games.json",
          "sha256": "daf343883b5bed24308016f1a0dd8c94b12a5a68b4df036375fb8c6ab523cff0"
        }
      ]
    },
    {
      "id": "classic-game-reference-analysis",
      "name": "Bounded classic-game reference analysis",
      "sourceUrl": "https://github.com/official-stockfish/Stockfish/releases/tag/sf_17.1",
      "sourceFiles": "The selected classic-game scores and the official stockfish-ubuntu-x86-64.tar release artifact. The verified regeneration profile fixes the artifact and extracted binary hashes, exact UCI identity, both embedded NNUE network identities, one thread, 32 MB hash, MultiPV 3 and 25,000 nodes per position.",
      "sourceRevision": "03e27488f3d21d8ff4dbf3065603afa21dbd0ef3",
      "sourceArchive": "https://github.com/official-stockfish/Stockfish/archive/03e27488f3d21d8ff4dbf3065603afa21dbd0ef3.tar.gz",
      "provenanceNote": "The complete evidence set was regenerated with the pinned official binary. The generator validated its SHA-256 and exact UCI identity, verified both NNUE defaults, re-hashed the executable after every search completed, and bound the output to the canonical score-corpus fingerprint.",
      "license": "GPL-3.0",
      "licenseUrl": "https://github.com/official-stockfish/Stockfish/blob/sf_17.1/Copying.txt",
      "buildScript": "scripts/analyze-classic-games.mjs",
      "derivedBuildScript": "scripts/generate-classic-training.mjs",
      "outputs": [
        {
          "path": "scripts/data/classic-analysis-provenance.json",
          "sha256": "872cc07a66418240fa1ad1c54a343a3c5d82f68b24707a0a52c35ebda28ef5b7"
        },
        {
          "path": "scripts/data/classic-game-analysis.json",
          "sha256": "0a75ffcb29653fe79a15e232a17334556b9dd41d993fc55eedfd6b6c5026a772"
        },
        {
          "path": "src/data/classic-game-training.json",
          "sha256": "d6c8aab875d538c4212276bb68165f1344ab5abdf9fca42284403864e52b2e03"
        }
      ]
    }
  ],
  "projectLicense": {
    "status": "no-public-grant",
    "spdx": null,
    "file": null,
    "normalizedTextSha256": null
  },
  "generatedFileSha256": {
    "scripts/data/openings-full.json": "084d8608ed8ec483571cf7d7d7094de3868d0b4adafe04152984dcce22b4b3df",
    "src/data/openings.json": "5246ba9630a3b8414d98209376b04c6b3a913b823c9e32171d8080dc06916f30",
    "src/data/puzzles.json": "b6bdd4ace6f3425d120cf6f28551dde32a6f895c199408a2f20e9367ef086287",
    "src/data/mate-puzzles.json": "829ddca7b3a05036299f0be947539e6a78b4df74491db3d3d5c6c4a1617584ac",
    "src/data/classic-games.json": "daf343883b5bed24308016f1a0dd8c94b12a5a68b4df036375fb8c6ab523cff0",
    "scripts/data/classic-analysis-provenance.json": "872cc07a66418240fa1ad1c54a343a3c5d82f68b24707a0a52c35ebda28ef5b7",
    "scripts/data/classic-game-analysis.json": "0a75ffcb29653fe79a15e232a17334556b9dd41d993fc55eedfd6b6c5026a772",
    "src/data/classic-game-training.json": "d6c8aab875d538c4212276bb68165f1344ab5abdf9fca42284403864e52b2e03"
  }
}
