voidly
UZIRDZAZ

Probe scheduling optimizer: a Thompson-sampling priority list for where to point the probe network next

The Voidly probe network has a hard capacity ceiling — roughly 40 nodes, 62 domains, a 5-minute cadence — and today every node runs the same fixed domain list everywhere. That spends probe attention uniformly, which is wasteful: a (country, domain) pair measured 400 times and 100% blocked teaches nothing new on probe 401, while a pair seen four times, or one whose block state flipped last week, is exactly where a fresh probe ADDS knowledge. The probe scheduling optimizer is a recommendation engine for that problem: a ranked priority list of which (country, domain) pairs to probe next, so a scheduler or a human running the network can concentrate scarce probe cycles where the model is most uncertain. Method — Thompson sampling per (country, domain): each pair is a bandit arm carrying a Beta(alpha, beta) posterior over P(blocked), starting from a Jeffreys prior Beta(0.5, 0.5). alpha accumulates recency-weighted block observations, beta accumulates recency-weighted unblock observations, each weighted exp(-age_days/45) so a block state that flipped a month ago is not drowned by a year of stale agreement. The Beta posterior variance — a*b / ((a+b)^2 * (a+b+1)) — is the information-gain proxy: large when a pair is under-sampled OR genuinely 50/50, small when many consistent observations have piled up. One Thompson sample is drawn per Beta (the bandit exploration step), and pairs are ranked by posterior_variance * recency_weight * flip_weight * (1 + thompson_weight * (1 - |sample-0.5|*2)) — the flip weight (1.5x) favours pairs whose block state changed in the trailing 30 days, the Thompson term is bounded small so the deterministic variance/recency signal leads. First run 21 May 2026 scored 1,054 (country, domain) pairs from a 365-day evidence window, skipped 57 cold pairs with fewer than two observations, and found 269 pairs with a block-state flip in the trailing 30 days. The five highest-priority pairs to probe next: UZ/twitter.com, IR/binance.com, DZ/tiktok.com, IR/tumblr.com, AZ/telegram.org — all sparse-but-contested pairs where the posterior is wide and the last observation is months old. Honest caveats baked into every response: this is a RECOMMENDATION, not wired into probe_module.py or the live scheduler — nothing changes the probe cadence yet; Thompson sampling treats each (country, domain) pair as an independent bandit arm, false in practice because DPI policy correlates domains within a country and a censor flipping one news site often flips many; a high-variance pair may just be intermittently REACHABLE (flaky resolver, congested transit) rather than censorship-uncertain; cold pairs with fewer than two observations are out of scope here because the existing fixed-list scheduler already covers them. Live at GET /v1/atlas/probe-priority + /v1/atlas/probe-priority/info. Built daily 04:50 UTC.

#probe-network#thompson-sampling#bandit#scheduling#information-gain#recommendation#ml-honesty#transparency#atlas#api

Raw data