codegraph-brain 0.17.0__tar.gz → 0.19.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. codegraph_brain-0.19.0/.github/test-count-baseline +1 -0
  2. codegraph_brain-0.19.0/.release-please-manifest.json +3 -0
  3. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/CHANGELOG.md +43 -0
  4. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/CLAUDE.md +3 -2
  5. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/Makefile +15 -1
  6. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/PKG-INFO +17 -17
  7. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/README.md +16 -16
  8. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/architecture/HOW_IT_WORKS.md +8 -1
  9. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/architecture/diagrams/pipeline_flow.mermaid +8 -8
  10. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/how-to/MCP_REFERENCE.md +58 -0
  11. codegraph_brain-0.19.0/docs/plans/2026-09-09-graph-freshness.md +845 -0
  12. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-13-suggest-packages-design.md +7 -2
  13. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-09-05-annotation-graph-design.md +264 -24
  14. codegraph_brain-0.19.0/docs/specs/2026-09-09-graph-freshness-design.md +249 -0
  15. codegraph_brain-0.19.0/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +687 -0
  16. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/pyproject.toml +1 -1
  17. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/api/mcp_server.py +190 -14
  18. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/cli.py +210 -2
  19. codegraph_brain-0.19.0/src/cgis/core/freshness.py +38 -0
  20. codegraph_brain-0.19.0/src/cgis/core/generated.py +79 -0
  21. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/core/models.py +26 -1
  22. codegraph_brain-0.19.0/src/cgis/core/paths.py +54 -0
  23. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/_python_ast.py +119 -0
  24. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/_python_classes.py +23 -2
  25. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/_python_functions.py +202 -16
  26. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/_python_imports.py +15 -2
  27. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/python_extractor.py +311 -15
  28. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/pipeline.py +8 -1
  29. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/analysis/suggest_service.py +45 -7
  30. codegraph_brain-0.19.0/src/cgis/query/context/orphans.py +163 -0
  31. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/render/metrics.py +110 -27
  32. codegraph_brain-0.19.0/src/cgis/resolver/indices.py +461 -0
  33. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/resolver/symbols.py +94 -7
  34. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/storage/sqlite_store.py +340 -8
  35. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_annotation_calibration.py +77 -8
  36. codegraph_brain-0.19.0/tests/self_parsing/test_receiver_resolution.py +242 -0
  37. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_cli.py +471 -0
  38. codegraph_brain-0.19.0/tests/unit/test_freshness.py +340 -0
  39. codegraph_brain-0.19.0/tests/unit/test_generated.py +174 -0
  40. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_mcp_server.py +118 -0
  41. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_metrics.py +253 -0
  42. codegraph_brain-0.19.0/tests/unit/test_name_load_positions.py +128 -0
  43. codegraph_brain-0.19.0/tests/unit/test_orphans.py +327 -0
  44. codegraph_brain-0.19.0/tests/unit/test_paths.py +58 -0
  45. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_pipeline.py +23 -0
  46. codegraph_brain-0.19.0/tests/unit/test_resolver.py +2387 -0
  47. codegraph_brain-0.19.0/tests/unit/test_resolver_indices.py +353 -0
  48. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_sqlite_store.py +171 -0
  49. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_suggest_service.py +103 -0
  50. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/uv.lock +20 -10
  51. codegraph_brain-0.17.0/.github/test-count-baseline +0 -1
  52. codegraph_brain-0.17.0/.release-please-manifest.json +0 -3
  53. codegraph_brain-0.17.0/src/cgis/resolver/indices.py +0 -203
  54. codegraph_brain-0.17.0/tests/unit/test_resolver.py +0 -1266
  55. codegraph_brain-0.17.0/tests/unit/test_resolver_indices.py +0 -190
  56. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.claude-plugin/marketplace.json +0 -0
  57. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.gitattributes +0 -0
  58. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.github/workflows/autodoc.yml +0 -0
  59. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.github/workflows/ci.yml +0 -0
  60. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.github/workflows/guardian.yml +0 -0
  61. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.github/workflows/pr-title.yml +0 -0
  62. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.github/workflows/release-please.yml +0 -0
  63. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.gitignore +0 -0
  64. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.pre-commit-config.yaml +0 -0
  65. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/.python-version +0 -0
  66. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/CONTRIBUTING.md +0 -0
  67. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/LICENSE +0 -0
  68. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/PRIVACY.md +0 -0
  69. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/CURATION.md +0 -0
  70. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/calibration.jsonl +0 -0
  71. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
  72. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
  73. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
  74. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
  75. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
  76. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
  77. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
  78. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-directive-rows.jsonl +0 -0
  79. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-prohibition-rows.jsonl +0 -0
  80. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-122.yaml +0 -0
  81. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-140.yaml +0 -0
  82. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-141.yaml +0 -0
  83. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-142.yaml +0 -0
  84. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-143.yaml +0 -0
  85. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-144.yaml +0 -0
  86. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-278.yaml +0 -0
  87. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/pr-313.yaml +0 -0
  88. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/guardian/results.jsonl +0 -0
  89. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian/README.md +0 -0
  90. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian/cal_dot_com.json +0 -0
  91. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian/discourse.json +0 -0
  92. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian/grafana.json +0 -0
  93. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian/keycloak.json +0 -0
  94. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian/sentry.json +0 -0
  95. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-judged.jsonl +0 -0
  96. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  97. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  98. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-p3-run1.jsonl +0 -0
  99. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-p3-run2.jsonl +0 -0
  100. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-p3-run3.jsonl +0 -0
  101. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-plan.json +0 -0
  102. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
  103. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  104. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/benchmarks/martian-reviews.jsonl +0 -0
  105. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/data/.gitkeep +0 -0
  106. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/AUDIT.md +0 -0
  107. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/CASE_STUDY.md +0 -0
  108. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  109. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  110. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/architecture/ONTOLOGY.md +0 -0
  111. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  112. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
  113. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/architecture/health_badge.json +0 -0
  114. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/assets/.gitignore +0 -0
  115. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/assets/cgis-app-avatar.png +0 -0
  116. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/assets/cgis-app-avatar.svg +0 -0
  117. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/assets/generate_avatar.py +0 -0
  118. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/examples/.gitkeep +0 -0
  119. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/how-to/AGENT_ONBOARDING.md +0 -0
  120. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/how-to/CLI_USAGE.md +0 -0
  121. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  122. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/ontology/.gitkeep +0 -0
  123. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/ontology/core.yaml +0 -0
  124. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/ontology/domains.yaml +0 -0
  125. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/ontology/patterns.yaml +0 -0
  126. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/ontology/tolerances.lock +0 -0
  127. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  128. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  129. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  130. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
  131. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  132. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  133. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  134. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  135. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  136. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  137. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  138. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  139. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  140. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  141. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  142. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  143. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  144. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  145. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  146. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  147. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  148. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  149. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  150. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  151. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  152. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  153. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  154. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  155. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  156. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/BLUEPRINT.md +0 -0
  157. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/PRD.md +0 -0
  158. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/TDD.md +0 -0
  159. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  160. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  161. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  162. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  163. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  164. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  165. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  166. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  167. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  168. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  169. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  170. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  171. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  172. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  173. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  174. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  175. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  176. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  177. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
  178. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/main.py +0 -0
  179. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/plugin/.claude-plugin/plugin.json +0 -0
  180. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/plugin/.mcp.json +0 -0
  181. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/plugin/README.md +0 -0
  182. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/plugin/skills/cgis/SKILL.md +0 -0
  183. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/plugin/skills/ingest/SKILL.md +0 -0
  184. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/release-please-config.json +0 -0
  185. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/backfill_calibration_fingerprint.py +0 -0
  186. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/backfill_review_fingerprint.py +0 -0
  187. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/check_pytest_raises.py +0 -0
  188. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/check_test_count.py +0 -0
  189. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/colab_bench.sh +0 -0
  190. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/gen_ideal_graph.py +0 -0
  191. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/generate_health.py +0 -0
  192. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/generate_mcp_ref.py +0 -0
  193. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/generate_schema_docs.py +0 -0
  194. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/guardian_bench.py +0 -0
  195. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/guardian_calibrate.py +0 -0
  196. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/guardian_martian.py +0 -0
  197. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/guardian_replay_skeptic.py +0 -0
  198. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/guardian_review.py +0 -0
  199. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/inject_readme_graph.py +0 -0
  200. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/ollama_visitor.sh +0 -0
  201. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/probe_closure_gap.py +0 -0
  202. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/probe_tier_ladder.py +0 -0
  203. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/recordings_from_corpus.py +0 -0
  204. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/scripts/skeptic_arms.py +0 -0
  205. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/__init__.py +0 -0
  206. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/__main__.py +0 -0
  207. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/api/.gitkeep +0 -0
  208. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/api/__init__.py +0 -0
  209. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/core/.gitkeep +0 -0
  210. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/.gitkeep +0 -0
  211. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/_python_annotations.py +0 -0
  212. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/_python_types.py +0 -0
  213. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/base.py +0 -0
  214. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/registry.py +0 -0
  215. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/extractors/typescript_extractor.py +0 -0
  216. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/__init__.py +0 -0
  217. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/axes.py +0 -0
  218. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/bench.py +0 -0
  219. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/calibrate.py +0 -0
  220. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/chunked.py +0 -0
  221. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/chunker.py +0 -0
  222. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/collector.py +0 -0
  223. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/core.py +0 -0
  224. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/diff_index.py +0 -0
  225. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/evidence.py +0 -0
  226. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/findings.py +0 -0
  227. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/github_poster.py +0 -0
  228. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/martian.py +0 -0
  229. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/metrics.py +0 -0
  230. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/prompts.py +0 -0
  231. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/providers/__init__.py +0 -0
  232. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/providers/base.py +0 -0
  233. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/providers/gemini.py +0 -0
  234. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/providers/mistral.py +0 -0
  235. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/providers/ollama.py +0 -0
  236. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/providers/openrouter.py +0 -0
  237. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/recording.py +0 -0
  238. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/render.py +0 -0
  239. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/review_fingerprint.py +0 -0
  240. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/runner.py +0 -0
  241. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/guardian/skeptic.py +0 -0
  242. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/py.typed +0 -0
  243. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/analysis/__init__.py +0 -0
  244. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/analysis/analyzer.py +0 -0
  245. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/analysis/anomaly.py +0 -0
  246. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/analysis/cohesion.py +0 -0
  247. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/analysis/health.py +0 -0
  248. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/context/__init__.py +0 -0
  249. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/context/audit.py +0 -0
  250. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/context/context_service.py +0 -0
  251. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/context/prompt.py +0 -0
  252. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/context/snippet.py +0 -0
  253. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/__init__.py +0 -0
  254. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/_scc.py +0 -0
  255. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/drift.py +0 -0
  256. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/drift_service.py +0 -0
  257. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/fingerprint.py +0 -0
  258. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/fractal.py +0 -0
  259. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/ontology_init.py +0 -0
  260. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/quotient.py +0 -0
  261. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/drift/triads.py +0 -0
  262. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/engine.py +0 -0
  263. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/fqn.py +0 -0
  264. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/render/__init__.py +0 -0
  265. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/render/graph_json.py +0 -0
  266. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/query/render/mermaid.py +0 -0
  267. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/resolver/.gitkeep +0 -0
  268. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/resolver/__init__.py +0 -0
  269. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/resolver/engine.py +0 -0
  270. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/resolver/uplift.py +0 -0
  271. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/src/cgis/storage/.gitkeep +0 -0
  272. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/integration/.gitkeep +0 -0
  273. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/.gitkeep +0 -0
  274. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/__init__.py +0 -0
  275. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/conftest.py +0 -0
  276. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_architecture.py +0 -0
  277. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_drift.py +0 -0
  278. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_fractal.py +0 -0
  279. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
  280. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_self_parse.py +0 -0
  281. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_self_parse_ts.py +0 -0
  282. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/self_parsing/test_suggest.py +0 -0
  283. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/.gitkeep +0 -0
  284. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/conftest.py +0 -0
  285. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/guardian_stubs.py +0 -0
  286. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/review_path_inventory.txt +0 -0
  287. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test___main__.py +0 -0
  288. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_analyzer.py +0 -0
  289. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_annotation_edges.py +0 -0
  290. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_audit.py +0 -0
  291. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
  292. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  293. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_check_pytest_raises.py +0 -0
  294. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_check_test_count.py +0 -0
  295. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_cohesion.py +0 -0
  296. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_context_service.py +0 -0
  297. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_di_acceptance.py +0 -0
  298. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_drift.py +0 -0
  299. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_drift_service.py +0 -0
  300. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_extractor_registry.py +0 -0
  301. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_fingerprint.py +0 -0
  302. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_fqn.py +0 -0
  303. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_fractal.py +0 -0
  304. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_gen_ideal_graph.py +0 -0
  305. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_generate_mcp_ref.py +0 -0
  306. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_graph_json.py +0 -0
  307. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_axes.py +0 -0
  308. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_bench.py +0 -0
  309. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_bench_script.py +0 -0
  310. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_calibrate.py +0 -0
  311. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
  312. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_chunked.py +0 -0
  313. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_chunker.py +0 -0
  314. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_collector.py +0 -0
  315. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_core.py +0 -0
  316. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_diff_index.py +0 -0
  317. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_evidence.py +0 -0
  318. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_findings.py +0 -0
  319. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_martian.py +0 -0
  320. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_martian_script.py +0 -0
  321. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_martian_union.py +0 -0
  322. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_metrics.py +0 -0
  323. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  324. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  325. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  326. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_openrouter.py +0 -0
  327. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_poster.py +0 -0
  328. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_providers.py +0 -0
  329. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_providers_name.py +0 -0
  330. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_recording.py +0 -0
  331. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_render.py +0 -0
  332. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
  333. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_review_script.py +0 -0
  334. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_runner.py +0 -0
  335. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_salvage.py +0 -0
  336. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_guardian_skeptic.py +0 -0
  337. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_health_scorer.py +0 -0
  338. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_import_acceptance.py +0 -0
  339. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_mermaid.py +0 -0
  340. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_models.py +0 -0
  341. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_ontology_compliance.py +0 -0
  342. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_ontology_init.py +0 -0
  343. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_patterns_yaml.py +0 -0
  344. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_prompt.py +0 -0
  345. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_python_annotations.py +0 -0
  346. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_python_extractor.py +0 -0
  347. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_quotient.py +0 -0
  348. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_recordings_from_corpus.py +0 -0
  349. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_resolver_symbols.py +0 -0
  350. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_review_fingerprint_closure.py +0 -0
  351. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
  352. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
  353. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_review_fingerprint_record.py +0 -0
  354. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_self_types.py +0 -0
  355. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_skeptic_arms.py +0 -0
  356. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_snippet.py +0 -0
  357. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_temperature_source.py +0 -0
  358. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_triads.py +0 -0
  359. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_typescript_extractor.py +0 -0
  360. {codegraph_brain-0.17.0 → codegraph_brain-0.19.0}/tests/unit/test_uplift.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.19.0"
