codegraph-brain 0.20.0__tar.gz → 0.21.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 (365) hide show
  1. codegraph_brain-0.21.0/.github/test-count-baseline +1 -0
  2. codegraph_brain-0.21.0/.release-please-manifest.json +3 -0
  3. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/CHANGELOG.md +20 -0
  4. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/PKG-INFO +24 -17
  5. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/README.md +23 -16
  6. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/architecture/diagrams/pipeline_flow.mermaid +13 -8
  7. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/how-to/MCP_REFERENCE.md +5 -3
  8. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/pyproject.toml +1 -1
  9. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/api/mcp_server.py +19 -12
  10. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/cli.py +32 -34
  11. codegraph_brain-0.21.0/src/cgis/core/js_globals.py +116 -0
  12. codegraph_brain-0.21.0/src/cgis/extractors/_typescript_bindings.py +155 -0
  13. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/typescript_extractor.py +4 -0
  14. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/pipeline.py +167 -35
  15. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/resolver/engine.py +32 -9
  16. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/resolver/indices.py +27 -1
  17. codegraph_brain-0.21.0/src/cgis/resolver/js_builtins.py +44 -0
  18. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/storage/sqlite_store.py +54 -7
  19. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_annotation_calibration.py +7 -2
  20. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_self_parse_ts.py +58 -1
  21. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_cli.py +141 -0
  22. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_mcp_server.py +38 -0
  23. codegraph_brain-0.21.0/tests/unit/test_pipeline_incremental_symbols.py +332 -0
  24. codegraph_brain-0.21.0/tests/unit/test_resolver_js_builtins.py +230 -0
  25. codegraph_brain-0.21.0/tests/unit/test_resolver_language_scope.py +128 -0
  26. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/uv.lock +1 -1
  27. codegraph_brain-0.20.0/.github/test-count-baseline +0 -1
  28. codegraph_brain-0.20.0/.release-please-manifest.json +0 -3
  29. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.claude-plugin/marketplace.json +0 -0
  30. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.gitattributes +0 -0
  31. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.github/workflows/autodoc.yml +0 -0
  32. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.github/workflows/ci.yml +0 -0
  33. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.github/workflows/guardian.yml +0 -0
  34. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.github/workflows/pr-title.yml +0 -0
  35. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.github/workflows/release-please.yml +0 -0
  36. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.gitignore +0 -0
  37. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.pre-commit-config.yaml +0 -0
  38. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/.python-version +0 -0
  39. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/CLAUDE.md +0 -0
  40. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/CONTRIBUTING.md +0 -0
  41. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/LICENSE +0 -0
  42. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/Makefile +0 -0
  43. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/PRIVACY.md +0 -0
  44. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/CURATION.md +0 -0
  45. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/calibration.jsonl +0 -0
  46. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
  47. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
  48. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
  49. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
  50. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
  51. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
  52. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
  53. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-directive-rows.jsonl +0 -0
  54. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-prohibition-rows.jsonl +0 -0
  55. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-122.yaml +0 -0
  56. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-140.yaml +0 -0
  57. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-141.yaml +0 -0
  58. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-142.yaml +0 -0
  59. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-143.yaml +0 -0
  60. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-144.yaml +0 -0
  61. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-278.yaml +0 -0
  62. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/pr-313.yaml +0 -0
  63. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/guardian/results.jsonl +0 -0
  64. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian/README.md +0 -0
  65. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian/cal_dot_com.json +0 -0
  66. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian/discourse.json +0 -0
  67. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian/grafana.json +0 -0
  68. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian/keycloak.json +0 -0
  69. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian/sentry.json +0 -0
  70. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-judged.jsonl +0 -0
  71. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  72. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  73. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-p3-run1.jsonl +0 -0
  74. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-p3-run2.jsonl +0 -0
  75. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-p3-run3.jsonl +0 -0
  76. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-plan.json +0 -0
  77. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
  78. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  79. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/benchmarks/martian-reviews.jsonl +0 -0
  80. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/data/.gitkeep +0 -0
  81. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/AUDIT.md +0 -0
  82. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/CASE_STUDY.md +0 -0
  83. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  84. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  85. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/architecture/HOW_IT_WORKS.md +0 -0
  86. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/architecture/ONTOLOGY.md +0 -0
  87. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  88. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
  89. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/architecture/health_badge.json +0 -0
  90. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/assets/.gitignore +0 -0
  91. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/assets/cgis-app-avatar.png +0 -0
  92. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/assets/cgis-app-avatar.svg +0 -0
  93. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/assets/generate_avatar.py +0 -0
  94. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/examples/.gitkeep +0 -0
  95. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/how-to/AGENT_ONBOARDING.md +0 -0
  96. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/how-to/CLI_USAGE.md +0 -0
  97. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  98. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/ontology/.gitkeep +0 -0
  99. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/ontology/core.yaml +0 -0
  100. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/ontology/domains.yaml +0 -0
  101. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/ontology/patterns.yaml +0 -0
  102. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/ontology/tolerances.lock +0 -0
  103. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/plans/2026-09-09-graph-freshness.md +0 -0
  104. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  105. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  106. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  107. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
  108. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  109. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  110. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  111. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  112. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  113. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  114. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  115. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  116. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  117. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
  118. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  119. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  120. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  121. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  122. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  123. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  124. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  125. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  126. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  127. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  128. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  129. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  130. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  131. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  132. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  133. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  134. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-09-05-annotation-graph-design.md +0 -0
  135. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/2026-09-09-graph-freshness-design.md +0 -0
  136. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/BLUEPRINT.md +0 -0
  137. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/PRD.md +0 -0
  138. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/TDD.md +0 -0
  139. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  140. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  141. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  142. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  143. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  144. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  145. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  146. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  147. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  148. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  149. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  150. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  151. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  152. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  153. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  154. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  155. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  156. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  157. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
  158. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +0 -0
  159. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/main.py +0 -0
  160. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/plugin/.claude-plugin/plugin.json +0 -0
  161. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/plugin/.mcp.json +0 -0
  162. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/plugin/README.md +0 -0
  163. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/plugin/skills/cgis/SKILL.md +0 -0
  164. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/plugin/skills/ingest/SKILL.md +0 -0
  165. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/release-please-config.json +0 -0
  166. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/backfill_calibration_fingerprint.py +0 -0
  167. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/backfill_review_fingerprint.py +0 -0
  168. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/check_pytest_raises.py +0 -0
  169. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/check_test_count.py +0 -0
  170. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/colab_bench.sh +0 -0
  171. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/gen_ideal_graph.py +0 -0
  172. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/generate_health.py +0 -0
  173. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/generate_mcp_ref.py +0 -0
  174. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/generate_schema_docs.py +0 -0
  175. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/guardian_bench.py +0 -0
  176. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/guardian_calibrate.py +0 -0
  177. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/guardian_martian.py +0 -0
  178. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/guardian_replay_skeptic.py +0 -0
  179. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/guardian_review.py +0 -0
  180. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/inject_readme_graph.py +0 -0
  181. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/ollama_visitor.sh +0 -0
  182. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/probe_closure_gap.py +0 -0
  183. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/probe_tier_ladder.py +0 -0
  184. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/recordings_from_corpus.py +0 -0
  185. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/scripts/skeptic_arms.py +0 -0
  186. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/__init__.py +0 -0
  187. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/__main__.py +0 -0
  188. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/api/.gitkeep +0 -0
  189. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/api/__init__.py +0 -0
  190. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/core/.gitkeep +0 -0
  191. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/core/coverage.py +0 -0
  192. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/core/freshness.py +0 -0
  193. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/core/generated.py +0 -0
  194. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/core/models.py +0 -0
  195. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/core/paths.py +0 -0
  196. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/.gitkeep +0 -0
  197. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/_python_annotations.py +0 -0
  198. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/_python_ast.py +0 -0
  199. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/_python_classes.py +0 -0
  200. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/_python_functions.py +0 -0
  201. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/_python_imports.py +0 -0
  202. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/_python_types.py +0 -0
  203. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/base.py +0 -0
  204. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/python_extractor.py +0 -0
  205. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/extractors/registry.py +0 -0
  206. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/__init__.py +0 -0
  207. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/axes.py +0 -0
  208. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/bench.py +0 -0
  209. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/calibrate.py +0 -0
  210. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/chunked.py +0 -0
  211. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/chunker.py +0 -0
  212. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/collector.py +0 -0
  213. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/core.py +0 -0
  214. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/diff_index.py +0 -0
  215. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/evidence.py +0 -0
  216. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/findings.py +0 -0
  217. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/github_poster.py +0 -0
  218. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/martian.py +0 -0
  219. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/metrics.py +0 -0
  220. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/prompts.py +0 -0
  221. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/providers/__init__.py +0 -0
  222. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/providers/base.py +0 -0
  223. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/providers/gemini.py +0 -0
  224. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/providers/mistral.py +0 -0
  225. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/providers/ollama.py +0 -0
  226. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/providers/openrouter.py +0 -0
  227. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/recording.py +0 -0
  228. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/render.py +0 -0
  229. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/review_fingerprint.py +0 -0
  230. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/runner.py +0 -0
  231. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/guardian/skeptic.py +0 -0
  232. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/py.typed +0 -0
  233. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/analysis/__init__.py +0 -0
  234. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/analysis/analyzer.py +0 -0
  235. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/analysis/anomaly.py +0 -0
  236. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/analysis/cohesion.py +0 -0
  237. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/analysis/health.py +0 -0
  238. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/analysis/suggest_service.py +0 -0
  239. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/context/__init__.py +0 -0
  240. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/context/audit.py +0 -0
  241. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/context/context_service.py +0 -0
  242. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/context/orphans.py +0 -0
  243. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/context/prompt.py +0 -0
  244. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/context/snippet.py +0 -0
  245. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/__init__.py +0 -0
  246. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/_scc.py +0 -0
  247. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/drift.py +0 -0
  248. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/drift_service.py +0 -0
  249. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/fingerprint.py +0 -0
  250. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/fractal.py +0 -0
  251. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/ontology_init.py +0 -0
  252. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/quotient.py +0 -0
  253. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/drift/triads.py +0 -0
  254. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/engine.py +0 -0
  255. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/fqn.py +0 -0
  256. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/render/__init__.py +0 -0
  257. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/render/graph_json.py +0 -0
  258. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/render/mermaid.py +0 -0
  259. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/query/render/metrics.py +0 -0
  260. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/resolver/.gitkeep +0 -0
  261. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/resolver/__init__.py +0 -0
  262. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/resolver/symbols.py +0 -0
  263. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/resolver/uplift.py +0 -0
  264. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/src/cgis/storage/.gitkeep +0 -0
  265. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/integration/.gitkeep +0 -0
  266. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/.gitkeep +0 -0
  267. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/__init__.py +0 -0
  268. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/conftest.py +0 -0
  269. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_architecture.py +0 -0
  270. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_drift.py +0 -0
  271. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_fractal.py +0 -0
  272. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
  273. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_receiver_resolution.py +0 -0
  274. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_self_parse.py +0 -0
  275. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/self_parsing/test_suggest.py +0 -0
  276. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/.gitkeep +0 -0
  277. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/conftest.py +0 -0
  278. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/guardian_stubs.py +0 -0
  279. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/review_path_inventory.txt +0 -0
  280. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test___main__.py +0 -0
  281. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_analyzer.py +0 -0
  282. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_annotation_edges.py +0 -0
  283. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_audit.py +0 -0
  284. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
  285. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  286. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_check_pytest_raises.py +0 -0
  287. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_check_test_count.py +0 -0
  288. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_cohesion.py +0 -0
  289. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_context_service.py +0 -0
  290. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_di_acceptance.py +0 -0
  291. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_drift.py +0 -0
  292. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_drift_service.py +0 -0
  293. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_extractor_registry.py +0 -0
  294. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_fingerprint.py +0 -0
  295. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_fqn.py +0 -0
  296. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_fractal.py +0 -0
  297. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_freshness.py +0 -0
  298. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_gen_ideal_graph.py +0 -0
  299. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_generate_mcp_ref.py +0 -0
  300. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_generated.py +0 -0
  301. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_graph_json.py +0 -0
  302. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_axes.py +0 -0
  303. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_bench.py +0 -0
  304. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_bench_script.py +0 -0
  305. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_calibrate.py +0 -0
  306. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
  307. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_chunked.py +0 -0
  308. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_chunker.py +0 -0
  309. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_collector.py +0 -0
  310. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_core.py +0 -0
  311. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_diff_index.py +0 -0
  312. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_evidence.py +0 -0
  313. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_findings.py +0 -0
  314. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_martian.py +0 -0
  315. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_martian_script.py +0 -0
  316. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_martian_union.py +0 -0
  317. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_metrics.py +0 -0
  318. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  319. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  320. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  321. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_openrouter.py +0 -0
  322. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_poster.py +0 -0
  323. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_providers.py +0 -0
  324. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_providers_name.py +0 -0
  325. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_recording.py +0 -0
  326. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_render.py +0 -0
  327. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
  328. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_review_script.py +0 -0
  329. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_runner.py +0 -0
  330. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_salvage.py +0 -0
  331. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_guardian_skeptic.py +0 -0
  332. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_health_scorer.py +0 -0
  333. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_import_acceptance.py +0 -0
  334. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_mermaid.py +0 -0
  335. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_metrics.py +0 -0
  336. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_models.py +0 -0
  337. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_name_load_positions.py +0 -0
  338. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_ontology_compliance.py +0 -0
  339. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_ontology_init.py +0 -0
  340. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_orphans.py +0 -0
  341. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_paths.py +0 -0
  342. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_patterns_yaml.py +0 -0
  343. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_pipeline.py +0 -0
  344. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_prompt.py +0 -0
  345. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_python_annotations.py +0 -0
  346. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_python_extractor.py +0 -0
  347. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_query_coverage.py +0 -0
  348. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_quotient.py +0 -0
  349. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_recordings_from_corpus.py +0 -0
  350. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_resolver.py +0 -0
  351. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_resolver_indices.py +0 -0
  352. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_resolver_symbols.py +0 -0
  353. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_review_fingerprint_closure.py +0 -0
  354. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
  355. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
  356. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_review_fingerprint_record.py +0 -0
  357. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_self_types.py +0 -0
  358. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_skeptic_arms.py +0 -0
  359. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_snippet.py +0 -0
  360. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_sqlite_store.py +0 -0
  361. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_suggest_service.py +0 -0
  362. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_temperature_source.py +0 -0
  363. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_triads.py +0 -0
  364. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_typescript_extractor.py +0 -0
  365. {codegraph_brain-0.20.0 → codegraph_brain-0.21.0}/tests/unit/test_uplift.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.21.0"
