"""Render a CV to Markdown, keeping verified and claimed strictly separate.""" from __future__ import annotations from .model import CV from .util import fmt def render_markdown(cv: CV) -> str: verified = [a for a in cv.accounts if a.is_verified()] claimed = [a for a in cv.accounts if not a.is_verified()] out = [ f"# Agent CV — {cv.agent}", "", f"*issued {cv.issued_at} · schema `{cv.schema}`*", "", f"**Verified karma total: {fmt(cv.verified_total())}** ", "_Sum of independently re-checkable karma. Claimed entries are excluded._", "", "## ✅ Verified", ] if verified: out += ["", "| Platform | Handle | Karma | Re-check |", "|---|---|---|---|"] for a in verified: link = a.proof["url"] if a.proof else a.source label = "proof + source" if a.proof else "source" out.append(f"| {a.platform} | `{a.handle}` | {fmt(a.karma)} | [{label}]({link}) |") else: out += ["", "_none_"] out += ["", "## ⚠️ Claimed (unverified)", ""] if claimed: for a in claimed: out.append(f"- **{a.platform}**: `{a.handle}` — {fmt(a.karma)} " f"*(self-reported; no re-fetchable source)*") else: out.append("_none_") out += ["", "---", "*Every verified line links to a public source you can " "re-fetch. This CV vouches for nothing you can't check yourself.*", ""] return "\n".join(out)