{"block_signal_type_counts":{"block":97813,"dns-blocking":22540,"http-blocking-tcp-reset":2427,"http-blocking-timeout":934,"interference":757},"block_signals":["dns-blocking","http-blocking-tcp-reset","http-blocking-timeout","http-blocking-blockpage","block","blocking","interference","tcp-reset","blockpage","tor-blocking","header-manipulation","middlebox-detection"],"caveats":["This is a RECOMMENDATION. It is not wired into probe_module.py or the live probe scheduler — nothing changes the probe cadence yet. It produces a priority list a scheduler or human can choose to consume.","Thompson sampling here treats each (country, domain) pair as an INDEPENDENT bandit arm. In reality DPI policy correlates domains within a country and censors flip many sites at once — a hierarchical / contextual model would be more correct. Treat the ranking as a heuristic.","A high-variance pair may just be intermittently REACHABLE (flaky resolver, congested transit) rather than censorship-uncertain. The recent-flip term partly separates genuinely-contested pairs from merely-noisy ones, but not perfectly.","Cold pairs with fewer than 2 observations are not ranked here; the existing fixed-list scheduler already covers them.","Recency weighting uses a 45-day half-life, so a block state that flipped months ago is heavily discounted relative to fresh observations."],"endpoints":["/v1/atlas/probe-priority","/v1/atlas/probe-priority/info"],"generated_at":"2026-08-20T04:50:01.313567+00:00","halflife_days":45,"is_recommendation_only":true,"mean_posterior_variance":0.034946,"method":"Thompson sampling per (country, domain) bandit arm","min_observations":2,"prior":{"alpha":0.5,"beta":0.5,"name":"Jeffreys Beta(0.5, 0.5)"},"priority_formula":"posterior_variance * recency_weight * flip_weight * (1 + thompson_weight * (1 - |sample-0.5|*2))","random_seed":20260521,"schema":"voidly-atlas-probe-scheduling-priority/v1","summary":"Each (country, domain) pair carries a Beta(alpha, beta) posterior over P(blocked). alpha/beta accumulate recency-weighted block / unblock observations from the evidence table. The posterior variance is the information-gain proxy: a fresh probe is worth most where the posterior is widest. A Thompson draw from each Beta adds bandit exploration. Pairs are ranked by variance * recency * recent-flip * Thompson term. The output is a RECOMMENDED priority list — it is not wired into the live probe scheduler.","thompson_weight":0.5,"top_k_country_counts":{"AE":3,"AF":5,"AZ":2,"BD":4,"BE":1,"BH":2,"BO":1,"BY":10,"CN":5,"CU":4,"DZ":1,"EG":3,"GH":2,"ID":12,"IN":6,"IQ":4,"IR":79,"IT":4,"JO":1,"KH":2,"KW":3,"KZ":3,"LA":5,"LB":1,"LK":1,"MA":3,"MM":1,"MN":3,"MY":3,"NG":1,"NI":1,"OM":1,"PK":3,"QA":4,"RU":69,"RW":1,"SA":5,"SD":3,"SG":3,"SY":5,"TH":4,"TR":15,"TZ":1,"UG":2,"US":1,"UZ":1,"VE":3,"VN":3},"total_evidence_rows_scanned":229227,"total_pairs_cold_skipped":335,"total_pairs_scored":3407,"total_pairs_with_recent_flip":285,"unblock_signals":["ok"],"window_days":365,"wired_into_scheduler":false,"_voidly_pay":{"claim_did":"https://voidly.ai/pay/claim","for_builders":"https://voidly.ai/pay/for-builders","marketplace":"https://api.voidly.ai/v1/pay/marketplace","live_demo":"https://huggingface.co/spaces/emperor-mew/voidly-pay","universal_proxy":{"url":"https://api.voidly.ai/v1/pay/proxy","example":"https://api.voidly.ai/v1/pay/proxy?u=<https-url>&to=did:voidly:<your-did>&price=0.01","page":"https://voidly.ai/pay/proxy","note":"Paywall any public HTTPS URL with one query param. No SDK install required."},"install":{"typescript":"npm install @voidly/pay","python":"pip install voidly-pay","langchain":"pip install voidly-pay-langchain","vercel_ai":"npm install @voidly/pay-vercel-ai","mcp":"npx @voidly/pay-mcp","cli":"npm install -g @voidly/pay-cli"},"note":"Voidly Pay is the open agent-to-agent payment rail. Claim a DID + 10 starter credits in 60s, or paywall any URL via the universal proxy with one query param."}}