{"block_signal_type_counts":{"block":236,"dns-blocking":10229,"http-blocking-tcp-reset":1180,"http-blocking-timeout":403},"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-05-22T04:50:01.535346+00:00","halflife_days":45,"is_recommendation_only":true,"mean_posterior_variance":0.011484,"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":11,"AF":5,"AZ":10,"BD":11,"BH":4,"BO":1,"BR":1,"BY":4,"CA":1,"CN":6,"CU":21,"DE":1,"DZ":1,"EG":14,"FR":3,"GH":5,"ID":8,"IN":13,"IQ":3,"IR":21,"JO":5,"JP":1,"KH":5,"KR":1,"KW":4,"KZ":5,"LA":5,"LB":5,"LK":1,"MA":6,"MM":4,"MY":12,"NG":1,"NI":2,"NL":1,"OM":1,"PE":4,"PK":9,"QA":9,"RU":7,"RW":1,"SA":10,"SG":8,"SY":2,"TH":11,"TN":3,"TR":10,"TZ":3,"UG":2,"US":4,"UZ":1,"VE":4,"VN":8,"ZA":1},"total_evidence_rows_scanned":27246,"total_pairs_cold_skipped":87,"total_pairs_scored":960,"total_pairs_with_recent_flip":266,"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."}}