{
  "timestamp": "2026-04-15T16:14:32.469676+00:00",
  "source_date": "2026-03-06",
  "reconstruction_source_file": "data/gamma_location_viz/gamma_loc_2026-03-06.json",
  "raw_trace_source_file": "data/trace_api/intradayStrikeGEX_2026-03-06.parquet",
  "matching_policy": {
    "morning": "validate against the first gamma_snapshots timestamp, then use the exact TRACE timestamp if present, otherwise nearest later TRACE snapshot, otherwise nearest overall",
    "afternoon": "validate against the last gamma_snapshots timestamp, then use the exact TRACE timestamp if present, otherwise nearest earlier TRACE snapshot, otherwise nearest overall"
  },
  "sessions": [
    {
      "session": "morning",
      "heatmap_key": "morning_heatmap",
      "target_snapshot_time": "2026-03-06T01:50:00-05:00",
      "matched_trace_time": "2026-03-06T01:50:00-05:00",
      "matched_time_delta_seconds": 0.0,
      "spot": 6857.5,
      "metrics": {
        "n_reconstructed_strikes": 82,
        "n_trace_strikes": 111,
        "n_common_strikes": 82,
        "coverage_vs_reconstructed": 1.0,
        "pearson": 0.9999999999999999,
        "spearman": 1.0000000000000002,
        "mae": 0.000880335358421534,
        "rmse": 0.0020101803415908098,
        "max_abs_error": 0.005000000004656613,
        "sign_agreement": 1.0,
        "sum_reconstructed_common": -44793435.749999985,
        "sum_trace_common": -44793435.7421875,
        "sum_trace_all_strikes": -27766121.784179688,
        "normalized_abs_error_vs_trace_common": 1.9732051319347023e-10,
        "top_positive_overlap": [
          6880.0,
          6920.0,
          6950.0,
          6960.0,
          7000.0
        ],
        "top_negative_overlap": [
          6700.0,
          6800.0,
          6825.0,
          6850.0
        ]
      }
    },
    {
      "session": "afternoon",
      "heatmap_key": "afternoon_heatmap",
      "target_snapshot_time": "2026-03-06T16:00:00-05:00",
      "matched_trace_time": "2026-03-06T16:00:00-05:00",
      "matched_time_delta_seconds": 0.0,
      "spot": 6787.5,
      "metrics": {
        "n_reconstructed_strikes": 82,
        "n_trace_strikes": 134,
        "n_common_strikes": 82,
        "coverage_vs_reconstructed": 1.0,
        "pearson": 0.9999999999999994,
        "spearman": 1.0000000000000002,
        "mae": 0.0014805640070024797,
        "rmse": 0.00244295870126691,
        "max_abs_error": 0.005000000004656613,
        "sign_agreement": 1.0,
        "sum_reconstructed_common": -80976114.43,
        "sum_trace_common": -80976114.44140625,
        "sum_trace_all_strikes": -30350025.38671875,
        "normalized_abs_error_vs_trace_common": 5.375115060575352e-10,
        "top_positive_overlap": [
          6595.0,
          6950.0
        ],
        "top_negative_overlap": [
          6600.0,
          6700.0,
          6800.0,
          6850.0,
          6875.0
        ]
      }
    }
  ],
  "notes": [
    "Phase 2 is a real strike-level check against raw TRACE parquet, not cache-to-cache against gamma_location_viz alone.",
    "The reconstructed surface still originates from gamma_location_viz heatmap rows for this slice, because that is the current reconstruction artifact path.",
    "TRACE coverage can exceed heatmap coverage, so comparison metrics are computed on the common strike set and also report TRACE full-snapshot totals separately."
  ]
}