{
  "generated_at": "2026-04-15T22:39:43Z",
  "score_as_of": "2026-04-15T22:38:34Z",
  "system": {
    "frozen_forecasts": 199,
    "matured_forecasts": 132,
    "scored_forecasts": 0,
    "matured_unscored_backlog": 132,
    "raw_chain_rows": 264,
    "hash_chain_mismatches": 0,
    "exact_model_benchmarks": 1,
    "alerts": [
      "132 matured forecast windows are waiting for scoring.",
      "Earthquake: no exact benchmark is attached to the current live model version.",
      "Tornado: no exact benchmark is attached to the current live model version."
    ]
  },
  "hazards": [
    {
      "key": "eq",
      "hazard": "earthquake",
      "model_version": "eq_coherence_v1_0",
      "verification_status": "logging_waiting_maturity",
      "status_badge": "Waiting",
      "verification_status_label": "Prospective earthquake logging is live; the 30-day windows have not matured yet.",
      "metric_source": "no_exact_model_benchmark",
      "metric_source_label": "The current live earthquake model does not yet have an exact benchmark in this repo.",
      "auc": null,
      "brier": null,
      "homepage_line": "52 frozen forecasts \u00b7 0 matured backlog",
      "forecast_storage": {
        "n_replay_artifacts": 52,
        "n_matured_forecasts": 0,
        "n_scored_forecasts": 0,
        "n_backlog": 0,
        "first_issued_at": "2026-03-13T03:00:00Z",
        "last_issued_at": "2026-04-15T19:00:00Z",
        "last_forecast_id": "eq_fcst_20260415_1900",
        "latest_replay_artifact": "/data/replay/eq_fcst_20260415_1900.json",
        "forecast_horizon": "30 days",
        "next_mature_at": "2026-05-02T00:00:00Z"
      },
      "ledger": {
        "supported": true,
        "path": "/data/earthquake-ledger.jsonl",
        "n_rows": 63,
        "prev_hash_mismatches": 0
      },
      "prospective": {
        "summary_path": "results/earthquake_prospective/prospective_summary.json",
        "status": "waiting_for_matured_forecasts",
        "scored_as_of": "2026-04-15T07:47:34Z",
        "message": "No replay artifacts have fully matured yet for the configured 30-day forecast horizon.",
        "top_5_hit_rate": null
      },
      "exact_model_benchmark": null,
      "related_benchmark": {
        "availability": "related_research_benchmark",
        "label": "Related research benchmark exists, but it is not yet bound to the current live model version.",
        "model_version": "earthquake_honest_regional_suite",
        "source_updated_at": null,
        "global_auc": 0.9074433326526443,
        "global_brier": 0.11605939643081976,
        "same_location_auc": 0.797277556440903,
        "source_files": [
          "results/earthquake_honest/v4_regional_honest_results.json",
          "results/earthquake_honest/same_location_auc.json"
        ]
      },
      "recommended_action": "Keep freezing every earthquake forecast. Once the first 30-day windows mature, run the prospective scorer and use those scores to tune thresholds and calibration."
    },
    {
      "key": "hu",
      "hazard": "hurricane",
      "model_version": "hurricane_ri_v8_1",
      "verification_status": "matured_unscored_no_evaluator",
      "status_badge": "Backlog",
      "verification_status_label": "Matured hurricane forecasts exist, but no live advisory-to-outcome scorer is wired yet.",
      "metric_source": "retrospective_holdout_exact_model",
      "metric_source_label": "Exact-model retrospective benchmark is available.",
      "auc": 0.938,
      "brier": 0.034,
      "brier_skill_score": 0.29,
      "homepage_line": "AUC 0.938 retrospective holdout",
      "forecast_storage": {
        "n_replay_artifacts": 12,
        "n_matured_forecasts": 10,
        "n_scored_forecasts": 0,
        "n_backlog": 10,
        "first_issued_at": "2026-03-13T03:00:00Z",
        "last_issued_at": "2026-04-15T12:53:33Z",
        "last_forecast_id": "hu_fcst_20260415_1253",
        "latest_replay_artifact": "/data/replay/hu_fcst_20260415_1253.json",
        "forecast_horizon": "24 hours",
        "next_mature_at": "2026-04-16T12:53:33Z"
      },
      "ledger": {
        "supported": false,
        "path": null,
        "n_rows": 0,
        "prev_hash_mismatches": 0
      },
      "prospective": {
        "summary_path": null,
        "status": "evaluator_missing",
        "scored_as_of": null,
        "message": "Live hurricane forecasts are stored, but the repo does not yet score them against realized 24-hour intensity change."
      },
      "exact_model_benchmark": {
        "availability": "exact_model_benchmark",
        "label": "Retrospective benchmark available for the current live model version.",
        "model_version": "hurricane_ri_v8_1",
        "source_updated_at": "2026-03-13T03:00:00Z",
        "auc": 0.938,
        "brier": 0.034,
        "brier_skill_score": 0.29,
        "reliability_slope": 0.976,
        "n_cases": 9714
      },
      "related_benchmark": null,
      "recommended_action": "Implement an advisory-to-outcome scorer that joins frozen hurricane forecasts to realized 24-hour intensity change before using the model for calibration or promotion decisions."
    },
    {
      "key": "to",
      "hazard": "tornado",
      "model_version": "tornado_storm_v1_0",
      "verification_status": "matured_unscored_no_evaluator",
      "status_badge": "Backlog",
      "verification_status_label": "Matured tornado storm-object forecasts exist, but no live outcome scorer is wired yet.",
      "metric_source": "no_exact_model_benchmark",
      "metric_source_label": "No exact benchmark is currently bound to the live tornado storm-object model version in this repo.",
      "auc": null,
      "brier": null,
      "homepage_line": "135 frozen forecasts \u00b7 122 matured backlog",
      "forecast_storage": {
        "n_replay_artifacts": 135,
        "n_matured_forecasts": 122,
        "n_scored_forecasts": 0,
        "n_backlog": 122,
        "first_issued_at": "2026-03-13T03:00:00Z",
        "last_issued_at": "2026-04-15T22:38:34Z",
        "last_forecast_id": "to_fcst_20260415_2238",
        "latest_replay_artifact": "/data/replay/to_fcst_20260415_2238.json",
        "forecast_horizon": "24 hours",
        "next_mature_at": "2026-04-15T22:41:32Z"
      },
      "ledger": {
        "supported": true,
        "path": "/data/tornado-ledger.jsonl",
        "n_rows": 201,
        "prev_hash_mismatches": 0
      },
      "prospective": {
        "summary_path": null,
        "status": "evaluator_missing",
        "scored_as_of": null,
        "message": "Live tornado storm-object forecasts are stored, but the repo does not yet score them against matched outcomes."
      },
      "exact_model_benchmark": null,
      "related_benchmark": {
        "availability": "related_research_benchmark",
        "label": "A historical 2024 holdout benchmark exists for a related tornado GBT family, but not yet as an exact score for the live storm-object model.",
        "model_version": "hazardpulse_tornado_definitive_v1",
        "source_updated_at": "2026-03-31T04:07:24Z",
        "auc": 0.8942990839158551,
        "brier": 0.1143939459213997,
        "brier_skill_score": 0.17636358936592222,
        "source_files": [
          "results/definitive/definitive_results.json"
        ]
      },
      "recommended_action": "Bind each frozen tornado storm-object forecast to a matched outcome definition and write a 24-hour scorer before using the live model for calibration or threshold changes."
    }
  ]
}
