feat(dashboard): Repos page with coverage map; expose last_sbom_at on RepoRead
- RepoRead schema: add last_sbom_at + sbom_source fields (already in model,
now surfaced in API response)
- repos.md: new dashboard page — KPI row (total/domains/ingested/gaps),
domain-grouped coverage map with SBOM/EP/TD chips, per-repo table with
gap highlighting, domain filter + gap-only toggle, ingest how-to section
- observablehq.config.js: add Repos after Domains in nav
Coverage state: 3 repos registered (custodian×1, railiance×2);
2 ingested (the-custodian + railiance-hosts), 1 gap (railiance-bootstrap
— infra-only, no lockfile, expected)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>