Files
Andrey Kumanyaev c25d306baa perf(graph,coverage): move coverage enrichment out of nodes.meta into a typed sidecar
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.
2026-06-02 09:06:42 +02:00
..