3
+ }
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.21.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.20.0...codegraph-brain-v0.21.0) (2026-09-16)
4
+
5
+
6
+ ### Features
7
+
8
+ * **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))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **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))
14
+ * **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))
15
+ * **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))
16
+
17
+
18
+ ### Documentation
19
+
20
+ * 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))
21
+ * 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))
22
+
3
23
  ## [0.20.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.19.0...codegraph-brain-v0.20.0) (2026-09-11)
4
24
 
5
25
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codegraph-brain
3
- Version: 0.20.0
3
+ Version: 0.21.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
@@ -202,31 +202,36 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
202
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: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
205
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:249)"]:::methodNode
206
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:384)"]:::methodNode
207
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:310)"]:::methodNode
208
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:334)"]:::methodNode
209
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:212)"]:::methodNode
210
+ pipeline_IngestionPipeline_run["run (pipeline.py:99)"]:::methodNode
211
+ pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:82)"]:::methodNode
210
212
  end
211
213
  subgraph sg_engine["engine.py"]
212
- engine_ResolverEngine["ResolverEngine (engine.py:19)"]:::classNode
213
- engine_ResolverEngine_resolve["resolve (engine.py:36)"]:::methodNode
214
+ engine_ResolverEngine["ResolverEngine (engine.py:20)"]:::classNode
215
+ engine_ResolverEngine_resolve["resolve (engine.py:37)"]:::methodNode
214
216
  end
