{"block_signal_type_counts":{"block":6572,"dns-blocking":15768,"http-blocking-tcp-reset":1770,"http-blocking-timeout":639,"interference":350},"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-07-06T04:50:01.821515+00:00","halflife_days":45,"is_recommendation_only":true,"mean_posterior_variance":0.038369,"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,"AZ":3,"BD":3,"BE":1,"BH":1,"BO":1,"BY":4,"CA":2,"CN":5,"CU":3,"DZ":1,"EG":3,"GB":1,"GH":2,"ID":26,"IN":12,"IQ":3,"IR":67,"IT":19,"JO":6,"KH":2,"KW":4,"KZ":3,"LA":1,"LB":1,"MA":3,"MY":3,"NG":1,"NI":1,"OM":1,"PK":3,"PL":5,"QA":4,"RU":52,"RW":1,"SA":11,"SG":3,"SY":2,"TH":9,"TR":14,"UG":2,"US":1,"UZ":1,"VE":3,"VN":3},"total_evidence_rows_scanned":105660,"total_pairs_cold_skipped":156,"total_pairs_scored":3641,"total_pairs_with_recent_flip":279,"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."}}