c25d306baa
Change A, coverage domain (mirrors the churn sidecar 5d19188). Coverage %
+ stmt counts now persist in a typed coverage_enrichment table
(node_id PK + repo_prefix + coverage_pct/num_stmt/hit) via a new optional
CoverageEnrichmentWriter/Reader capability on both backends, with a
conformance case.
- The coverage enricher writes the sidecar (batched) and, on success,
strips the Meta stamps + skips the AddBatch so the node blob stays
lean; on a sidecar write failure it falls back to persisting Meta via
AddBatch so coverage is never lost.
- All six coverage readers (coverage_gaps, coverage_summary, health_score,
knowledge_gaps, inspections, replay_episode) now batch-load the sidecar
once via coverageByID() and read through coveragePctFrom(), which falls
back to Meta["coverage_pct"] for un-migrated DBs / capability-less
backends. EdgeCoveredBy edges (and their edge-level coverage_pct) are
unchanged.
Recompute-on-next-enrich migration; no destructive backfill. Tests:
conformance on both backends, enricher round-trips the sidecar (and
leaves no coverage in node Meta), and the coverage analyzers + the
enrich-coverage MCP path read it.