codegraph-brain 0.26.0__tar.gz → 0.28.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 (417) hide show
  1. codegraph_brain-0.28.0/.github/test-count-baseline +1 -0
  2. codegraph_brain-0.28.0/.release-please-manifest.json +3 -0
  3. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/CHANGELOG.md +30 -0
  4. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/PKG-INFO +1 -1
  5. codegraph_brain-0.28.0/benchmarks/agent_ab/.gitignore +3 -0
  6. codegraph_brain-0.28.0/benchmarks/agent_ab/README.md +92 -0
  7. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/cgis-control-sqlite-pragmas.yaml +23 -0
  8. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/cgis-flow-ingest-to-sqlite.yaml +50 -0
  9. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/cgis-impact-drift-same-name.yaml +56 -0
  10. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/cgis-impact-language-for.yaml +27 -0
  11. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/cgis-impact-transitive-tsconfig.yaml +45 -0
  12. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/cgis-orientation-call-resolution.yaml +36 -0
  13. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/owner-impact-credit-wallet.yaml +55 -0
  14. codegraph_brain-0.28.0/benchmarks/agent_ab/tasks/owner-impact-occupied-window-same-name.yaml +30 -0
  15. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/architecture/HOW_IT_WORKS.md +27 -24
  16. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/architecture/diagrams/pipeline_flow.mermaid +14 -12
  17. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/how-to/AGENT_ONBOARDING.md +54 -0
  18. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/how-to/MCP_REFERENCE.md +15 -2
  19. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +25 -0
  20. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/pyproject.toml +1 -1
  21. codegraph_brain-0.28.0/scripts/agent_ab.py +449 -0
  22. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/server.json +2 -2
  23. codegraph_brain-0.28.0/src/cgis/api/auto_refresh.py +110 -0
  24. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/api/mcp_server.py +48 -4
  25. codegraph_brain-0.28.0/src/cgis/bench/__init__.py +1 -0
  26. codegraph_brain-0.28.0/src/cgis/bench/agent_task.py +268 -0
  27. codegraph_brain-0.28.0/src/cgis/bench/guard.py +97 -0
  28. codegraph_brain-0.28.0/src/cgis/bench/transcript.py +297 -0
  29. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/cli.py +42 -11
  30. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/python_extractor.py +33 -12
  31. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/import_names.py +20 -9
  32. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/pipeline.py +27 -1
  33. codegraph_brain-0.28.0/src/cgis/python_dependencies.py +154 -0
  34. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/analysis/cohesion.py +35 -0
  35. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/analysis/suggest_service.py +88 -32
  36. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/context/orphans.py +42 -4
  37. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/resolver/engine.py +8 -3
  38. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/resolver/indices.py +55 -1
  39. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/resolver/symbols.py +5 -2
  40. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/storage/sqlite_store.py +71 -14
  41. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_receiver_resolution.py +6 -1
  42. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_suggest.py +25 -2
  43. codegraph_brain-0.28.0/tests/unit/agent_ab_stubs.py +110 -0
  44. codegraph_brain-0.28.0/tests/unit/test_agent_ab_guard.py +130 -0
  45. codegraph_brain-0.28.0/tests/unit/test_agent_ab_script.py +314 -0
  46. codegraph_brain-0.28.0/tests/unit/test_agent_ab_task.py +238 -0
  47. codegraph_brain-0.28.0/tests/unit/test_agent_ab_transcript.py +140 -0
  48. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_audit.py +44 -0
  49. codegraph_brain-0.28.0/tests/unit/test_auto_refresh.py +143 -0
  50. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_cli.py +26 -0
  51. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_cohesion.py +21 -0
  52. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_freshness.py +92 -1
  53. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_orphans.py +77 -0
  54. codegraph_brain-0.28.0/tests/unit/test_python_dependencies.py +193 -0
  55. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver.py +45 -8
  56. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_indices.py +86 -1
  57. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_suggest_service.py +86 -4
  58. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/uv.lock +4 -4
  59. codegraph_brain-0.26.0/.github/test-count-baseline +0 -1
  60. codegraph_brain-0.26.0/.release-please-manifest.json +0 -3
  61. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.claude-plugin/marketplace.json +0 -0
  62. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.gitattributes +0 -0
  63. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.github/workflows/autodoc.yml +0 -0
  64. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.github/workflows/ci.yml +0 -0
  65. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.github/workflows/guardian.yml +0 -0
  66. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.github/workflows/mcp-registry.yml +0 -0
  67. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.github/workflows/pr-title.yml +0 -0
  68. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.github/workflows/release-please.yml +0 -0
  69. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.github/workflows/ui.yml +0 -0
  70. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.gitignore +0 -0
  71. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.pre-commit-config.yaml +0 -0
  72. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/.python-version +0 -0
  73. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/CLAUDE.md +0 -0
  74. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/CONTRIBUTING.md +0 -0
  75. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/LICENSE +0 -0
  76. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/Makefile +0 -0
  77. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/PRIVACY.md +0 -0
  78. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/README.md +0 -0
  79. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/CURATION.md +0 -0
  80. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/calibration.jsonl +0 -0
  81. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
  82. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
  83. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
  84. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
  85. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
  86. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
  87. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
  88. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-directive-rows.jsonl +0 -0
  89. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-prohibition-rows.jsonl +0 -0
  90. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-122.yaml +0 -0
  91. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-140.yaml +0 -0
  92. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-141.yaml +0 -0
  93. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-142.yaml +0 -0
  94. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-143.yaml +0 -0
  95. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-144.yaml +0 -0
  96. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-278.yaml +0 -0
  97. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/pr-313.yaml +0 -0
  98. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/guardian/results.jsonl +0 -0
  99. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian/README.md +0 -0
  100. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian/cal_dot_com.json +0 -0
  101. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian/discourse.json +0 -0
  102. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian/grafana.json +0 -0
  103. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian/keycloak.json +0 -0
  104. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian/sentry.json +0 -0
  105. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-judged.jsonl +0 -0
  106. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  107. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  108. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-p3-run1.jsonl +0 -0
  109. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-p3-run2.jsonl +0 -0
  110. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-p3-run3.jsonl +0 -0
  111. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-plan.json +0 -0
  112. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
  113. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  114. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/benchmarks/martian-reviews.jsonl +0 -0
  115. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/data/.gitkeep +0 -0
  116. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/AUDIT.md +0 -0
  117. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/CASE_STUDY.md +0 -0
  118. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  119. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  120. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/architecture/ONTOLOGY.md +0 -0
  121. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  122. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
  123. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/architecture/health_badge.json +0 -0
  124. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/assets/.gitignore +0 -0
  125. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/assets/cgis-app-avatar.png +0 -0
  126. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/assets/cgis-app-avatar.svg +0 -0
  127. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/assets/generate_avatar.py +0 -0
  128. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/examples/.gitkeep +0 -0
  129. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/how-to/CLI_USAGE.md +0 -0
  130. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  131. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/ontology/.gitkeep +0 -0
  132. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/ontology/core.yaml +0 -0
  133. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/ontology/domains.yaml +0 -0
  134. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/ontology/patterns.yaml +0 -0
  135. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/ontology/tolerances.lock +0 -0
  136. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/plans/2026-09-09-graph-freshness.md +0 -0
  137. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  138. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  139. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  140. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  141. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  142. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  143. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  144. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  145. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  146. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  147. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  148. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  149. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
  150. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  151. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  152. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  153. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  154. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  155. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  156. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  157. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  158. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  159. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  160. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  161. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  162. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  163. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  164. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  165. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  166. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-09-05-annotation-graph-design.md +0 -0
  167. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/2026-09-09-graph-freshness-design.md +0 -0
  168. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/BLUEPRINT.md +0 -0
  169. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/PRD.md +0 -0
  170. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/TDD.md +0 -0
  171. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  172. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  173. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  174. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  175. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  176. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  177. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  178. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  179. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  180. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  181. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  182. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  183. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  184. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  185. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  186. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  187. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  188. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  189. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
  190. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +0 -0
  191. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/glama.json +0 -0
  192. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/main.py +0 -0
  193. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/plugin/.claude-plugin/plugin.json +0 -0
  194. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/plugin/.mcp.json +0 -0
  195. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/plugin/README.md +0 -0
  196. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/plugin/skills/cgis/SKILL.md +0 -0
  197. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/plugin/skills/ingest/SKILL.md +0 -0
  198. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/release-please-config.json +0 -0
  199. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/backfill_calibration_fingerprint.py +0 -0
  200. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/backfill_review_fingerprint.py +0 -0
  201. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/check_pytest_raises.py +0 -0
  202. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/check_test_count.py +0 -0
  203. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/colab_bench.sh +0 -0
  204. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/gen_ideal_graph.py +0 -0
  205. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/generate_health.py +0 -0
  206. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/generate_mcp_ref.py +0 -0
  207. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/generate_schema_docs.py +0 -0
  208. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/guardian_bench.py +0 -0
  209. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/guardian_calibrate.py +0 -0
  210. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/guardian_martian.py +0 -0
  211. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/guardian_replay_skeptic.py +0 -0
  212. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/guardian_review.py +0 -0
  213. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/inject_architecture_graph.py +0 -0
  214. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/mcp_registry_gate.sh +0 -0
  215. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/ollama_visitor.sh +0 -0
  216. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/probe_closure_gap.py +0 -0
  217. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/probe_tier_ladder.py +0 -0
  218. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/recordings_from_corpus.py +0 -0
  219. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/scripts/skeptic_arms.py +0 -0
  220. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/__init__.py +0 -0
  221. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/__main__.py +0 -0
  222. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/api/.gitkeep +0 -0
  223. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/api/__init__.py +0 -0
  224. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/core/.gitkeep +0 -0
  225. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/core/coverage.py +0 -0
  226. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/core/freshness.py +0 -0
  227. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/core/generated.py +0 -0
  228. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/core/js_globals.py +0 -0
  229. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/core/models.py +0 -0
  230. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/core/paths.py +0 -0
  231. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/.gitkeep +0 -0
  232. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/_python_annotations.py +0 -0
  233. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/_python_ast.py +0 -0
  234. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/_python_classes.py +0 -0
  235. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/_python_functions.py +0 -0
  236. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/_python_imports.py +0 -0
  237. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/_python_types.py +0 -0
  238. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/_typescript_bindings.py +0 -0
  239. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/base.py +0 -0
  240. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/registry.py +0 -0
  241. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/extractors/typescript_extractor.py +0 -0
  242. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/__init__.py +0 -0
  243. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/axes.py +0 -0
  244. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/bench.py +0 -0
  245. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/calibrate.py +0 -0
  246. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/chunked.py +0 -0
  247. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/chunker.py +0 -0
  248. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/collector.py +0 -0
  249. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/core.py +0 -0
  250. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/diff_index.py +0 -0
  251. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/evidence.py +0 -0
  252. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/findings.py +0 -0
  253. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/github_poster.py +0 -0
  254. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/martian.py +0 -0
  255. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/metrics.py +0 -0
  256. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/prompts.py +0 -0
  257. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/providers/__init__.py +0 -0
  258. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/providers/base.py +0 -0
  259. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/providers/gemini.py +0 -0
  260. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/providers/mistral.py +0 -0
  261. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/providers/ollama.py +0 -0
  262. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/providers/openrouter.py +0 -0
  263. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/recording.py +0 -0
  264. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/render.py +0 -0
  265. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/review_fingerprint.py +0 -0
  266. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/runner.py +0 -0
  267. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/guardian/skeptic.py +0 -0
  268. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/py.typed +0 -0
  269. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/analysis/__init__.py +0 -0
  270. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/analysis/analyzer.py +0 -0
  271. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/analysis/anomaly.py +0 -0
  272. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/analysis/health.py +0 -0
  273. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/analysis/overview.py +0 -0
  274. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/context/__init__.py +0 -0
  275. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/context/audit.py +0 -0
  276. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/context/context_service.py +0 -0
  277. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/context/prompt.py +0 -0
  278. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/context/snippet.py +0 -0
  279. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/__init__.py +0 -0
  280. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/_scc.py +0 -0
  281. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/catalog.py +0 -0
  282. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/drift.py +0 -0
  283. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/drift_service.py +0 -0
  284. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/fingerprint.py +0 -0
  285. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/fractal.py +0 -0
  286. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/ontology_init.py +0 -0
  287. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/quotient.py +0 -0
  288. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/scoring.py +0 -0
  289. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/drift/triads.py +0 -0
  290. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/engine.py +0 -0
  291. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/fqn.py +0 -0
  292. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/render/__init__.py +0 -0
  293. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/render/graph_json.py +0 -0
  294. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/render/mermaid.py +0 -0
  295. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/query/render/metrics.py +0 -0
  296. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/resolver/.gitkeep +0 -0
  297. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/resolver/__init__.py +0 -0
  298. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/resolver/js_builtins.py +0 -0
  299. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/resolver/uplift.py +0 -0
  300. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/storage/.gitkeep +0 -0
  301. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/tsconfig_paths.py +0 -0
  302. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/src/cgis/workspaces.py +0 -0
  303. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/integration/.gitkeep +0 -0
  304. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/.gitkeep +0 -0
  305. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/__init__.py +0 -0
  306. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/conftest.py +0 -0
  307. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_annotation_calibration.py +0 -0
  308. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_architecture.py +0 -0
  309. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_drift.py +0 -0
  310. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_fractal.py +0 -0
  311. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
  312. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_overview.py +0 -0
  313. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_self_parse.py +0 -0
  314. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/self_parsing/test_self_parse_ts.py +0 -0
  315. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/.gitkeep +0 -0
  316. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/conftest.py +0 -0
  317. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/guardian_stubs.py +0 -0
  318. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/review_path_inventory.txt +0 -0
  319. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test___main__.py +0 -0
  320. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_analyzer.py +0 -0
  321. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_annotation_edges.py +0 -0
  322. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
  323. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  324. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_check_pytest_raises.py +0 -0
  325. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_check_test_count.py +0 -0
  326. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_class_cohesion.py +0 -0
  327. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_context_service.py +0 -0
  328. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_di_acceptance.py +0 -0
  329. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_drift.py +0 -0
  330. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_drift_service.py +0 -0
  331. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_extractor_registry.py +0 -0
  332. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_features_source.py +0 -0
  333. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_fingerprint.py +0 -0
  334. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_fqn.py +0 -0
  335. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_fractal.py +0 -0
  336. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_gen_ideal_graph.py +0 -0
  337. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_generate_mcp_ref.py +0 -0
  338. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_generated.py +0 -0
  339. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_graph_json.py +0 -0
  340. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_axes.py +0 -0
  341. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_bench.py +0 -0
  342. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_bench_script.py +0 -0
  343. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_calibrate.py +0 -0
  344. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
  345. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_chunked.py +0 -0
  346. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_chunker.py +0 -0
  347. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_collector.py +0 -0
  348. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_core.py +0 -0
  349. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_diff_index.py +0 -0
  350. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_evidence.py +0 -0
  351. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_findings.py +0 -0
  352. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_martian.py +0 -0
  353. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_martian_script.py +0 -0
  354. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_martian_union.py +0 -0
  355. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_metrics.py +0 -0
  356. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  357. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  358. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  359. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_openrouter.py +0 -0
  360. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_poster.py +0 -0
  361. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_providers.py +0 -0
  362. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_providers_name.py +0 -0
  363. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_recording.py +0 -0
  364. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_render.py +0 -0
  365. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
  366. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_review_script.py +0 -0
  367. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_runner.py +0 -0
  368. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_salvage.py +0 -0
  369. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_guardian_skeptic.py +0 -0
  370. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_health_scorer.py +0 -0
  371. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_import_acceptance.py +0 -0
  372. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_inject_architecture_graph.py +0 -0
  373. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_mcp_server.py +0 -0
  374. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_mcp_tool_schemas.py +0 -0
  375. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_mermaid.py +0 -0
  376. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_metrics.py +0 -0
  377. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_metrics_file_coupling.py +0 -0
  378. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_metrics_resolution.py +0 -0
  379. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_models.py +0 -0
  380. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_name_load_positions.py +0 -0
  381. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_ontology_compliance.py +0 -0
  382. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_ontology_init.py +0 -0
  383. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_overview.py +0 -0
  384. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_overview_tools.py +0 -0
  385. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_package_view.py +0 -0
  386. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_paths.py +0 -0
  387. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_patterns_yaml.py +0 -0
  388. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_pipeline.py +0 -0
  389. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_pipeline_incremental_symbols.py +0 -0
  390. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_pipeline_ts_workspaces.py +0 -0
  391. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_prompt.py +0 -0
  392. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_python_annotations.py +0 -0
  393. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_python_extractor.py +0 -0
  394. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_query_coverage.py +0 -0
  395. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_quotient.py +0 -0
  396. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_recordings_from_corpus.py +0 -0
  397. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_import_layout.py +0 -0
  398. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_js_builtins.py +0 -0
  399. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_language_scope.py +0 -0
  400. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_phantom_internal.py +0 -0
  401. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_symbols.py +0 -0
  402. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_ts_declarations.py +0 -0
  403. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_resolver_ts_workspaces.py +0 -0
  404. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_review_fingerprint_closure.py +0 -0
  405. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
  406. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
  407. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_review_fingerprint_record.py +0 -0
  408. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_self_types.py +0 -0
  409. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_skeptic_arms.py +0 -0
  410. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_snippet.py +0 -0
  411. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_sqlite_store.py +0 -0
  412. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_temperature_source.py +0 -0
  413. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_triads.py +0 -0
  414. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_tsconfig_paths.py +0 -0
  415. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_type_checking_imports.py +0 -0
  416. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_typescript_extractor.py +0 -0
  417. {codegraph_brain-0.26.0 → codegraph_brain-0.28.0}/tests/unit/test_uplift.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.28.0"
