{"generated_at":"2026-05-23T20:25:48.024728Z","honest_caveats":["Active-learning value depends on humans actually labelling. If labels_submitted is 0 the loop is plumbed but idle.","simulated_f1_lift uses PROXY labels (incident-table positives within +/-3 days, else negative), not human labels. It is an optimistic estimate — real human labels on uncertain days are noisier and the AL queue surfaces days the incident table is silent on. Treat the lift as 'is the queue surfacing learnable rows', not a promotion signal."],"loop_note":"The loop is wired end to end (queue -> submit-label -> aggregate -> promote -> retrain) but 0 human labels have been submitted. Until reviewers label candidates at /atlas/active-learning the loop is idle by design — value depends on humans actually labelling.","loop_state":"plumbed_idle","schema":"voidly-sentinel-al-loop-status/v1","simulated_f1_lift":{"augmented_f1_median":0.8571428571428571,"baseline_f1_median":0.8695652173913043,"f1_mean_delta":-0.0062,"f1_median_delta":-0.0124,"generated_at":"2026-05-23T04:30:02.036276+00:00","simulated_with_top_n_candidates":28},"simulation_detail":{"augmented":{"corpus_rows":4265,"f1_mean":0.7047597154606122,"f1_median":0.8571428571428571,"n_countries":127},"baseline":{"corpus_rows":4237,"f1_mean":0.7109360224005077,"f1_median":0.8695652173913043,"n_countries":127},"candidates_usable":28,"caveats":["PROXY LABELS, NOT HUMAN LABELS. Positives come from the incidents table within +/-3 days of the candidate date; everything else is labeled negative. This is optimistic — the AL queue surfaces UNCERTAIN days precisely where the incident table is silent.","Only 28 rows added over a 4237-row corpus; the LOCO delta is small and partly run-to-run noise.","Simulated lift estimates whether the queue surfaces learnable rows. It is NOT a promotion signal — real retrain still goes through the v3.3 dual-holdout gate."],"exists":true,"generated_at":"2026-05-23T04:30:02.036276+00:00","lift":{"f1_mean_delta":-0.0062,"f1_median_delta":-0.0124},"per_country_movers":[{"country":"HK","delta":0.2,"f1_after":1,"f1_before":0.8},{"country":"BH","delta":0.1667,"f1_after":0.6667,"f1_before":0.5},{"country":"CN","delta":0.1503,"f1_after":0.4444,"f1_before":0.2941},{"country":"TH","delta":0.0855,"f1_after":0.2105,"f1_before":0.125},{"country":"AE","delta":0.0808,"f1_after":0.4444,"f1_before":0.3636},{"country":"MA","delta":0.0769,"f1_after":0.2308,"f1_before":0.1538},{"country":"JO","delta":0.0731,"f1_after":0.2667,"f1_before":0.1935},{"country":"SY","delta":0.0473,"f1_after":0.5806,"f1_before":0.5333},{"country":"US","delta":0.0458,"f1_after":0.8235,"f1_before":0.7778},{"country":"AZ","delta":0.0419,"f1_after":0.15,"f1_before":0.1081}],"proxy_label_breakdown":{"incident_table_negative":26,"incident_table_positive":2},"queue_size":50,"status":"ok"},"stages":{"1_queue":{"endpoint":"/v1/sentinel/active-learning-queue","queue_size":124},"2_labels_submitted":{"audit_log_exists":false,"count":0,"distinct_candidates":0,"endpoint":"/v1/sentinel/active-learning-submit-label"},"3_consensus":{"aggregator":"aggregate-active-learning-labels.py","candidates_with_submissions":0,"consensus_reached":0,"consensus_threshold":null,"last_aggregated_at":null,"pending_consensus":0},"4_promoted_to_training":{"corpus":"labeled_incidents_v3.3.json","corpus_total_rows":4237,"promoted_rows":0,"promotion_script":"promote-al-labels-to-training.py"},"5_retrain":{"last_retrain_included_al_labels":null,"note":"Timestamp of the last corpus promotion — the most recent point at which a v3.3 retrain would have consumed active-learning labels. Null = no promotion has happened yet.","retrain_queue":{"active_learning_in_trigger":false,"al_new_labels_last_promotion":null,"al_rows_in_corpus":null,"note":"A retrain is queued. weekly-retrain.sh (cron 02:00 UTC Sun) consumes this file and deletes it after a successful retrain. If 'active-learning' is in triggers, the next retrain will learn from promoted human-consensus labels.","queued":true,"queued_at":"2026-05-22T08:00:03.058507+00:00","scheduled_for":"next 02:00 UTC weekly cron","trigger":"drift","triggers":["drift"]}}},"_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."}}