3
+ }
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.19.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.18.0...codegraph-brain-v0.19.0) (2026-09-09)
4
+
5
+
6
+ ### Features
7
+
8
+ * **freshness:** every query says when the graph is out of date ([#175](https://github.com/zaebee/codegraph-brain/issues/175) part 2) ([#443](https://github.com/zaebee/codegraph-brain/issues/443)) ([0d6d197](https://github.com/zaebee/codegraph-brain/commit/0d6d197133c1315698b10a223aaf8efb47784578))
9
+ * **metrics:** --scope <prefix> to focus rankings on one subtree ([#239](https://github.com/zaebee/codegraph-brain/issues/239)) ([#439](https://github.com/zaebee/codegraph-brain/issues/439)) ([59605d3](https://github.com/zaebee/codegraph-brain/commit/59605d361f95aeea18b8272183f20938c0ca10b8))
10
+ * **orphans:** generated classes are noise, not findings — hide them by default ([#432](https://github.com/zaebee/codegraph-brain/issues/432)) ([#441](https://github.com/zaebee/codegraph-brain/issues/441)) ([52e0de1](https://github.com/zaebee/codegraph-brain/commit/52e0de1e666612f72d5a58eaad9509252db098e2))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **extractor:** `with X() as y` records y's type ([#444](https://github.com/zaebee/codegraph-brain/issues/444)) ([#445](https://github.com/zaebee/codegraph-brain/issues/445)) ([529b2e2](https://github.com/zaebee/codegraph-brain/commit/529b2e2239ab62a14211d95291afb1d7a6666cfc))
16
+ * **resolver:** only a head-discarding strip is forbidden a foreign head ([#435](https://github.com/zaebee/codegraph-brain/issues/435)) ([#437](https://github.com/zaebee/codegraph-brain/issues/437)) ([3e5309a](https://github.com/zaebee/codegraph-brain/commit/3e5309ac6e65cfdc5174dc70c6ae9d4b5036d92a))
17
+ * **suggest-packages:** name a member by its path under the package ([#446](https://github.com/zaebee/codegraph-brain/issues/446)) ([#447](https://github.com/zaebee/codegraph-brain/issues/447)) ([08af353](https://github.com/zaebee/codegraph-brain/commit/08af353f88b0026f799eb2cb2f9ed5f0c9733d22))
18
+
19
+
20
+ ### Documentation
21
+
22
+ * auto-sync architecture graph and MCP reference ([#442](https://github.com/zaebee/codegraph-brain/issues/442)) ([47a6aab](https://github.com/zaebee/codegraph-brain/commit/47a6aab38225f8e8936abd9d9e72b9449f10afe2))
23
+
24
+ ## [0.18.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.17.0...codegraph-brain-v0.18.0) (2026-09-06)
25
+
26
+
27
+ ### Features
28
+
29
+ * **extractors:** a class named as a value is a reference (D10, [#415](https://github.com/zaebee/codegraph-brain/issues/415)) ([#430](https://github.com/zaebee/codegraph-brain/issues/430)) ([aea4076](https://github.com/zaebee/codegraph-brain/commit/aea4076b45d0761f50bb989936e89c8054402372))
30
+ * **extractors:** a decorator's arguments are edges, and a decorated class keeps its own ([#429](https://github.com/zaebee/codegraph-brain/issues/429)) ([#434](https://github.com/zaebee/codegraph-brain/issues/434)) ([fd0c63f](https://github.com/zaebee/codegraph-brain/commit/fd0c63f1f887a0b65a433d01571654ae79419ef3))
31
+ * **query:** orphan classes — what production no longer builds ([#415](https://github.com/zaebee/codegraph-brain/issues/415)) ([#431](https://github.com/zaebee/codegraph-brain/issues/431)) ([3b4db3c](https://github.com/zaebee/codegraph-brain/commit/3b4db3cb231d43ae388b080d64d19b3244739017))
32
+ * **resolver:** resolve self.<attr>.<method> through the declared receiver ([#414](https://github.com/zaebee/codegraph-brain/issues/414)) ([#423](https://github.com/zaebee/codegraph-brain/issues/423)) ([a1c94a2](https://github.com/zaebee/codegraph-brain/commit/a1c94a2e4629da955deef761467730a7d711c3fe))
33
+
34
+
35
+ ### Bug Fixes
36
+
37
+ * **extractors:** attribute a module-level or class-body call to its owner ([#416](https://github.com/zaebee/codegraph-brain/issues/416)) ([#428](https://github.com/zaebee/codegraph-brain/issues/428)) ([c9f39b8](https://github.com/zaebee/codegraph-brain/commit/c9f39b81bf3a644441b7b5a3215df2d6b39b9489))
38
+ * **resolver:** an import prefix that reaches a node is first-party, not external ([#424](https://github.com/zaebee/codegraph-brain/issues/424)) ([#426](https://github.com/zaebee/codegraph-brain/issues/426)) ([50f8b7c](https://github.com/zaebee/codegraph-brain/commit/50f8b7c03d716c25f9341a879c76a8707f3853fb))
39
+ * **resolver:** resolve a name through the package that re-exports it ([#417](https://github.com/zaebee/codegraph-brain/issues/417)) ([#427](https://github.com/zaebee/codegraph-brain/issues/427)) ([ef76f95](https://github.com/zaebee/codegraph-brain/commit/ef76f9546b4477d4736406eabe417e6e49e68e23))
40
+
41
+
42
+ ### Documentation
43
+
44
+ * auto-sync architecture graph and MCP reference ([#433](https://github.com/zaebee/codegraph-brain/issues/433)) ([40af3ee](https://github.com/zaebee/codegraph-brain/commit/40af3ee6839b53a953124e25f1f39b5379bff890))
45
+
3
46
  ## [0.17.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.16.0...codegraph-brain-v0.17.0) (2026-09-05)
4
47
 
5
48
 
@@ -35,8 +35,9 @@ make format && make lint && make type-check && make pytest && make doc-coverage
35
35
  # Single test
36
36
  uv run pytest tests/unit/test_python_extractor.py::test_extract_simple_function -v
37
37
 
38
- # Tests with coverage
39
- uv run pytest --cov=cgis --cov-report=html
38
+ # Line coverage (same scope as CI — see the Makefile comment on why scripts/ counts)
39
+ make coverage # runs: uv run pytest --cov=cgis --cov=scripts --cov-report=term-missing
40
+ make coverage-html # same, writes htmlcov/
40
41
  ```
41
42
 
42
43
  ## Architecture
@@ -1,4 +1,4 @@
1
- .PHONY: format lint type-check pytest doc-coverage check \
1
+ .PHONY: format lint type-check pytest doc-coverage coverage coverage-html check \
2
2
  ui-dev ui-build ui-test ui-lint ui-format ui-preview ui-analyze ui-check \
3
3
  all-checks
4
4
 
@@ -19,6 +19,20 @@ pytest:
19
19
  doc-coverage:
20
20
  uv run interrogate src
21
21
 
22
+ # Line coverage. `--cov=scripts` is not optional and not cosmetic: sonar.sources
23
+ # is `src,scripts`, so SonarCloud counts every executable line under scripts/ as
24
+ # a line to cover whether or not the report mentions it. Omitting the directory
25
+ # does not exclude it — it reports all of it as uncovered, which once put
26
+ # new-code coverage at 37.8% on a PR whose script was covered at 99% locally.
27
+ # Keep this scope identical to the Pytest step in .github/workflows/ci.yml, or
28
+ # the number you read here is not the number the gate reads.
29
+ coverage:
30
+ uv run pytest --cov=cgis --cov=scripts --cov-report=term-missing
31
+
32
+ # Same scope, browsable. Writes htmlcov/ (git-ignored); open htmlcov/index.html.
33
+ coverage-html:
34
+ uv run pytest --cov=cgis --cov=scripts --cov-report=html
35
+
22
36
  # Full Python verification (run before every commit/PR)
23
37
  check: format lint type-check pytest doc-coverage
24
38
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codegraph-brain
3
- Version: 0.17.0
3
+ Version: 0.19.0
4
4
  Summary: Semantic code graph for AI agents — deterministic FQN resolution, impact analysis and architectural drift gates, exposed over MCP.
5
5
  Project-URL: Homepage, https://github.com/zaebee/codegraph-brain
6
6
  Project-URL: Repository, https://github.com/zaebee/codegraph-brain
@@ -198,15 +198,15 @@ classDef stdlibNode fill:#eceff1,stroke:#607d8b,stroke-width:1px,color:#455a64;
198
198
  classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dasharray: 3 3,color:#bf360c;
199
199
 
200
200
  subgraph sg_models["models.py"]
201
- models_Edge["Edge (models.py:117)"]:::classNode
202
- models_Node["Node (models.py:83)"]:::classNode
201
+ models_Edge["Edge (models.py:142)"]:::classNode
202
+ models_Node["Node (models.py:85)"]:::classNode
203
203
  end
204
204
  subgraph sg_pipeline["pipeline.py"]
205
- pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:245)"]:::methodNode
206
- pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:185)"]:::methodNode
207
- pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:204)"]:::methodNode
208
- pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:155)"]:::methodNode
209
- pipeline_IngestionPipeline_run["run (pipeline.py:51)"]:::methodNode
205
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:252)"]:::methodNode
206
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:192)"]:::methodNode
207
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:211)"]:::methodNode
208
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:157)"]:::methodNode
209
+ pipeline_IngestionPipeline_run["run (pipeline.py:53)"]:::methodNode
210
210
  end
211
211
  subgraph sg_engine["engine.py"]
212
212
  engine_ResolverEngine["ResolverEngine (engine.py:19)"]:::classNode
@@ -217,7 +217,7 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
217
217
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
218
218
  end
219
219
  subgraph sg_sqlite_store["sqlite_store.py"]
220
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:28)"]:::classNode
220
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:40)"]:::classNode
221
221
  end
222
222
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
223
223
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
@@ -234,18 +234,18 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
234
234
 
235
235
  | Symbol | Type | File |
236
236
  |--------|------|------|
237
- | `Node` | CLASS | [`models.py:83`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L83) |
238
- | `Edge` | CLASS | [`models.py:117`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L117) |
239
- | `run` | METHOD | [`pipeline.py:51`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L51) |
240
- | `_process_file` | METHOD | [`pipeline.py:155`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L155) |
241
- | `_is_noop_incremental` | METHOD | [`pipeline.py:185`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L185) |
242
- | `_persist_incremental` | METHOD | [`pipeline.py:204`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L204) |
243
- | `_get_extractor` | METHOD | [`pipeline.py:245`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L245) |
237
+ | `Node` | CLASS | [`models.py:85`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L85) |
238
+ | `Edge` | CLASS | [`models.py:142`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L142) |
239
+ | `run` | METHOD | [`pipeline.py:53`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L53) |
240
+ | `_process_file` | METHOD | [`pipeline.py:157`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L157) |
241
+ | `_is_noop_incremental` | METHOD | [`pipeline.py:192`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L192) |
242
+ | `_persist_incremental` | METHOD | [`pipeline.py:211`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L211) |
243
+ | `_get_extractor` | METHOD | [`pipeline.py:252`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L252) |
244
244
  | `ResolverEngine` | CLASS | [`engine.py:19`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L19) |
245
245
  | `resolve` | METHOD | [`engine.py:36`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L36) |
246
246
  | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
247
247
  | `execute_uplift` | METHOD | [`uplift.py:91`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L91) |
248
- | `SQLiteStore` | CLASS | [`sqlite_store.py:28`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L28) |
248
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:40`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L40) |
249
249
  <!-- END_CGIS_GRAPH -->
250
250
 
251
251
  ---
@@ -148,15 +148,15 @@ classDef stdlibNode fill:#eceff1,stroke:#607d8b,stroke-width:1px,color:#455a64;
148
148
  classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dasharray: 3 3,color:#bf360c;
149
149
 
150
150
  subgraph sg_models["models.py"]
151
- models_Edge["Edge (models.py:117)"]:::classNode
152
- models_Node["Node (models.py:83)"]:::classNode
151
+ models_Edge["Edge (models.py:142)"]:::classNode
152
+ models_Node["Node (models.py:85)"]:::classNode
153
153
  end
154
154
  subgraph sg_pipeline["pipeline.py"]
155
- pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:245)"]:::methodNode
156
- pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:185)"]:::methodNode
157
- pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:204)"]:::methodNode
158
- pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:155)"]:::methodNode
159
- pipeline_IngestionPipeline_run["run (pipeline.py:51)"]:::methodNode
155
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:252)"]:::methodNode
156
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:192)"]:::methodNode
157
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:211)"]:::methodNode
158
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:157)"]:::methodNode
159
+ pipeline_IngestionPipeline_run["run (pipeline.py:53)"]:::methodNode
160
160
  end
161
161
  subgraph sg_engine["engine.py"]
162
162
  engine_ResolverEngine["ResolverEngine (engine.py:19)"]:::classNode
@@ -167,7 +167,7 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
167
167
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
168
168
  end
169
169
  subgraph sg_sqlite_store["sqlite_store.py"]
170
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:28)"]:::classNode
170
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:40)"]:::classNode
171
171
  end
172
172
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
173
173
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
@@ -184,18 +184,18 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
184
184
 
185
185
  | Symbol | Type | File |
186
186
  |--------|------|------|
187
- | `Node` | CLASS | [`models.py:83`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L83) |
188
- | `Edge` | CLASS | [`models.py:117`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L117) |
189
- | `run` | METHOD | [`pipeline.py:51`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L51) |
190
- | `_process_file` | METHOD | [`pipeline.py:155`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L155) |
191
- | `_is_noop_incremental` | METHOD | [`pipeline.py:185`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L185) |
192
- | `_persist_incremental` | METHOD | [`pipeline.py:204`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L204) |
193
- | `_get_extractor` | METHOD | [`pipeline.py:245`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L245) |
187
+ | `Node` | CLASS | [`models.py:85`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L85) |
188
+ | `Edge` | CLASS | [`models.py:142`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L142) |
189
+ | `run` | METHOD | [`pipeline.py:53`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L53) |
190
+ | `_process_file` | METHOD | [`pipeline.py:157`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L157) |
191
+ | `_is_noop_incremental` | METHOD | [`pipeline.py:192`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L192) |
192
+ | `_persist_incremental` | METHOD | [`pipeline.py:211`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L211) |
193
+ | `_get_extractor` | METHOD | [`pipeline.py:252`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L252) |
194
194
  | `ResolverEngine` | CLASS | [`engine.py:19`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L19) |
195
195
  | `resolve` | METHOD | [`engine.py:36`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L36) |
196
196
  | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
197
197
  | `execute_uplift` | METHOD | [`uplift.py:91`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L91) |
198
- | `SQLiteStore` | CLASS | [`sqlite_store.py:28`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L28) |
198
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:40`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L40) |
199
199
  <!-- END_CGIS_GRAPH -->
200
200
 
201
201
  ---
@@ -85,7 +85,9 @@ CREATE TABLE IF NOT EXISTS nodes (
85
85
  domains TEXT,
86
86
  confidence_score REAL NOT NULL,
87
87
  metadata TEXT,
88
- namespace TEXT NOT NULL DEFAULT 'INTERNAL'
88
+ namespace TEXT NOT NULL DEFAULT 'INTERNAL',
89
+ is_test INTEGER NOT NULL DEFAULT 0,
90
+ is_generated INTEGER NOT NULL DEFAULT 0
89
91
  );
90
92
 
91
93
  CREATE TABLE IF NOT EXISTS edges (
@@ -105,6 +107,11 @@ CREATE TABLE IF NOT EXISTS nodes (
105
107
  hash TEXT NOT NULL
106
108
  );
107
109
 
110
+ CREATE TABLE IF NOT EXISTS ingest_state (
111
+ key TEXT PRIMARY KEY,
112
+ value TEXT NOT NULL
113
+ );
114
+
108
115
  CREATE INDEX IF NOT EXISTS idx_nodes_type ON nodes(type);
109
116
  CREATE INDEX IF NOT EXISTS idx_edges_source ON edges(source);
110
117
  CREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target);
@@ -8,15 +8,15 @@ classDef stdlibNode fill:#eceff1,stroke:#607d8b,stroke-width:1px,color:#455a64;
8
8
  classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dasharray: 3 3,color:#bf360c;
9
9
 
10
10
  subgraph sg_models["models.py"]
11
- models_Edge["Edge (models.py:117)"]:::classNode
12
- models_Node["Node (models.py:83)"]:::classNode
11
+ models_Edge["Edge (models.py:142)"]:::classNode
12
+ models_Node["Node (models.py:85)"]:::classNode
13
13
  end
14
14
  subgraph sg_pipeline["pipeline.py"]
15
- pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:245)"]:::methodNode
16
- pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:185)"]:::methodNode
17
- pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:204)"]:::methodNode
18
- pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:155)"]:::methodNode
19
- pipeline_IngestionPipeline_run["run (pipeline.py:51)"]:::methodNode
15
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:252)"]:::methodNode
16
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:192)"]:::methodNode
17
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:211)"]:::methodNode
18
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:157)"]:::methodNode
19
+ pipeline_IngestionPipeline_run["run (pipeline.py:53)"]:::methodNode
20
20
  end
21
21
  subgraph sg_engine["engine.py"]
22
22
  engine_ResolverEngine["ResolverEngine (engine.py:19)"]:::classNode
@@ -27,7 +27,7 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
27
27
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
28
28
  end
29
29
  subgraph sg_sqlite_store["sqlite_store.py"]
30
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:28)"]:::classNode
30
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:40)"]:::classNode
31
31
  end
32
32
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
33
33
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
@@ -106,6 +106,53 @@ Report per-domain architectural drift against declared ideal patterns.
106
106
 
107
107
  ---
108
108
 
109
+ ## `cgis_find_orphans`
110
+
111
+ Classes nothing in production builds, extends or names — dead-code candidates (#415).
112
+
113
+ Finds classes that no test, type checker or linter flags, because each is
114
+ still imported somewhere: a package re-export keeps a class importable long
115
+ after its last real caller is gone. On one mid-sized backend this reported
116
+ 43 of 1 789 classes, and the hand-written equivalent's findings were all
117
+ real and all deleted.
118
+
119
+ Two filters decide the answer. **Tests are not users** — a class built only
120
+ by its own test is exactly the shape being hunted. **A re-export is not a
121
+ use** — ``IMPORTS_SYMBOL`` does not count, or nothing is ever reported. What
122
+ counts is construction (``CALLS``), inheritance (``EXTENDS``) and being named
123
+ (``REFERENCES`` — an annotation, or a class handed to a framework); the last
124
+ keeps abstract ports and Protocols off the list.
125
+
126
+ ``prefix`` narrows to one package on a dot boundary. ``include_tests`` counts
127
+ test code as a user, turning the report into "unreachable from anywhere".
128
+
129
+ Machine-generated classes are **hidden by default**, and ``include_generated``
130
+ puts them back. The query is right about them — nothing constructs a
131
+ betterproto stub — but nobody hand-deletes one either, so they are noise
132
+ rather than a finding. Measured on owner-api at b7d02fe6, five of six
133
+ reported orphans were generated entities and the sixth a nested pydantic
134
+ ``Config``: the unfiltered report had no actionable row in it (#432).
135
+
136
+ Returns JSON ``{orphans, considered, test_sources, generated_excluded}``;
137
+ each orphan carries ``fqn``/``file``/``line``. **A listing is a candidate for
138
+ deletion, not a proof** — a class named only inside a decorator (#429) or
139
+ arriving through a star import is invisible here, so the sweep errs towards
140
+ reporting a live class rather than hiding a dead one. ``test_sources: 0`` in a
141
+ repository that has tests means the graph predates the ``is_test`` column:
142
+ re-ingest. ``generated_excluded`` counts every generated class left out of
143
+ the population under the same ``prefix``, referenced or not — so ``0`` on a
144
+ repository with generated code means the same for ``is_generated``, which has
145
+ no backfill: the marker is in the file header, not in the database.
146
+
147
+ | Argument | Type | Required | Description |
148
+ | :--- | :--- | :---: | :--- |
149
+ | `db_path` | `string` | | |
150
+ | `prefix` | `any` | | |
151
+ | `include_tests` | `boolean` | | |
152
+ | `include_generated` | `boolean` | | |
153
+
154
+ ---
155
+
109
156
  ## `cgis_find_symbol`
110
157
 
111
158
  Resolve a partial symbol name to candidate FQNs (substring match, ranked).
@@ -232,11 +279,22 @@ Whole-graph architectural metrics — coupling bottlenecks + God classes (#16).
232
279
  (e.g. ``["tests"]`` removes both ``tests.*`` and ``domains.*.tests.*``) so
233
280
  test/vendor scaffolding stays out of the rankings.
234
281
 
282
+ ``scope`` is its complement: it keeps only nodes under one of the given
283
+ dot-prefixes, anchored and cut on a dot boundary, so
284
+ ``["domains.reservation"]`` is that subtree and not
285
+ ``domains.reservation_archive``. Use it for a per-domain review. The two
286
+ compose, and they differ where it matters for PageRank — ``exclude`` removes
287
+ nodes from the propagation graph, ``scope`` filters the rows and lets rank
288
+ propagate over the whole graph, so a scoped run reports how central the
289
+ subtree is *globally*. Coupling in-degree likewise keeps counting callers
290
+ from outside the scope, which is the ripple a domain review is after (#239).
291
+
235
292
  | Argument | Type | Required | Description |
236
293
  | :--- | :--- | :---: | :--- |
237
294
  | `db_path` | `string` | | |
238
295
  | `limit` | `integer` | | |
239
296
  | `exclude` | `any` | | |
297
+ | `scope` | `any` | | |
240
298
 
241
299
  ---
242
300