"""Page 2: Knowledge Health — "What do we know and how good is it?" Renders: claims by domain, Herfindahl index, evidence freshness, orphan ratio, link density, confidence distribution, extraction yield. Data sources: /api/vital-signs, /api/herfindahl, /api/extraction-yield-by-domain, /api/domains, claim-index (cached). """ import json from datetime import datetime from shared_ui import render_page def render_health_page(vital_signs: dict, domain_breakdown: dict, now: datetime) -> str: """Render the Knowledge Health page.""" # --- Vital signs data --- vs_orphan = vital_signs.get("orphan_ratio", {}) orphan_ratio_val = vs_orphan.get("ratio") orphan_color = {"healthy": "green", "warning": "yellow", "critical": "red"}.get(vs_orphan.get("status", ""), "") orphan_display = f"{orphan_ratio_val:.1%}" if orphan_ratio_val is not None else "—" vs_linkage = vital_signs.get("linkage_density") or {} linkage_display = f'{vs_linkage.get("avg_outgoing_links", "—")}' cross_domain_ratio = vs_linkage.get("cross_domain_ratio") cross_domain_color = "green" if cross_domain_ratio and cross_domain_ratio >= 0.15 else ( "yellow" if cross_domain_ratio and cross_domain_ratio >= 0.05 else "red" ) if cross_domain_ratio is not None else "" vs_fresh = vital_signs.get("evidence_freshness") or {} fresh_display = f'{vs_fresh.get("median_age_days", "—")}' if vs_fresh.get("median_age_days") else "—" fresh_pct = vs_fresh.get("fresh_30d_pct", 0) vs_conf = vital_signs.get("confidence_distribution", {}) # Domain activity stagnant = vital_signs.get("domain_activity", {}).get("stagnant", []) active_domains = vital_signs.get("domain_activity", {}).get("active", []) claim_status = vital_signs.get("claim_index_status", "unavailable") # Domain breakdown table domain_rows = "" for domain, stats in sorted(domain_breakdown.items(), key=lambda x: x[1].get("knowledge_prs", 0), reverse=True): if stats.get("knowledge_prs", 0) > 0: top_contribs = ", ".join(f'{c["handle"]} ({c["claims"]})' for c in stats.get("contributors", [])[:3]) domain_rows += f"""
| Domain | Knowledge PRs | Total PRs | Top Contributors |
|---|---|---|---|
| No domain data | |||
Domains with no PR activity in 7 days: {", ".join(stagnant)}