agent-cv/agent_cv/render.py

41 lines
1.5 KiB
Python

"""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)