{"abs_drift_pp": 88.2, "brier": 0.7897, "calibration_drift_pp": 88.2, "calibrator_path": "[internal path]", "country": "CN", "drift_alert": true, "drift_threshold_pp": 15.0, "empirical_pos_rate": 1.0, "generated_at": "2026-10-04T05:00:15Z", "honest_caveats": ["Per-country windows are narrow. A country with fewer than 15 predictions in the 30-day window gets status='insufficient_data' and drift_alert=null.", "High-frequency-flip countries (VE, MM) produce noisy drift estimates \u2014 abs_drift_pp tends to overstate true drift when the country is bouncing between blocked and unblocked.", "Drift > 0 \u2260 broken model. A real distribution shift in the country (election, mass protest, fresh shutdown campaign) will legitimately have empirical_pos_rate > mean_predicted_prob until the next weekly retrain catches up.", "Observed labels are rebuilt from voidly_data.incidents using incident_type IN ('censorship','mixed') \u2014 matching the forecast model's post-2026-05-21 disruption-exclusion rule. The legacy sentinel_outcomes.observed column is NOT used.", "Calibrator is applied with the same WATCHED_FOR_CALIBRATION + CALIBRATOR_FLOOR gate as the live API, so this is the literal probability that would have been served at request time."], "mean_predicted_prob": 0.118, "min_predictions_for_alert": 15, "n_observed_positives": 24, "n_predictions": 24, "n_relabeled_vs_sentinel": 24, "observed_rebuilt_from_voidly_db": true, "operational_threshold": 0.175, "sidecar_last_modified": "2026-10-04T05:00:15Z", "sidecar_size_bytes": 16554, "status": "drifting", "window_days": 30, "window_end": "2026-09-27", "window_start": "2026-09-04"}