3
+ }
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.28.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.27.0...codegraph-brain-v0.28.0) (2026-10-02)
4
+
5
+
6
+ ### Features
7
+
8
+ * **bench:** agent A/B harness for cgis vs no cgis ([#547](https://github.com/zaebee/codegraph-brain/issues/547)) ([788d67f](https://github.com/zaebee/codegraph-brain/commit/788d67f230f1129379afb08596da5a4ef9e1c302))
9
+ * **bench:** cgis-instructed and cgis-forced arms, four multi-hop impact tasks ([#549](https://github.com/zaebee/codegraph-brain/issues/549)) ([deef289](https://github.com/zaebee/codegraph-brain/commit/deef289fe9a9a302088661acbf3c6f3d33fc50fe))
10
+
11
+ ## [0.27.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.26.0...codegraph-brain-v0.27.0) (2026-10-02)
12
+
13
+
14
+ ### Features
15
+
16
+ * **mcp:** opt-in refresh of a stale graph before read tools answer ([#538](https://github.com/zaebee/codegraph-brain/issues/538)) ([b26a2c8](https://github.com/zaebee/codegraph-brain/commit/b26a2c8d335fbb2f19a217fcaced715f16454664))
17
+ * **orphans:** consider module-level classes only by default ([#432](https://github.com/zaebee/codegraph-brain/issues/432)) ([#534](https://github.com/zaebee/codegraph-brain/issues/534)) ([731d93a](https://github.com/zaebee/codegraph-brain/commit/731d93a8b81fd02fe6b5e71892a408341d034239))
18
+ * **suggest-packages:** judge a package by its direct children ([#446](https://github.com/zaebee/codegraph-brain/issues/446)) ([#536](https://github.com/zaebee/codegraph-brain/issues/536)) ([fd6f05b](https://github.com/zaebee/codegraph-brain/commit/fd6f05b003ea006392e6384170a4bead227f5e85))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * **freshness:** report a write made during ingest as stale ([#535](https://github.com/zaebee/codegraph-brain/issues/535)) ([4121919](https://github.com/zaebee/codegraph-brain/commit/4121919148affbad202156d43d01fca458beca23))
24
+ * **resolver:** classify declared Python dependencies as external ([#495](https://github.com/zaebee/codegraph-brain/issues/495)) ([#531](https://github.com/zaebee/codegraph-brain/issues/531)) ([ca4c01d](https://github.com/zaebee/codegraph-brain/commit/ca4c01d1ffa8e8c754317af73ffcf06d534a61d7))
25
+
26
+
27
+ ### Documentation
28
+
29
+ * auto-sync architecture graph and MCP reference ([#532](https://github.com/zaebee/codegraph-brain/issues/532)) ([13c90fd](https://github.com/zaebee/codegraph-brain/commit/13c90fd3ebcc38271b697f514d292c7033d4f81d))
30
+ * auto-sync architecture graph and MCP reference ([#537](https://github.com/zaebee/codegraph-brain/issues/537)) ([c03f60d](https://github.com/zaebee/codegraph-brain/commit/c03f60d4211e3029d02a624ef9d6b4fa92f184df))
31
+ * **onboarding:** refresh the graph from hooks instead of a watcher ([#541](https://github.com/zaebee/codegraph-brain/issues/541)) ([809169d](https://github.com/zaebee/codegraph-brain/commit/809169d19797e280b0810f049215950b3eedf1df)), closes [#175](https://github.com/zaebee/codegraph-brain/issues/175)
32
+
3
33
  ## [0.26.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.25.4...codegraph-brain-v0.26.0) (2026-10-02)
4
34
 
5
35
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codegraph-brain
3
- Version: 0.26.0
3
+ Version: 0.28.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
@@ -0,0 +1,3 @@
1
+ # Raw stream-json sessions: large, and they quote repository source verbatim
2
+ # (owner-api is private). results.jsonl keeps the scored line for each.
3
+ transcripts/
@@ -0,0 +1,92 @@
1
+ # Agent A/B: the same questions with and without cgis (#543)
2
+
3
+ Does an agent answer a code question better, or cheaper, when the cgis MCP
4
+ server is connected? This directory holds the questions, their answer keys and
5
+ the results. The runner is `scripts/agent_ab.py`; parsing and scoring live in
6
+ `src/cgis/bench/` and are unit-tested on recorded transcripts, so the harness
7
+ can change without spending anything.
8
+
9
+ Design notes and cost estimates: `research/543.md` in the project files.
10
+
11
+ ## What is measured
12
+
13
+ **Primary, fixed before the first paid run:**
14
+
15
+ - `recall`: the share of the answer key the answer names (symbols, files and
16
+ literal facts, pooled). `precision`: the share of what it names that is in
17
+ the key or in its `allowed_*` lists.
18
+ - `cost_usd`: `total_cost_usd` from the session's closing event.
19
+
20
+ The hypothesis is that the `cgis` arm reaches at least the control arm's recall
21
+ for no more cost on `impact` and `flow` questions, and that `control`-type
22
+ questions show what cgis costs when it cannot help.
23
+
24
+ **Secondary:** tool calls by name, distinct files read and bytes read, turns,
25
+ wall time, token usage, and the context the session ends holding
26
+ (`residual_context`).
27
+
28
+ **For #220, not for ranking arms:** `sufficiency` (what the agent did right
29
+ after each cgis answer) and `allocation` (the share of files cgis named that
30
+ the final answer relied on). Definitions are in the docstring of
31
+ `src/cgis/bench/transcript.py`.
32
+
33
+ The answer key is written from the code and checked by hand, never taken from
34
+ the cgis graph: a key derived from the graph would agree with every edge the
35
+ resolver gets wrong. Each task's `notes` say how it was checked.
36
+
37
+ ## Arms
38
+
39
+ | arm | MCP | plugin skills | graph files | cgis / uv on PATH |
40
+ |---|---|---|---|---|
41
+ | `control` | none (`--strict-mcp-config`, empty config) | no | all deleted | no |
42
+ | `cgis` | this checkout's `cgis-mcp` | yes (the plugin minus its `.mcp.json`) | `graph.db` built before the clock starts | no |
43
+ | `cgis-instructed` | as `cgis` | as `cgis` | as `cgis` | one line: query cgis first |
44
+ | `cgis-forced` | as `cgis` | as `cgis` | as `cgis` | as `cgis-instructed`, and the guard refuses Read/Grep/Glob/Bash until one cgis call |
45
+
46
+ `cgis-instructed` exists because the first pilot's `cgis` arm made no cgis call in
47
+ 12 of 12 sessions: with the server connected and the skill loaded, Sonnet still
48
+ went straight to Grep. It stands in for #542's MCP server instructions. It barely moved the agent (2 cgis
49
+ calls in 18 sessions), so `cgis-forced` makes the first graph query mandatory: it
50
+ measures what the graph adds once used, apart from whether the agent picks it.
51
+
52
+ All arms run under `cgis.bench.guard` as a PreToolUse hook, which refuses the
53
+ cgis CLI, uv, sqlite3 and any read of `graph.db`/`graph.json` through Bash or
54
+ the file tools. Without it the control arm is not a control: codegraph's own
55
+ benchmark caught its control agent calling their CLI through Bash in 26 of 28
56
+ runs. The same predicate marks a finished run `contaminated` if a blocked call
57
+ ever returned output; such runs are counted in the report and left out of the
58
+ medians.
59
+
60
+ All arms allow `Read`, `Grep`, `Glob` and `Bash` (plus `mcp__cgis` in the
61
+ treatment arms, which has no server in control) and refuse edits, web access and
62
+ sub-agents, under `--permission-mode dontAsk`. Each session starts in a fresh
63
+ detached worktree at the task's pinned commit, with `--no-session-persistence`
64
+ and `--setting-sources project`, so user settings and earlier sessions do not
65
+ reach it.
66
+
67
+ ## Running
68
+
69
+ ```bash
70
+ uv run python scripts/agent_ab.py run --dry-run # commands only, spends nothing
71
+ uv run python scripts/agent_ab.py run --task cgis-impact-language-for --runs 2
72
+ uv run python scripts/agent_ab.py run --repo owner-api=../ownima-backend
73
+ uv run python scripts/agent_ab.py report
74
+ ```
75
+
76
+ `--model` defaults to `claude-sonnet-5-5`; `--max-budget-usd` (default 2.00)
77
+ caps each session. Every non-dry run is a paid session, so this never runs in
78
+ CI. Transcripts are written to `transcripts/` (git-ignored); `results.jsonl`
79
+ gets one line per (task, arm, run) and is meant to be committed with the write-up.
80
+
81
+ ## Tasks
82
+
83
+ | id | type | repo |
84
+ |---|---|---|
85
+ | `cgis-impact-language-for` | impact | cgis |
86
+ | `cgis-flow-ingest-to-sqlite` | flow | cgis |
87
+ | `cgis-orientation-call-resolution` | orientation | cgis |
88
+ | `cgis-control-sqlite-pragmas` | control | cgis |
89
+
90
+ This repository's `CLAUDE.md` describes its architecture in some detail. It is
91
+ the same in both arms, but it lowers what a graph can add here, which is one
92
+ reason owner-api and httpx come next.
@@ -0,0 +1,23 @@
1
+ id: cgis-control-sqlite-pragmas
2
+ repo: cgis
3
+ sha: 715cd9a2ecee47949651344757edb4c7d09f64d7
4
+ src_root: src
5
+ type: control
6
+ question: |
7
+ Which SQLite journal mode and busy timeout does `SQLiteStore` configure when it
8
+ opens a database, and in which method?
9
+ gold:
10
+ symbols:
11
+ - SQLiteStore.connect
12
+ files:
13
+ - src/cgis/storage/sqlite_store.py
14
+ facts:
15
+ - WAL
16
+ - "5000"
17
+ allowed_symbols:
18
+ - SQLiteStore
19
+ notes: |
20
+ Negative control: one file, one method, no cross-file structure. A graph should
21
+ not help here; this measures what cgis costs when it is not needed.
22
+ sqlite_store.py:83-84, inside SQLiteStore.connect (line 75), not __init__:
23
+ the first pilot session caught a key that said __init__.
@@ -0,0 +1,50 @@
1
+ id: cgis-flow-ingest-to-sqlite
2
+ repo: cgis
3
+ sha: 715cd9a2ecee47949651344757edb4c7d09f64d7
4
+ src_root: src
5
+ type: flow
6
+ question: |
7
+ Trace what happens when `cgis ingest <path> --output graph.db` runs: starting
8
+ from the CLI command, list in order the functions and methods on the main path
9
+ that parse source files, resolve calls, and write nodes and edges to SQLite.
10
+ gold:
11
+ symbols:
12
+ - cli.ingest
13
+ - IngestionPipeline.run
14
+ - IngestionPipeline._process_file
15
+ - id: extractor.parse
16
+ any_of: [BaseExtractor.parse, PythonExtractor.parse, TypeScriptExtractor.parse]
17
+ - ResolverEngine.resolve
18
+ - IngestionPipeline._persist_incremental
19
+ - SQLiteStore.save_incremental_batch
20
+ files:
21
+ - src/cgis/cli.py
22
+ - src/cgis/pipeline.py
23
+ - src/cgis/resolver/engine.py
24
+ - src/cgis/storage/sqlite_store.py
25
+ allowed_symbols:
26
+ - IngestionPipeline.workspace_root
27
+ - SQLiteStore.record_ingest
28
+ - SQLiteStore.record_ingest_options
29
+ - build_extractors
30
+ - IngestionPipeline._get_extractor
31
+ - ImportNameCollector.collect
32
+ - SemanticUpliftEngine.execute_uplift
33
+ - SymbolResolver
34
+ - IndexBuilder.build
35
+ allowed_files:
36
+ - src/cgis/extractors/base.py
37
+ - src/cgis/extractors/python_extractor.py
38
+ - src/cgis/extractors/typescript_extractor.py
39
+ - src/cgis/extractors/registry.py
40
+ - src/cgis/resolver/symbols.py
41
+ - src/cgis/resolver/indices.py
42
+ - src/cgis/resolver/uplift.py
43
+ - src/cgis/import_names.py
44
+ notes: |
45
+ Read 2026-10-02: cli.ingest (cli.py:174) opens SQLiteStore and calls
46
+ IngestionPipeline.run(store=..., rebuild=True); run calls _process_file per file,
47
+ which calls the extractor's parse; then ResolverEngine.resolve (pipeline.py:213);
48
+ then _persist_incremental (pipeline.py:237), which calls
49
+ SQLiteStore.save_incremental_batch (pipeline.py:411). Order is not scored, only
50
+ presence.
@@ -0,0 +1,56 @@
1
+ id: cgis-impact-drift-same-name
2
+ repo: cgis
3
+ sha: 715cd9a2ecee47949651344757edb4c7d09f64d7
4
+ src_root: src
5
+ type: impact
6
+ question: |
7
+ In this repository, which code under `src/` can end up calling
8
+ `PatternCatalog.load_project_domains` in `src/cgis/query/drift/catalog.py`, directly
9
+ or transitively? Follow the chain up to the user-facing entry points (CLI commands
10
+ and MCP tools, and the Guardian review runner) and name every function or method
11
+ on the way.
12
+ gold:
13
+ symbols:
14
+ - DriftScorer.load_project_domains
15
+ - drift_service.analyze_drift
16
+ - GraphContextCollector.collect_drift
17
+ - ContextCollector.collect_all
18
+ - cli.drift
19
+ - mcp_server.cgis_drift
20
+ - id: guardian
21
+ any_of: [run_guardian, run_review_routed, GuardianReviewer.run_review, run_axis_review]
22
+ files:
23
+ - src/cgis/query/drift/drift.py
24
+ - src/cgis/query/drift/drift_service.py
25
+ - src/cgis/guardian/collector.py
26
+ - src/cgis/cli.py
27
+ - src/cgis/api/mcp_server.py
28
+ allowed_symbols:
29
+ - PatternCatalog
30
+ - PatternCatalog.load_project_domains
31
+ - DriftScorer
32
+ - GraphContextCollector
33
+ - ContextCollector
34
+ - GuardianReviewer
35
+ - run_guardian
36
+ - run_review_routed
37
+ - run_axis_review
38
+ - run_chunked_review
39
+ - chunked._single_pass
40
+ allowed_files:
41
+ - src/cgis/query/drift/catalog.py
42
+ - src/cgis/guardian/core.py
43
+ - src/cgis/guardian/axes.py
44
+ - src/cgis/guardian/chunked.py
45
+ - src/cgis/guardian/runner.py
46
+ notes: |
47
+ The first hop shares the target's name: DriftScorer.load_project_domains
48
+ (drift.py:58) wraps it, so a grep for the name finds both definitions and three
49
+ call sites that must be told apart. Read 2026-10-02 at the pinned sha:
50
+ DriftScorer.load_project_domains is called in analyze_drift (drift_service.py:162)
51
+ and GraphContextCollector.collect_drift (guardian/collector.py:249); analyze_drift
52
+ in cli.drift (cli.py:1213) and mcp_server.cgis_drift (mcp_server.py:636);
53
+ collect_drift in ContextCollector.collect_all (collector.py:353), which
54
+ GuardianReviewer.run_review (core.py:128) and run_axis_review (axes.py:68) call,
55
+ up through run_review_routed to run_guardian (runner.py:472). Any one Guardian
56
+ hop counts for the guardian item.
@@ -0,0 +1,27 @@
1
+ id: cgis-impact-language-for
2
+ repo: cgis
3
+ sha: 715cd9a2ecee47949651344757edb4c7d09f64d7
4
+ src_root: src
5
+ type: impact
6
+ question: |
7
+ In this repository, the function `language_for` in `src/cgis/extractors/registry.py`
8
+ is about to change its signature. List every function or method that calls it
9
+ directly, so each call site can be updated.
10
+ gold:
11
+ symbols:
12
+ - cli.structure
13
+ - registry.is_supported
14
+ - SourceCollector.collect_full_files
15
+ - GraphContextCollector.sections
16
+ - mermaid._node_slug
17
+ files:
18
+ - src/cgis/cli.py
19
+ - src/cgis/extractors/registry.py
20
+ - src/cgis/guardian/collector.py
21
+ - src/cgis/query/render/mermaid.py
22
+ allowed_symbols:
23
+ - registry.language_for
24
+ notes: |
25
+ Checked 2026-10-02 by grep (`language_for(` outside imports) and by reading each
26
+ enclosing def: cli.py:843, registry.py:88, collector.py:175 and :214,
27
+ mermaid.py:77. The cgis graph agrees, but the key was not taken from it.
@@ -0,0 +1,45 @@
1
+ id: cgis-impact-transitive-tsconfig
2
+ repo: cgis
3
+ sha: 715cd9a2ecee47949651344757edb4c7d09f64d7
4
+ src_root: src
5
+ type: impact
6
+ question: |
7
+ In this repository, which code under `src/` can end up executing the function
8
+ `_existing_json` in `src/cgis/tsconfig_paths.py`, directly or transitively? Follow
9
+ the chain all the way up to the user-facing entry points (CLI commands and MCP
10
+ tools) and name every function or method on the way.
11
+ gold:
12
+ symbols:
13
+ - tsconfig_paths._locate
14
+ - tsconfig_paths._options
15
+ - TsconfigPaths.aliases
16
+ - ImportNameCollector.collect
17
+ - IngestionPipeline.run
18
+ - cli.ingest
19
+ - mcp_server.cgis_ingest
20
+ - id: auto_refresh
21
+ any_of: [auto_refresh._refresh, auto_refresh.refresh_if_stale, auto_refresh.refreshes_graph]
22
+ files:
23
+ - src/cgis/tsconfig_paths.py
24
+ - src/cgis/import_names.py
25
+ - src/cgis/pipeline.py
26
+ - src/cgis/cli.py
27
+ - src/cgis/api/mcp_server.py
28
+ - src/cgis/api/auto_refresh.py
29
+ allowed_symbols:
30
+ - tsconfig_paths._existing_json
31
+ - TsconfigPaths
32
+ - ImportNameCollector
33
+ - IngestionPipeline
34
+ - auto_refresh
35
+ - api.mcp_server
36
+ notes: |
37
+ Multi-hop impact, five calls deep before the first entry point. Read 2026-10-02 at
38
+ the pinned sha: _existing_json is called only in _locate (tsconfig_paths.py:190,
39
+ :203); _locate only in _options (:153); _options in TsconfigPaths.aliases (:122)
40
+ and recursively in itself (:154); aliases only in ImportNameCollector.collect
41
+ (import_names.py:82); collect in IngestionPipeline.run (pipeline.py:193); run in
42
+ cli.ingest (cli.py:236, :243), mcp_server.cgis_ingest (mcp_server.py:354) and
43
+ auto_refresh._refresh (auto_refresh.py:82), which refresh_if_stale and the
44
+ refreshes_graph decorator on most MCP tools reach when CGIS_AUTO_REFRESH=1, so any
45
+ MCP tool name is allowed. The cgis graph agrees; the key was checked by grep.
@@ -0,0 +1,36 @@
1
+ id: cgis-orientation-call-resolution
2
+ repo: cgis
3
+ sha: 715cd9a2ecee47949651344757edb4c7d09f64d7
4
+ src_root: src
5
+ type: orientation
6
+ question: |
7
+ Which files implement turning unresolved call targets (`raw_call:<name>` edges
8
+ emitted by the extractors) into fully qualified names, and what does each of
9
+ them contribute?
10
+ gold:
11
+ symbols:
12
+ - ResolverEngine
13
+ - SymbolResolver
14
+ - id: indices
15
+ any_of: [IndexBuilder, SymbolIndex]
16
+ files:
17
+ - src/cgis/resolver/engine.py
18
+ - src/cgis/resolver/symbols.py
19
+ - src/cgis/resolver/indices.py
20
+ allowed_symbols:
21
+ - ResolverEngine.resolve
22
+ - ResolverEngine._resolved_call_edge
23
+ - js_builtin_target
24
+ - IngestionPipeline.run
25
+ - Edge
26
+ allowed_files:
27
+ - src/cgis/resolver/js_builtins.py
28
+ - src/cgis/core/models.py
29
+ - src/cgis/pipeline.py
30
+ - src/cgis/extractors/python_extractor.py
31
+ - src/cgis/extractors/typescript_extractor.py
32
+ - src/cgis/extractors/base.py
33
+ notes: |
34
+ Read 2026-10-02: engine.py drives resolution, symbols.py holds the strategies
35
+ over a SymbolIndex, indices.py builds the indices (module docstrings say so).
36
+ js_builtins.py and models.py are correct but optional.
@@ -0,0 +1,55 @@
1
+ id: owner-impact-credit-wallet
2
+ repo: owner-api
3
+ sha: 8de22452b5d91242dd742a666ef2cd7b1eb7c1ff
4
+ src_root: ownima-backend/app
5
+ type: impact
6
+ question: |
7
+ In this repository, the module-level function `credit_wallet` in
8
+ `ownima-backend/app/domains/finance/service.py` is about to change. Which code under
9
+ `ownima-backend/app/` (not tests, not scripts) can end up calling it, directly or
10
+ transitively? Follow every chain up to its entry point (an HTTP route, a worker task,
11
+ or a function nothing else calls) and name every function or method on the way.
12
+ gold:
13
+ symbols:
14
+ - FinanceService.credit_wallet
15
+ - FinanceService.top_up
16
+ - TopUpService._credit
17
+ - TopUpService.fulfill
18
+ - TopUpService.get_status
19
+ - TopUpService.handle_webhook_event
20
+ - finance.routes.get_top_up
21
+ - finance.routes.stripe_webhook
22
+ - VehicleBonusCreditor._pay
23
+ - VehicleBonusCreditor.credit
24
+ - VehicleBonusWorker.credit
25
+ - vehicle_bonus.reconcile_vehicle_bonus
26
+ - VehicleBonusWorker.reconcile
27
+ files:
28
+ - ownima-backend/app/domains/finance/service.py
29
+ - ownima-backend/app/domains/finance/top_up_service.py
30
+ - ownima-backend/app/domains/finance/routes.py
31
+ - ownima-backend/app/domains/finance/vehicle_bonus_credit.py
32
+ - ownima-backend/app/worker/vehicle_bonus.py
33
+ allowed_symbols:
34
+ - finance.service.credit_wallet
35
+ - FinanceService
36
+ - TopUpService
37
+ - VehicleBonusCreditor
38
+ - VehicleBonusWorker
39
+ - worker.base
40
+ allowed_files:
41
+ - ownima-backend/app/worker/base.py
42
+ notes: |
43
+ Same-name trap plus DI: the module function is wrapped by the method
44
+ FinanceService.credit_wallet (service.py:332-344), and the top-up path reaches the
45
+ method through an injected `self._finance` (top_up_service.py:316). Read 2026-10-02
46
+ at the pinned sha with an AST call index, not with cgis: credit_wallet is called in
47
+ FinanceService.credit_wallet (service.py:344) and VehicleBonusCreditor._pay
48
+ (vehicle_bonus_credit.py:202); the method in FinanceService.top_up (:367, no callers
49
+ of its own) and TopUpService._credit (top_up_service.py:316); _credit in fulfill
50
+ (:266); fulfill in get_status (:294) and handle_webhook_event (:305); those in the
51
+ routes get_top_up (routes.py:232) and stripe_webhook (:344). _pay in
52
+ VehicleBonusCreditor.credit (:142); that in VehicleBonusWorker.credit
53
+ (worker/vehicle_bonus.py:151) and reconcile_vehicle_bonus (:106); the latter in
54
+ VehicleBonusWorker.reconcile (:177). Both worker methods are registered as tasks in
55
+ worker/base.py:198-199. The cgis graph at this sha misses both routes.
@@ -0,0 +1,30 @@
1
+ id: owner-impact-occupied-window-same-name
2
+ repo: owner-api
3
+ sha: 8de22452b5d91242dd742a666ef2cd7b1eb7c1ff
4
+ src_root: ownima-backend/app
5
+ type: impact
6
+ question: |
7
+ In this repository, the function `occupied_window` in
8
+ `ownima-backend/app/services/reservation_conflict_service.py` is about to change its
9
+ signature. List every function or method under `ownima-backend/app/` (not tests,
10
+ not scripts) that calls it directly, so each call site can be updated.
11
+ gold:
12
+ symbols:
13
+ - ReservationConflictService._check_conflicts_internal
14
+ - ReservationConflictService._find_conflicting_groups
15
+ - ReservationConflictService._clusters
16
+ - ReservationConflictService.get_pending_conflicts_for_reservation
17
+ files:
18
+ - ownima-backend/app/services/reservation_conflict_service.py
19
+ allowed_symbols:
20
+ - reservation_conflict_service.occupied_window
21
+ - ReservationConflictService
22
+ notes: |
23
+ Same-name trap: domains/pricing/handover.py:230 defines another module-level
24
+ `occupied_window`, and HandoverSchedule.window_for (handover.py:195),
25
+ ReservationCreation.compute_actual_datetime_range (creation.py:716) and Rule.build
26
+ (validators.py:164) call that one (creation.py:21-28 and validators.py:18-25 import it
27
+ from app.domains.pricing.handover). Naming them costs precision. Read 2026-10-02 at
28
+ the pinned sha with an AST call index: the services function (line 836) is called at
29
+ reservation_conflict_service.py:241, :552, :661, :678, :736 and :753, inside the four
30
+ methods above.
@@ -188,35 +188,37 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
188
188
  models_Node["Node (models.py:85)"]:::classNode
189
189
  end
190
190
  subgraph sg_import_names["import_names.py"]
191
- import_names_ImportNameCollector["ImportNameCollector (import_names.py:49)"]:::classNode
192
- import_names_ImportNameCollector_collect["collect (import_names.py:64)"]:::methodNode
193
- import_names_ImportNameCollector_note["note (import_names.py:57)"]:::methodNode
191
+ import_names_ImportNameCollector["ImportNameCollector (import_names.py:58)"]:::classNode
192
+ import_names_ImportNameCollector_collect["collect (import_names.py:74)"]:::methodNode
193
+ import_names_ImportNameCollector_note["note (import_names.py:67)"]:::methodNode
194
194
  end
195
195
  subgraph sg_pipeline["pipeline.py"]
196
- pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:266)"]:::methodNode
197
- pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:401)"]:::methodNode
198
- pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:327)"]:::methodNode
199
- pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:351)"]:::methodNode
200
- pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:229)"]:::methodNode
201
- pipeline_IngestionPipeline_run["run (pipeline.py:100)"]:::methodNode
202
- pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:83)"]:::methodNode
196
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:292)"]:::methodNode
197
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:427)"]:::methodNode
198
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:353)"]:::methodNode
199
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:377)"]:::methodNode
200
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:252)"]:::methodNode
201
+ pipeline_IngestionPipeline_run["run (pipeline.py:115)"]:::methodNode
202
+ pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:98)"]:::methodNode
203
+ pipeline_observe["_observe (pipeline.py:56)"]:::funcNode
203
204
  end
204
205
  subgraph sg_engine["engine.py"]
205
206
  engine_ResolverEngine["ResolverEngine (engine.py:49)"]:::classNode
206
- engine_ResolverEngine_resolve["resolve (engine.py:80)"]:::methodNode
207
+ engine_ResolverEngine_resolve["resolve (engine.py:85)"]:::methodNode
207
208
  end
208
209
  subgraph sg_uplift["uplift.py"]
209
210
  uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
210
211
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
211
212
  end
212
213
  subgraph sg_sqlite_store["sqlite_store.py"]
213
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:58)"]:::classNode
214
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:63)"]:::classNode
214
215
  end
215
216
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
216
217
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
217
218
  pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
218
219
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
219
220
  pipeline_IngestionPipeline_run -->|CALLS| import_names_ImportNameCollector
221
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_observe
220
222
  pipeline_IngestionPipeline_run -->|CALLS| import_names_ImportNameCollector_note
221
223
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_get_extractor
222
224
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_process_file
@@ -235,19 +237,20 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
235
237
  |--------|------|------|
236
238
  | `Node` | CLASS | [`models.py:85`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L85) |
237
239
  | `Edge` | CLASS | [`models.py:142`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L142) |
238
- | `ImportNameCollector` | CLASS | [`import_names.py:49`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L49) |
239
- | `note` | METHOD | [`import_names.py:57`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L57) |
240
- | `collect` | METHOD | [`import_names.py:64`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L64) |
241
- | `workspace_root` | METHOD | [`pipeline.py:83`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L83) |
242
- | `run` | METHOD | [`pipeline.py:100`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L100) |
243
- | `_process_file` | METHOD | [`pipeline.py:229`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L229) |
244
- | `_cross_file_inputs_changed` | METHOD | [`pipeline.py:266`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L266) |
245
- | `_is_noop_incremental` | METHOD | [`pipeline.py:327`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L327) |
246
- | `_persist_incremental` | METHOD | [`pipeline.py:351`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L351) |
247
- | `_get_extractor` | METHOD | [`pipeline.py:401`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L401) |
240
+ | `ImportNameCollector` | CLASS | [`import_names.py:58`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L58) |
241
+ | `note` | METHOD | [`import_names.py:67`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L67) |
242
+ | `collect` | METHOD | [`import_names.py:74`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L74) |
243
+ | `_observe` | FUNCTION | [`pipeline.py:56`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L56) |
244
+ | `workspace_root` | METHOD | [`pipeline.py:98`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L98) |
245
+ | `run` | METHOD | [`pipeline.py:115`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L115) |
246
+ | `_process_file` | METHOD | [`pipeline.py:252`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L252) |
247
+ | `_cross_file_inputs_changed` | METHOD | [`pipeline.py:292`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L292) |
248
+ | `_is_noop_incremental` | METHOD | [`pipeline.py:353`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L353) |
249
+ | `_persist_incremental` | METHOD | [`pipeline.py:377`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L377) |
250
+ | `_get_extractor` | METHOD | [`pipeline.py:427`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L427) |
248
251
  | `ResolverEngine` | CLASS | [`engine.py:49`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L49) |
249
- | `resolve` | METHOD | [`engine.py:80`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L80) |
252
+ | `resolve` | METHOD | [`engine.py:85`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L85) |
250
253
  | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
251
254
  | `execute_uplift` | METHOD | [`uplift.py:91`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L91) |
252
- | `SQLiteStore` | CLASS | [`sqlite_store.py:58`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L58) |
255
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:63`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L63) |
253
256
  <!-- END_CGIS_GRAPH -->
@@ -12,35 +12,37 @@ 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_import_names["import_names.py"]
15
- import_names_ImportNameCollector["ImportNameCollector (import_names.py:49)"]:::classNode
16
- import_names_ImportNameCollector_collect["collect (import_names.py:64)"]:::methodNode
17
- import_names_ImportNameCollector_note["note (import_names.py:57)"]:::methodNode
15
+ import_names_ImportNameCollector["ImportNameCollector (import_names.py:58)"]:::classNode
16
+ import_names_ImportNameCollector_collect["collect (import_names.py:74)"]:::methodNode
17
+ import_names_ImportNameCollector_note["note (import_names.py:67)"]:::methodNode
18
18
  end
19
19
  subgraph sg_pipeline["pipeline.py"]
20
- pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:266)"]:::methodNode
21
- pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:401)"]:::methodNode
22
- pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:327)"]:::methodNode
23
- pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:351)"]:::methodNode
24
- pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:229)"]:::methodNode
25
- pipeline_IngestionPipeline_run["run (pipeline.py:100)"]:::methodNode
26
- pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:83)"]:::methodNode
20
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:292)"]:::methodNode
21
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:427)"]:::methodNode
22
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:353)"]:::methodNode
23
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:377)"]:::methodNode
24
+ pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:252)"]:::methodNode
25
+ pipeline_IngestionPipeline_run["run (pipeline.py:115)"]:::methodNode
26
+ pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:98)"]:::methodNode
27
+ pipeline_observe["_observe (pipeline.py:56)"]:::funcNode
27
28
  end
28
29
  subgraph sg_engine["engine.py"]
29
30
  engine_ResolverEngine["ResolverEngine (engine.py:49)"]:::classNode
30
- engine_ResolverEngine_resolve["resolve (engine.py:80)"]:::methodNode
31
+ engine_ResolverEngine_resolve["resolve (engine.py:85)"]:::methodNode
31
32
  end
32
33
  subgraph sg_uplift["uplift.py"]
33
34
  uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
34
35
  uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
35
36
  end
36
37
  subgraph sg_sqlite_store["sqlite_store.py"]
37
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:58)"]:::classNode
38
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:63)"]:::classNode
38
39
  end
39
40
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
40
41
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
41
42
  pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
42
43
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
43
44
  pipeline_IngestionPipeline_run -->|CALLS| import_names_ImportNameCollector
45
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_observe
44
46
  pipeline_IngestionPipeline_run -->|CALLS| import_names_ImportNameCollector_note
45
47
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_get_extractor
46
48
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_process_file