215
217
  subgraph sg_uplift["uplift.py"]
216
218
  uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
217
219
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
218
220
  end
219
221
  subgraph sg_sqlite_store["sqlite_store.py"]
220
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:40)"]:::classNode
222
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:42)"]:::classNode
221
223
  end
222
224
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
223
225
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
224
226
  pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
227
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
225
228
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_get_extractor
226
229
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_process_file
227
230
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_is_noop_incremental
228
231
  pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine
229
232
  pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine_resolve
233
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_cross_file_inputs_changed
234
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_run
230
235
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_persist_incremental
231
236
  pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine_execute_uplift
232
237
  pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine
@@ -236,16 +241,18 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
236
241
  |--------|------|------|
237
242
  | `Node` | CLASS | [`models.py:85`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L85) |
238
243
  | `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
- | `ResolverEngine` | CLASS | [`engine.py:19`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L19) |
245
- | `resolve` | METHOD | [`engine.py:36`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L36) |
244
+ | `workspace_root` | METHOD | [`pipeline.py:82`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L82) |
245
+ | `run` | METHOD | [`pipeline.py:99`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L99) |
246
+ | `_process_file` | METHOD | [`pipeline.py:212`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L212) |
247
+ | `_cross_file_inputs_changed` | METHOD | [`pipeline.py:249`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L249) |
248
+ | `_is_noop_incremental` | METHOD | [`pipeline.py:310`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L310) |
249
+ | `_persist_incremental` | METHOD | [`pipeline.py:334`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L334) |
250
+ | `_get_extractor` | METHOD | [`pipeline.py:384`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L384) |
251
+ | `ResolverEngine` | CLASS | [`engine.py:20`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L20) |
252
+ | `resolve` | METHOD | [`engine.py:37`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L37) |
246
253
  | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
247
254
  | `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:40`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L40) |
255
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:42`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L42) |
249
256
  <!-- END_CGIS_GRAPH -->
