codegraph-brain 0.28.0__tar.gz → 0.29.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 (433) hide show
  1. codegraph_brain-0.29.0/.github/test-count-baseline +1 -0
  2. codegraph_brain-0.29.0/.release-please-manifest.json +3 -0
  3. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/CHANGELOG.md +36 -0
  4. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/PKG-INFO +1 -1
  5. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/README.md +21 -2
  6. codegraph_brain-0.29.0/benchmarks/agent_ab/RESULTS.md +177 -0
  7. codegraph_brain-0.29.0/benchmarks/agent_ab/results.jsonl +65 -0
  8. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/architecture/HOW_IT_WORKS.md +33 -30
  9. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/architecture/diagrams/pipeline_flow.mermaid +17 -15
  10. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/how-to/AGENT_ONBOARDING.md +19 -0
  11. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/how-to/MCP_REFERENCE.md +28 -10
  12. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/ontology/core.yaml +1 -0
  13. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/pyproject.toml +1 -1
  14. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/agent_ab.py +143 -23
  15. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/generate_mcp_ref.py +10 -1
  16. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/server.json +2 -2
  17. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/api/mcp_server.py +185 -27
  18. codegraph_brain-0.29.0/src/cgis/api/server_instructions.py +47 -0
  19. codegraph_brain-0.29.0/src/cgis/api/tool_allowlist.py +95 -0
  20. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/bench/guard.py +27 -5
  21. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/bench/transcript.py +9 -1
  22. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/cli.py +4 -3
  23. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/core/js_globals.py +7 -1
  24. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/core/models.py +4 -0
  25. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/_python_functions.py +38 -0
  26. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/_typescript_bindings.py +55 -2
  27. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/python_extractor.py +1 -1
  28. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/typescript_extractor.py +12 -3
  29. codegraph_brain-0.29.0/src/cgis/import_names.py +162 -0
  30. codegraph_brain-0.29.0/src/cgis/npm_dependencies.py +73 -0
  31. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/pipeline.py +22 -0
  32. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/analysis/suggest_service.py +2 -0
  33. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/context/audit.py +2 -0
  34. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/context/orphans.py +2 -0
  35. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/engine.py +144 -18
  36. codegraph_brain-0.29.0/src/cgis/query/fqn.py +183 -0
  37. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/render/metrics.py +3 -2
  38. codegraph_brain-0.29.0/src/cgis/query/render/text.py +127 -0
  39. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/resolver/engine.py +7 -3
  40. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/resolver/indices.py +83 -6
  41. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/resolver/js_builtins.py +53 -0
  42. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/resolver/symbols.py +146 -9
  43. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/storage/sqlite_store.py +69 -1
  44. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/tsconfig_paths.py +28 -11
  45. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/workspaces.py +94 -1
  46. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_annotation_calibration.py +8 -2
  47. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/agent_ab_stubs.py +4 -1
  48. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/conftest.py +6 -0
  49. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_agent_ab_guard.py +22 -0
  50. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_agent_ab_script.py +155 -2
  51. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_agent_ab_transcript.py +12 -0
  52. codegraph_brain-0.29.0/tests/unit/test_annotated_alias_receiver.py +224 -0
  53. codegraph_brain-0.29.0/tests/unit/test_configs_above_root.py +261 -0
  54. codegraph_brain-0.29.0/tests/unit/test_dispatch_edges.py +223 -0
  55. codegraph_brain-0.29.0/tests/unit/test_find_symbol_path_prefix.py +141 -0
  56. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_fqn.py +66 -0
  57. codegraph_brain-0.29.0/tests/unit/test_impact_agent_sized.py +195 -0
  58. codegraph_brain-0.29.0/tests/unit/test_mcp_server_instructions.py +177 -0
  59. codegraph_brain-0.29.0/tests/unit/test_npm_dependencies.py +321 -0
  60. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_js_builtins.py +15 -5
  61. codegraph_brain-0.29.0/tests/unit/test_text_format.py +256 -0
  62. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/uv.lock +1 -1
  63. codegraph_brain-0.28.0/.github/test-count-baseline +0 -1
  64. codegraph_brain-0.28.0/.release-please-manifest.json +0 -3
  65. codegraph_brain-0.28.0/src/cgis/import_names.py +0 -84
  66. codegraph_brain-0.28.0/src/cgis/query/fqn.py +0 -82
  67. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.claude-plugin/marketplace.json +0 -0
  68. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.gitattributes +0 -0
  69. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.github/workflows/autodoc.yml +0 -0
  70. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.github/workflows/ci.yml +0 -0
  71. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.github/workflows/guardian.yml +0 -0
  72. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.github/workflows/mcp-registry.yml +0 -0
  73. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.github/workflows/pr-title.yml +0 -0
  74. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.github/workflows/release-please.yml +0 -0
  75. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.github/workflows/ui.yml +0 -0
  76. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.gitignore +0 -0
  77. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.pre-commit-config.yaml +0 -0
  78. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/.python-version +0 -0
  79. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/CLAUDE.md +0 -0
  80. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/CONTRIBUTING.md +0 -0
  81. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/LICENSE +0 -0
  82. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/Makefile +0 -0
  83. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/PRIVACY.md +0 -0
  84. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/README.md +0 -0
  85. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/.gitignore +0 -0
  86. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/cgis-control-sqlite-pragmas.yaml +0 -0
  87. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/cgis-flow-ingest-to-sqlite.yaml +0 -0
  88. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/cgis-impact-drift-same-name.yaml +0 -0
  89. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/cgis-impact-language-for.yaml +0 -0
  90. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/cgis-impact-transitive-tsconfig.yaml +0 -0
  91. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/cgis-orientation-call-resolution.yaml +0 -0
  92. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/owner-impact-credit-wallet.yaml +0 -0
  93. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/agent_ab/tasks/owner-impact-occupied-window-same-name.yaml +0 -0
  94. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/CURATION.md +0 -0
  95. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/calibration.jsonl +0 -0
  96. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
  97. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
  98. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
  99. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
  100. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
  101. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
  102. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
  103. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-directive-rows.jsonl +0 -0
  104. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-prohibition-rows.jsonl +0 -0
  105. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-122.yaml +0 -0
  106. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-140.yaml +0 -0
  107. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-141.yaml +0 -0
  108. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-142.yaml +0 -0
  109. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-143.yaml +0 -0
  110. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-144.yaml +0 -0
  111. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-278.yaml +0 -0
  112. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/pr-313.yaml +0 -0
  113. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/guardian/results.jsonl +0 -0
  114. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian/README.md +0 -0
  115. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian/cal_dot_com.json +0 -0
  116. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian/discourse.json +0 -0
  117. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian/grafana.json +0 -0
  118. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian/keycloak.json +0 -0
  119. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian/sentry.json +0 -0
  120. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-judged.jsonl +0 -0
  121. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  122. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  123. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-p3-run1.jsonl +0 -0
  124. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-p3-run2.jsonl +0 -0
  125. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-p3-run3.jsonl +0 -0
  126. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-plan.json +0 -0
  127. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
  128. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  129. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/benchmarks/martian-reviews.jsonl +0 -0
  130. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/data/.gitkeep +0 -0
  131. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/AUDIT.md +0 -0
  132. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/CASE_STUDY.md +0 -0
  133. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  134. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  135. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/architecture/ONTOLOGY.md +0 -0
  136. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  137. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
  138. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/architecture/health_badge.json +0 -0
  139. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/assets/.gitignore +0 -0
  140. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/assets/cgis-app-avatar.png +0 -0
  141. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/assets/cgis-app-avatar.svg +0 -0
  142. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/assets/generate_avatar.py +0 -0
  143. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/examples/.gitkeep +0 -0
  144. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/how-to/CLI_USAGE.md +0 -0
  145. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  146. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/ontology/.gitkeep +0 -0
  147. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/ontology/domains.yaml +0 -0
  148. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/ontology/patterns.yaml +0 -0
  149. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/ontology/tolerances.lock +0 -0
  150. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/plans/2026-09-09-graph-freshness.md +0 -0
  151. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  152. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  153. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  154. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
  155. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  156. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  157. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  158. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  159. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  160. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  161. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  162. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  163. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  164. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
  165. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  166. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  167. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  168. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  169. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  170. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  171. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  172. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  173. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  174. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  175. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  176. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  177. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  178. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  179. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  180. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  181. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-09-05-annotation-graph-design.md +0 -0
  182. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/2026-09-09-graph-freshness-design.md +0 -0
  183. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/BLUEPRINT.md +0 -0
  184. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/PRD.md +0 -0
  185. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/TDD.md +0 -0
  186. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  187. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  188. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  189. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  190. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  191. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  192. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  193. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  194. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  195. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  196. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  197. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  198. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  199. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  200. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  201. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  202. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  203. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  204. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
  205. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +0 -0
  206. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/glama.json +0 -0
  207. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/main.py +0 -0
  208. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/plugin/.claude-plugin/plugin.json +0 -0
  209. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/plugin/.mcp.json +0 -0
  210. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/plugin/README.md +0 -0
  211. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/plugin/skills/cgis/SKILL.md +0 -0
  212. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/plugin/skills/ingest/SKILL.md +0 -0
  213. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/release-please-config.json +0 -0
  214. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/backfill_calibration_fingerprint.py +0 -0
  215. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/backfill_review_fingerprint.py +0 -0
  216. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/check_pytest_raises.py +0 -0
  217. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/check_test_count.py +0 -0
  218. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/colab_bench.sh +0 -0
  219. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/gen_ideal_graph.py +0 -0
  220. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/generate_health.py +0 -0
  221. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/generate_schema_docs.py +0 -0
  222. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/guardian_bench.py +0 -0
  223. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/guardian_calibrate.py +0 -0
  224. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/guardian_martian.py +0 -0
  225. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/guardian_replay_skeptic.py +0 -0
  226. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/guardian_review.py +0 -0
  227. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/inject_architecture_graph.py +0 -0
  228. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/mcp_registry_gate.sh +0 -0
  229. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/ollama_visitor.sh +0 -0
  230. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/probe_closure_gap.py +0 -0
  231. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/probe_tier_ladder.py +0 -0
  232. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/recordings_from_corpus.py +0 -0
  233. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/scripts/skeptic_arms.py +0 -0
  234. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/__init__.py +0 -0
  235. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/__main__.py +0 -0
  236. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/api/.gitkeep +0 -0
  237. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/api/__init__.py +0 -0
  238. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/api/auto_refresh.py +0 -0
  239. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/bench/__init__.py +0 -0
  240. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/bench/agent_task.py +0 -0
  241. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/core/.gitkeep +0 -0
  242. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/core/coverage.py +0 -0
  243. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/core/freshness.py +0 -0
  244. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/core/generated.py +0 -0
  245. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/core/paths.py +0 -0
  246. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/.gitkeep +0 -0
  247. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/_python_annotations.py +0 -0
  248. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/_python_ast.py +0 -0
  249. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/_python_classes.py +0 -0
  250. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/_python_imports.py +0 -0
  251. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/_python_types.py +0 -0
  252. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/base.py +0 -0
  253. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/extractors/registry.py +0 -0
  254. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/__init__.py +0 -0
  255. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/axes.py +0 -0
  256. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/bench.py +0 -0
  257. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/calibrate.py +0 -0
  258. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/chunked.py +0 -0
  259. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/chunker.py +0 -0
  260. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/collector.py +0 -0
  261. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/core.py +0 -0
  262. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/diff_index.py +0 -0
  263. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/evidence.py +0 -0
  264. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/findings.py +0 -0
  265. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/github_poster.py +0 -0
  266. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/martian.py +0 -0
  267. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/metrics.py +0 -0
  268. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/prompts.py +0 -0
  269. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/providers/__init__.py +0 -0
  270. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/providers/base.py +0 -0
  271. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/providers/gemini.py +0 -0
  272. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/providers/mistral.py +0 -0
  273. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/providers/ollama.py +0 -0
  274. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/providers/openrouter.py +0 -0
  275. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/recording.py +0 -0
  276. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/render.py +0 -0
  277. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/review_fingerprint.py +0 -0
  278. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/runner.py +0 -0
  279. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/guardian/skeptic.py +0 -0
  280. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/py.typed +0 -0
  281. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/python_dependencies.py +0 -0
  282. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/analysis/__init__.py +0 -0
  283. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/analysis/analyzer.py +0 -0
  284. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/analysis/anomaly.py +0 -0
  285. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/analysis/cohesion.py +0 -0
  286. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/analysis/health.py +0 -0
  287. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/analysis/overview.py +0 -0
  288. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/context/__init__.py +0 -0
  289. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/context/context_service.py +0 -0
  290. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/context/prompt.py +0 -0
  291. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/context/snippet.py +0 -0
  292. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/__init__.py +0 -0
  293. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/_scc.py +0 -0
  294. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/catalog.py +0 -0
  295. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/drift.py +0 -0
  296. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/drift_service.py +0 -0
  297. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/fingerprint.py +0 -0
  298. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/fractal.py +0 -0
  299. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/ontology_init.py +0 -0
  300. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/quotient.py +0 -0
  301. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/scoring.py +0 -0
  302. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/drift/triads.py +0 -0
  303. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/render/__init__.py +0 -0
  304. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/render/graph_json.py +0 -0
  305. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/query/render/mermaid.py +0 -0
  306. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/resolver/.gitkeep +0 -0
  307. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/resolver/__init__.py +0 -0
  308. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/resolver/uplift.py +0 -0
  309. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/src/cgis/storage/.gitkeep +0 -0
  310. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/integration/.gitkeep +0 -0
  311. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/.gitkeep +0 -0
  312. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/__init__.py +0 -0
  313. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/conftest.py +0 -0
  314. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_architecture.py +0 -0
  315. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_drift.py +0 -0
  316. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_fractal.py +0 -0
  317. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
  318. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_overview.py +0 -0
  319. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_receiver_resolution.py +0 -0
  320. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_self_parse.py +0 -0
  321. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_self_parse_ts.py +0 -0
  322. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/self_parsing/test_suggest.py +0 -0
  323. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/.gitkeep +0 -0
  324. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/guardian_stubs.py +0 -0
  325. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/review_path_inventory.txt +0 -0
  326. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test___main__.py +0 -0
  327. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_agent_ab_task.py +0 -0
  328. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_analyzer.py +0 -0
  329. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_annotation_edges.py +0 -0
  330. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_audit.py +0 -0
  331. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_auto_refresh.py +0 -0
  332. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
  333. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  334. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_check_pytest_raises.py +0 -0
  335. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_check_test_count.py +0 -0
  336. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_class_cohesion.py +0 -0
  337. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_cli.py +0 -0
  338. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_cohesion.py +0 -0
  339. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_context_service.py +0 -0
  340. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_di_acceptance.py +0 -0
  341. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_drift.py +0 -0
  342. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_drift_service.py +0 -0
  343. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_extractor_registry.py +0 -0
  344. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_features_source.py +0 -0
  345. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_fingerprint.py +0 -0
  346. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_fractal.py +0 -0
  347. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_freshness.py +0 -0
  348. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_gen_ideal_graph.py +0 -0
  349. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_generate_mcp_ref.py +0 -0
  350. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_generated.py +0 -0
  351. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_graph_json.py +0 -0
  352. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_axes.py +0 -0
  353. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_bench.py +0 -0
  354. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_bench_script.py +0 -0
  355. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_calibrate.py +0 -0
  356. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
  357. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_chunked.py +0 -0
  358. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_chunker.py +0 -0
  359. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_collector.py +0 -0
  360. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_core.py +0 -0
  361. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_diff_index.py +0 -0
  362. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_evidence.py +0 -0
  363. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_findings.py +0 -0
  364. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_martian.py +0 -0
  365. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_martian_script.py +0 -0
  366. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_martian_union.py +0 -0
  367. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_metrics.py +0 -0
  368. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  369. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  370. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  371. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_openrouter.py +0 -0
  372. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_poster.py +0 -0
  373. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_providers.py +0 -0
  374. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_providers_name.py +0 -0
  375. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_recording.py +0 -0
  376. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_render.py +0 -0
  377. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
  378. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_review_script.py +0 -0
  379. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_runner.py +0 -0
  380. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_salvage.py +0 -0
  381. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_guardian_skeptic.py +0 -0
  382. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_health_scorer.py +0 -0
  383. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_import_acceptance.py +0 -0
  384. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_inject_architecture_graph.py +0 -0
  385. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_mcp_server.py +0 -0
  386. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_mcp_tool_schemas.py +0 -0
  387. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_mermaid.py +0 -0
  388. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_metrics.py +0 -0
  389. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_metrics_file_coupling.py +0 -0
  390. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_metrics_resolution.py +0 -0
  391. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_models.py +0 -0
  392. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_name_load_positions.py +0 -0
  393. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_ontology_compliance.py +0 -0
  394. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_ontology_init.py +0 -0
  395. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_orphans.py +0 -0
  396. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_overview.py +0 -0
  397. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_overview_tools.py +0 -0
  398. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_package_view.py +0 -0
  399. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_paths.py +0 -0
  400. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_patterns_yaml.py +0 -0
  401. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_pipeline.py +0 -0
  402. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_pipeline_incremental_symbols.py +0 -0
  403. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_pipeline_ts_workspaces.py +0 -0
  404. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_prompt.py +0 -0
  405. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_python_annotations.py +0 -0
  406. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_python_dependencies.py +0 -0
  407. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_python_extractor.py +0 -0
  408. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_query_coverage.py +0 -0
  409. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_quotient.py +0 -0
  410. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_recordings_from_corpus.py +0 -0
  411. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver.py +0 -0
  412. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_import_layout.py +0 -0
  413. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_indices.py +0 -0
  414. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_language_scope.py +0 -0
  415. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_phantom_internal.py +0 -0
  416. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_symbols.py +0 -0
  417. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_ts_declarations.py +0 -0
  418. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_resolver_ts_workspaces.py +0 -0
  419. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_review_fingerprint_closure.py +0 -0
  420. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
  421. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
  422. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_review_fingerprint_record.py +0 -0
  423. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_self_types.py +0 -0
  424. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_skeptic_arms.py +0 -0
  425. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_snippet.py +0 -0
  426. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_sqlite_store.py +0 -0
  427. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_suggest_service.py +0 -0
  428. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_temperature_source.py +0 -0
  429. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_triads.py +0 -0
  430. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_tsconfig_paths.py +0 -0
  431. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_type_checking_imports.py +0 -0
  432. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_typescript_extractor.py +0 -0
  433. {codegraph_brain-0.28.0 → codegraph_brain-0.29.0}/tests/unit/test_uplift.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.29.0"
