{"builder": "scripts/build-alert-lead-time-retrospective.py", "description": "Honest retrospective on the early-warning value of Sentinel forecast-threshold alerts. For every alert in the last 90 days it measures whether a confirmed censorship incident followed, and how much lead time the alert gave. Reports the lead-time distribution, true-positive rate, and false-alarm rate.", "endpoint": "/v1/sentinel/alert-lead-time", "honest_caveats": ["This is the accountability number \u2014 the false-alarm rate is reported prominently and is NOT smoothed away.", "'Lead time' is alert-issued vs incident-DETECTION, not alert vs the real-world shutdown start. Incident detection itself lags, so a positive lead time is a LOWER BOUND on the true early-warning margin.", "The matched incident is a TEMPORAL match (next confirmed incident within the horizon), not a causal one.", "Lagging alerts (forecast reacting to a shutdown already underway) are reported separately and excluded from the median-lead-time headline.", "Only confirmed censorship/mixed incidents count \u2014 IODA disruption rows are excluded.", "Forecast-threshold alerts only; other Sentinel alert types are out of scope."], "per_country_endpoint": "/v1/sentinel/alert-lead-time/{cc}", "query_params": {"country": "Optional (list endpoint). ISO 3166-1 alpha-2 \u2014 filter to one country.", "include_alerts": "Optional (list endpoint). 'false' drops the per-alert list for a lean payload."}, "refresh": "daily at 04:50 UTC via cron", "sidecar_last_modified": "2026-10-05T04:50:01Z", "sidecar_path": "[internal path]", "sidecar_size_bytes": 37271}