250
257
 
251
258
  ---
@@ -152,31 +152,36 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
152
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: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
155
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:249)"]:::methodNode
156
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:384)"]:::methodNode
157
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:310)"]:::methodNode
158
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:334)"]:::methodNode
159
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:212)"]:::methodNode
160
+ pipeline_IngestionPipeline_run["run (pipeline.py:99)"]:::methodNode
161
+ pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:82)"]:::methodNode
160
162
  end
161
163
  subgraph sg_engine["engine.py"]
162
- engine_ResolverEngine["ResolverEngine (engine.py:19)"]:::classNode
163
- engine_ResolverEngine_resolve["resolve (engine.py:36)"]:::methodNode
164
+ engine_ResolverEngine["ResolverEngine (engine.py:20)"]:::classNode
165
+ engine_ResolverEngine_resolve["resolve (engine.py:37)"]:::methodNode
164
166
  end
165
167
  subgraph sg_uplift["uplift.py"]
166
168
  uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
167
169
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
168
170
  end
169
171
  subgraph sg_sqlite_store["sqlite_store.py"]
170
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:40)"]:::classNode
172
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:42)"]:::classNode
171
173
  end
172
174
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
173
175
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
174
176
  pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
177
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
175
178
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_get_extractor
176
179
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_process_file
177
180
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_is_noop_incremental
178
181
  pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine
