matched_tools claimed every surface tool matched even when entries were registry stubs with no live MCP metadata, and unmatched_tools was hardcoded to 0. Coverage now excludes stubs from matched_tools, reports them as unmatched, and a registry JSON parse failure warns instead of silently producing a stub-only snapshot. The schema catalog policy invariant is relaxed to match the honest accounting.