{"generated_at": "2026-10-03T23:56:40.288274Z", "schema": "voidly-domain-drift-info/v1", "sidecar": {"algorithm": "HDBSCAN(min_cluster_size=5, metric=euclidean, after StandardScaler)", "centroid_drift_flag_threshold": 1.0, "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-09-27T04:00:06.937354Z", "min_cluster_size": 5, "n_clusters_prev": 52, "n_clusters_this": 36, "n_domains_prev": 764, "n_domains_this": 644, "n_high_drift_clusters": 8, "n_new_clusters": 1, "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 \u2014 different axis, different model, different surface."], "paper": "McInnes et al. 2017 \u2014 arXiv:1705.07321", "prev_week_end": "2026-09-20", "schema": "voidly-domain-drift-hdbscan/v1", "this_week_end": "2026-09-27", "version": "v1", "window_days": 28}, "summary": {"n_clusters_prev": 52, "n_clusters_this": 36, "n_domains_this": 644, "n_high_drift_clusters": 8, "n_new_clusters": 1, "prev_week_end": "2026-09-20", "this_week_end": "2026-09-27"}, "data_as_of": "2026-09-27T04:00:06.960534Z", "data_age_hours": 163.9, "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-09-27T04:00:06.960534Z (6.8 days ago). Cite data_as_of."}