Per-mobile-carrier blocking detector: splitting censorship severity by mobile carrier vs fixed broadband
Internet access is not one thing. In much of the Global South the cheap, dominant path online is a mobile carrier — a SIM and a cellular data plan — while fixed broadband (FTTH, cable, DSL) reaches a smaller, often wealthier slice of the population. Censors know this: mobile DPI is operationally easier to deploy and update than fixed-line interception, and blocking the mobile path hits the most people for the least effort, so several regimes block mobile-first. The per-mobile-carrier blocking detector makes that split visible. It takes a hand-curated map of 62 telco ASNs — 34 tagged mobile, 24 tagged broadband, 4 tagged mixed — and, per country over the trailing 90 days, splits the evidence table's CensoredPlanet blocking observations by access type. The headline number is mobile_skew: how much harder HTTP-level blocking lands on a country's mobile carriers than on its fixed broadband. The metric is HTTP-only on purpose. Every ASN-tagged evidence row is already a blocking observation, so a classic block rate (blocks / all measurements) is degenerate — always 1.0. And dns-blocking rows saturate signal_value at exactly 1.0 while http-blocking rows carry a real intensity in [0,1] (the fraction of probes that saw the block), and CensoredPlanet typically probes a given ASN with either its DNS satellite or its HTTP hyperquack, not both — so mixing DNS and HTTP rows would make any mean intensity an artifact of the probe-protocol mix rather than of how hard the carrier is blocked. So mobile_skew = mobile_http_intensity / (broadband_http_intensity + epsilon), computed on HTTP rows only, an apples-to-apples comparison; skew above 1.15 on a trusted country (>=20 HTTP-block rows on each access type) is the mobile-first signature. DNS blocking is reported separately as a per-side binary side-channel because DNS rows carry no usable intensity gradient; the 4 mixed ASNs (incumbent telcos running both networks at scale) are excluded from the skew math. The first run is honestly a thin one and the artifact says so: across the 90-day window 29 countries had blocking evidence on a classified telco ASN, but only Singapore currently has enough HTTP-block rows on both a mobile and a broadband ASN to support the headline skew — SG lands at mobile_skew 0.896 (mobile HTTP intensity 0.064, broadband 0.022), roughly balanced with a slight broadband lean. The other 28 countries are probed DNS-only or HTTP-only on one side, get mobile_skew=null, and surface only via the DNS side-channel — which still cleanly separates where DNS-level blocking is observed on the mobile path (Bahrain, India, Jordan, plus mobile-and-broadband-both in Bangladesh and Indonesia) from where it shows up only on fixed broadband (Azerbaijan, Belarus, Cuba, Egypt). Honest caveats baked into every response: the ASN-to-type map is hand-curated and incomplete (only ASNs present in the evidence table are classified, the rest are unknown); some incumbent telcos genuinely run both networks and are tagged mixed and dropped rather than guessed at; the headline skew needs HTTP-block rows on both access types and CensoredPlanet vantage-point assignment means that holds for one country today (it widens as probe coverage grows); and this measures blocking severity, not prevalence — every classified ASN is blocked, the question is how hard and on which access type. Wired as a per-country reference surface, not a model input. Live at GET /v1/atlas/mobile-carrier-blocking/{cc} + /leaderboard + /info. Built by scripts/build-mobile-carrier-blocking.py.