{"country":"IR","country_alerts":[{"alert_id":1865,"country":"IR","eval_date":"2026-07-04","forecast_probability":0.2682,"issued_at":"2026-07-04T02:00:01.604803+00:00","lead_days":0.92,"matched_incident_at":"2026-07-05T00:00:00+00:00","model_version":"honest_forecast_v1","outcome":"true_positive","severity":"medium","threshold":0.25},{"alert_id":3698,"country":"IR","eval_date":"2026-08-17","forecast_probability":0.64,"issued_at":"2026-08-17T02:00:01.557838+00:00","lead_days":0.92,"matched_incident_at":"2026-08-18T00:00:00+00:00","model_version":"honest_forecast_v1","outcome":"true_positive","severity":"high","threshold":0.4}],"country_summary":{"alerts":2,"country":"IR","false_alarm_rate_pct":0,"false_alarms":0,"lagging_alerts":0,"mean_lead_time_days":0.92,"median_lead_time_days":0.92,"true_positive_rate_pct":100,"true_positives":2},"generated_at":"2026-08-20T04:50:01.342044+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 — 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 — 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 — the FP rate is therefore an UPPER bound on true miss-fires.","Forecast-threshold alerts only — 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."],"note":null,"overall_for_context":{"alerts_analyzed":48,"false_alarm_rate_pct":14.6,"false_alarms":7,"lagging_alerts":3,"lagging_rate_pct":6.2,"lead_time_days":{"max":11.92,"mean":2.4,"median":0.92,"min":0.04,"n":38,"p25":0.92,"p75":1.92},"true_positive_rate_pct":79.2,"true_positives":38},"schema":"voidly-sentinel-alert-lead-time/v1","window":{"lookback_days":90,"since":"2026-05-22T04:50:01.342044+00:00","until":"2026-08-20T04:50:01.342044+00:00"},"_voidly_pay":{"claim_did":"https://voidly.ai/pay/claim","for_builders":"https://voidly.ai/pay/for-builders","marketplace":"https://api.voidly.ai/v1/pay/marketplace","live_demo":"https://huggingface.co/spaces/emperor-mew/voidly-pay","universal_proxy":{"url":"https://api.voidly.ai/v1/pay/proxy","example":"https://api.voidly.ai/v1/pay/proxy?u=<https-url>&to=did:voidly:<your-did>&price=0.01","page":"https://voidly.ai/pay/proxy","note":"Paywall any public HTTPS URL with one query param. No SDK install required."},"install":{"typescript":"npm install @voidly/pay","python":"pip install voidly-pay","langchain":"pip install voidly-pay-langchain","vercel_ai":"npm install @voidly/pay-vercel-ai","mcp":"npx @voidly/pay-mcp","cli":"npm install -g @voidly/pay-cli"},"note":"Voidly Pay is the open agent-to-agent payment rail. Claim a DID + 10 starter credits in 60s, or paywall any URL via the universal proxy with one query param."}}