{"best_country":{"alerts":3,"country":"SY","median_lead_time_days":4.92,"true_positive_rate_pct":100.0},"generated_at":"2026-10-03T04:50:01.900650+00:00","headline_warning":null,"honest_caveats":["THIS IS THE ACCOUNTABILITY NUMBER. The false-alarm rate is reported prominently and is NOT smoothed away. If it is high, the headline_warning field says so.","'Lead time' is alert-issued vs incident-DETECTION, not alert vs the real-world shutdown start. Incident detection itself lags (OONI/IODA ingest + the 30-min incident builder), so a positive lead time is a LOWER BOUND on the true early-warning margin \u2014 it does not over-state.","The matched incident is the next confirmed censorship/mixed incident in the same country within the horizon. It is a TEMPORAL match, not a causal one \u2014 the alert did not necessarily predict THAT specific incident.","Lagging alerts (forecast reacting to a shutdown already underway) are reported separately and are NOT counted toward the median-lead-time headline. Their lead time is 0 or negative.","Only incident_type IN ('censorship','mixed') count as a confirmed incident. IODA 'disruption' rows are network observations, not confirmed censorship, and are excluded.","The horizon is 14 days. A real incident that the alert predicted but that arrived later than 14 days is scored as a false alarm here \u2014 the FP rate is therefore an UPPER bound on true miss-fires.","Forecast-threshold alerts only \u2014 severity_upgrade, dbscan_flip, and contagion_chain_fire alert types use different logic and are out of scope for this retrospective.","Countries with <2 alerts are excluded from best/worst ranking so a single lucky or unlucky alert cannot crown a country."],"method":{"alert_source":"sentinel_alerts WHERE event_type='forecast_threshold' (7-day forecast crossing the alert threshold)","false_alarm":"no confirmed incident within 14 days after the alert (and none in the 3-day grace window before it)","horizon_days":14,"incident_source":"voidly_data.db incidents WHERE incident_type IN ('censorship','mixed') \u2014 IODA disruption rows excluded","lagging":"an incident started within 3 days BEFORE the alert \u2014 the forecast reacted to a shutdown already underway; lead time is 0 or negative and is excluded from the median-lead-time headline","lagging_grace_days":3,"lead_time_definition":"incident.first_seen - alert.issued_at, in days. Positive = the alert preceded incident DETECTION.","true_positive":"a confirmed incident in the same country within 14 days AFTER the alert"},"overall":{"alerts_analyzed":69,"false_alarm_rate_pct":5.8,"false_alarms":4,"lagging_alerts":1,"lagging_rate_pct":1.4,"lead_time_days":{"max":12.92,"mean":1.97,"median":0.92,"min":0.69,"n":64,"p25":0.92,"p75":1.97},"true_positive_rate_pct":92.8,"true_positives":64},"per_country":[{"alerts":3,"country":"SY","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":6.25,"median_lead_time_days":4.92,"true_positive_rate_pct":100.0,"true_positives":3},{"alerts":2,"country":"NG","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":4.42,"median_lead_time_days":4.42,"true_positive_rate_pct":100.0,"true_positives":2},{"alerts":1,"country":"IN","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":2.92,"median_lead_time_days":2.92,"true_positive_rate_pct":100.0,"true_positives":1},{"alerts":4,"country":"KZ","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":2.47,"median_lead_time_days":2.51,"true_positive_rate_pct":100.0,"true_positives":4},{"alerts":1,"country":"TH","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":2.49,"median_lead_time_days":2.49,"true_positive_rate_pct":100.0,"true_positives":1},{"alerts":2,"country":"MY","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":2.35,"median_lead_time_days":2.35,"true_positive_rate_pct":100.0,"true_positives":2},{"alerts":6,"country":"VN","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":2.09,"median_lead_time_days":1.92,"true_positive_rate_pct":100.0,"true_positives":6},{"alerts":5,"country":"UZ","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":1.72,"median_lead_time_days":1.92,"true_positive_rate_pct":100.0,"true_positives":5},{"alerts":3,"country":"ET","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":1.92,"median_lead_time_days":1.92,"true_positive_rate_pct":100.0,"true_positives":3},{"alerts":2,"country":"SA","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":1.42,"median_lead_time_days":1.42,"true_positive_rate_pct":100.0,"true_positives":2},{"alerts":7,"country":"MM","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":7},{"alerts":7,"country":"CU","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":1.78,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":7},{"alerts":6,"country":"PK","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":6},{"alerts":4,"country":"RU","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":4},{"alerts":3,"country":"IR","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":3},{"alerts":3,"country":"BY","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":3},{"alerts":2,"country":"LB","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":2},{"alerts":1,"country":"EG","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100.0,"true_positives":1},{"alerts":1,"country":"ID","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.69,"median_lead_time_days":0.69,"true_positive_rate_pct":100.0,"true_positives":1},{"alerts":2,"country":"SD","false_alarm_rate_pct":50.0,"false_alarms":1,"lagging_alerts":0,"mean_lead_time_days":11.92,"median_lead_time_days":11.92,"true_positive_rate_pct":50.0,"true_positives":1},{"alerts":3,"country":"NI","false_alarm_rate_pct":100.0,"false_alarms":3,"lagging_alerts":0,"mean_lead_time_days":null,"median_lead_time_days":null,"true_positive_rate_pct":0.0,"true_positives":0},{"alerts":1,"country":"TR","false_alarm_rate_pct":0.0,"false_alarms":0,"lagging_alerts":1,"mean_lead_time_days":null,"median_lead_time_days":null,"true_positive_rate_pct":0.0,"true_positives":0}],"schema":"voidly-sentinel-alert-lead-time/v1","window":{"lookback_days":90,"since":"2026-07-05T04:50:01.900650+00:00","until":"2026-10-03T04:50:01.900650+00:00"},"worst_country":{"alerts":3,"country":"NI","false_alarm_rate_pct":100.0,"median_lead_time_days":null,"true_positive_rate_pct":0.0}}