179
182
  pipeline_IngestionPipeline_run -->|CALLS| engine_ResolverEngine_resolve
183
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_cross_file_inputs_changed
184
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_run
180
185
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_persist_incremental
181
186
  pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine_execute_uplift
182
187
  pipeline_IngestionPipeline_run -->|CALLS| uplift_SemanticUpliftEngine
@@ -186,16 +191,18 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
186
191
  |--------|------|------|
187
192
  | `Node` | CLASS | [`models.py:85`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L85) |
188
193
  | `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
- | `ResolverEngine` | CLASS | [`engine.py:19`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L19) |
195
- | `resolve` | METHOD | [`engine.py:36`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L36) |
194
+ | `workspace_root` | METHOD | [`pipeline.py:82`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L82) |
195
+ | `run` | METHOD | [`pipeline.py:99`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L99) |
196
+ | `_process_file` | METHOD | [`pipeline.py:212`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L212) |
197
+ | `_cross_file_inputs_changed` | METHOD | [`pipeline.py:249`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L249) |
198
+ | `_is_noop_incremental` | METHOD | [`pipeline.py:310`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L310) |
199
+ | `_persist_incremental` | METHOD | [`pipeline.py:334`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L334) |
200
+ | `_get_extractor` | METHOD | [`pipeline.py:384`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L384) |
201
+ | `ResolverEngine` | CLASS | [`engine.py:20`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L20) |
202
+ | `resolve` | METHOD | [`engine.py:37`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L37) |
196
203
  | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
197
204
  | `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:40`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L40) |
205
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:42`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L42) |
199
206
  <!-- END_CGIS_GRAPH -->
