{"dataset":{"date_max":"2026-05-21","date_min":"2026-02-20","n_negative_total":5756,"n_positive_test":63,"n_positive_total":183,"n_positive_train":120,"test_cutoff":"2026-04-21","test_rows":2485,"total_rows":5939,"train_rows":3454},"honest_caveats":["LEAKAGE AUDIT (2026-05-22): the reported AUC ~0.92 is real arithmetic but near-tautological. The label is_censorship is derived from the incidents table; 343 of 344 censorship/mixed incidents were minted from an anomalous evidence row on the same country-day the feature counts. The feature partially ENCODES the label.","censoredplanet_present alone (one raw binary feature, no model) scores AUC ~0.90 on the temporal test set. The 4-source Naive Bayes adds only ~1.6pp (bootstrap 95% CI [0.0, 3.3pp]) — the 'multi-source fusion' contributes essentially nothing.","On a leakage-free target (predict NEXT-day censorship from TODAY's sources) AUC falls to ~0.73.","At threshold 0.5 the model's F1/precision/recall are all 0.0 — it is a ranker, not a classifier. Treat the posterior as a relative score only.","The split itself is honest (forward-temporal, not shuffled). The leakage is circular features, not split contamination — but the effect on the headline number is the same: the metric overstates real skill.","Naive Bayes assumes per-source independence given the label, violated when sources cover overlapping ASNs.","The corroboration gate in auto-incident-watchdog.py is a conservative near-veto, not the independent confirmation it appears to be."],"likelihoods":{"censoredplanet":{"lr_absent":0.01009013368822213,"lr_present":5.285392552244278,"p_present_given_censorship":0.9918032786885246,"p_present_given_no_censorship":0.18764988009592326},"ioda":{"lr_absent":1.7521893275961336,"lr_present":0.28733025178720106,"p_present_given_censorship":0.14754098360655737,"p_present_given_no_censorship":0.5134892086330936},"ooni":{"lr_absent":0.6623177718531964,"lr_present":1.7624231557377052,"p_present_given_censorship":0.5409836065573771,"p_present_given_no_censorship":0.3069544364508393},"voidly_probes":{"lr_absent":0.9921006709759874,"lr_present":27.344262295081972,"p_present_given_censorship":0.00819672131147541,"p_present_given_no_censorship":0.00029976019184652276}},"loaded":true,"model_version":"corroboration_v1_naive_bayes","per_source_contribution":{"censoredplanet":{"auc_with":0.9157327670952774,"auc_without":0.6854265791094858,"delta_auc":0.2303061879857916},"ioda":{"auc_with":0.9157327670952774,"auc_without":0.9194126590906112,"delta_auc":-0.003679891995333806},"ooni":{"auc_with":0.9157327670952774,"auc_without":0.9045358027604106,"delta_auc":0.011196964334866832},"voidly_probes":{"auc_with":0.9157327670952774,"auc_without":0.9157458744576827,"delta_auc":-0.000013107362405340162}},"prior":0.03474232773595831,"promote_floor_auc":0.75,"promoted":false,"schema":"voidly-corroboration-info/v1","sources":["ooni","ioda","censoredplanet","voidly_probes"],"test_metrics":{"auc":0.9157327670952774,"brier":0.025301537936352668,"ece":0.021128220069929128,"f1_at_0.5":0,"log_loss":0.08724260552014225,"precision_at_0.5":0,"recall_at_0.5":0,"reliability_bins":[{"bin":[0,0.1],"empirical_rate":0.006091846298031865,"n":2134,"predicted_mean":0.004044606403723503},{"bin":[0.1,0.2],"empirical_rate":0.11515151515151516,"n":165,"predicted_mean":0.17967309107813476},{"bin":[0.2,0.30000000000000004],"empirical_rate":null,"n":0,"predicted_mean":null},{"bin":[0.30000000000000004,0.4],"empirical_rate":0.16666666666666666,"n":186,"predicted_mean":0.3682191231797183},{"bin":[0.4,0.5],"empirical_rate":null,"n":0,"predicted_mean":null},{"bin":[0.5,0.6000000000000001],"empirical_rate":null,"n":0,"predicted_mean":null},{"bin":[0.6000000000000001,0.7000000000000001],"empirical_rate":null,"n":0,"predicted_mean":null},{"bin":[0.7000000000000001,0.8],"empirical_rate":null,"n":0,"predicted_mean":null},{"bin":[0.8,0.9],"empirical_rate":null,"n":0,"predicted_mean":null},{"bin":[0.9,1],"empirical_rate":null,"n":0,"predicted_mean":null}]},"trained_at":"2026-05-21T12:03:21.503969Z","_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."}}