codegraph-brain 0.20.0__tar.gz → 0.22.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 (371) hide show
  1. codegraph_brain-0.22.0/.github/test-count-baseline +1 -0
  2. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.github/workflows/autodoc.yml +3 -5
  3. codegraph_brain-0.22.0/.release-please-manifest.json +3 -0
  4. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/CHANGELOG.md +32 -0
  5. codegraph_brain-0.22.0/PKG-INFO +224 -0
  6. codegraph_brain-0.22.0/README.md +174 -0
  7. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/architecture/HOW_IT_WORKS.md +77 -0
  8. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/architecture/diagrams/pipeline_flow.mermaid +13 -8
  9. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/how-to/MCP_REFERENCE.md +5 -3
  10. codegraph_brain-0.22.0/glama.json +4 -0
  11. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/pyproject.toml +4 -1
  12. codegraph_brain-0.22.0/release-please-config.json +21 -0
  13. codegraph_brain-0.20.0/scripts/inject_readme_graph.py → codegraph_brain-0.22.0/scripts/inject_architecture_graph.py +11 -9
  14. codegraph_brain-0.22.0/server.json +24 -0
  15. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/api/mcp_server.py +19 -12
  16. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/cli.py +32 -34
  17. codegraph_brain-0.22.0/src/cgis/core/js_globals.py +116 -0
  18. codegraph_brain-0.22.0/src/cgis/extractors/_typescript_bindings.py +155 -0
  19. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/typescript_extractor.py +4 -0
  20. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/pipeline.py +167 -35
  21. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/resolver/engine.py +32 -9
  22. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/resolver/indices.py +27 -1
  23. codegraph_brain-0.22.0/src/cgis/resolver/js_builtins.py +44 -0
  24. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/storage/sqlite_store.py +54 -7
  25. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_annotation_calibration.py +7 -2
  26. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_self_parse_ts.py +58 -1
  27. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_cli.py +141 -0
  28. codegraph_brain-0.22.0/tests/unit/test_inject_architecture_graph.py +218 -0
  29. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_mcp_server.py +38 -0
  30. codegraph_brain-0.22.0/tests/unit/test_pipeline_incremental_symbols.py +332 -0
  31. codegraph_brain-0.22.0/tests/unit/test_resolver_js_builtins.py +230 -0
  32. codegraph_brain-0.22.0/tests/unit/test_resolver_language_scope.py +128 -0
  33. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/uv.lock +1 -1
  34. codegraph_brain-0.20.0/.github/test-count-baseline +0 -1
  35. codegraph_brain-0.20.0/.release-please-manifest.json +0 -3
  36. codegraph_brain-0.20.0/PKG-INFO +0 -282
  37. codegraph_brain-0.20.0/README.md +0 -232
  38. codegraph_brain-0.20.0/release-please-config.json +0 -9
  39. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.claude-plugin/marketplace.json +0 -0
  40. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.gitattributes +0 -0
  41. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.github/workflows/ci.yml +0 -0
  42. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.github/workflows/guardian.yml +0 -0
  43. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.github/workflows/pr-title.yml +0 -0
  44. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.github/workflows/release-please.yml +0 -0
  45. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.gitignore +0 -0
  46. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.pre-commit-config.yaml +0 -0
  47. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/.python-version +0 -0
  48. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/CLAUDE.md +0 -0
  49. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/CONTRIBUTING.md +0 -0
  50. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/LICENSE +0 -0
  51. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/Makefile +0 -0
  52. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/PRIVACY.md +0 -0
  53. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/CURATION.md +0 -0
  54. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/calibration.jsonl +0 -0
  55. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
  56. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
  57. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
  58. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
  59. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
  60. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
  61. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
  62. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-directive-rows.jsonl +0 -0
  63. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-prohibition-rows.jsonl +0 -0
  64. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-122.yaml +0 -0
  65. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-140.yaml +0 -0
  66. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-141.yaml +0 -0
  67. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-142.yaml +0 -0
  68. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-143.yaml +0 -0
  69. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-144.yaml +0 -0
  70. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-278.yaml +0 -0
  71. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/pr-313.yaml +0 -0
  72. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/guardian/results.jsonl +0 -0
  73. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian/README.md +0 -0
  74. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian/cal_dot_com.json +0 -0
  75. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian/discourse.json +0 -0
  76. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian/grafana.json +0 -0
  77. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian/keycloak.json +0 -0
  78. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian/sentry.json +0 -0
  79. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-judged.jsonl +0 -0
  80. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  81. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  82. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-p3-run1.jsonl +0 -0
  83. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-p3-run2.jsonl +0 -0
  84. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-p3-run3.jsonl +0 -0
  85. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-plan.json +0 -0
  86. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
  87. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  88. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/benchmarks/martian-reviews.jsonl +0 -0
  89. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/data/.gitkeep +0 -0
  90. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/AUDIT.md +0 -0
  91. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/CASE_STUDY.md +0 -0
  92. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  93. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  94. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/architecture/ONTOLOGY.md +0 -0
  95. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  96. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
  97. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/architecture/health_badge.json +0 -0
  98. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/assets/.gitignore +0 -0
  99. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/assets/cgis-app-avatar.png +0 -0
  100. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/assets/cgis-app-avatar.svg +0 -0
  101. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/assets/generate_avatar.py +0 -0
  102. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/examples/.gitkeep +0 -0
  103. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/how-to/AGENT_ONBOARDING.md +0 -0
  104. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/how-to/CLI_USAGE.md +0 -0
  105. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  106. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/ontology/.gitkeep +0 -0
  107. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/ontology/core.yaml +0 -0
  108. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/ontology/domains.yaml +0 -0
  109. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/ontology/patterns.yaml +0 -0
  110. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/ontology/tolerances.lock +0 -0
  111. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/plans/2026-09-09-graph-freshness.md +0 -0
  112. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  113. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  114. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  115. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
  116. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  117. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  118. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  119. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  120. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  121. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  122. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  123. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  124. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  125. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
  126. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  127. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  128. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  129. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  130. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  131. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  132. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  133. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  134. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  135. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  136. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  137. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  138. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  139. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  140. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  141. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  142. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-09-05-annotation-graph-design.md +0 -0
  143. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/2026-09-09-graph-freshness-design.md +0 -0
  144. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/BLUEPRINT.md +0 -0
  145. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/PRD.md +0 -0
  146. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/TDD.md +0 -0
  147. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  148. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  149. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  150. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  151. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  152. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  153. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  154. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  155. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  156. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  157. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  158. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  159. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  160. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  161. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  162. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  163. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  164. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  165. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
  166. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +0 -0
  167. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/main.py +0 -0
  168. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/plugin/.claude-plugin/plugin.json +0 -0
  169. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/plugin/.mcp.json +0 -0
  170. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/plugin/README.md +0 -0
  171. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/plugin/skills/cgis/SKILL.md +0 -0
  172. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/plugin/skills/ingest/SKILL.md +0 -0
  173. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/backfill_calibration_fingerprint.py +0 -0
  174. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/backfill_review_fingerprint.py +0 -0
  175. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/check_pytest_raises.py +0 -0
  176. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/check_test_count.py +0 -0
  177. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/colab_bench.sh +0 -0
  178. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/gen_ideal_graph.py +0 -0
  179. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/generate_health.py +0 -0
  180. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/generate_mcp_ref.py +0 -0
  181. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/generate_schema_docs.py +0 -0
  182. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/guardian_bench.py +0 -0
  183. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/guardian_calibrate.py +0 -0
  184. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/guardian_martian.py +0 -0
  185. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/guardian_replay_skeptic.py +0 -0
  186. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/guardian_review.py +0 -0
  187. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/ollama_visitor.sh +0 -0
  188. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/probe_closure_gap.py +0 -0
  189. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/probe_tier_ladder.py +0 -0
  190. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/recordings_from_corpus.py +0 -0
  191. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/scripts/skeptic_arms.py +0 -0
  192. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/__init__.py +0 -0
  193. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/__main__.py +0 -0
  194. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/api/.gitkeep +0 -0
  195. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/api/__init__.py +0 -0
  196. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/core/.gitkeep +0 -0
  197. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/core/coverage.py +0 -0
  198. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/core/freshness.py +0 -0
  199. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/core/generated.py +0 -0
  200. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/core/models.py +0 -0
  201. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/core/paths.py +0 -0
  202. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/.gitkeep +0 -0
  203. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/_python_annotations.py +0 -0
  204. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/_python_ast.py +0 -0
  205. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/_python_classes.py +0 -0
  206. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/_python_functions.py +0 -0
  207. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/_python_imports.py +0 -0
  208. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/_python_types.py +0 -0
  209. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/base.py +0 -0
  210. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/python_extractor.py +0 -0
  211. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/extractors/registry.py +0 -0
  212. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/__init__.py +0 -0
  213. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/axes.py +0 -0
  214. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/bench.py +0 -0
  215. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/calibrate.py +0 -0
  216. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/chunked.py +0 -0
  217. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/chunker.py +0 -0
  218. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/collector.py +0 -0
  219. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/core.py +0 -0
  220. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/diff_index.py +0 -0
  221. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/evidence.py +0 -0
  222. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/findings.py +0 -0
  223. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/github_poster.py +0 -0
  224. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/martian.py +0 -0
  225. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/metrics.py +0 -0
  226. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/prompts.py +0 -0
  227. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/providers/__init__.py +0 -0
  228. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/providers/base.py +0 -0
  229. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/providers/gemini.py +0 -0
  230. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/providers/mistral.py +0 -0
  231. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/providers/ollama.py +0 -0
  232. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/providers/openrouter.py +0 -0
  233. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/recording.py +0 -0
  234. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/render.py +0 -0
  235. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/review_fingerprint.py +0 -0
  236. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/runner.py +0 -0
  237. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/guardian/skeptic.py +0 -0
  238. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/py.typed +0 -0
  239. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/analysis/__init__.py +0 -0
  240. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/analysis/analyzer.py +0 -0
  241. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/analysis/anomaly.py +0 -0
  242. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/analysis/cohesion.py +0 -0
  243. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/analysis/health.py +0 -0
  244. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/analysis/suggest_service.py +0 -0
  245. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/context/__init__.py +0 -0
  246. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/context/audit.py +0 -0
  247. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/context/context_service.py +0 -0
  248. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/context/orphans.py +0 -0
  249. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/context/prompt.py +0 -0
  250. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/context/snippet.py +0 -0
  251. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/__init__.py +0 -0
  252. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/_scc.py +0 -0
  253. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/drift.py +0 -0
  254. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/drift_service.py +0 -0
  255. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/fingerprint.py +0 -0
  256. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/fractal.py +0 -0
  257. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/ontology_init.py +0 -0
  258. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/quotient.py +0 -0
  259. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/drift/triads.py +0 -0
  260. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/engine.py +0 -0
  261. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/fqn.py +0 -0
  262. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/render/__init__.py +0 -0
  263. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/render/graph_json.py +0 -0
  264. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/render/mermaid.py +0 -0
  265. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/query/render/metrics.py +0 -0
  266. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/resolver/.gitkeep +0 -0
  267. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/resolver/__init__.py +0 -0
  268. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/resolver/symbols.py +0 -0
  269. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/resolver/uplift.py +0 -0
  270. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/src/cgis/storage/.gitkeep +0 -0
  271. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/integration/.gitkeep +0 -0
  272. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/.gitkeep +0 -0
  273. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/__init__.py +0 -0
  274. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/conftest.py +0 -0
  275. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_architecture.py +0 -0
  276. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_drift.py +0 -0
  277. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_fractal.py +0 -0
  278. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
  279. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_receiver_resolution.py +0 -0
  280. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_self_parse.py +0 -0
  281. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/self_parsing/test_suggest.py +0 -0
  282. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/.gitkeep +0 -0
  283. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/conftest.py +0 -0
  284. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/guardian_stubs.py +0 -0
  285. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/review_path_inventory.txt +0 -0
  286. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test___main__.py +0 -0
  287. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_analyzer.py +0 -0
  288. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_annotation_edges.py +0 -0
  289. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_audit.py +0 -0
  290. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
  291. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  292. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_check_pytest_raises.py +0 -0
  293. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_check_test_count.py +0 -0
  294. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_cohesion.py +0 -0
  295. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_context_service.py +0 -0
  296. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_di_acceptance.py +0 -0
  297. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_drift.py +0 -0
  298. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_drift_service.py +0 -0
  299. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_extractor_registry.py +0 -0
  300. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_fingerprint.py +0 -0
  301. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_fqn.py +0 -0
  302. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_fractal.py +0 -0
  303. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_freshness.py +0 -0
  304. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_gen_ideal_graph.py +0 -0
  305. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_generate_mcp_ref.py +0 -0
  306. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_generated.py +0 -0
  307. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_graph_json.py +0 -0
  308. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_axes.py +0 -0
  309. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_bench.py +0 -0
  310. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_bench_script.py +0 -0
  311. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_calibrate.py +0 -0
  312. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
  313. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_chunked.py +0 -0
  314. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_chunker.py +0 -0
  315. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_collector.py +0 -0
  316. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_core.py +0 -0
  317. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_diff_index.py +0 -0
  318. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_evidence.py +0 -0
  319. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_findings.py +0 -0
  320. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_martian.py +0 -0
  321. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_martian_script.py +0 -0
  322. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_martian_union.py +0 -0
  323. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_metrics.py +0 -0
  324. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  325. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  326. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  327. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_openrouter.py +0 -0
  328. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_poster.py +0 -0
  329. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_providers.py +0 -0
  330. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_providers_name.py +0 -0
  331. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_recording.py +0 -0
  332. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_render.py +0 -0
  333. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
  334. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_review_script.py +0 -0
  335. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_runner.py +0 -0
  336. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_salvage.py +0 -0
  337. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_guardian_skeptic.py +0 -0
  338. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_health_scorer.py +0 -0
  339. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_import_acceptance.py +0 -0
  340. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_mermaid.py +0 -0
  341. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_metrics.py +0 -0
  342. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_models.py +0 -0
  343. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_name_load_positions.py +0 -0
  344. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_ontology_compliance.py +0 -0
  345. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_ontology_init.py +0 -0
  346. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_orphans.py +0 -0
  347. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_paths.py +0 -0
  348. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_patterns_yaml.py +0 -0
  349. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_pipeline.py +0 -0
  350. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_prompt.py +0 -0
  351. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_python_annotations.py +0 -0
  352. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_python_extractor.py +0 -0
  353. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_query_coverage.py +0 -0
  354. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_quotient.py +0 -0
  355. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_recordings_from_corpus.py +0 -0
  356. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_resolver.py +0 -0
  357. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_resolver_indices.py +0 -0
  358. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_resolver_symbols.py +0 -0
  359. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_review_fingerprint_closure.py +0 -0
  360. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
  361. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
  362. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_review_fingerprint_record.py +0 -0
  363. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_self_types.py +0 -0
  364. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_skeptic_arms.py +0 -0
  365. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_snippet.py +0 -0
  366. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_sqlite_store.py +0 -0
  367. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_suggest_service.py +0 -0
  368. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_temperature_source.py +0 -0
  369. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_triads.py +0 -0
  370. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_typescript_extractor.py +0 -0
  371. {codegraph_brain-0.20.0 → codegraph_brain-0.22.0}/tests/unit/test_uplift.py +0 -0
