{
  "research_audit": {
    "temporal_validation": {
      "name": "observed-versus-forecast boundary",
      "passed": true,
      "details": "Postgame observations are marked prediction-ineligible; only timestamped forecast snapshots can be evaluated as projection features."
    },
    "baseline_checks": [
      {
        "name": "official projection isolation",
        "passed": true,
        "details": "Incomplete weather evidence cannot change the active projection model."
      },
      {
        "name": "registered forecast horizons",
        "passed": true,
        "details": "Archived forecasts are requested at the registered 24-hour and 6-hour cutoffs."
      }
    ],
    "uncertainty": {
      "name": "descriptive scope",
      "passed": true,
      "details": "The explainer makes no new effect or forecast-accuracy claim; underlying studies retain their own uncertainty contracts."
    },
    "missingness": {
      "input_rows": 2516,
      "analyzed_rows": 184,
      "excluded_rows": 2332,
      "missing_by_field": {
        "forecast_not_yet_complete": 2332
      },
      "reconciled": true
    },
    "sensitivity_checks": [
      {
        "name": "station agreement",
        "passed": true,
        "details": "Primary and secondary station rain classifications exceed 90% agreement."
      },
      {
        "name": "forecast reproducibility",
        "passed": true,
        "details": "Two executions produced the same archived-forecast scorecard hash."
      }
    ],
    "leakage_checks": [
      {
        "name": "cutoff integrity",
        "passed": true,
        "details": "Every retained archived forecast proves availability before its cutoff."
      }
    ],
    "withholding_checks": [
      {
        "name": "challenger isolation",
        "passed": true,
        "details": "Weather remains outside official projections while registered readiness or performance gates are incomplete."
      }
    ]
  },
  "study": "NFL weather evidence architecture",
  "data_through": 2025,
  "observed_weather": {
    "games_with_play_by_play": 2127,
    "games_with_observed_weather": 1258,
    "coverage": 0.9812792511700468,
    "data_through": "2024",
    "prediction_eligible": false
  },
  "forecast_archive": {
    "expected_requests": 2516,
    "completed_forecasts": 184,
    "coverage": 0.07313195548489666,
    "horizons_hours": [
      24,
      6
    ],
    "status": "withheld",
    "cutoff_integrity": true
  },
  "projection_boundary": {
    "observations": "historical research only",
    "forecasts": "challenger-eligible after timestamp and coverage gates",
    "official_model": "unchanged until every promotion gate passes"
  },
  "source_lag": {
    "available_through": "2024",
    "handling": "Weather-dependent studies stop at the latest available season; the next refresh retries automatically.",
    "requested_through": "2025",
    "source_key": "noaa-global-hourly"
  }
}
