Voidly Sentinel sends a forecast_threshold alert when a
country's 7-day censorship-risk forecast crosses the alert
threshold. The pitch is "early warning." This page is the honest
audit of that pitch: for every forecast-threshold
alert that fired in the last 90 days, did a confirmed censorship
incident actually follow — and if so, by how many days did the
alert beat it?
We built this because an early-warning claim is only worth anything if it is measured against real history. It is easy to publish a forecast; it is harder to grade the forecast after the fact and publish the grade whether it flatters us or not. This is the accountability number. It is deliberately not smoothed.
Roughly four out of five forecast-threshold alerts in the last 90
days were not followed by a confirmed censorship incident
within two weeks. That is a high false-alarm rate, and the endpoint
surfaces it in a headline_warning field rather than
burying it. A single Sentinel alert should be read as a
watch signal — a prompt to look harder at a country
— not as a prediction that a shutdown is coming. The genuine
early-warning value lives in the aggregate: when an alert does
precede an incident, it does so by a useful margin (a median of
four-plus days, sometimes nearly two weeks).
Two structural reasons the false-alarm rate is partly an over-count, stated honestly so the number is not gamed:
censorship/mixed incidents. IODA
disruption rows — real network outages that
were never confirmed as state censorship — are excluded.
Some of those disruptions in alerting countries may well have
been undeclared shutdowns; counting them would lower the
false-alarm rate, but we do not, because they are not confirmed.The 19.5% aggregate hides a wide split. Where Sentinel works, it works:
And where it does not, it does not:
That split is itself useful: it tells a newsroom which country's Sentinel alerts have earned trust (Egypt, Uzbekistan, Pakistan) and which to treat as background noise until the model improves.
Lead time here is alert-issued vs incident-detection, not alert vs the real-world start of the shutdown. Voidly's incident detection itself lags: OONI and IODA measurements take time to ingest, and the incident builder runs on a 30-minute cycle. So a positive lead time is a lower bound on the true early-warning margin against the actual event — the alert beat our own detection by the reported number of days, and almost certainly beat the real shutdown start by more. The number does not over-state.
One more honest caveat: the matched incident is the next confirmed incident in the same country within the horizon. That is a temporal match, not a causal one. We are not claiming the alert predicted that specific incident — only that an alert and an incident occurred in that order, in that country, within two weeks.
Use GET /v1/sentinel/alert-lead-time for the full
retrospective — the lead-time distribution, the true-positive
and false-alarm rates, the per-country breakdown, and the per-alert
detail. Use GET /v1/sentinel/alert-lead-time/{cc} to
pull one country's record before deciding whether to trust its
alerts. The retrospective rebuilds daily, so the numbers move as new
alerts fire and new incidents are confirmed. It is paired with
/v1/sentinel/accuracy (the rolling forecast confusion
matrix); accuracy grades every forecast, this grades every alert that
actually fired.