{
  "schemaVersion": 2,
  "datasetId": "3ball-solver-cache-v4",
  "generatedAt": "2026-08-26T06:38:24.501Z",
  "reviewedAt": "2026-08-26",
  "license": "CC-BY-4.0",
  "privacy": "Contains computed table coordinates and solver outputs only; no photos, account identifiers, free text, or personal data.",
  "source": {
    "path": "data/solutions_cache.json",
    "bytes": 71206,
    "sha256": "256a8ec7e7e9a66d907bd43f5fdd6b87628dc067fd9621f2d2ebd2472c3e43ed"
  },
  "engine": {
    "physicsProfile": "3ball-carom-match-v2",
    "physicsVersion": "2.0.0",
    "solverVersion": "4.2.0",
    "tableSpeed": "normal",
    "tableGeometry": {
      "L": 2.84,
      "W": 1.42
    },
    "sourceFingerprint": "feff06ecc44256840d1717aaa82a057db5ab8395b2ce5d53c5347a42baee4637"
  },
  "engineFingerprint": "feff06ecc44256840d1717aaa82a057db5ab8395b2ce5d53c5347a42baee4637",
  "counts": {
    "positions": 100,
    "validShots": 249,
    "rejectedSlots": 151,
    "modes": {
      "3cushion": 50,
      "freecarom": 50
    }
  },
  "fields": {
    "position": [
      "cueIdx",
      "mode",
      "firstIdx",
      "balls",
      "shots"
    ],
    "ball": [
      "color",
      "p.x",
      "p.y"
    ],
    "shot": [
      "shot.angle",
      "shot.power",
      "shot.sideSpin",
      "shot.topSpin",
      "label",
      "length",
      "margin",
      "pct",
      "tol",
      "perturbPct",
      "cushions"
    ]
  },
  "reproduction": {
    "generate": "npm run generate:solutions-cache",
    "verify": [
      "npm run test:research-evidence",
      "npm run test:solver-portfolio-cache",
      "npm run test:physics",
      "npm run test:solver-cache-revalidate"
    ]
  },
  "portfolioBeta": {
    "datasetId": "3ball-v3-portfolio-cache-v1",
    "schemaVersion": "1.0",
    "generatedAt": "2026-08-26T06:36:07.309Z",
    "reviewStatus": "machine-assisted-reviewed",
    "validationStatus": "measurement-pending",
    "source": {
      "path": "data/solutions_cache_v3.json",
      "bytes": 514872,
      "sha256": "1d97c9beb5de493307f85793e8a27112260f088862b2a4eb596873f433455c35"
    },
    "engine": {
      "physicsProfile": "3ball-carom-match-v2",
      "physicsVersion": "3.0.0",
      "solverVersion": "4.2.0",
      "tableSpeed": "normal",
      "tableGeometry": {
        "L": 2.84,
        "W": 1.42
      },
      "cueProfileId": "match-carom-v1",
      "tableProfileId": "match-284",
      "sourceFingerprint": "f5d1289952fd156c5f0db39c7f09244efc4081d0832fcab8dc1aa684489745d0"
    },
    "sourceFingerprint": "f5d1289952fd156c5f0db39c7f09244efc4081d0832fcab8dc1aa684489745d0",
    "counts": {
      "positions": 100,
      "continuations": 16,
      "solutions": 530
    },
    "reproduction": {
      "generate": "npm run generate:solutions-cache-v3",
      "verify": "npm run test:solver-portfolio-cache"
    },
    "limitations": [
      "This is a V3 candidate-seed cache, not an independently measured real-table dataset.",
      "Every cached candidate is re-simulated and rule-checked by the current worker before display.",
      "Neighbor entries are warm-start hints only and are never shown without a fresh solve.",
      "The frozen V2 publication above remains a separate reproducible research artifact."
    ]
  },
  "limitations": [
    "This artifact is a deterministic simulator dataset, not a real-table success-rate study.",
    "The published cache uses the frozen V2 physics profile shown in engine.physicsProfile.",
    "The separate Physics V3 portfolio cache is published as measurement-pending candidate evidence, not independent real-table validation.",
    "pct and margin are solver diagnostics inside the stated model; they are not real-world probabilities."
  ]
}
