{"_cache_age_seconds":781.5,"_cache_source":"memory","_cached":true,"actionable_backend_issues":[{"count":1,"detail":"monthly report missing narrative_summary despite ANTHROPIC_API_KEY being set. Check routes/report_narrative.py: model availability, prompt size, or 25s timeout. Without the narrative, the CBRE/JLL gap claim weakens \u2014 we sell freshness + license, but they sell the analyst voice in the prose.","issue":"report_no_narrative:monthly","url":"/api/v1/reports/monthly"},{"count":240,"detail":"240 of 240 brain-spec/* branches are pointed at by no OPEN PR \u2014 finished work the janitor never deleted. Spec branch names are a pure function of the item, so each leftover whose PR closed UNMERGED is a permanent 422 'Reference already exists' on that item's next re-file (prop #100049 / PR #1647, 2026-09-17: 92 of 205 were in exactly that state). Oldest few: brain-spec/agenda-100094-data-coverage-311-dcpi-markets-across-7-live-i, brain-spec/agenda-100095-reliability-brain-finding-frontend-endpoint-s, brain-spec/agenda-100096-reliability-brain-finding-brain-pattern-actin. Fix: confirm brain_pr_opener._delete_pr_branch still runs on close, then sweep the existing leftovers.","issue":"closed_brain_prs_leave_branches","url":"https://github.com/azmartone67/dchub-backend/branches/all?query=brain-spec"},{"count":207,"detail":"URL pattern '/js/dchub-webmcp.js' returned 404 207 times recently. Likely a frontend/backend route mismatch (e.g. /facility/<slug> vs /facilities/<slug>). Auto-fix idea: add a route alias on the backend OR fix the frontend caller. Verify with: curl -i https://dchub.cloud/js/dchub-webmcp.js","issue":"repeated_404_pattern","url":"/js/dchub-webmcp.js"},{"count":202,"detail":"URL pattern '/js/dchub-nav.js' returned 404 202 times recently. Likely a frontend/backend route mismatch (e.g. /facility/<slug> vs /facilities/<slug>). Auto-fix idea: add a route alias on the backend OR fix the frontend caller. Verify with: curl -i https://dchub.cloud/js/dchub-nav.js","issue":"repeated_404_pattern","url":"/js/dchub-nav.js"},{"count":138,"detail":"URL pattern '/api/v1/oilgas/search' returned 404 138 times recently. Likely a frontend/backend route mismatch (e.g. /facility/<slug> vs /facilities/<slug>). Auto-fix idea: add a route alias on the backend OR fix the frontend caller. Verify with: curl -i https://dchub.cloud/api/v1/oilgas/search","issue":"repeated_404_pattern","url":"/api/v1/oilgas/search"},{"count":0,"detail":"0/46218 auto-trial key(s) reached a REAL SIGNUP (0.0%, floor 20%) in the 8-37d cohort. 42246 were USED by an agent and 0 reached a paid tier. \u2605The gap between 42246 used and 0 signed up is the whole problem: check_mcp_conversion_stale counts the USED number toward 'conversions', so the funnel reads healthy on agents retrying with a free key nobody paid for. auto_trial.py promised this detector in May and it was never written, so the 0.08% fix has gone unmeasured for three months.","issue":"auto_trial_signup_rate_low","url":"auto_trial_keys: minted 8-37d ago"},{"count":1234,"detail":"High-volume bot identified: 1234 calls over 5 days (246.8/day avg). Suggested: monitor. UA: dchub-qa-readonly. Full whale list at /api/v1/bots/whales.","issue":"enterprise_bot_present","url":"mcp_tool_calls: ip_hash=ca46aa0b5d1a"},{"count":1,"detail":"Page / missing brand css \u2014 add `<link rel=\"stylesheet\" href=\"/static/dchub-brand.css\">` before </head>. After r33-I unification this page is a regression.","issue":"page_brand_uniformity","url":"/"},{"count":20,"detail":"DC Hub appears in only 20.0% of Claude responses to data-center research queries (7-day mean over 7 snapshots; latest 20.0%). Auto-triggering DC Hub Media press cycle won't fix this \u2014 needs direct outreach to AI platforms (see /api/v1/media/winback-pitches).","issue":"citation_score_below_30pct","url":"/api/v1/citations/score"},{"count":374,"detail":"Page 'Capacity Source (legacy stub)' content hash changed AND size moved by 375% (9,295 \u2192 44,117 bytes). Could be legit content update OR a stealth regression (removed schema block, dropped rows, broken template). Inspect.","issue":"page_content_drift:/pocket-listings","url":"/pocket-listings"},{"count":229,"detail":"Operator 'Amazon Web Services' has 229 facilities tracked but 58% missing power_mw and 17% missing market. Discovery should prioritize this operator. Closes the per-operator profile gap vs DCHawk/dcByte.","issue":"operator_profile_gap:Amazon Web Services","url":"/operators/amazon-web-services"},{"count":211,"detail":"Operator 'Microsoft' has 211 facilities tracked but 76% missing power_mw and 22% missing market. Discovery should prioritize this operator. Closes the per-operator profile gap vs DCHawk/dcByte.","issue":"operator_profile_gap:Microsoft","url":"/operators/microsoft"},{"count":193,"detail":"Operator 'Enzu' has 193 facilities tracked but power_mw not expected (colocation operator) and 100% missing market. Discovery should prioritize this operator. Closes the per-operator profile gap vs DCHawk/dcByte.","issue":"operator_profile_gap:Enzu","url":"/operators/enzu"},{"count":1145,"detail":"Top 5 tools generated 1145 paywall signals in 7 days: get_interconnection_queue=559, analyze_site=271, get_market_intel=179, get_grid_intelligence=86, ai_capacity_index=50. Shift vs prior 7d: top-5 set changed (+ai_capacity_index / -get_energy_prices). If conversions are low overall, focus paywall-response improvements on THESE tools first. Phase DDDDD auto-trial flow targets exactly this set (FREE \u2192 IDENTIFIED gate).","issue":"mcp_funnel_concentration_top5","url":"/api/v1/mcp/funnel"},{"count":18,"detail":"Tenant coverage on top-50 facilities is only 18% (9/50). Per-building tenant data is DCHawk's main remaining moat. Invest in SEC filings + CRE comps + news NLP ingest pipeline OR POST /api/v1/tenants/ingest with structured rows.","issue":"tenant_coverage_thin","url":"/api/v1/tenants/coverage"},{"count":41,"detail":"MCP volume regressed: last 7 days = 46,544 calls, baseline 28-day weekly avg = 80,025 calls (41.8% drop). EEEEE anon grace mode should recover this \u2014 check /api/v1/grace/stats for adoption. If recovery doesn't fire within 7 days, the FREE tier may need further loosening OR the grace cap raised from 5/24h to 10/24h.","issue":"mcp_volume_regression","url":"/api/v1/mcp/funnel"},{"count":27,"detail":"27 LinkedIn posts published in 7d but engagement_fetched_at last advanced 2026-10-17 14:44:21.347183+00:00 \u2014 the media loop can't learn what lands. fetch_linkedin_engagement breaks its whole batch on the first 403; token needs r_organization_social (+ r_organizational_social_feed for impressions). Trigger POST /api/linkedin/engagement-sync and read `reason` to confirm.","issue":"linkedin_engagement_readback_stale","url":"table:linkedin_posts"},{"count":1,"detail":"Gated endpoint `/api/v1/market-brief/all` returns a gated/teaser body (matched one of ['_gated', '_locked_fields', '_preview_only', '_teaser', '_upgrade_cta', '_upgrade_hint', 'tier_required', 'total_available']) but is MISSING: agent_action(claim_free_key). A gated response must include BOTH an `agent_action` block carrying `claim_free_key` (so AI agents have a machine-readable upgrade path) AND an `email_capture` hook (so the human conversion CTA is present). Add both to the soft-paywall payload for this surface.","issue":"gated_endpoint_missing_coaching","url":"/api/v1/market-brief/all"},{"count":9,"detail":"pypi package `dchub-mcp-helper` 7-day installs dropped 60.9% WoW (23\u21929). Either an upstream registry issue, a regression in the latest release, or competitor mindshare shift. Investigate before assuming it's noise.","issue":"package_install_velocity_drop","url":"pypi:dchub-mcp-helper"},{"count":3,"detail":"3 of 27 registry listings have not been re-scraped in >72h (crawler SLA is 3 days): klavis_ai(597h), continue_dev(597h), dxt_so(597h). Per-row staleness is invisible to the MAX()-based flywheel check \u2014 a single fresh row makes the aggregate look healthy while listed registries rot (glama/smithery went ~20d unverified this way). Kick POST /api/v1/admin/mcp-presence/crawl.","issue":"mcp_presence_listing_stale","url":"mcp_presence_listings"},{"count":2,"detail":"OWNER ACTION \u2014 2 third-party registry listing(s) show a stale tool count vs our live server. These pages are edited from the owner's login on each directory; no code change clears them. cline: lists 7 tools, canon 94 \u2014 update at https://api.cline.bot/v1/mcp/marketplace (owner/submit page: https://github.com/cline/mcp-marketplace/issues/1823); mcp_so_secondary: lists 79 tools, canon 94 \u2014 update at https://mcp.so/servers/dchub-backend (owner/submit page: https://mcp.so/submit). The finding clears on the next presence crawl after the listing is updated.","issue":"mcp_presence_drift_uncorrected","url":"mcp_presence_listings"},{"count":10,"detail":"10 paying customers were sent the automated activation nudge 7+ days ago and are STILL at zero calls \u2014 the automated motion failed. The loop escalated them; they need a human touch (call / personal note), not another email.","issue":"customer_nudge_failed_needs_human","url":"/api/v1/admin/customer-white-glove/state"},{"count":1,"detail":"`/vs/dcknowledge` returns 404 Not Found. Either the route was renamed/removed but a nav link still points at it, or CF Pages _routes.json doesn't include this prefix. Audit nav JS + _redirects.","issue":"internal_link_404","url":"/vs/dcknowledge"},{"count":37,"detail":"Scan hit 25s budget with 37 detectors still running (completed 115). Slowest are likely HTTP self-call probes. Abandoned: check_llm_error_body_discarded, check_unsafe_db_conn_pattern, check_mcp_funnel_leak, check_glama_listing_health, check_facility_duplicate_clusters, check_orphaned_scheduler_functions, check_cron_endpoint_unscheduled, check_heartbeat_surfaces_stale","issue":"consistency_radar_scan_partial","url":"/api/v1/brain/consistency-radar"},{"count":1,"detail":"add DCGI scoring for Colorado (ingest gas_pipelines coverage for CO so it gets an access + cost score)","issue":"coverage_gap_dcgi:CO","url":"dchub://coverage/dcgi"},{"count":1,"detail":"add DCGI scoring for Louisiana (ingest gas_pipelines coverage for LA so it gets an access + cost score)","issue":"coverage_gap_dcgi:LA","url":"dchub://coverage/dcgi"},{"count":1,"detail":"add DCGI scoring for Oklahoma (ingest gas_pipelines coverage for OK so it gets an access + cost score)","issue":"coverage_gap_dcgi:OK","url":"dchub://coverage/dcgi"},{"count":561,"count_kind":"item_count","detail":"PRODUCT GAP (tool): callers asked for `get_interconnection_queue` 561 time(s) (28 distinct callers) and the product had no answer (paywall hit \u2014 the tool exists but is gated). Source: mcp_upgrade_signals 7d \u2014 a count of the callers' own requests, not an opinion. Instrument as of 2026-10-24 02:14:05.814423. Board: /api/v1/admin/agentic/unmet-demand","issue":"plead_product_gap:get_interconnection_queue","url":"dchub://product-lead/gap/tool/get_interconnection_queue"},{"count":272,"count_kind":"item_count","detail":"PRODUCT GAP (tool): callers asked for `analyze_site` 272 time(s) (272 distinct callers) and the product had no answer (paywall hit \u2014 the tool exists but is gated). Source: mcp_upgrade_signals 7d \u2014 a count of the callers' own requests, not an opinion. Instrument as of 2026-10-24 02:14:05.814423. Board: /api/v1/admin/agentic/unmet-demand","issue":"plead_product_gap:analyze_site","url":"dchub://product-lead/gap/tool/analyze_site"},{"count":1,"detail":"Shell #52 audit-closure registry SH52-029 (domain=surfaces, severity=H, effort=M) \u2014 its live checker is FAILING. Evidence + closure board: /admin/audit-closure","issue":"audit_H Backend PINNED lags canon \u2192 /agent, /AGENTS.md and the worker card all serve 15,700+/1,600+","url":"dchub://audit/SH52-029"},{"count":1,"detail":"Shell #52 audit-closure registry SH52-061 (domain=media, severity=H, effort=S) \u2014 its live checker is FAILING. Evidence + closure board: /admin/audit-closure","issue":"audit_H Known-false press release still live: 'NESO 609 GW = 35% of all US queued capacity' (NESO is the GB operator)","url":"dchub://audit/SH52-061"},{"count":1,"detail":"Shell #52 audit-closure registry SH52-003 (domain=heal, severity=M, effort=M) \u2014 its live checker is FAILING. Evidence + closure board: /admin/audit-closure","issue":"audit_M generator-inventory-ingest red 274h: synchronous 180s curl against a >3-minute admin ingest, weekly cron means one ...","url":"dchub://audit/SH52-003"},{"count":1,"detail":"Shell #52 audit-closure registry SH52-055 (domain=inventory, severity=M, effort=S) \u2014 its live checker is FAILING. Evidence + closure board: /admin/audit-closure","issue":"audit_M generator-inventory-ingest failed its last scheduled run (curl_fail) \u2014 weekly with no retry, and the deadman board ...","url":"dchub://audit/SH52-055"},{"count":1,"detail":"Shell #52 audit-closure registry SH52-084 (domain=backend, severity=M, effort=S) \u2014 its live checker is FAILING. Evidence + closure board: /admin/audit-closure","issue":"audit_M /api/v1/reveal-* partner feeds still Rule-#3 edge-cached (known-open bypass never applied)","url":"dchub://audit/SH52-084"},{"count":1,"detail":"QA super-user board finding mcp::paid::beats-anon::get_market_intel#5c8a00 (surface=mcp, verdict=RED, severity=critical failing for 91.4h). This is an OUTSIDE-IN probe of dchub.cloud, so it reflects what a real caller sees. Board (canary-verified, generated 2026-10-24T01:06:59.063522+00:00): /admin/qa-superuser","finding_key":"mcp::paid::beats-anon::get_market_intel#5c8a00","fix_claim_metric":"qa:mcp::paid::beats-anon::get_market_intel#5c8a00 verdict","issue":"qa_critical A paying key receives FEWER data fields than an anonymous caller (16 vs 18)","url":"dchub://qa-superuser/mcp::paid::beats-anon::get_market_intel#5c8a00"}],"actionable_frontend_issues":[],"cache_needs_purge":false,"computed_at":"2026-10-24T04:28:28.407565Z","findings":{"api_contract_scan":{"details":"OK: 6 API + 24 content-type contracts honored","ok":true},"backend_cron_scan":{"details":"OK: backend cron health green (dcpi, auto_press)","ok":true},"cdn_cache_staleness":{"details":"OK: age=2377s within s-maxage(300)+swr(86400)=86700s; cache-control=public, max-age=60, s-maxage=300, stale-while-revalidate=86400 [cf=HIT]","ok":true},"data_freshness_radar":{"details":"OK: data-freshness radar green \u2014 20 domains checked","ok":true},"feed_diversity_check":{"details":"OK: top 8 categories spread = {'alert': 2, 'news': 2, 'press_release': 2, 'testimonial': 1, 'press': 1}","ok":true},"funnel_health_scan":{"details":"OK: funnel healthy \u2014 4355 paywall_hit, no critical leak","ok":true},"html_quality_scan":{"details":"0 HTML quality issues across 0 pages: {}","ok":true},"internal_links_check":{"details":"BROKEN LINKS: 1 of 30 homepage hrefs \u2014 [('/cf-fonts/v/instrument-sans/5.2.8/latin/wght/normal.woff2', 404)]","ok":false},"jsonld_coverage_check":{"details":"OK: every probed page has schema.org JSON-LD","ok":true},"linked_asset_scan":{"details":"OK: all linked assets reachable + correct MIME across 14 probed pages","ok":true},"sitemap_404_check":{"details":"OK: 0/25 sitemap URLs return 4xx/5xx","ok":true}},"scan_completeness":{"complete":false,"gap_counts":{"abandoned":36,"crashed":0,"degraded":2,"detector_errors":0,"radar_errors":0,"timed_out":0},"gaps":{"abandoned":["check_llm_error_body_discarded","check_unsafe_db_conn_pattern","check_mcp_funnel_leak","check_glama_listing_health","check_facility_duplicate_clusters","check_orphaned_scheduler_functions","check_cron_endpoint_unscheduled","check_heartbeat_surfaces_stale","check_pricing_page_placeholder_content","check_tool_signal_to_conversion_leak","check_social_publish_silent_failure","check_cf_account_health","check_cf_kv_namespace_pressure","check_trial_to_paid_stagnation","check_brain_memory_empty","check_addressable_demand_unconverted","check_package_metadata_freshness","check_cf_pages_deploy_stuck","check_slow_request_ratio","check_render_pipeline_blocked","check_render_flapping","check_404_spike","check_neon_replication_lag","check_signup_drop_off_step","check_detector_runtime_distribution","check_stripe_webhook_lag","check_canonical_redirect_loops","check_gunicorn_worker_age","check_facility_dedupe_collisions","check_paid_user_zero_value_tools","check_approved_without_pr_stale","check_mcp_health","check_honesty_reconciliation","check_actuator_lane_silent","check_approved_backlog_unpublished","check_failsoft_metric_null_streak"],"degraded":["check_findings_deferred_over_7d","check_session_upgrade_silenced"]},"non_radar_complete":true,"radar_completed":["check_ai_citation_new_landing","check_ai_citations_stale_v2","check_ai_platform_crawl_drop","check_approve_directive_waf_blocked","check_auto_trial_conversion","check_auto_trial_conversion_rate","check_auto_trial_signal_mint_mismatch","check_autopilot_action_unverified","check_autopilot_verifier_backlog","check_backend_pool_health","check_blueprint_registration_silent_failure","check_brain_evolution_jobs_alive","check_brain_lesson_gate_reaches_benched_patterns","check_brain_lessons_families_are_findings","check_brain_lessons_see_every_outcome_kind","check_brain_public_pages_are_fast_qa_watched","check_brand_surface_dormant","check_canonical_floor_exceeds_live","check_citation_score_dropped","check_closed_brain_prs_leave_branches","check_competitor_announcement","check_conversion_rate_floor","check_coverage_gap_canada","check_cron_collisions","check_cron_coverage","check_cron_freshness","check_cron_if_mismatched","check_cross_surface_value_drift","check_csp_drift","check_csp_violation_reports","check_customer_activation_health","check_data_freshness_sla_breach","check_db_pool_pressure","check_dchub_media_press_silent","check_dcpi_partial_recompute","check_dcpi_ssr_cross_tier","check_dead_internal_links","check_dedup_backlog_growing","check_deploy_queue_churn","check_developers_funnel_dead","check_discovery_stalled","check_enterprise_bot_present","check_env_drift","check_event_submission_pending","check_external_mentions_dropoff","check_facility_count_stagnant","check_facility_geo_mismatch","check_founding_customer_not_welcomed","check_frontend_critical_endpoints","check_funnel_adjacent_step_collapse","check_funnel_step_collapse","check_gated_endpoint_coaching_missing","check_growth_sentinel","check_inline_script_truncated","check_inspector_brief_unprocessed_recipes","check_iso_metric_dropped","check_llms_txt_contract","check_market_deep_dive_stale","check_mcp_conversion_stale","check_mcp_demand_gap","check_mcp_dormant_agents","check_mcp_funnel_concentration","check_mcp_growth_declining","check_mcp_presence_stale","check_mcp_tool_description_drift","check_mcp_tool_sunset_candidate","check_mcp_volume_regression","check_measurement_definition_changed","check_media_and_yield_health","check_media_topic_unaddressed","check_monthly_trend_unsent_3d","check_multi_cloud_failover_broken","check_operator_profile_gap","check_outbound_distribution_health","check_package_install_velocity_drop","check_page_brand_drift","check_page_brand_uniformity","check_page_content_drift","check_pattern_proposal_candidates","check_paywall_capacity_gating","check_paywall_click_leak","check_pocket_high_mover","check_press_public_surface_stale","check_press_repetition","check_press_stale_vs_citations","check_repeated_404_patterns","check_report_content_drift","check_required_env_vars","check_rest_endpoint_leakage","check_rest_gate_hits","check_review_gate_never_disagrees","check_review_lane_unreachable","check_schema_drift","check_schema_org_coverage_low","check_shadowed_routes","check_shipped_product_has_media_coverage","check_site_sentinel","check_source_of_truth_declining","check_spare_capacity_status","check_stale_stored_slug_404s","check_stored_slug_resolves","check_surface_health_critical","check_tenant_coverage_thin","check_tier_consistency","check_tier_dict_missing_keys","check_trial_taste_abuse","check_unmarked_population_shift","check_upgrade_pool_grown","check_weekly_mint_spike","check_winback_pitches_unsent","check_work_plan_unclassified_crowds_top","check_worker_version_drift","check_zone_worker_version_drift"]}}