3
+ }
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.29.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.28.0...codegraph-brain-v0.29.0) (2026-10-14)
4
+
5
+
6
+ ### Features
7
+
8
+ * **bench:** cgis-narrow arm — the cgis arm with three tools listed ([#586](https://github.com/zaebee/codegraph-brain/issues/586)) ([5a5c836](https://github.com/zaebee/codegraph-brain/commit/5a5c836e2fda1f41e6420e0d1160a56a0859ef94))
9
+ * **mcp:** agent-sized cgis_analyze_impact — no test callers, files as dead ends, node budget ([#563](https://github.com/zaebee/codegraph-brain/issues/563)) ([d173d57](https://github.com/zaebee/codegraph-brain/commit/d173d5791e30983b58e7cbe7fb91cac8c7059154))
10
+ * **mcp:** output_format="text" for traversals; trace_flow gets impact's node budget and test screen ([#581](https://github.com/zaebee/codegraph-brain/issues/581)) ([a1dd2b8](https://github.com/zaebee/codegraph-brain/commit/a1dd2b871d34c22e29f25103b9ee349a004ea28a))
11
+ * **mcp:** server instructions in initialize, CGIS_MCP_TOOLS allowlist ([#565](https://github.com/zaebee/codegraph-brain/issues/565)) ([3c37874](https://github.com/zaebee/codegraph-brain/commit/3c37874f78e4a3d439be153641afe1fc19a32f03))
12
+ * **query:** resolve an FQN given with the directories above the graph ([#571](https://github.com/zaebee/codegraph-brain/issues/571)) ([ea43ba9](https://github.com/zaebee/codegraph-brain/commit/ea43ba9f5451e0ee55575570eb8a5341eb906115))
13
+ * **resolver:** DISPATCHES edges from a base-class method to each override ([#575](https://github.com/zaebee/codegraph-brain/issues/575)) ([827143e](https://github.com/zaebee/codegraph-brain/commit/827143ee2a13866602daaea84f1142106c69d49d))
14
+ * **resolver:** type a parameter annotated with an Annotated[T, Depends(...)] alias as T ([#572](https://github.com/zaebee/codegraph-brain/issues/572)) ([fc33b20](https://github.com/zaebee/codegraph-brain/commit/fc33b202b607aecda9d3b317edc1d16f2ba350c6))
15
+ * **workspaces:** read pnpm-workspace.yaml above the ingest root ([#591](https://github.com/zaebee/codegraph-brain/issues/591)) ([b0d67f8](https://github.com/zaebee/codegraph-brain/commit/b0d67f8124da3c414b852f045f6127ab2eec5c3e))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **bench:** agent A/B runner survives a failed session and continues run numbers ([#578](https://github.com/zaebee/codegraph-brain/issues/578)) ([bc303eb](https://github.com/zaebee/codegraph-brain/commit/bc303eb82e3ef25c01093452c2d68e8c3a53d1d9))
21
+ * **bench:** guard — no false refusal on a grep for an import, no bypass through env/newline/prefix ([#590](https://github.com/zaebee/codegraph-brain/issues/590)) ([73ee4e2](https://github.com/zaebee/codegraph-brain/commit/73ee4e260cf3a65a31630f4cc6a46b618872ce7f))
22
+ * **ingest:** read the tsconfig.json and package.json above a sub-directory ingest root ([#560](https://github.com/zaebee/codegraph-brain/issues/560)) ([9722f8c](https://github.com/zaebee/codegraph-brain/commit/9722f8c18da97cba20400cbd109fd8fea684a5e3))
23
+ * **query:** one effective_prefix rule for every FQN-prefix entry point ([#585](https://github.com/zaebee/codegraph-brain/issues/585)) ([b5f10b3](https://github.com/zaebee/codegraph-brain/commit/b5f10b360ab021ba2dcd8dd9a211b222c989e183))
24
+ * **resolver:** TypeScript imports of declared npm packages are EXTERNAL ([#557](https://github.com/zaebee/codegraph-brain/issues/557)) ([73d380a](https://github.com/zaebee/codegraph-brain/commit/73d380acb915671e9597fc01eaf509ba29e78a8b))
25
+
26
+
27
+ ### Documentation
28
+
29
+ * auto-sync architecture graph and MCP reference ([#558](https://github.com/zaebee/codegraph-brain/issues/558)) ([ee275a4](https://github.com/zaebee/codegraph-brain/commit/ee275a412b9af8b2d900e16b84335a343f68a7fa))
30
+ * auto-sync architecture graph and MCP reference ([#564](https://github.com/zaebee/codegraph-brain/issues/564)) ([50637b3](https://github.com/zaebee/codegraph-brain/commit/50637b3b8d01cb4be01cbae3710f21a1cb5f1b02))
31
+ * auto-sync architecture graph and MCP reference ([#573](https://github.com/zaebee/codegraph-brain/issues/573)) ([225499d](https://github.com/zaebee/codegraph-brain/commit/225499dd1a17163160e270b9dbeb73a7ad376b7d))
32
+ * **bench:** agent A/B after [#568](https://github.com/zaebee/codegraph-brain/issues/568) and [#550](https://github.com/zaebee/codegraph-brain/issues/550) — cgis-forced at $0.184 against control $0.298 ([#574](https://github.com/zaebee/codegraph-brain/issues/574)) ([8e0ef37](https://github.com/zaebee/codegraph-brain/commit/8e0ef37b76fffc01e32338c67325535f8cb501f4))
33
+ * **bench:** agent A/B on a task no fix was tuned on (occupied_window) ([#576](https://github.com/zaebee/codegraph-brain/issues/576)) ([a6eb679](https://github.com/zaebee/codegraph-brain/commit/a6eb679b51ae7fd3f52c73eb2da005857f2e6126))
34
+ * **bench:** agent A/B on three deep-chain cgis tasks — impact pays, trace_flow's 32k answer does not ([#579](https://github.com/zaebee/codegraph-brain/issues/579)) ([eb7e951](https://github.com/zaebee/codegraph-brain/commit/eb7e9516a8e952fdbd2266c43accfee1a16109e7))
35
+ * **bench:** agent A/B results for owner-impact-credit-wallet after [#563](https://github.com/zaebee/codegraph-brain/issues/563) and [#565](https://github.com/zaebee/codegraph-brain/issues/565) ([#570](https://github.com/zaebee/codegraph-brain/issues/570)) ([ae84feb](https://github.com/zaebee/codegraph-brain/commit/ae84febcc2621a92d00233e81e994171b6b14cd8))
36
+ * **bench:** flow A/B after [#581](https://github.com/zaebee/codegraph-brain/issues/581) — text cut the answer 4x and the cost by a third; precision unchanged ([#583](https://github.com/zaebee/codegraph-brain/issues/583)) ([e36c850](https://github.com/zaebee/codegraph-brain/commit/e36c85099a85300f46a9b6fa28d375fa68f67227))
37
+ * **bench:** unprompted agents do not call cgis — a short menu changes nothing, one instruction line 2 of 6 ([#587](https://github.com/zaebee/codegraph-brain/issues/587)) ([6534f74](https://github.com/zaebee/codegraph-brain/commit/6534f74f23fcd3d1193bda2201bbf598959cac8e))
38
+
3
39
  ## [0.28.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.27.0...codegraph-brain-v0.28.0) (2026-10-02)
4
40
 
5
41
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codegraph-brain
3
- Version: 0.28.0
3
+ Version: 0.29.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
@@ -40,9 +40,17 @@ resolver gets wrong. Each task's `notes` say how it was checked.
40
40
  |---|---|---|---|---|
41
41
  | `control` | none (`--strict-mcp-config`, empty config) | no | all deleted | no |
42
42
  | `cgis` | this checkout's `cgis-mcp` | yes (the plugin minus its `.mcp.json`) | `graph.db` built before the clock starts | no |
43
+ | `cgis-narrow` | as `cgis`, listing only `analyze_impact`, `find_symbol`, `trace_flow` (`CGIS_MCP_TOOLS`) | as `cgis` | as `cgis` | no |
43
44
  | `cgis-instructed` | as `cgis` | as `cgis` | as `cgis` | one line: query cgis first |
44
45
  | `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
 
47
+ `cgis-narrow` asks whether a short tool menu gets an unprompted agent to call the
48
+ graph (#542). The server instructions and the plugin skill still name all fifteen
49
+ tools, so it measures a short menu with a longer guide beside it. Each results line
50
+ records `cgis_tools`, the number of `mcp__cgis__*` tools the session was offered,
51
+ so an `env` the client ignored would show as 15. With no `--arm` a run now covers
52
+ five arms.
53
+
46
54
  `cgis-instructed` exists because the first pilot's `cgis` arm made no cgis call in
47
55
  12 of 12 sessions: with the server connected and the skill loaded, Sonnet still
48
56
  went straight to Grep. It stands in for #542's MCP server instructions. It barely moved the agent (2 cgis
@@ -75,8 +83,19 @@ uv run python scripts/agent_ab.py report
75
83
 
76
84
  `--model` defaults to `claude-sonnet-5-5`; `--max-budget-usd` (default 2.00)
77
85
  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.
86
+ CI. Transcripts are written to `transcripts/<task>/<arm>-<sha7>-<run>.jsonl`, with
87
+ the first 7 characters of the cgis commit (git-ignored); `results.jsonl` gets one
88
+ line per (task, arm, cgis commit, run) and is meant to be committed with the
89
+ write-up.
90
+
91
+ Run numbers continue from the highest one already in `--results` for the same
92
+ task, arm and cgis commit, so a second invocation that finishes an interrupted
93
+ batch adds runs instead of reusing them. A session that fails is written as a
94
+ line with `failed` set to the reason, and the batch goes on: an ingest or
95
+ worktree that raises gives a line with no metrics, and a `claude -p` that exits
96
+ non-zero keeps its scored metrics and cost but is marked failed too. `run` exits
97
+ 1 at the end if any session failed; `report` counts failed sessions in their own
98
+ column and leaves them out of the medians. A dry run writes nothing.
80
99
 
81
100
  ## Tasks
82
101
 
@@ -0,0 +1,177 @@
1
+ # Agent A/B results
2
+
3
+ One section per run, newest first. The raw lines are in `results.jsonl`; the
4
+ transcripts they point at are git-ignored and stay on the machine that ran them.
5
+
6
+ ## 2026-10-14: does one instruction line get the agent to call cgis?
7
+
8
+ cgis at 5a5c836, `cgis-instructed` — the `cgis` arm plus one appended system-prompt
9
+ line, "query cgis first, then read source only to confirm", the nearest stand-in for
10
+ a line in a project's CLAUDE.md. Same two impact tasks, 3 runs each, about $0.8.
11
+
12
+ | task | cgis calls per run | cost per run |
13
+ |---|---|---|
14
+ | `cgis-impact-drift-same-name` | 0, 0, **1** | 0.184, 0.148, **0.075** |
15
+ | `cgis-impact-transitive-tsconfig` | **1**, 0, 0 | **0.099**, 0.154, 0.153 |
16
+
17
+ - **The line moves the agent a little: 2 of 6 sessions called the graph**, against 0
18
+ of 18 without it. Both made one call, and both were the cheapest runs of the
19
+ six, at the level of `cgis-forced` (0.085 / 0.091). The other four ignored the
20
+ line and cost more than plain `cgis` (median 0.150 against 0.126–0.138).
21
+ - So an instruction is a coin toss weighted against the graph; the hook that refuses
22
+ Read/Grep/Bash until one cgis call (`cgis-forced`) is what delivers the saving
23
+ reliably. A project wanting the gain needs that hook, not a sentence.
24
+ - One run is marked `contaminated` with no cgis CLI call in it: on a task in this
25
+ repository every path contains `cgis/`, and the guard's predicate took the agent's
26
+ own `grep`/`sed` over `src/cgis/...` for one. A harness false positive, kept out of
27
+ the medians by the report as usual.
28
+
29
+ ## 2026-10-14: does a short tool menu get an unprompted agent to call cgis? (#542 item 3)
30
+
31
+ cgis at dbf3de9 (the `cgis-narrow` arm of #586), Sonnet 5.5, 3 runs per arm, 0 failed,
32
+ 0 contaminated, about $1.6. One probe session confirmed the narrowing reached the
33
+ client: the `init` event listed exactly `mcp__cgis__cgis_analyze_impact`,
34
+ `mcp__cgis__cgis_find_symbol`, `mcp__cgis__cgis_trace_flow`.
35
+
36
+ | task | arm | cgis calls | recall | precision | median $ |
37
+ |---|---|---|---|---|---|
38
+ | `cgis-impact-drift-same-name` | cgis (15 tools) | 0, 0, 0 | 1.00 | 1.00 | 0.126 |
39
+ | | cgis-narrow (3 tools) | 0, 0, 0 | 1.00 | 1.00 | 0.125 |
40
+ | `cgis-impact-transitive-tsconfig` | cgis | 0, 0, 0 | 1.00 | 1.00 | 0.138 |
41
+ | | cgis-narrow | 0, 0, 0 | 1.00 | 1.00 | 0.154 |
42
+
43
+ - **Refuted.** Three tools instead of fifteen changed nothing: no unprompted
44
+ session called the graph, here or in any of the six `cgis` sessions before it —
45
+ 0 of 18 today, across four tasks. The server instructions (#542 item 1) did not
46
+ move it either. Item 3's smaller default set has no evidence behind it.
47
+ - These are the two tasks where `cgis-forced` was about 30% cheaper than control
48
+ (#579), so the graph would have paid; the agent never looked.
49
+ - A likely reason sits in the client: Claude Code defers MCP tools, listing names
50
+ only, so a first call needs a ToolSearch to load the schema — every forced
51
+ session made one. An agent holding Grep and Bash, with a task grep finishes in
52
+ 7–13 calls, does not take that step unasked.
53
+ - Confound, as the README notes: the instructions and the plugin skill still name
54
+ all fifteen tools beside the three offered.
55
+
56
+ ## 2026-10-14: `cgis-flow-ingest-to-sqlite` after #581 (text format, trace budget)
57
+
58
+ cgis at a1dd2b8, Sonnet 5.5, 3 runs per arm, 0 failed, 0 contaminated, about $0.6.
59
+
60
+ | arm | recall | precision | median $ | trace answer |
61
+ |---|---|---|---|---|
62
+ | control | 1.00 | 0.94 | **0.101** | — |
63
+ | cgis-forced, before (#579) | 1.00 | 0.52 | 0.167 | 32,637 chars of json |
64
+ | cgis-forced, now | 1.00 | 0.58 | 0.112 | 6.3–8.9k chars of text |
65
+
66
+ - **Size: fixed.** All three sessions asked for `output_format="text"` on their
67
+ own (the server instructions now say to), and the answer shrank about 4×.
68
+ Cost fell by a third, to 11% above control.
69
+ - **Precision: not fixed.** Given every node the root reaches, the agent still
70
+ lists most of them (17–21 outside the key: `_compute_hash`,
71
+ `_is_noop_incremental`, `ResolverEngine` helpers). Control reads the code and
72
+ names the spine. The format no longer costs the agent; deciding which
73
+ branches are the main path is the part the graph does not do.
74
+ - Two sessions first called `cgis_find_symbol(query="ingest", fqn_prefix="src.cgis")`
75
+ and got nothing: #568 taught `resolve_fqn` to drop a directory above the
76
+ graph, but `find_symbol`'s `fqn_prefix` filter was not given the same rule.
77
+
78
+ ## 2026-10-14: three cgis tasks with a deep chain
79
+
80
+ cgis at bc303eb, Sonnet 5.5, 3 runs per arm, 0 failed, 0 contaminated, about $2.3.
81
+ None of these tasks was used to find the recent fixes.
82
+
83
+ | task | arm | recall | precision | median $ | median tool calls | cgis calls |
84
+ |---|---|---|---|---|---|---|
85
+ | `cgis-impact-drift-same-name` | control | 1.00 | 1.00 | 0.124 | 9 | — |
86
+ | | cgis-forced | 1.00 | 1.00 | **0.085** | 3 | 1, 1, 1 |
87
+ | `cgis-impact-transitive-tsconfig` | control | 1.00 | 1.00 | 0.126 | 7 | — |
88
+ | | cgis-forced | 1.00 | 1.00 | **0.091** | 4 | 1, 2, 1 |
89
+ | `cgis-flow-ingest-to-sqlite` | control | 1.00 | 0.86 | **0.112** | 5 | — |
90
+ | | cgis-forced | 1.00 | 0.52 | 0.167 | 4 | 2, 2, 2 |
91
+
92
+ - **Impact across several hops pays:** about 30% cheaper on both impact tasks,
93
+ with one cgis call doing what took control 7–9 greps and reads. Together with
94
+ `credit_wallet`, that makes three impact tasks out of three where the graph
95
+ wins once the question needs more than one hop.
96
+ - **Flow does not, and the cause is the answer's size.** Every forced session
97
+ called `cgis_trace_flow(cgis.cli.ingest, depth=3, json)` and got **32,637
98
+ characters**, the bloat #551 fixed for impact only: trace has no node budget
99
+ and no test filter. Given everything downstream, the agent cannot tell the
100
+ main path from side branches and names them all (precision 0.52, 20 extra
101
+ symbols such as every `ResolverEngine._resolved_*_edge`).
102
+ - `occupied_window` (above) and these together say where cgis earns its place:
103
+ multi-hop impact. A one-hop caller list and a "main path" flow question are
104
+ not where it helps today.
105
+
106
+ ## 2026-10-14: `owner-impact-occupied-window-same-name`, a task no fix was tuned on
107
+
108
+ cgis at 827143e (after #551, #568, #550, #545), Sonnet 5.5, 0 contaminated. The
109
+ three fixes before this were all found in `credit_wallet` transcripts and measured
110
+ there; this task checks whether the gain carries to a question they never saw.
111
+
112
+ | arm | runs | recall | precision | median $ | median tool calls | cgis calls per run |
113
+ |---|---|---|---|---|---|---|
114
+ | control | 3 | 1.00 | 1.00 | **0.130** | 2 | — |
115
+ | cgis | 3 | 1.00 | 1.00 | 0.145 | 4 | 0, 0, 0 |
116
+ | cgis-forced | 2 | 1.00 | 1.00 | 0.135 | 3.5 | 2, 1 |
117
+
118
+ - **It does not carry.** On "list the direct callers", with a same-named
119
+ function in another module as the trap, control answered with one grep and
120
+ one look at the imports, and was the cheapest arm. The graph names the four
121
+ callers exactly (`impact depth=1`, 2.5k characters), but there is nothing
122
+ for it to save on a one-hop question that grep plus the imports already
123
+ answer.
124
+ - The `credit_wallet` gain came from a deep transitive chain through DI. That
125
+ is where the graph pays, so the question for #542's default tool set is
126
+ which kinds of question agents ask, not whether cgis is cheaper in general.
127
+ - `cgis` made no graph call again: 0 in 6 sessions across the two tasks.
128
+ - `cgis-forced` has 2 runs, not 3. The host ran out of memory, and earlyoom
129
+ sent SIGTERM to the third session's `cgis ingest`, which aborted the runner
130
+ twice. Not a cgis failure. The runner stops at the first failed ingest
131
+ instead of recording it and going on.
132
+
133
+ ## 2026-10-14: `owner-impact-credit-wallet`, after #568 and #550
134
+
135
+ cgis at fc33b20, Sonnet 5.5, 3 runs per arm, 0 contaminated, about $1.5 in total.
136
+ `cgis` was not re-run: it made no cgis call on this task in the run below.
137
+
138
+ | arm | recall | precision | median $ | median tool calls | cgis calls per run |
139
+ |---|---|---|---|---|---|
140
+ | control | 1.00 | 1.00 | 0.298 | 7 | — |
141
+ | cgis-forced | 1.00 | 1.00 | **0.184** | 5 | 2, 5, 1 |
142
+
143
+ - `cgis-forced` went from $0.235 to $0.184 median and is now about 38% cheaper
144
+ than control. Control was unchanged ($0.30 to $0.298).
145
+ - **#568.** Two of the three sessions opened with
146
+ `app.domains.finance.service.credit_wallet` again, and this time it resolved:
147
+ the first answer was the full chain (6,746 characters), with no not-found
148
+ first. The third tried the bare `credit_wallet`, which is still ambiguous.
149
+ - **#550.** That first answer now includes both routes, `get_top_up` and
150
+ `stripe_webhook`. One session finished on a single cgis call. The greps that
151
+ remain are the agent confirming that `FinanceService.top_up` and the worker
152
+ tasks have no further callers, not looking for missing ones.
153
+
154
+ ## 2026-10-13: `owner-impact-credit-wallet`, after #563 and #565
155
+
156
+ cgis at 3c37874, Sonnet 5.5, 3 runs per arm, 0 contaminated, about $2.5 in total.
157
+
158
+ | arm | recall | precision | median $ | median tool calls | cgis calls per run |
159
+ |---|---|---|---|---|---|
160
+ | control | 1.00 | 1.00 | 0.30 | 7 | — |
161
+ | cgis | 1.00 | 1.00 | 0.30 | 6 | 0, 0, 0 |
162
+ | cgis-forced | 1.00 | 1.00 | 0.235 | 8 | 3, 11, 3 |
163
+
164
+ - **#551.** The call that returned 51,624 characters in the first pilot,
165
+ `cgis_analyze_impact(domains.finance.service.credit_wallet, depth=8, json)`,
166
+ returned 6,136 here. `cgis-forced` went from more expensive than control
167
+ ($0.207 vs $0.195) to cheaper. Control ranged from $0.198 to $0.327 across
168
+ three runs, so this shows the direction, not the size.
169
+ - **#542.** The `cgis` arm now gets server instructions in `initialize`, and its
170
+ server reported `connected` every time. It still made no cgis call: the task
171
+ is solvable by grep in about seven calls, and the agent took that route.
172
+ - **#568.** Every forced session's first call was
173
+ `app.domains.finance.service.credit_wallet`, built from the file path, which
174
+ is not found because the graph is ingested from `ownima-backend/app`. That
175
+ cost one or two calls per session before the agent found the real FQN.
176
+ - Every arm recovered the two routes the graph misses at this sha
177
+ (`get_top_up`, `stripe_webhook`) by grepping for them.