@@ -46,9 +46,9 @@ jobs:
46
46
  - name: Compute graph health badge
47
47
  run: uv run --frozen python scripts/generate_health.py --db /tmp/self_graph.db
48
48
 
49
- - name: Inject graph into README.md
49
+ - name: Inject graph into HOW_IT_WORKS.md
50
50
  run: |
51
- uv run --frozen python scripts/inject_readme_graph.py \
51
+ uv run --frozen python scripts/inject_architecture_graph.py \
52
52
  --db /tmp/self_graph.db \
53
53
  --fqn "cgis.pipeline.IngestionPipeline.run" \
54
54
  --depth 1 \
@@ -74,10 +74,8 @@ jobs:
74
74
  Updates:
75
75
  - Pipeline flow diagram (`docs/architecture/diagrams/pipeline_flow.mermaid`)
76
76
  - Graph health badge (`docs/architecture/health_badge.json`)
77
- - Schema docs (`docs/architecture/HOW_IT_WORKS.md`)
77
+ - Schema docs and pipeline graph (`docs/architecture/HOW_IT_WORKS.md`)
78
78
  - MCP reference (`docs/how-to/MCP_REFERENCE.md`)
79
- - README diagram injection
80
79
  labels: "docs,automated"
81
80
  add-paths: |
