"""Page 4: Epistemic Integrity — "Can we trust what we know?" Live sections: - Confidence calibration (from claim-index via vital signs) - Cascade coverage (from audit_log stage='cascade') - Review quality (from review_records table) Placeholder sections: - Multi-model agreement (needs model_evals table) - Belief staleness (needs cascade tracking to give it meaning) - Divergence tracking (needs divergence events) """ import json from datetime import datetime from shared_ui import render_page def render_epistemic_page(vital_signs: dict, now: datetime) -> str: """Render the Epistemic Integrity page.""" vs_conf = vital_signs.get("confidence_distribution", {}) total_claims = sum(vs_conf.values()) if vs_conf else 0 # Confidence calibration table conf_rows = "" for level in ["proven", "likely", "experimental", "speculative"]: count = vs_conf.get(level, 0) pct = round(count / total_claims * 100, 1) if total_claims else 0 conf_rows += f'{level}{count}{pct}%' body = f"""
Confidence Calibration
{conf_rows}
LevelClaimsShare
Total claims: {total_claims}

Confidence Distribution

Cascade Coverage
Loading cascade data...
Review Quality
Loading review data...
Multi-Model Agreement
Multi-model agreement rate requires the model_evals table.
Blocked on: model_evals table creation (Theseus 2 Phase 3)
Current eval models: Haiku (triage), GPT-4o (domain), Sonnet/Opus (Leo).
Agreement tracking needs per-model verdicts stored separately.
Belief Staleness
Belief staleness scan will compare belief file depends_on frontmatter
against claim merged_at timestamps.
Ready to implement once cascade tracking accumulates data
""" scripts = f"""""" return render_page( title="Epistemic Integrity", subtitle="Can we trust what we know?", active_path="/epistemic", body_html=body, scripts=scripts, timestamp=now.strftime("%Y-%m-%d %H:%M UTC"), )