codemap 0.0.17 — a library's entry point, a filter that declares itself, a diff that judges the package

Three defects, all found by the dogfood target in one message while verifying a
measurement of ours on their own tree (issue #19). Schema 0.13, unchanged for the sixth
release: the same tree built by 0.0.16 and 0.0.17 from PyPI is byte-identical in nodes
and edges, only provenance differs, so a pin bump re-extracts nothing.

- R1-C50: `entry_points` required in-degree zero across the whole graph, so a library's
  public API was disqualified by being used from tests — and the deep tier, resolving
  more, answered emptier. In-degree is now counted within the root, an entry names the
  outside roots that enter it, and the empty answer says which kind of empty it is.
- R1-C51: the route-grade filter answered `[]` without saying a filter had run. The
  envelope now carries a `filter` block always, with the composition of the unfiltered
  answer, so an empty result reads as "called, only through routes you excluded".
- R1-C52: `diff` counted consumer-root public symbols as API — 40 of 47 in their release
  gate were test functions. It compares one root now and names what it did not judge.

Verified from PyPI, both versions on one tree: "0 of 0 entry points" -> "1 of 1";
a consumer's new public function "1 added" -> "0 added" with the not-judged line; the
filter block absent -> present.