Voidly's national-censorship map (/v1/restriction-map) lists a
domain as nationally blocked when it is confirmed-blocked across at
least three independent networks (ASNs) in a country — the honest
multi-network gate that keeps single-ISP filtering and one-off measurement
errors out of the national picture. It has a known weak spot, and this finding
is the honest write-up of two attempts to close it that both made
things worse, why, and what the real fix has to look like. No fix was
shipped — the map keeps its gate and this documented limitation.
The Netherlands — a free country that does not nationally block social
media — was listed as blocking facebook.com,
instagram.com, and gist.github.com. The cause is
measurement noise, not censorship: OONI recorded
21 “confirmed” blocks out of 5,755 measurements of
facebook in NL — a 0.36% rate — and those 21
stray confirmations happened to span three different Dutch ASNs. A
heavily-measured platform accrues a handful of spurious “confirmed”
verdicts (TLS quirks, CDN edge errors, anti-bot interstitials OONI's heuristics
read as blocks); across enough networks, three of them trip an
any-confirmed-in-3-ASNs gate. The obvious fix is to demand more than
“any.” The obvious fix is wrong.
Require each counted ASN to confirm the block in at least 10% of its measurements, not just once. On the test set it looks perfect: NL drops to 0 national blocks (FP gone), while Iran (798→785) and Russia (615→610) keep ~98% of theirs. Then you check the rest of the world:
| Country | before | after 10% confirmed-rate floor | verdict |
|---|---|---|---|
| NL (free, FP) | 13 | 0 | FP removed ✓ |
| IR / RU (DNS-poison censors) | 798 / 615 | 785 / 610 | kept ✓ |
| IT (Piracy Shield, legal) | 218 | 0 | CRATERED ✗ |
| CN / CU / VN / TM (low-confirmed) | real | ~0 | CRATERED ✗ |
The reason is structural: OONI's confirmed verdict is conservative
and its rate varies wildly by how a country censors. Iran's DNS
poisoning produces a consistent block-page fingerprint — high confirmed
rate. China's Great Firewall is probabilistic and RST-based, so OONI more often
records anomaly than confirmed — low confirmed
rate. Italy's Piracy Shield blocks rotating pirate domains that are
half-dead by the time they're measured — low confirmed rate. A
confirmed-rate floor therefore punishes precisely the heaviest and
most consequential censors. Under-reporting China is far worse than the
Netherlands FP.
So switch signals: count an ASN only if at least 30% of its measurements are anomalous-or-confirmed (catching the “anomaly, not confirmed” censors). This fixes China beautifully — CN jumps 15→763 confirmed blocks, facebook included. But the free countries explode:
| Country | confirmed-gate | 30% anomaly-gate | facebook flagged? |
|---|---|---|---|
| NL (free) | 10 | 206 | still YES ✗ |
| DE (free) | 6 | 230 | ballooned ✗ |
| CN (low-confirmed) | 15 | 763 | now YES ✓ |
| IR / RU | 797 / 615 | 1119 / 1890 | YES |
The hypothesis — “facebook works fine in NL, so it'll have low anomaly” — is simply false. Major platforms carry a high baseline anomaly rate everywhere: CDN failover, TLS negotiation variance, regional A/B behaviour, and bot defenses all read as “anomalous” to a remote prober. facebook in the free Netherlands clears a 30% anomaly floor on its own. The anomaly gate trades China's false-negatives for an explosion of democracy false-positives — the exact opposite failure mode, equally wrong.
The two attempts fail in opposite directions because the thing they threshold on — a domain's raw confirmed or anomaly rate in a country — is not comparable across domains or countries. A 30% anomaly rate is normal background for facebook and damning for a small news site. A 5% confirmed rate is noise in the Netherlands and a real (under-reported) block in China. The noise floor is per-domain and per-country; a single global cutoff cannot separate signal from it without sacrificing one archetype to save another.
The honest fix is harder than a threshold and we have not shipped it: judge
each country-domain against that domain's own global baseline (is
facebook's NL anomaly rate elevated versus facebook's worldwide median? it is
not — CN's is, by 3–4x), or cross-check against measured
accessibility (a domain measured working across most of a country's networks is
not nationally blocked, however many stray confirmations it accrued). Both are
real modeling work, not a config change. Until then the national map keeps its
multi-ASN gate, the handful of heavily-measured-platform false positives in free
countries are a known and bounded limitation, and — the load-bearing part
— we did not ship a “fix” that quietly erased Italy's
and China's real censorship to make the Netherlands look clean.
Reproducible: the rate-floor and anomaly-floor sweeps are in
scripts/extract-national-blocks-multiasn.py (the
--min-conf-rate flag, default off) and the anomaly-gate analysis
harness.