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 false positive

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.

Attempt 1 — a confirmed-rate floor (it nukes the real censors)

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:

Countrybeforeafter 10% confirmed-rate floorverdict
NL (free, FP)130FP removed ✓
IR / RU (DNS-poison censors)798 / 615785 / 610kept ✓
IT (Piracy Shield, legal)2180CRATERED ✗
CN / CU / VN / TM (low-confirmed)real~0CRATERED ✗

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.

Attempt 2 — an anomaly-rate floor (it balloons the false positives)

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:

Countryconfirmed-gate30% anomaly-gatefacebook flagged?
NL (free)10206still YES ✗
DE (free)6230ballooned ✗
CN (low-confirmed)15763now YES ✓
IR / RU797 / 6151119 / 1890YES

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.

Why no single threshold works

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.