82
- README.md
83
81
  docs/
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.22.0"
3
+ }
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.22.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.21.0...codegraph-brain-v0.22.0) (2026-09-17)
4
+
5
+
6
+ ### Features
7
+
8
+ * **mcp:** publishable to the official MCP Registry ([#464](https://github.com/zaebee/codegraph-brain/issues/464)) ([328ef6e](https://github.com/zaebee/codegraph-brain/commit/328ef6e655fa9324c2dc9940928edc065c28561e))
9
+
10
+
11
+ ### Documentation
12
+
13
+ * **readme:** lead with what CGIS does, for whom, and how to try it ([#462](https://github.com/zaebee/codegraph-brain/issues/462)) ([3288c3e](https://github.com/zaebee/codegraph-brain/commit/3288c3ea44cf0099651bb8b9a0224b5c0044b16f))
14
+
15
+ ## [0.21.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.20.0...codegraph-brain-v0.21.0) (2026-09-16)
16
+
17
+
18
+ ### Features
19
+
20
+ * **resolver:** resolve JS/TS runtime globals into js_builtins.* ([#111](https://github.com/zaebee/codegraph-brain/issues/111)) ([#453](https://github.com/zaebee/codegraph-brain/issues/453)) ([84e790b](https://github.com/zaebee/codegraph-brain/commit/84e790b404f7a515e048f7a2370b8865b71912ff))
21
+
22
+
23
+ ### Bug Fixes
24
+
25
+ * **cli:** a full ingest into a database records file hashes ([#461](https://github.com/zaebee/codegraph-brain/issues/461)) ([e0a4a5e](https://github.com/zaebee/codegraph-brain/commit/e0a4a5ec34f8b0b34220f3f318ce0edc99ed1d9b))
26
+ * **pipeline:** rebuild when a change alters what other files resolve against ([#38](https://github.com/zaebee/codegraph-brain/issues/38)) ([#458](https://github.com/zaebee/codegraph-brain/issues/458)) ([8126fd6](https://github.com/zaebee/codegraph-brain/commit/8126fd6377c82613f9f8a76f33253a8cd9e636f0))
27
+ * **resolver:** Python stdlib names are STDLIB only in Python sources ([#454](https://github.com/zaebee/codegraph-brain/issues/454)) ([#457](https://github.com/zaebee/codegraph-brain/issues/457)) ([15e7ba1](https://github.com/zaebee/codegraph-brain/commit/15e7ba17ae49e2e3c10a2ef9f6cf1f11e663edfb))
28
+
29
+
30
+ ### Documentation
31
+
32
+ * auto-sync architecture graph and MCP reference ([#456](https://github.com/zaebee/codegraph-brain/issues/456)) ([ae24054](https://github.com/zaebee/codegraph-brain/commit/ae24054361935dbb1a1f9471eea7b4b949ab8a10))
33
+ * auto-sync architecture graph and MCP reference ([#460](https://github.com/zaebee/codegraph-brain/issues/460)) ([a341063](https://github.com/zaebee/codegraph-brain/commit/a3410631511802bdc9851decadbbbf25b40d8d22))
34
+
3
35
  ## [0.20.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.19.0...codegraph-brain-v0.20.0) (2026-09-11)
4
36
 
5
37
 
@@ -0,0 +1,224 @@
1
+ Metadata-Version: 2.5
2
+ Name: codegraph-brain
3
+ Version: 0.22.0
4
+ Summary: Semantic code graph for AI agents — deterministic FQN resolution, impact analysis and architectural drift gates, exposed over MCP.
5
+ Project-URL: Homepage, https://github.com/zaebee/codegraph-brain
6
+ Project-URL: Repository, https://github.com/zaebee/codegraph-brain
7
+ Project-URL: Documentation, https://github.com/zaebee/codegraph-brain#readme
8
+ Project-URL: Changelog, https://github.com/zaebee/codegraph-brain/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/zaebee/codegraph-brain/issues
10
+ Author-email: Andrey G <zaebuntu@gmail.com>
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: ai-agents,architecture,call-graph,code-graph,code-review,llm,mcp,model-context-protocol,static-analysis,tree-sitter
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Software Development :: Documentation
22
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
+ Classifier: Topic :: Software Development :: Quality Assurance
24
+ Classifier: Typing :: Typed
25
+ Requires-Python: >=3.12
26
+ Requires-Dist: httpx>=0.27
27
+ Requires-Dist: mcp[cli]>=2
28
+ Requires-Dist: pydantic>=2.13.4
29
+ Requires-Dist: pyyaml>=6.0.2
30
+ Requires-Dist: rich>=15.0.0
31
+ Requires-Dist: structlog>=25.5.0
32
+ Requires-Dist: tree-sitter-python>=0.25.0
33
+ Requires-Dist: tree-sitter-typescript>=0.23.2
34
+ Requires-Dist: tree-sitter>=0.25.2
35
+ Requires-Dist: typer>=0.26.7
36
+ Provides-Extra: all
37
+ Requires-Dist: cohere>=5.0.0; extra == 'all'
38
+ Requires-Dist: duckdb>=1.1.0; extra == 'all'
39
+ Requires-Dist: google-genai>=0.8.0; extra == 'all'
40
+ Requires-Dist: mistralai>=1.0.0; extra == 'all'
41
+ Requires-Dist: ollama>=0.3.0; extra == 'all'
42
+ Provides-Extra: analytics
43
+ Requires-Dist: duckdb>=1.1.0; extra == 'analytics'
44
+ Provides-Extra: guardian
45
+ Requires-Dist: cohere>=5.0.0; extra == 'guardian'
46
+ Requires-Dist: google-genai>=0.8.0; extra == 'guardian'
47
+ Requires-Dist: mistralai>=1.0.0; extra == 'guardian'
48
+ Requires-Dist: ollama>=0.3.0; extra == 'guardian'
49
+ Description-Content-Type: text/markdown
50
+
51
+ # 🧠 CGIS: Code Graph Intelligence System
52
+ <!-- mcp-name: io.github.zaebee/codegraph-brain -->
53
+ ### *A code graph your AI agent can query instead of guess*
54
+
55
+ [![Continuous Integration](https://github.com/zaebee/codegraph-brain/actions/workflows/ci.yml/badge.svg)](https://github.com/zaebee/codegraph-brain/actions/workflows/ci.yml)
56
+ [![Graph Integrity](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/zaebee/codegraph-brain/main/docs/architecture/health_badge.json)](https://github.com/zaebee/codegraph-brain/actions/workflows/autodoc.yml)
57
+ [![PyPI](https://img.shields.io/pypi/v/codegraph-brain)](https://pypi.org/project/codegraph-brain/)
58
+
59
+ **Ask "what breaks if I change this?" and get the call chain, not a guess.**
60
+
61
+ CGIS parses a repository with tree-sitter into a graph of fully qualified symbols and the calls, imports and containment between them, stores it in SQLite, and serves it to AI agents over MCP. An agent that would otherwise grep and read whole files asks the graph instead.
62
+
63
+ - **Languages:** Python · TypeScript / TSX
64
+ - **Runs:** locally — no account, no telemetry; the graph never leaves your disk ([the one opt-in exception](https://github.com/zaebee/codegraph-brain/blob/main/PRIVACY.md))
65
+
66
+ ```console
67
+ $ cgis ingest src --output graph.db
68
+ $ cgis impact cgis.query.engine.QueryEngine.get_flow_graph --db graph.db --depth 2
69
+ 🔍 Analyzing transitive upstream callers of: cgis.query.engine.QueryEngine.get_flow_graph
70
+
71
+ METHOD cgis.query.engine.QueryEngine.get_flow_graph (cgis/query/engine.py:215)
72
+ ├── FUNCTION cgis.query.context.context_service._collect_callees (cgis/query/context/context_service.py:44)
73
+ │ └── FUNCTION cgis.query.context.context_service.build_context (cgis/query/context/context_service.py:96)
74
+ └── METHOD cgis.guardian.collector.ContextCollector._graph_sections (cgis/guardian/collector.py:174)
75
+ ├── METHOD cgis.guardian.collector.ContextCollector.collect_graph_context (cgis/guardian/collector.py:213)
76
+ └── METHOD cgis.guardian.collector.ContextCollector.collect_for_chunk (cgis/guardian/collector.py:303)
77
+ ```
78
+
79
+ *Real output — CGIS run on its own source.*
80
+
81
+ ---
82
+
83
+ ## 🚀 Quickstart
84
+
85
+ ### In Claude Code (fastest)
86
+
87
+ ```bash
88
+ /plugin marketplace add zaebee/codegraph-brain
89
+ /plugin install cgis@codegraph-brain
90
+ ```
91
+
92
+ That ships the MCP server, a skill that teaches the agent *when* to query the graph instead of reading files, and `/cgis:ingest` to build the graph on first use. The server is pulled from PyPI on demand via `uvx`, so there is nothing to clone or build.
93
+
94
+ ### Any other MCP client (Cursor, Claude Desktop, …)
95
+
96
+ ```json
97
+ {
98
+ "mcpServers": {
99
+ "cgis": { "command": "uvx", "args": ["--from", "codegraph-brain", "cgis-mcp"] }
100
+ }
101
+ }
102
+ ```
103
+
104
+ ### From the terminal
105
+
106
+ ```bash
107
+ # No install needed — uvx fetches it from PyPI
108
+ uvx --from codegraph-brain cgis ingest ./my-project --output graph.db
109
+
110
+ uvx --from codegraph-brain cgis impact "my_module.core_function" --db graph.db --depth 5 # who calls this
111
+ uvx --from codegraph-brain cgis trace "my_module.MyClass.run" --db graph.db --depth 3 # what this calls
112
+ # add --format mermaid (or json) to either for a diagram or machine-readable output
113
+ ```
114
+
115
+ Or install it for good: `pip install codegraph-brain` (Python 3.12+), then use `cgis` directly. The full command list is in [CLI_USAGE.md](https://github.com/zaebee/codegraph-brain/blob/main/docs/how-to/CLI_USAGE.md).
116
+
117
+ ---
118
+
119
+ ## 📈 Proof at Real Scale
120
+
121
+ CGIS runs on a working twelve-repository estate — four languages, 8,146 commits, shipping daily. On its 512-file FastAPI backend it classifies **88.4% of 40,493 edges** definitively, and prints the remaining 11.6% instead of inventing targets for them.
122
+
123
+ **[Read the case study →](https://github.com/zaebee/codegraph-brain/blob/main/docs/CASE_STUDY.md)** — every figure measured and reproducible, including what CGIS *doesn't* cover.
124
+
125
+ ---
126
+
127
+ ## 🤔 Why a graph, and how this differs
128
+
129
+ Text retrieval hands an agent chunks that *look* related. It cannot say which of three functions named `save` a call reaches, or what sits five callers up. CGIS resolves every call site to a fully qualified name when the source allows it — and when it does not, the edge stays marked unresolved and is counted, never filled with a plausible guess.
130
+
131
+ | If you use… | CGIS adds |
132
+ | :--- | :--- |
133
+ | grep / file reads in the agent | Transitive callers and callees in one call, without spending context on whole files |
134
+ | LSP-backed symbol tools (e.g. Serena) | A persisted whole-repo graph for multi-hop impact, coupling, PageRank and drift |
135
+ | A repo map (e.g. aider) | Resolved edges you can traverse and audit, with the resolved/unresolved ratio reported |
136
+
137
+ ---
138
+
139
+ ## 🤖 MCP Tools
140
+
141
+ The main tools:
142
+
143
+ | Tool | Answers |
144
+ | :--- | :--- |
145
+ | `cgis_ingest` | Build or incrementally refresh the graph |
146
+ | `cgis_find_symbol` | Partial name → candidate FQNs |
147
+ | `cgis_analyze_impact` | What breaks upstream if this changes? |
148
+ | `cgis_trace_flow` | What does this call, transitively? |
149
+ | `cgis_get_structure` | Class / module hierarchy |
150
+ | `cgis_context` | A compact GraphRAG context package for one symbol |
151
+ | `cgis_metrics` | Coupling, god classes, PageRank, package cohesion |
152
+ | `cgis_audit_reachability` | Authz / IDOR coverage — does every handler reach its guard? |
153
+ | `cgis_drift` | How far each domain has moved from its declared pattern |
154
+ | `cgis_validate` | Graph integrity: resolved vs unresolved edges |
155
+
156
+ All 14 tools, with parameters: [MCP_REFERENCE.md](https://github.com/zaebee/codegraph-brain/blob/main/docs/how-to/MCP_REFERENCE.md).
157
+
158
+ ---
159
+
160
+ ## 🏗️ How It Works
161
+
162
+ 1. **Extract** — tree-sitter parsers turn each file into nodes and raw call edges.
163
+ 2. **Resolve** — the `ResolverEngine` maps raw calls to fully qualified names, or leaves them explicitly unresolved.
164
+ 3. **Store** — SQLite holds the graph; queries are breadth-first traversals over it.
165
+
166
+ ```mermaid
167
+ graph LR
168
+ A[Source Code] --> B[Extractors]
169
+ B --> C[Resolver Engine]
170
+ C --> D[(SQLite Graph DB)]
171
+ D --> E[MCP Server]
172
+ D --> F[Prompt Compiler]
173
+ E --> G[AI Agents]
174
+ F --> G
175
+ ```
176
+
177
+ The details — and a pipeline graph CGIS regenerates from its own source on every change — are in [HOW_IT_WORKS.md](https://github.com/zaebee/codegraph-brain/blob/main/docs/architecture/HOW_IT_WORKS.md).
178
+
179
+ ---
180
+
181
+ ## 🛡️ Guardian: Graph-Aware Code Review
182
+
183
+ **Guardian** is CGIS's built-in LLM reviewer — it reviews pull requests using the *graph* as context, not just the diff text. It runs in CI and posts inline comments anchored to the exact line.
184
+
185
+ * **Two-stage, recall-first:** a **finder** surfaces every plausible defect (optimised for recall), then a separate **skeptic** pass filters false positives — closer to how human reviewers work, and far more reliable than a single precision-gated prompt.
186
+ * **Local *or* cloud, no lock-in:** point it at **Ollama** (`qwen2.5-coder`, `llama3.1`, `granite-code`, …) for free local inference, or at **Mistral / Gemini** in the cloud. You can even mix them — a strong cloud finder with a free local *cross-model* skeptic.
187
+ * **Graph-aware context:** the reviewer sees impact graphs, architectural drift, and project ontology — so it catches structural and convention defects a flat-diff reviewer can't.
188
+ * **Deterministic anchoring:** every inline comment is positioned by a verbatim quote from the diff, not the model's (often wrong) line guess.
189
+ * **Dogfooded & measured:** Guardian reviews CGIS's *own* pull requests, and a benchmark harness scores it against curated ground truth — so prompt changes are validated, not guessed.
190
+
191
+ ```bash
192
+ # Build the graph, then review a PR with a local model (no API key)
193
+ cgis ingest ./src --output graph.db
194
+ GUARDIAN_PROVIDER=ollama GUARDIAN_MODEL=qwen2.5-coder:14b \
195
+ uv run python scripts/guardian_review.py --pr 123 --db graph.db --inline
196
+ ```
197
+
198
+ No GPU on hand? **[Benchmark it on a notebook GPU →](https://github.com/zaebee/codegraph-brain/blob/main/docs/GUARDIAN_LOCAL_BENCH.md)** — free end to end, since the fixtures score without an LLM judge. Or **[point Guardian at a remote Ollama →](https://github.com/zaebee/codegraph-brain/blob/main/docs/GUARDIAN_REMOTE_OLLAMA.md)** — over an frp stcp tunnel, no public port, and a guard that refuses a review of a silently truncated prompt.
199
+
200
+ ---
201
+
202
+ ## 🔒 Privacy
203
+
204
+ CGIS collects nothing: no telemetry, no analytics, no account. Your code and the graph built from it stay on your machine. The one exception is opt-in: Guardian, if you run it with a cloud model, sends the reviewed diff to the provider you chose. See [PRIVACY.md](https://github.com/zaebee/codegraph-brain/blob/main/PRIVACY.md).
205
+
206
+ ---
207
+
208
+ ## 🛠️ Development
209
+
210
+ Requires Python 3.12+ and [`uv`](https://docs.astral.sh/uv/).
211
+
212
+ ```bash
213
+ git clone https://github.com/zaebee/codegraph-brain && cd codegraph-brain
214
+ uv sync
215
+ make pytest
216
+ ```
217
+
218
+ See [CONTRIBUTING.md](https://github.com/zaebee/codegraph-brain/blob/main/CONTRIBUTING.md) for the standards: strict MyPy, linting, ontology compliance.
219
+
220
+ ---
221
+
222
+ ## 💼 Architecture Audit
223
+
224
+ CGIS is free and you can run it yourself. If you would rather have the analysis than the tool, I run a fixed-price audit of your codebase's structure — authorisation coverage, blast radius, coupling, architectural drift — delivered in five working days, $2,400 fixed, with an explicit list of what the analysis cannot see. **[Read what's included →](https://github.com/zaebee/codegraph-brain/blob/main/docs/AUDIT.md)**
@@ -0,0 +1,174 @@
1
+ # 🧠 CGIS: Code Graph Intelligence System
2
+ <!-- mcp-name: io.github.zaebee/codegraph-brain -->
3
+ ### *A code graph your AI agent can query instead of guess*
4
+
5
+ [![Continuous Integration](https://github.com/zaebee/codegraph-brain/actions/workflows/ci.yml/badge.svg)](https://github.com/zaebee/codegraph-brain/actions/workflows/ci.yml)
6
+ [![Graph Integrity](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/zaebee/codegraph-brain/main/docs/architecture/health_badge.json)](https://github.com/zaebee/codegraph-brain/actions/workflows/autodoc.yml)
7
+ [![PyPI](https://img.shields.io/pypi/v/codegraph-brain)](https://pypi.org/project/codegraph-brain/)
8
+
9
+ **Ask "what breaks if I change this?" and get the call chain, not a guess.**
10
+
11
+ CGIS parses a repository with tree-sitter into a graph of fully qualified symbols and the calls, imports and containment between them, stores it in SQLite, and serves it to AI agents over MCP. An agent that would otherwise grep and read whole files asks the graph instead.
12
+
13
+ - **Languages:** Python · TypeScript / TSX
14
+ - **Runs:** locally — no account, no telemetry; the graph never leaves your disk ([the one opt-in exception](https://github.com/zaebee/codegraph-brain/blob/main/PRIVACY.md))
15
+
16
+ ```console
17
+ $ cgis ingest src --output graph.db
18
+ $ cgis impact cgis.query.engine.QueryEngine.get_flow_graph --db graph.db --depth 2
19
+ 🔍 Analyzing transitive upstream callers of: cgis.query.engine.QueryEngine.get_flow_graph
20
+
21
+ METHOD cgis.query.engine.QueryEngine.get_flow_graph (cgis/query/engine.py:215)
22
+ ├── FUNCTION cgis.query.context.context_service._collect_callees (cgis/query/context/context_service.py:44)
23
+ │ └── FUNCTION cgis.query.context.context_service.build_context (cgis/query/context/context_service.py:96)
24
+ └── METHOD cgis.guardian.collector.ContextCollector._graph_sections (cgis/guardian/collector.py:174)
25
+ ├── METHOD cgis.guardian.collector.ContextCollector.collect_graph_context (cgis/guardian/collector.py:213)
26
+ └── METHOD cgis.guardian.collector.ContextCollector.collect_for_chunk (cgis/guardian/collector.py:303)
27
+ ```
28
+
29
+ *Real output — CGIS run on its own source.*
30
+
31
+ ---
32
+
33
+ ## 🚀 Quickstart
34
+
35
+ ### In Claude Code (fastest)
36
+
37
+ ```bash
38
+ /plugin marketplace add zaebee/codegraph-brain
39
+ /plugin install cgis@codegraph-brain
40
+ ```
41
+
42
+ That ships the MCP server, a skill that teaches the agent *when* to query the graph instead of reading files, and `/cgis:ingest` to build the graph on first use. The server is pulled from PyPI on demand via `uvx`, so there is nothing to clone or build.
43
+
44
+ ### Any other MCP client (Cursor, Claude Desktop, …)
45
+
46
+ ```json
47
+ {
48
+ "mcpServers": {
49
+ "cgis": { "command": "uvx", "args": ["--from", "codegraph-brain", "cgis-mcp"] }
50
+ }
51
+ }
52
+ ```
53
+
54
+ ### From the terminal
55
+
56
+ ```bash
57
+ # No install needed — uvx fetches it from PyPI
58
+ uvx --from codegraph-brain cgis ingest ./my-project --output graph.db
59
+
60
+ uvx --from codegraph-brain cgis impact "my_module.core_function" --db graph.db --depth 5 # who calls this
61
+ uvx --from codegraph-brain cgis trace "my_module.MyClass.run" --db graph.db --depth 3 # what this calls
62
+ # add --format mermaid (or json) to either for a diagram or machine-readable output
63
+ ```
64
+
65
+ Or install it for good: `pip install codegraph-brain` (Python 3.12+), then use `cgis` directly. The full command list is in [CLI_USAGE.md](https://github.com/zaebee/codegraph-brain/blob/main/docs/how-to/CLI_USAGE.md).
66
+
67
+ ---
68
+
69
+ ## 📈 Proof at Real Scale
70
+
71
+ CGIS runs on a working twelve-repository estate — four languages, 8,146 commits, shipping daily. On its 512-file FastAPI backend it classifies **88.4% of 40,493 edges** definitively, and prints the remaining 11.6% instead of inventing targets for them.
72
+
73
+ **[Read the case study →](https://github.com/zaebee/codegraph-brain/blob/main/docs/CASE_STUDY.md)** — every figure measured and reproducible, including what CGIS *doesn't* cover.
74
+
75
+ ---
76
+
77
+ ## 🤔 Why a graph, and how this differs
78
+
79
+ Text retrieval hands an agent chunks that *look* related. It cannot say which of three functions named `save` a call reaches, or what sits five callers up. CGIS resolves every call site to a fully qualified name when the source allows it — and when it does not, the edge stays marked unresolved and is counted, never filled with a plausible guess.
80
+
81
+ | If you use… | CGIS adds |
82
+ | :--- | :--- |
83
+ | grep / file reads in the agent | Transitive callers and callees in one call, without spending context on whole files |
84
+ | LSP-backed symbol tools (e.g. Serena) | A persisted whole-repo graph for multi-hop impact, coupling, PageRank and drift |
85
+ | A repo map (e.g. aider) | Resolved edges you can traverse and audit, with the resolved/unresolved ratio reported |
86
+
87
+ ---
88
+
89
+ ## 🤖 MCP Tools
90
+
91
+ The main tools:
92
+
93
+ | Tool | Answers |
94
+ | :--- | :--- |
95
+ | `cgis_ingest` | Build or incrementally refresh the graph |
96
+ | `cgis_find_symbol` | Partial name → candidate FQNs |
97
+ | `cgis_analyze_impact` | What breaks upstream if this changes? |
98
+ | `cgis_trace_flow` | What does this call, transitively? |
99
+ | `cgis_get_structure` | Class / module hierarchy |
100
+ | `cgis_context` | A compact GraphRAG context package for one symbol |
101
+ | `cgis_metrics` | Coupling, god classes, PageRank, package cohesion |
102
+ | `cgis_audit_reachability` | Authz / IDOR coverage — does every handler reach its guard? |
103
+ | `cgis_drift` | How far each domain has moved from its declared pattern |
104
+ | `cgis_validate` | Graph integrity: resolved vs unresolved edges |
105
+
106
+ All 14 tools, with parameters: [MCP_REFERENCE.md](https://github.com/zaebee/codegraph-brain/blob/main/docs/how-to/MCP_REFERENCE.md).
107
+
108
+ ---
109
+
110
+ ## 🏗️ How It Works
111
+
112
+ 1. **Extract** — tree-sitter parsers turn each file into nodes and raw call edges.
113
+ 2. **Resolve** — the `ResolverEngine` maps raw calls to fully qualified names, or leaves them explicitly unresolved.
114
+ 3. **Store** — SQLite holds the graph; queries are breadth-first traversals over it.
115
+
116
+ ```mermaid
117
+ graph LR
118
+ A[Source Code] --> B[Extractors]
119
+ B --> C[Resolver Engine]
120
+ C --> D[(SQLite Graph DB)]
121
+ D --> E[MCP Server]
122
+ D --> F[Prompt Compiler]
123
+ E --> G[AI Agents]
124
+ F --> G
125
+ ```
126
+
127
+ The details — and a pipeline graph CGIS regenerates from its own source on every change — are in [HOW_IT_WORKS.md](https://github.com/zaebee/codegraph-brain/blob/main/docs/architecture/HOW_IT_WORKS.md).
128
+
129
+ ---
130
+
131
+ ## 🛡️ Guardian: Graph-Aware Code Review
132
+
133
+ **Guardian** is CGIS's built-in LLM reviewer — it reviews pull requests using the *graph* as context, not just the diff text. It runs in CI and posts inline comments anchored to the exact line.
134
+
135
+ * **Two-stage, recall-first:** a **finder** surfaces every plausible defect (optimised for recall), then a separate **skeptic** pass filters false positives — closer to how human reviewers work, and far more reliable than a single precision-gated prompt.
136
+ * **Local *or* cloud, no lock-in:** point it at **Ollama** (`qwen2.5-coder`, `llama3.1`, `granite-code`, …) for free local inference, or at **Mistral / Gemini** in the cloud. You can even mix them — a strong cloud finder with a free local *cross-model* skeptic.
137
+ * **Graph-aware context:** the reviewer sees impact graphs, architectural drift, and project ontology — so it catches structural and convention defects a flat-diff reviewer can't.
138
+ * **Deterministic anchoring:** every inline comment is positioned by a verbatim quote from the diff, not the model's (often wrong) line guess.
139
+ * **Dogfooded & measured:** Guardian reviews CGIS's *own* pull requests, and a benchmark harness scores it against curated ground truth — so prompt changes are validated, not guessed.
140
+
141
+ ```bash
142
+ # Build the graph, then review a PR with a local model (no API key)
143
+ cgis ingest ./src --output graph.db
144
+ GUARDIAN_PROVIDER=ollama GUARDIAN_MODEL=qwen2.5-coder:14b \
145
+ uv run python scripts/guardian_review.py --pr 123 --db graph.db --inline
146
+ ```
147
+
148
+ No GPU on hand? **[Benchmark it on a notebook GPU →](https://github.com/zaebee/codegraph-brain/blob/main/docs/GUARDIAN_LOCAL_BENCH.md)** — free end to end, since the fixtures score without an LLM judge. Or **[point Guardian at a remote Ollama →](https://github.com/zaebee/codegraph-brain/blob/main/docs/GUARDIAN_REMOTE_OLLAMA.md)** — over an frp stcp tunnel, no public port, and a guard that refuses a review of a silently truncated prompt.
149
+
150
+ ---
151
+
152
+ ## 🔒 Privacy
153
+
154
+ CGIS collects nothing: no telemetry, no analytics, no account. Your code and the graph built from it stay on your machine. The one exception is opt-in: Guardian, if you run it with a cloud model, sends the reviewed diff to the provider you chose. See [PRIVACY.md](https://github.com/zaebee/codegraph-brain/blob/main/PRIVACY.md).
155
+
156
+ ---
157
+
158
+ ## 🛠️ Development
159
+
160
+ Requires Python 3.12+ and [`uv`](https://docs.astral.sh/uv/).
161
+
162
+ ```bash
163
+ git clone https://github.com/zaebee/codegraph-brain && cd codegraph-brain
164
+ uv sync
165
+ make pytest
166
+ ```
167
+
168
+ See [CONTRIBUTING.md](https://github.com/zaebee/codegraph-brain/blob/main/CONTRIBUTING.md) for the standards: strict MyPy, linting, ontology compliance.
169
+
170
+ ---
171
+
172
+ ## 💼 Architecture Audit
173
+
174
+ CGIS is free and you can run it yourself. If you would rather have the analysis than the tool, I run a fixed-price audit of your codebase's structure — authorisation coverage, blast radius, coupling, architectural drift — delivered in five working days, $2,400 fixed, with an explicit list of what the analysis cannot see. **[Read what's included →](https://github.com/zaebee/codegraph-brain/blob/main/docs/AUDIT.md)**
@@ -162,3 +162,80 @@ Two BFS traversals are exposed via `QueryEngine`:
162
162
  | `get_impact_graph(fqn)` | Upstream (incoming) | "What breaks if X changes?" |
163
163
 
164
164
  Both return `(nodes, edges)` suitable for rendering as a Mermaid diagram.
165
+
166
+ ---
167
+
168
+ ## Live Pipeline Graph
169
+
170
+ The callees of `IngestionPipeline.run`, regenerated from CGIS's own source by the autodoc workflow on pushes to `main`, which opens a docs PR with the result.
171
+
172
+ <!-- START_CGIS_GRAPH -->
173
+ > *Auto-generated by CGIS parsing its own source — the tool documents itself.*
174
+
175
+ ```mermaid
176
+ graph TD
177
+ classDef classNode fill:#e8f5e9,stroke:#2e7d32,stroke-width:1.5px,color:#1b5e20;
178
+ classDef funcNode fill:#e3f2fd,stroke:#1565c0,stroke-width:1.5px,color:#0d47a1;
179
+ classDef methodNode fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#4a148c;
180
+ classDef unresolvedNode fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px,stroke-dasharray: 4 4,color:#f57f17;
181
+ classDef defaultNode fill:#fafafa,stroke:#9e9e9e,stroke-width:1.5px,color:#212121;
182
+ classDef stdlibNode fill:#eceff1,stroke:#607d8b,stroke-width:1px,color:#455a64;
183
+ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dasharray: 3 3,color:#bf360c;
184
+
185
+ subgraph sg_models["models.py"]
186
+ models_Edge["Edge (models.py:142)"]:::classNode
187
+ models_Node["Node (models.py:85)"]:::classNode
188
+ end
189
+ subgraph sg_pipeline["pipeline.py"]
190
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:249)"]:::methodNode
191
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:384)"]:::methodNode
192
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:310)"]:::methodNode
193
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:334)"]:::methodNode
194
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:212)"]:::methodNode
195
+ pipeline_IngestionPipeline_run["run (pipeline.py:99)"]:::methodNode
196
+ pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:82)"]:::methodNode
197
+ end
198
+ subgraph sg_engine["engine.py"]
199
+ engine_ResolverEngine["ResolverEngine (engine.py:20)"]:::classNode
200
+ engine_ResolverEngine_resolve["resolve (engine.py:37)"]:::methodNode
201
+ end
202
+ subgraph sg_uplift["uplift.py"]
203
+ uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
204
+ uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
205
+ end
206
+ subgraph sg_sqlite_store["sqlite_store.py"]
207
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:42)"]:::classNode
208
+ end
209
+ pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
210
+ pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
211
+ pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
212
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
213
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_get_extractor
214
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_process_file
215
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_is_noop_incremental
216
+ pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine
217
+ pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine_resolve
218
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_cross_file_inputs_changed
219
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_run
220
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_persist_incremental
221
+ pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine_execute_uplift
222
+ pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine
223
+ ```
224
+
225
+ | Symbol | Type | File |
226
+ |--------|------|------|
227
+ | `Node` | CLASS | [`models.py:85`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L85) |
228
+ | `Edge` | CLASS | [`models.py:142`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L142) |
229
+ | `workspace_root` | METHOD | [`pipeline.py:82`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L82) |
230
+ | `run` | METHOD | [`pipeline.py:99`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L99) |
231
+ | `_process_file` | METHOD | [`pipeline.py:212`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L212) |
232
+ | `_cross_file_inputs_changed` | METHOD | [`pipeline.py:249`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L249) |
233
+ | `_is_noop_incremental` | METHOD | [`pipeline.py:310`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L310) |
234
+ | `_persist_incremental` | METHOD | [`pipeline.py:334`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L334) |
235
+ | `_get_extractor` | METHOD | [`pipeline.py:384`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L384) |
236
+ | `ResolverEngine` | CLASS | [`engine.py:20`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L20) |
237
+ | `resolve` | METHOD | [`engine.py:37`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L37) |
238
+ | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
239
+ | `execute_uplift` | METHOD | [`uplift.py:91`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L91) |
240
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:42`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L42) |
241
+ <!-- END_CGIS_GRAPH -->
@@ -12,31 +12,36 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
12
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: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
15
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:249)"]:::methodNode
16
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:384)"]:::methodNode
17
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:310)"]:::methodNode
18
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:334)"]:::methodNode
19
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:212)"]:::methodNode
20
+ pipeline_IngestionPipeline_run["run (pipeline.py:99)"]:::methodNode
21
+ pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:82)"]:::methodNode
20
22
  end
21
23
  subgraph sg_engine["engine.py"]
22
- engine_ResolverEngine["ResolverEngine (engine.py:19)"]:::classNode
23
- engine_ResolverEngine_resolve["resolve (engine.py:36)"]:::methodNode
24
+ engine_ResolverEngine["ResolverEngine (engine.py:20)"]:::classNode
25
+ engine_ResolverEngine_resolve["resolve (engine.py:37)"]:::methodNode
24
26
  end
25
27
  subgraph sg_uplift["uplift.py"]
26
28
  uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
27
29
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
28
30
  end
29
31
  subgraph sg_sqlite_store["sqlite_store.py"]
30
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:40)"]:::classNode
32
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:42)"]:::classNode
31
33
  end
32
34
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
33
35
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
34
36
  pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
37
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
35
38
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_get_extractor
36
39
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_process_file
37
40
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_is_noop_incremental
38
41
  pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine
39
42
  pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine_resolve
43
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_cross_file_inputs_changed
44
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_run
40
45
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_persist_incremental
41
46
  pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine_execute_uplift
42
47
  pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine
@@ -237,9 +237,11 @@ Scan a local directory, extract all symbols, resolve links, and build the graph
237
237
 
238
238
  By default the ingest is **incremental**: only changed/new files are
239
239
  re-scanned, and the summary reports both what changed this run and the
240
- whole-graph total. Set ``full_rebuild=True`` to re-scan every file and
241
- overwrite the database from scratch — use this to drop nodes for files that
242
- were deleted or renamed, which an incremental run leaves behind.
240
+ whole-graph total. When a change alters what other files resolve against — a
241
+ renamed, removed or added symbol, a deleted or new file, a changed base class
242
+ or re-export — the incremental run rebuilds the whole graph itself, so edges
243
+ in unchanged files never point at symbols that no longer exist. Set
244
+ ``full_rebuild=True`` to force a re-scan of every file from scratch.
243
245
 
244
246
  | Argument | Type | Required | Description |
245
247
  | :--- | :--- | :---: | :--- |
@@ -0,0 +1,4 @@
1
+ {
2
+ "$schema": "https://glama.ai/mcp/schemas/server.json",
3
+ "maintainers": ["zaebee"]
4
+ }
@@ -7,7 +7,7 @@ packages = ["src/cgis"]
7
7
 
8
8
  [project]
9
9
  name = "codegraph-brain"
10
- version = "0.20.0"
10
+ version = "0.22.0"
11
11
  description = "Semantic code graph for AI agents — deterministic FQN resolution, impact analysis and architectural drift gates, exposed over MCP."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.12"
@@ -93,6 +93,9 @@ dev = [
93
93
  [project.scripts]
94
94
  cgis = "cgis.cli:app"
95
95
  cgis-mcp = "cgis.api.mcp_server:mcp.run"
96
+ # Same server under the package name, so `uvx codegraph-brain` starts it — what the
97
+ # MCP Registry entry (server.json, runtimeHint uvx) runs.
98
+ codegraph-brain = "cgis.api.mcp_server:mcp.run"
96
99
 
97
100
  [tool.ruff]
98
101
  # Target Python 3.12+