200
207
 
201
208
  ---
@@ -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
  | :--- | :--- | :---: | :--- |
@@ -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.21.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"
@@ -260,9 +260,11 @@ def cgis_ingest(project_path: str, db_path: str = _DEFAULT_DB, full_rebuild: boo
260
260
 
261
261
  By default the ingest is **incremental**: only changed/new files are
262
262
  re-scanned, and the summary reports both what changed this run and the
263
- whole-graph total. Set ``full_rebuild=True`` to re-scan every file and
264
- overwrite the database from scratch — use this to drop nodes for files that
265
- were deleted or renamed, which an incremental run leaves behind.
263
+ whole-graph total. When a change alters what other files resolve against — a
264
+ renamed, removed or added symbol, a deleted or new file, a changed base class
265
+ or re-export — the incremental run rebuilds the whole graph itself, so edges
266
+ in unchanged files never point at symbols that no longer exist. Set
267
+ ``full_rebuild=True`` to force a re-scan of every file from scratch.
266
268
  """
267
269
  refusal = _reject_db_path(db_path)
268
270
  if refusal is not None:
@@ -272,13 +274,12 @@ def cgis_ingest(project_path: str, db_path: str = _DEFAULT_DB, full_rebuild: boo
272
274
  pipeline = IngestionPipeline(_EXTRACTORS)
273
275
  try:
274
276
  with SQLiteStore(db_path) as store:
275
- if full_rebuild:
276
- # Clear first, then run incrementally over an empty DB: this drops
277
- # deleted-file nodes, repopulates files_state correctly, and runs
278
- # uplift inside the pipeline (store provided) — all in one path.
279
- store.clear()
280
- _nodes, _raw, resolved = pipeline.run(project_path, store=store)
281
- store.record_ingest(project_path)
277
+ # A rebuild replaces the stored graph in the transaction that writes the
278
+ # new one: deleted-file nodes and stale hashes go, uplift runs inside
279
+ # the pipeline, and a failure part-way leaves the old graph intact.
280
+ nodes, _raw, resolved = pipeline.run(project_path, store=store, rebuild=full_rebuild)
281
+ if nodes:
282
+ store.record_ingest(project_path)
282
283
  total_nodes = store.get_node_count()
283
284
  total_edges = store.get_edge_count()
284
285
  except Exception as exc:
@@ -292,8 +293,14 @@ def cgis_ingest(project_path: str, db_path: str = _DEFAULT_DB, full_rebuild: boo
292
293
  total_edges=total_edges,
293
294
  db=db_path,
294
295
  )
295
- lines = [f"✅ Ingested: {project_path} (mode: {mode})"]
296
- if not full_rebuild and not resolved:
296
+ if not nodes:
297
+ # Nothing extracted: a rebuild kept the stored graph, and neither mode
298
+ # records this path as the graph's fresh root.
299
+ kept = "the stored graph was kept" if full_rebuild else "the graph now holds none"
300
+ lines = [f"⚠️ No source files extracted from {project_path} (mode: {mode}); {kept}."]
301
+ else:
302
+ lines = [f"✅ Ingested: {project_path} (mode: {mode})"]
303
+ if nodes and not full_rebuild and not resolved:
297
304
  # Incremental no-op: an empty resolved set means no files changed. Say so
298
305
  # explicitly so the stable total below doesn't read as a shrunken graph (#192).
299
306
  lines.append("No files changed since the last ingest.")
@@ -54,7 +54,6 @@ from cgis.query.fqn import resolve_fqn
54
54
  from cgis.query.render.graph_json import graph_to_json
55
55
  from cgis.query.render.mermaid import MermaidCompiler
56
56
  from cgis.query.render.metrics import ArchitectureReport, DuckDBAnalyzer
57
- from cgis.resolver.uplift import SemanticUpliftEngine
58
57
  from cgis.storage.sqlite_store import RAW_CALL_PREFIX, SQLiteStore
59
58
 
60
59
  _DEFAULT_DB = "graph.db"
@@ -144,33 +143,27 @@ def main(
144
143
  """CGIS — Code Graph Intelligence System CLI."""
145
144
 
146
145
 
147
- def _write_graph_output(
146
+ def _write_json_graph(
148
147
  output: str,
149
148
  source_path: str,
150
149
  nodes: list[Node],
151
150
  resolved_edges: list[Edge],
152
- domains: str | None,
153
151
  ) -> None:
154
- """Persist the ingestion result to the given output path (.db or .json)."""
155
- if output.endswith(".json"):
156
- enriched_nodes = HealthScorer(nodes, resolved_edges).enrich()
157
- graph_data = {
158
- "metadata": {
159
- "source_path": source_path,
160
- "node_count": len(enriched_nodes),
161
- "edge_count": len(resolved_edges),
162
- },
163
- "nodes": [n.model_dump() for n in enriched_nodes],
164
- "edges": [e.model_dump() for e in resolved_edges],
165
- }
166
- output_path = Path(output)
167
- output_path.parent.mkdir(parents=True, exist_ok=True)
168
- with output_path.open("w", encoding="utf-8") as f:
169
- _json.dump(graph_data, f, indent=2)
170
- else:
171
- with SQLiteStore(output) as store:
172
- store.save_graph(nodes, resolved_edges, overwrite=True)
173
- SemanticUpliftEngine(store, domains).execute_uplift()
152
+ """Write the ingestion result as a health-enriched graph.json."""
153
+ enriched_nodes = HealthScorer(nodes, resolved_edges).enrich()
154
+ graph_data = {
155
+ "metadata": {
156
+ "source_path": source_path,
157
+ "node_count": len(enriched_nodes),
158
+ "edge_count": len(resolved_edges),
159
+ },
160
+ "nodes": [n.model_dump() for n in enriched_nodes],
161
+ "edges": [e.model_dump() for e in resolved_edges],
162
+ }
163
+ output_path = Path(output)
164
+ output_path.parent.mkdir(parents=True, exist_ok=True)
165
+ with output_path.open("w", encoding="utf-8") as f:
166
+ _json.dump(graph_data, f, indent=2)
174
167
 
175
168
 
176
169
  @app.command()
@@ -225,11 +218,22 @@ def ingest(
225
218
  )
226
219
  incremental = False
227
220
 
221
+ # Anything but JSON is a database. A full ingest into one runs the
222
+ # store-backed pipeline as a rebuild — the path MCP `full_rebuild` takes — so
223
+ # the file hashes the next --incremental compares against are written, and
224
+ # stale hashes and deleted files' nodes go, in the one transaction that writes
225
+ # the new graph. Writing it with save_graph afterwards left files_state as it was.
226
+ to_database = not output.endswith(".json")
228
227
  try:
229
- if incremental:
228
+ if to_database:
229
+ # A bad path must not create or touch the database.
230
+ IngestionPipeline.workspace_root(path)
230
231
  with SQLiteStore(output) as store:
231
- nodes, raw_edges, resolved_edges = pipeline.run(path, store=store)
232
- store.record_ingest(path)
232
+ nodes, raw_edges, resolved_edges = pipeline.run(
233
+ path, store=store, rebuild=not incremental
234
+ )
235
+ if nodes:
236
+ store.record_ingest(path)
233
237
  else:
234
238
  nodes, raw_edges, resolved_edges = pipeline.run(path)
235
239
 
@@ -240,14 +244,8 @@ def ingest(
240
244
  )
241
245
  return
242
246
 
243
- if not incremental:
244
- _write_graph_output(output, path, nodes, resolved_edges, domains)
245
- # Anything but JSON is a database — `_write_graph_output` branches on
246
- # exactly that, and gating on `.db` alone left `-o graph.sqlite`
247
- # advising a re-ingest that would take the same branch again.
248
- if not output.endswith(".json"):
249
- with SQLiteStore(output) as store:
250
- store.record_ingest(path)
247
+ if not to_database:
248
+ _write_json_graph(output, path, nodes, resolved_edges)
251
249
 
252
250
  table = Table(title="Ingestion Summary")
253
251
  table.add_column("Metric", style="cyan")
@@ -0,0 +1,116 @@
1
+ """The names a JavaScript runtime provides without an import (#111).
2
+
3
+ Plain data in `core` because two layers read it: the TypeScript extractor, to
4
+ record which of these names a file rebinds, and the resolver, to rewrite calls
5
+ on the ones it does not.
6
+ """
7
+
8
+ #: ECMAScript standard globals plus the browser and Node host objects a UI or
9
+ #: server codebase calls directly. A receiver is matched by its root segment only,
10
+ #: so `Math.max` and `document.body.append` both qualify; `arr.map` does not.
11
+ JS_GLOBALS: frozenset[str] = frozenset(
12
+ {
13
+ # ECMAScript value/function globals
14
+ "globalThis",
15
+ "isFinite",
16
+ "isNaN",
17
+ "parseFloat",
18
+ "parseInt",
19
+ "encodeURI",
20
+ "encodeURIComponent",
21
+ "decodeURI",
22
+ "decodeURIComponent",
23
+ "structuredClone",
24
+ "queueMicrotask",
25
+ # ECMAScript constructors and namespaces
26
+ "Array",
27
+ "ArrayBuffer",
28
+ "Atomics",
29
+ "BigInt",
30
+ "Boolean",
31
+ "DataView",
32
+ "Date",
33
+ "Error",
34
+ "EvalError",
35
+ "Float32Array",
36
+ "Float64Array",
37
+ "Function",
38
+ "Int8Array",
39
+ "Int16Array",
40
+ "Int32Array",
41
+ "Intl",
42
+ "JSON",
43
+ "Map",
44
+ "Math",
45
+ "Number",
46
+ "Object",
47
+ "Promise",
48
+ "Proxy",
49
+ "RangeError",
50
+ "ReferenceError",
51
+ "Reflect",
52
+ "RegExp",
53
+ "Set",
54
+ "String",
55
+ "Symbol",
56
+ "SyntaxError",
57
+ "TypeError",
58
+ "Uint8Array",
59
+ "Uint8ClampedArray",
60
+ "Uint16Array",
61
+ "Uint32Array",
62
+ "URIError",
63
+ "WeakMap",
64
+ "WeakRef",
65
+ "WeakSet",
66
+ # Host globals shared by browsers and Node
67
+ "console",
68
+ "setTimeout",
69
+ "clearTimeout",
70
+ "setInterval",
71
+ "clearInterval",
72
+ "fetch",
73
+ "URL",
74
+ "URLSearchParams",
75
+ "AbortController",
76
+ "TextEncoder",
77
+ "TextDecoder",
78
+ "Blob",
79
+ "FormData",
80
+ "Headers",
81
+ "Request",
82
+ "Response",
83
+ "crypto",
84
+ "performance",
85
+ # Browser globals
86
+ "window",
87
+ "document",
88
+ "navigator",
89
+ "location",
90
+ "history",
91
+ "localStorage",
92
+ "sessionStorage",
93
+ "requestAnimationFrame",
94
+ "cancelAnimationFrame",
95
+ "getComputedStyle",
96
+ "matchMedia",
97
+ "alert",
98
+ "confirm",
99
+ "prompt",
100
+ "ResizeObserver",
101
+ "IntersectionObserver",
102
+ "MutationObserver",
103
+ "CustomEvent",
104
+ "Event",
105
+ "WebSocket",
106
+ "Worker",
107
+ "Image",
108
+ # Node globals
109
+ "global",
110
+ "process",
111
+ "Buffer",
112
+ "require",
113
+ "setImmediate",
114
+ "clearImmediate",
115
+ }
116
+ )