{"generated_at":"2026-08-19T19:30:54.490422Z","schema":"voidly-domain-drift-info/v1","sidecar":{"algorithm":"HDBSCAN(min_cluster_size=5, metric=euclidean, after StandardScaler)","centroid_drift_flag_threshold":1,"features_used":["log_n","avg_block_rate","std_block_rate","n_countries_blocking","asn_unique_log","source_diversity","pct_dns_block","pct_tcp_reset","pct_blockpage","pct_tls_reset","pct_isp_outage","cat_NEWS","cat_ANON","cat_GRP","cat_PORN","cat_MSG","cat_SRCH","cat_OTHER"],"generated_at":"2026-08-16T04:00:06.178785Z","min_cluster_size":5,"n_clusters_prev":39,"n_clusters_this":34,"n_domains_prev":681,"n_domains_this":599,"n_high_drift_clusters":5,"n_new_clusters":2,"notes":["Per-domain HDBSCAN drift surface. Variable-density clustering (HDBSCAN) over the last-28-day feature vector for every domain with >= 10 measurements.","New clusters this week (label IDs without a matched centroid in last week's clustering) = novel blocking patterns.","Centroid drift (matched clusters with > 1.0 sigma Euclidean shift) = existing patterns intensifying.","Per-domain drift_score = L2 distance between this-week and last-week feature vectors in this-week's standardized space. Domains absent from one week get status='new_this_week' / 'dropped_this_week' instead of a score.","ORTHOGONAL to /v1/anomaly/dbscan/{cc} (per-country DBSCAN, AUC 0.65). This is per-DOMAIN HDBSCAN drift — different axis, different model, different surface."],"paper":"McInnes et al. 2017 — arXiv:1705.07321","prev_week_end":"2026-08-09","schema":"voidly-domain-drift-hdbscan/v1","this_week_end":"2026-08-16","version":"v1","window_days":28},"summary":{"n_clusters_prev":39,"n_clusters_this":34,"n_domains_this":599,"n_high_drift_clusters":5,"n_new_clusters":2,"prev_week_end":"2026-08-09","this_week_end":"2026-08-16"},"data_as_of":"2026-08-16T04:00:06.216744Z","data_age_hours":87.5,"data_stale":true,"data_source_artifact":"/opt/voidly-ai/models/domain_drift_hdbscan_v1.json","data_freshness_note":"Any served_at/generated_at above is when this RESPONSE was assembled, not when the model ran. This artifact was last written 2026-08-16T04:00:06.216744Z (3.6 days ago). Cite data_as_of.","_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."}}