codegraph-brain 0.29.0__tar.gz → 0.30.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 (515) hide show
  1. codegraph_brain-0.30.0/.github/test-count-baseline +1 -0
  2. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.github/workflows/ci.yml +18 -1
  3. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.gitignore +2 -0
  4. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.pre-commit-config.yaml +1 -0
  5. codegraph_brain-0.30.0/.release-please-manifest.json +3 -0
  6. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/CHANGELOG.md +22 -0
  7. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/CLAUDE.md +33 -12
  8. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/PKG-INFO +3 -2
  9. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/README.md +1 -1
  10. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/AUDIT.md +1 -1
  11. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/architecture/HOW_IT_WORKS.md +40 -37
  12. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/architecture/ONTOLOGY.md +1 -1
  13. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/architecture/diagrams/pipeline_flow.mermaid +22 -20
  14. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/how-to/MCP_REFERENCE.md +4 -3
  15. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/ontology/domains.yaml +6 -7
  16. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/ontology/patterns.yaml +50 -26
  17. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/ontology/tolerances.lock +4 -4
  18. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs-step1.md +1037 -0
  19. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs-step2.md +773 -0
  20. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs-step3.md +732 -0
  21. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs-step4.md +681 -0
  22. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs-step5.md +187 -0
  23. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs-step6.md +270 -0
  24. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs-step7.md +485 -0
  25. codegraph_brain-0.30.0/docs/plans/2026-10-14-language-packs.md +888 -0
  26. codegraph_brain-0.30.0/docs/specs/2026-10-14-language-packs-design.md +537 -0
  27. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/plugin/README.md +1 -1
  28. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/plugin/skills/cgis/SKILL.md +1 -1
  29. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/plugin/skills/ingest/SKILL.md +1 -1
  30. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/pyproject.toml +7 -1
  31. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/generate_health.py +2 -3
  32. codegraph_brain-0.30.0/scripts/graph_identity.py +187 -0
  33. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/guardian_martian.py +4 -4
  34. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/server.json +3 -3
  35. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/api/auto_refresh.py +2 -2
  36. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/api/mcp_server.py +8 -12
  37. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/api/server_instructions.py +16 -3
  38. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/cli.py +7 -12
  39. codegraph_brain-0.30.0/src/cgis/core/extractor.py +110 -0
  40. codegraph_brain-0.30.0/src/cgis/core/index.py +44 -0
  41. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/core/js_globals.py +57 -0
  42. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/core/models.py +21 -0
  43. codegraph_brain-0.30.0/src/cgis/core/project.py +38 -0
  44. codegraph_brain-0.30.0/src/cgis/core/resolution.py +78 -0
  45. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/collector.py +6 -6
  46. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/martian.py +1 -1
  47. codegraph_brain-0.30.0/src/cgis/import_names.py +170 -0
  48. codegraph_brain-0.30.0/src/cgis/languages/__init__.py +241 -0
  49. codegraph_brain-0.30.0/src/cgis/languages/go/__init__.py +70 -0
  50. codegraph_brain-0.30.0/src/cgis/languages/go/_syntax.py +215 -0
  51. codegraph_brain-0.30.0/src/cgis/languages/go/extractor.py +452 -0
  52. codegraph_brain-0.30.0/src/cgis/languages/go/index.py +141 -0
  53. codegraph_brain-0.30.0/src/cgis/languages/go/naming.py +49 -0
  54. codegraph_brain-0.30.0/src/cgis/languages/go/project.py +139 -0
  55. codegraph_brain-0.30.0/src/cgis/languages/go/resolution.py +115 -0
  56. codegraph_brain-0.30.0/src/cgis/languages/python/__init__.py +72 -0
  57. codegraph_brain-0.29.0/src/cgis/extractors/_python_annotations.py → codegraph_brain-0.30.0/src/cgis/languages/python/_annotations.py +2 -2
  58. codegraph_brain-0.29.0/src/cgis/extractors/_python_classes.py → codegraph_brain-0.30.0/src/cgis/languages/python/_classes.py +1 -1
  59. codegraph_brain-0.29.0/src/cgis/extractors/_python_functions.py → codegraph_brain-0.30.0/src/cgis/languages/python/_functions.py +3 -3
  60. codegraph_brain-0.29.0/src/cgis/extractors/_python_imports.py → codegraph_brain-0.30.0/src/cgis/languages/python/_imports.py +1 -1
  61. codegraph_brain-0.30.0/src/cgis/languages/python/_routes.py +138 -0
  62. codegraph_brain-0.29.0/src/cgis/extractors/_python_types.py → codegraph_brain-0.30.0/src/cgis/languages/python/_types.py +1 -1
  63. codegraph_brain-0.29.0/src/cgis/extractors/python_extractor.py → codegraph_brain-0.30.0/src/cgis/languages/python/extractor.py +15 -12
  64. codegraph_brain-0.30.0/src/cgis/languages/python/index.py +288 -0
  65. codegraph_brain-0.30.0/src/cgis/languages/python/project.py +42 -0
  66. codegraph_brain-0.30.0/src/cgis/languages/python/resolution.py +32 -0
  67. codegraph_brain-0.30.0/src/cgis/languages/typescript/__init__.py +72 -0
  68. codegraph_brain-0.30.0/src/cgis/languages/typescript/builtins.py +29 -0
  69. codegraph_brain-0.29.0/src/cgis/extractors/typescript_extractor.py → codegraph_brain-0.30.0/src/cgis/languages/typescript/extractor.py +3 -37
  70. codegraph_brain-0.30.0/src/cgis/languages/typescript/index.py +163 -0
  71. codegraph_brain-0.30.0/src/cgis/languages/typescript/naming.py +37 -0
  72. codegraph_brain-0.30.0/src/cgis/languages/typescript/project.py +109 -0
  73. codegraph_brain-0.30.0/src/cgis/languages/typescript/resolution.py +160 -0
  74. codegraph_brain-0.29.0/src/cgis/tsconfig_paths.py → codegraph_brain-0.30.0/src/cgis/languages/typescript/tsconfig.py +12 -5
  75. {codegraph_brain-0.29.0/src/cgis → codegraph_brain-0.30.0/src/cgis/languages/typescript}/workspaces.py +15 -8
  76. codegraph_brain-0.29.0/src/cgis/pipeline.py → codegraph_brain-0.30.0/src/cgis/pipeline/__init__.py +106 -18
  77. {codegraph_brain-0.29.0/src/cgis/resolver → codegraph_brain-0.30.0/src/cgis/pipeline}/uplift.py +2 -1
  78. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/context/audit.py +16 -4
  79. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/render/mermaid.py +11 -6
  80. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/resolver/engine.py +27 -6
  81. codegraph_brain-0.30.0/src/cgis/resolver/indices.py +474 -0
  82. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/resolver/symbols.py +66 -58
  83. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/storage/sqlite_store.py +67 -1
  84. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/lib/legacy/tool.py +5 -0
  85. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/pyproject.toml +3 -0
  86. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/src/alembic/env.py +2 -0
  87. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/src/shop/__init__.py +1 -0
  88. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/src/shop/cli.py +5 -0
  89. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/src/shop/deps.py +12 -0
  90. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/src/shop/repo.py +11 -0
  91. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/src/shop/service.py +16 -0
  92. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/py/tests/test_service.py +5 -0
  93. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/apps/web/package.json +1 -0
  94. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/apps/web/src/main.ts +16 -0
  95. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/apps/web/src/types.d.ts +3 -0
  96. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/apps/web/src/util.ts +3 -0
  97. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/package.json +1 -0
  98. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/packages/lib/index.ts +3 -0
  99. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/packages/lib/package.json +1 -0
  100. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/pnpm-workspace.yaml +3 -0
  101. codegraph_brain-0.30.0/tests/fixtures/graph_identity/corpus/ts/tsconfig.json +1 -0
  102. codegraph_brain-0.30.0/tests/fixtures/graph_identity/snapshot.json +3074 -0
  103. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/go.mod +7 -0
  104. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/internal/native/native.go +8 -0
  105. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/internal/server/server.go +19 -0
  106. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/internal/server/server_test.go +9 -0
  107. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/internal/server/types.go +19 -0
  108. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/internal/server/validate.go +5 -0
  109. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/internal/store/store.go +26 -0
  110. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/main.go +17 -0
  111. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/corpus/money/money.go +8 -0
  112. codegraph_brain-0.30.0/tests/fixtures/graph_identity_go/snapshot.json +1361 -0
  113. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/conftest.py +2 -2
  114. codegraph_brain-0.30.0/tests/self_parsing/forbidden_edges_allowlist.json +16 -0
  115. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_annotation_calibration.py +18 -3
  116. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_architecture.py +146 -7
  117. codegraph_brain-0.30.0/tests/self_parsing/test_domains_ontology.py +43 -0
  118. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_drift.py +52 -26
  119. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_init_ontology_roundtrip.py +3 -3
  120. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_receiver_resolution.py +2 -2
  121. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_self_parse.py +4 -4
  122. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_self_parse_ts.py +2 -2
  123. codegraph_brain-0.30.0/tests/unit/review_path_inventory.txt +69 -0
  124. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_agent_ab_task.py +10 -2
  125. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_annotation_edges.py +1 -1
  126. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_audit.py +1 -1
  127. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_class_cohesion.py +1 -1
  128. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_cli.py +1 -1
  129. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_configs_above_root.py +2 -2
  130. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_context_service.py +1 -1
  131. codegraph_brain-0.30.0/tests/unit/test_coverage_claims.py +60 -0
  132. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_di_acceptance.py +1 -1
  133. codegraph_brain-0.30.0/tests/unit/test_extraction_fingerprint.py +212 -0
  134. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_fingerprint.py +1 -1
  135. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_freshness.py +1 -1
  136. codegraph_brain-0.30.0/tests/unit/test_go_extractor.py +461 -0
  137. codegraph_brain-0.30.0/tests/unit/test_go_graph_identity.py +145 -0
  138. codegraph_brain-0.30.0/tests/unit/test_go_incremental.py +95 -0
  139. codegraph_brain-0.30.0/tests/unit/test_go_naming.py +44 -0
  140. codegraph_brain-0.30.0/tests/unit/test_go_project.py +103 -0
  141. codegraph_brain-0.30.0/tests/unit/test_go_resolution.py +457 -0
  142. codegraph_brain-0.30.0/tests/unit/test_go_surfaces.py +91 -0
  143. codegraph_brain-0.30.0/tests/unit/test_graph_identity.py +93 -0
  144. codegraph_brain-0.30.0/tests/unit/test_graph_identity_dump.py +141 -0
  145. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_collector.py +2 -2
  146. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_martian.py +3 -3
  147. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_martian_script.py +2 -2
  148. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_import_acceptance.py +1 -1
  149. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_inject_architecture_graph.py +2 -2
  150. codegraph_brain-0.30.0/tests/unit/test_languages.py +397 -0
  151. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_mermaid.py +22 -0
  152. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_metrics_resolution.py +1 -1
  153. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_name_load_positions.py +1 -1
  154. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_npm_dependencies.py +2 -2
  155. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_patterns_yaml.py +34 -9
  156. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_pipeline.py +21 -1
  157. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_pipeline_incremental_symbols.py +1 -1
  158. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_pipeline_ts_workspaces.py +1 -1
  159. codegraph_brain-0.30.0/tests/unit/test_project_facts.py +236 -0
  160. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_python_annotations.py +2 -2
  161. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_python_dependencies.py +2 -2
  162. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_python_extractor.py +2 -2
  163. codegraph_brain-0.30.0/tests/unit/test_python_index.py +100 -0
  164. codegraph_brain-0.30.0/tests/unit/test_python_routes.py +230 -0
  165. codegraph_brain-0.30.0/tests/unit/test_resolution_rules.py +124 -0
  166. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver.py +1 -1
  167. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_indices.py +40 -4
  168. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_js_builtins.py +2 -2
  169. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_language_scope.py +4 -4
  170. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_phantom_internal.py +1 -1
  171. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_symbols.py +39 -0
  172. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_ts_declarations.py +1 -1
  173. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_review_fingerprint_closure.py +1 -1
  174. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_self_types.py +1 -1
  175. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_tsconfig_paths.py +2 -2
  176. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_type_checking_imports.py +1 -1
  177. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_typescript_extractor.py +2 -1
  178. codegraph_brain-0.30.0/tests/unit/test_typescript_index.py +82 -0
  179. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_uplift.py +2 -2
  180. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/uv.lock +22 -4
  181. codegraph_brain-0.29.0/.github/test-count-baseline +0 -1
  182. codegraph_brain-0.29.0/.release-please-manifest.json +0 -3
  183. codegraph_brain-0.29.0/src/cgis/extractors/base.py +0 -58
  184. codegraph_brain-0.29.0/src/cgis/extractors/registry.py +0 -93
  185. codegraph_brain-0.29.0/src/cgis/import_names.py +0 -162
  186. codegraph_brain-0.29.0/src/cgis/resolver/indices.py +0 -840
  187. codegraph_brain-0.29.0/src/cgis/resolver/js_builtins.py +0 -97
  188. codegraph_brain-0.29.0/tests/unit/.gitkeep +0 -0
  189. codegraph_brain-0.29.0/tests/unit/review_path_inventory.txt +0 -43
  190. codegraph_brain-0.29.0/tests/unit/test_extractor_registry.py +0 -184
  191. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.claude-plugin/marketplace.json +0 -0
  192. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.gitattributes +0 -0
  193. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.github/workflows/autodoc.yml +0 -0
  194. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.github/workflows/guardian.yml +0 -0
  195. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.github/workflows/mcp-registry.yml +0 -0
  196. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.github/workflows/pr-title.yml +0 -0
  197. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.github/workflows/release-please.yml +0 -0
  198. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.github/workflows/ui.yml +0 -0
  199. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/.python-version +0 -0
  200. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/CONTRIBUTING.md +0 -0
  201. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/LICENSE +0 -0
  202. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/Makefile +0 -0
  203. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/PRIVACY.md +0 -0
  204. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/.gitignore +0 -0
  205. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/README.md +0 -0
  206. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/RESULTS.md +0 -0
  207. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/results.jsonl +0 -0
  208. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/cgis-control-sqlite-pragmas.yaml +0 -0
  209. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/cgis-flow-ingest-to-sqlite.yaml +0 -0
  210. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/cgis-impact-drift-same-name.yaml +0 -0
  211. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/cgis-impact-language-for.yaml +0 -0
  212. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/cgis-impact-transitive-tsconfig.yaml +0 -0
  213. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/cgis-orientation-call-resolution.yaml +0 -0
  214. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/owner-impact-credit-wallet.yaml +0 -0
  215. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/agent_ab/tasks/owner-impact-occupied-window-same-name.yaml +0 -0
  216. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/CURATION.md +0 -0
  217. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/calibration.jsonl +0 -0
  218. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/246-cross-vendor/README.md +0 -0
  219. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/246-cross-vendor/free-nemotron-quota-cutoff.jsonl +0 -0
  220. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/401-evidence/README.md +0 -0
  221. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/401-evidence/pr-399-control-rows.jsonl +0 -0
  222. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/401-evidence/pr-399-recording.json +0 -0
  223. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/401-evidence/pr-399-treatment-rows.jsonl +0 -0
  224. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/407-no-checker-appeal/README.md +0 -0
  225. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-directive-rows.jsonl +0 -0
  226. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/experiments/407-no-checker-appeal/pr-399-control-prohibition-rows.jsonl +0 -0
  227. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-122.yaml +0 -0
  228. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-140.yaml +0 -0
  229. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-141.yaml +0 -0
  230. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-142.yaml +0 -0
  231. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-143.yaml +0 -0
  232. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-144.yaml +0 -0
  233. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-278.yaml +0 -0
  234. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/pr-313.yaml +0 -0
  235. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/guardian/results.jsonl +0 -0
  236. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian/README.md +0 -0
  237. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian/cal_dot_com.json +0 -0
  238. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian/discourse.json +0 -0
  239. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian/grafana.json +0 -0
  240. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian/keycloak.json +0 -0
  241. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian/sentry.json +0 -0
  242. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-judged.jsonl +0 -0
  243. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  244. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  245. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-p3-run1.jsonl +0 -0
  246. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-p3-run2.jsonl +0 -0
  247. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-p3-run3.jsonl +0 -0
  248. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-plan.json +0 -0
  249. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-repeat-judged.jsonl +0 -0
  250. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  251. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/benchmarks/martian-reviews.jsonl +0 -0
  252. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/data/.gitkeep +0 -0
  253. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/CASE_STUDY.md +0 -0
  254. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  255. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  256. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  257. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
  258. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/architecture/health_badge.json +0 -0
  259. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/assets/.gitignore +0 -0
  260. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/assets/cgis-app-avatar.png +0 -0
  261. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/assets/cgis-app-avatar.svg +0 -0
  262. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/assets/generate_avatar.py +0 -0
  263. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/examples/.gitkeep +0 -0
  264. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/how-to/AGENT_ONBOARDING.md +0 -0
  265. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/how-to/CLI_USAGE.md +0 -0
  266. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  267. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/ontology/.gitkeep +0 -0
  268. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/ontology/core.yaml +0 -0
  269. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/plans/2026-09-09-graph-freshness.md +0 -0
  270. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  271. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  272. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  273. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
  274. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  275. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  276. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  277. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  278. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  279. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  280. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  281. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  282. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  283. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
  284. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  285. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  286. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  287. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  288. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  289. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  290. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  291. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  292. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  293. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  294. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  295. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  296. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  297. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  298. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  299. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  300. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-09-05-annotation-graph-design.md +0 -0
  301. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/2026-09-09-graph-freshness-design.md +0 -0
  302. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/BLUEPRINT.md +0 -0
  303. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/PRD.md +0 -0
  304. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/TDD.md +0 -0
  305. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  306. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  307. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  308. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  309. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  310. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  311. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  312. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  313. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  314. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  315. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  316. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  317. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  318. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  319. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  320. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  321. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  322. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  323. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-09-05-annotation-graph-pr1.md +0 -0
  324. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/docs/specs/plans/2026-09-05-annotation-graph-pr2.md +0 -0
  325. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/glama.json +0 -0
  326. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/main.py +0 -0
  327. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/plugin/.claude-plugin/plugin.json +0 -0
  328. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/plugin/.mcp.json +0 -0
  329. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/release-please-config.json +0 -0
  330. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/agent_ab.py +0 -0
  331. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/backfill_calibration_fingerprint.py +0 -0
  332. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/backfill_review_fingerprint.py +0 -0
  333. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/check_pytest_raises.py +0 -0
  334. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/check_test_count.py +0 -0
  335. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/colab_bench.sh +0 -0
  336. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/gen_ideal_graph.py +0 -0
  337. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/generate_mcp_ref.py +0 -0
  338. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/generate_schema_docs.py +0 -0
  339. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/guardian_bench.py +0 -0
  340. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/guardian_calibrate.py +0 -0
  341. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/guardian_replay_skeptic.py +0 -0
  342. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/guardian_review.py +0 -0
  343. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/inject_architecture_graph.py +0 -0
  344. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/mcp_registry_gate.sh +0 -0
  345. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/ollama_visitor.sh +0 -0
  346. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/probe_closure_gap.py +0 -0
  347. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/probe_tier_ladder.py +0 -0
  348. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/recordings_from_corpus.py +0 -0
  349. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/scripts/skeptic_arms.py +0 -0
  350. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/__init__.py +0 -0
  351. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/__main__.py +0 -0
  352. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/api/.gitkeep +0 -0
  353. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/api/__init__.py +0 -0
  354. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/api/tool_allowlist.py +0 -0
  355. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/bench/__init__.py +0 -0
  356. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/bench/agent_task.py +0 -0
  357. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/bench/guard.py +0 -0
  358. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/bench/transcript.py +0 -0
  359. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/core/.gitkeep +0 -0
  360. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/core/coverage.py +0 -0
  361. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/core/freshness.py +0 -0
  362. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/core/generated.py +0 -0
  363. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/core/paths.py +0 -0
  364. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/__init__.py +0 -0
  365. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/axes.py +0 -0
  366. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/bench.py +0 -0
  367. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/calibrate.py +0 -0
  368. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/chunked.py +0 -0
  369. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/chunker.py +0 -0
  370. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/core.py +0 -0
  371. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/diff_index.py +0 -0
  372. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/evidence.py +0 -0
  373. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/findings.py +0 -0
  374. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/github_poster.py +0 -0
  375. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/metrics.py +0 -0
  376. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/prompts.py +0 -0
  377. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/providers/__init__.py +0 -0
  378. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/providers/base.py +0 -0
  379. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/providers/gemini.py +0 -0
  380. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/providers/mistral.py +0 -0
  381. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/providers/ollama.py +0 -0
  382. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/providers/openrouter.py +0 -0
  383. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/recording.py +0 -0
  384. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/render.py +0 -0
  385. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/review_fingerprint.py +0 -0
  386. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/runner.py +0 -0
  387. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/guardian/skeptic.py +0 -0
  388. /codegraph_brain-0.29.0/src/cgis/extractors/_python_ast.py → /codegraph_brain-0.30.0/src/cgis/languages/python/_syntax.py +0 -0
  389. /codegraph_brain-0.29.0/src/cgis/python_dependencies.py → /codegraph_brain-0.30.0/src/cgis/languages/python/dependencies.py +0 -0
  390. /codegraph_brain-0.29.0/src/cgis/extractors/_typescript_bindings.py → /codegraph_brain-0.30.0/src/cgis/languages/typescript/_bindings.py +0 -0
  391. /codegraph_brain-0.29.0/src/cgis/npm_dependencies.py → /codegraph_brain-0.30.0/src/cgis/languages/typescript/npm.py +0 -0
  392. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/py.typed +0 -0
  393. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/analysis/__init__.py +0 -0
  394. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/analysis/analyzer.py +0 -0
  395. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/analysis/anomaly.py +0 -0
  396. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/analysis/cohesion.py +0 -0
  397. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/analysis/health.py +0 -0
  398. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/analysis/overview.py +0 -0
  399. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/analysis/suggest_service.py +0 -0
  400. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/context/__init__.py +0 -0
  401. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/context/context_service.py +0 -0
  402. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/context/orphans.py +0 -0
  403. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/context/prompt.py +0 -0
  404. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/context/snippet.py +0 -0
  405. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/__init__.py +0 -0
  406. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/_scc.py +0 -0
  407. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/catalog.py +0 -0
  408. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/drift.py +0 -0
  409. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/drift_service.py +0 -0
  410. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/fingerprint.py +0 -0
  411. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/fractal.py +0 -0
  412. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/ontology_init.py +0 -0
  413. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/quotient.py +0 -0
  414. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/scoring.py +0 -0
  415. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/drift/triads.py +0 -0
  416. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/engine.py +0 -0
  417. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/fqn.py +0 -0
  418. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/render/__init__.py +0 -0
  419. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/render/graph_json.py +0 -0
  420. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/render/metrics.py +0 -0
  421. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/query/render/text.py +0 -0
  422. {codegraph_brain-0.29.0/src/cgis/extractors → codegraph_brain-0.30.0/src/cgis/resolver}/.gitkeep +0 -0
  423. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/src/cgis/resolver/__init__.py +0 -0
  424. {codegraph_brain-0.29.0/src/cgis/resolver → codegraph_brain-0.30.0/src/cgis/storage}/.gitkeep +0 -0
  425. {codegraph_brain-0.29.0/src/cgis/storage → codegraph_brain-0.30.0/tests/integration}/.gitkeep +0 -0
  426. {codegraph_brain-0.29.0/tests/integration → codegraph_brain-0.30.0/tests/self_parsing}/.gitkeep +0 -0
  427. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/__init__.py +0 -0
  428. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_fractal.py +0 -0
  429. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_overview.py +0 -0
  430. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/self_parsing/test_suggest.py +0 -0
  431. {codegraph_brain-0.29.0/tests/self_parsing → codegraph_brain-0.30.0/tests/unit}/.gitkeep +0 -0
  432. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/agent_ab_stubs.py +0 -0
  433. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/conftest.py +0 -0
  434. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/guardian_stubs.py +0 -0
  435. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test___main__.py +0 -0
  436. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_agent_ab_guard.py +0 -0
  437. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_agent_ab_script.py +0 -0
  438. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_agent_ab_transcript.py +0 -0
  439. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_analyzer.py +0 -0
  440. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_annotated_alias_receiver.py +0 -0
  441. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_auto_refresh.py +0 -0
  442. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_backfill_calibration_fingerprint.py +0 -0
  443. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  444. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_check_pytest_raises.py +0 -0
  445. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_check_test_count.py +0 -0
  446. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_cohesion.py +0 -0
  447. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_dispatch_edges.py +0 -0
  448. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_drift.py +0 -0
  449. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_drift_service.py +0 -0
  450. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_features_source.py +0 -0
  451. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_find_symbol_path_prefix.py +0 -0
  452. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_fqn.py +0 -0
  453. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_fractal.py +0 -0
  454. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_gen_ideal_graph.py +0 -0
  455. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_generate_mcp_ref.py +0 -0
  456. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_generated.py +0 -0
  457. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_graph_json.py +0 -0
  458. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_axes.py +0 -0
  459. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_bench.py +0 -0
  460. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_bench_script.py +0 -0
  461. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_calibrate.py +0 -0
  462. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_calibrate_script.py +0 -0
  463. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_chunked.py +0 -0
  464. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_chunker.py +0 -0
  465. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_core.py +0 -0
  466. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_diff_index.py +0 -0
  467. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_evidence.py +0 -0
  468. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_findings.py +0 -0
  469. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_martian_union.py +0 -0
  470. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_metrics.py +0 -0
  471. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  472. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  473. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  474. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_openrouter.py +0 -0
  475. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_poster.py +0 -0
  476. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_providers.py +0 -0
  477. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_providers_name.py +0 -0
  478. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_recording.py +0 -0
  479. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_render.py +0 -0
  480. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_replay_skeptic.py +0 -0
  481. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_review_script.py +0 -0
  482. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_runner.py +0 -0
  483. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_salvage.py +0 -0
  484. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_guardian_skeptic.py +0 -0
  485. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_health_scorer.py +0 -0
  486. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_impact_agent_sized.py +0 -0
  487. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_mcp_server.py +0 -0
  488. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_mcp_server_instructions.py +0 -0
  489. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_mcp_tool_schemas.py +0 -0
  490. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_metrics.py +0 -0
  491. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_metrics_file_coupling.py +0 -0
  492. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_models.py +0 -0
  493. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_ontology_compliance.py +0 -0
  494. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_ontology_init.py +0 -0
  495. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_orphans.py +0 -0
  496. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_overview.py +0 -0
  497. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_overview_tools.py +0 -0
  498. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_package_view.py +0 -0
  499. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_paths.py +0 -0
  500. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_prompt.py +0 -0
  501. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_query_coverage.py +0 -0
  502. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_quotient.py +0 -0
  503. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_recordings_from_corpus.py +0 -0
  504. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_import_layout.py +0 -0
  505. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_resolver_ts_workspaces.py +0 -0
  506. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_review_fingerprint_contract.py +0 -0
  507. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_review_fingerprint_digest.py +0 -0
  508. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_review_fingerprint_record.py +0 -0
  509. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_skeptic_arms.py +0 -0
  510. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_snippet.py +0 -0
  511. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_sqlite_store.py +0 -0
  512. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_suggest_service.py +0 -0
  513. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_temperature_source.py +0 -0
  514. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_text_format.py +0 -0
  515. {codegraph_brain-0.29.0 → codegraph_brain-0.30.0}/tests/unit/test_triads.py +0 -0
@@ -162,6 +162,20 @@ jobs:
162
162
  # this exemption hides it — that is the cost, and it is the reason the
163
163
  # rule stays on for src/.
164
164
  #
165
+ # pythonsecurity:S8706 (connection-string injection) is the same
166
+ # finding at sqlite3.connect: graph_identity.py opens a database named
167
+ # on its own command line. `dump()` requires an existing .db/.sqlite/
168
+ # .sqlite3 regular file before connecting, and passes no `uri=True`, so
169
+ # the argument is a file name and never a connection string. Exempted
170
+ # for scripts/ on the S2083 reasoning above — the engine does not model
171
+ # the check — and kept on for src/.
172
+ #
173
+ # tests/fixtures/ is excluded from test analysis
174
+ # (`sonar.test.exclusions`; it sits under `sonar.tests`, so
175
+ # `sonar.exclusions` would not reach it): it holds input corpora, not
176
+ # code. Its package.json files exist to be parsed by cgis, and a lock
177
+ # file next to them (text:S8564) would be a fixture nothing reads.
178
+ #
165
179
  # `sonar.newCode.referenceBranch` overrides the server-side new-code
166
180
  # definition for this analysis. The instance default is
167
181
  # `previous_version` (confirmed: sonar.leak.period=previous_version,
@@ -218,13 +232,16 @@ jobs:
218
232
  -Dsonar.newCode.referenceBranch=main
219
233
  -Dsonar.sources=src,scripts,.github
220
234
  -Dsonar.tests=tests
235
+ -Dsonar.test.exclusions=tests/fixtures/**
221
236
  -Dsonar.python.version=3.12
222
237
  -Dsonar.python.coverage.reportPaths=coverage.xml
223
- -Dsonar.issue.ignore.multicriteria=e1,e2,e3,e4
238
+ -Dsonar.issue.ignore.multicriteria=e1,e2,e3,e4,e5
224
239
  -Dsonar.issue.ignore.multicriteria.e1.ruleKey=pythonsecurity:S8707
225
240
  -Dsonar.issue.ignore.multicriteria.e1.resourceKey=scripts/**/*.py
226
241
  -Dsonar.issue.ignore.multicriteria.e4.ruleKey=pythonsecurity:S2083
227
242
  -Dsonar.issue.ignore.multicriteria.e4.resourceKey=scripts/**/*.py
243
+ -Dsonar.issue.ignore.multicriteria.e5.ruleKey=pythonsecurity:S8706
244
+ -Dsonar.issue.ignore.multicriteria.e5.resourceKey=scripts/**/*.py
228
245
  -Dsonar.issue.ignore.multicriteria.e2.ruleKey=githubactions:S8541
229
246
  -Dsonar.issue.ignore.multicriteria.e2.resourceKey=.github/workflows/*.yml
230
247
  -Dsonar.issue.ignore.multicriteria.e3.ruleKey=githubactions:S8544
@@ -15,6 +15,8 @@ downloads/
15
15
  eggs/
16
16
  .eggs/
17
17
  lib/
18
+ # The graph-identity corpus has lib/ directories that are inputs, not build output.
19
+ !tests/fixtures/graph_identity/corpus/**/lib/
18
20
  lib64/
19
21
  parts/
20
22
  sdist/
@@ -40,6 +40,7 @@ repos:
40
40
  - tree-sitter>=0.25.2
41
41
  - tree-sitter-python>=0.25.0
42
42
  - tree-sitter-typescript>=0.23.2
43
+ - tree-sitter-go>=0.25.0
43
44
  - pytest>=9.0.3
44
45
  - "mcp[cli]>=2" # must match the pyproject bound
45
46
  - duckdb>=1.1.0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.30.0"
3
+ }
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.30.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.29.0...codegraph-brain-v0.30.0) (2026-10-15)
4
+
5
+
6
+ ### Features
7
+
8
+ * **languages:** Go field and call-result types resolve receiver calls ([#608](https://github.com/zaebee/codegraph-brain/issues/608)) ([#614](https://github.com/zaebee/codegraph-brain/issues/614)) ([96ec5f3](https://github.com/zaebee/codegraph-brain/commit/96ec5f380d52ba1560c63b8b84af673627bc88d0))
9
+ * **languages:** step 7b — the Go pilot ([#607](https://github.com/zaebee/codegraph-brain/issues/607)) ([4a62703](https://github.com/zaebee/codegraph-brain/commit/4a62703f41a4dfb74d1f96bee132b3f78f84c895))
10
+ * **pipeline:** a graph built by other extraction code is rebuilt in full ([#617](https://github.com/zaebee/codegraph-brain/issues/617)) ([dc33153](https://github.com/zaebee/codegraph-brain/commit/dc331531556cc2dc49c8adfacbec079584953eb8))
11
+ * **python:** FastAPI handlers play the ROUTE_HANDLER role ([#566](https://github.com/zaebee/codegraph-brain/issues/566)) ([#616](https://github.com/zaebee/codegraph-brain/issues/616)) ([9098ccd](https://github.com/zaebee/codegraph-brain/commit/9098ccd87ef08fbb3139243fda426b62e8d1b32b))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **docs:** coverage claims name Go — the MCP instructions are built from the registry ([#615](https://github.com/zaebee/codegraph-brain/issues/615)) ([8ea6362](https://github.com/zaebee/codegraph-brain/commit/8ea636239122b24c4a42b2a65517ebb12dad1b03))
17
+
18
+
19
+ ### Documentation
20
+
21
+ * auto-sync architecture graph and MCP reference ([#598](https://github.com/zaebee/codegraph-brain/issues/598)) ([3feb1ac](https://github.com/zaebee/codegraph-brain/commit/3feb1ac40b1896acb0e57109c9bd1f2bf941d7bc))
22
+ * auto-sync architecture graph and MCP reference ([#620](https://github.com/zaebee/codegraph-brain/issues/620)) ([3f36e15](https://github.com/zaebee/codegraph-brain/commit/3f36e15c30dca7280b57bebd70a8793764cd872e))
23
+ * **spec:** language packs and a two-plane topology ([#593](https://github.com/zaebee/codegraph-brain/issues/593)) ([d9e7d85](https://github.com/zaebee/codegraph-brain/commit/d9e7d852b17d4cab4a2a4a0f2519f11f8de9236e))
24
+
3
25
  ## [0.29.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.28.0...codegraph-brain-v0.29.0) (2026-10-14)
4
26
 
5
27
 
@@ -45,21 +45,24 @@ make coverage-html # same, writes htmlcov/
45
45
  The pipeline runs in three phases: **Extract → Resolve → Store**.
46
46
 
47
47
  ```
48
- IngestionPipeline (pipeline.py)
49
- ├── BaseExtractor subclasses (extractors/) ← language-specific AST → Nodes+Edges
50
- │ └── PythonExtractor ← only language implemented so far
48
+ IngestionPipeline (pipeline/__init__.py)
49
+ ├── cgis.languages (registry) ← lazy: a pack is imported when its first file is met
50
+ │ ├── languages/python/ ← PythonExtractor + PACK
51
+ │ ├── languages/typescript/ ← TypeScriptExtractor (.ts/.tsx) + PACK
52
+ │ └── languages/go/ ← GoExtractor (.go) + go.mod reader + PACK (pilot)
51
53
  ├── ResolverEngine (resolver/engine.py) ← raw_call: targets → resolved FQN edges
52
- └── SQLiteStore (storage/sqlite_store.py) ← persists graph; WAL mode
54
+ ├── SQLiteStore (storage/sqlite_store.py) ← persists graph; WAL mode
55
+ └── post-write passes (pipeline/) ← refresh_dispatch, SemanticUpliftEngine (pipeline/uplift.py)
53
56
  └── QueryEngine (query/engine.py) ← BFS traversals (impact / flow)
54
57
  ```
55
58
 
56
- **Node FQN format**: `module.ClassName.method_name` — fully dot-separated, derived from the file path (e.g., `src/cgis/pipeline.py` → `src.cgis.pipeline.IngestionPipeline.run`). Use `file_path_to_module_fqn(path)` from `extractors/python_extractor.py` to convert paths. `__init__.py` strips the `/__init__` suffix.
59
+ **Node FQN format**: `module.ClassName.method_name` — fully dot-separated, derived from the file path (e.g., `src/cgis/pipeline.py` → `src.cgis.pipeline.IngestionPipeline.run`). Use `cgis.languages.scope_of(path, source_root)` to convert paths (it picks the file's own pack; the Python rule lives in `languages/python/extractor.py`). `__init__.py` strips the `/__init__` suffix.
57
60
 
58
61
  **Raw call convention**: Extractors emit edges with `target = "raw_call:<name>"`. The `ResolverEngine` then resolves these to actual FQNs or leaves them unresolved (keeps the `raw_call:` prefix in output).
59
62
 
60
63
  **`ResolverEngine` resolution order** for a call to `name`:
61
64
  1. `self.method` → look up `method` on the enclosing class via `_class_methods` index
62
- 2. Unqualified call → `_global_symbols` by name; if ambiguous, prefer same-file candidate via `_file_global_symbols`
65
+ 2. Unqualified call → `_global_symbols` by name; if ambiguous, prefer the same-scope candidate via `file_global_symbols` (a file's scope is its path, or the `metadata["scope"]` its FILE node declares — a Go package)
63
66
 
64
67
  ## Core Models (`src/cgis/core/models.py`)
65
68
 
@@ -68,12 +71,30 @@ IngestionPipeline (pipeline.py)
68
71
  - `NodeType` — structural (`FILE`, `MODULE`, `CLASS`, `FUNCTION`, `METHOD`…), runtime (`API_ENDPOINT`, `DB_TABLE`…), semantic (`DOMAIN_CONCEPT`).
69
72
  - `EdgeType` — structural (`CONTAINS`, `DECLARES`, `IMPORTS`), behavioral (`CALLS`, `REFERENCES`), semantic (`HANDLES`, `PERSISTS`, `AUTHORIZES`).
70
73
 
71
- ## Adding a New Language Extractor
72
-
73
- 1. Subclass `BaseExtractor` in `src/cgis/extractors/`.
74
- 2. Implement `parse(code: str, file_path: str) -> tuple[list[Node], list[Edge]]`.
75
- 3. Emit `CALLS` edges with `target="raw_call:<name>"` — the resolver handles the rest.
76
- 4. Register the extractor in `cli.py`'s `extractors` dict with the file extension key.
74
+ ## Adding a Language Pack
75
+
76
+ 1. Create `src/cgis/languages/<name>/` with an extractor subclassing `cgis.core.extractor.BaseExtractor`
77
+ (`parse(code, file_path) -> tuple[list[Node], list[Edge]]`; emit `CALLS` edges with
78
+ `target="raw_call:<name>"`, set `Node.language = "<name>"`).
79
+ 2. In its `__init__.py`, define `PACK`, subclassing `cgis.core.extractor.LanguagePack` (mark methods `@override`)
80
+ (`name`, `extensions`, `code_fence`, `is_test`, `scope_of`, `extractor`, `project_reader`,
81
+ `index_facts`, `classify`, `resolution`). `resolution()` returns `ResolutionRules`
82
+ (`cgis.core.resolution`): type normalizers, steps at a position (`after:import_map`), a
83
+ fallback with its confidence, `reconcile_import` — all reading the index as `ResolutionView`.
84
+ Metadata other files resolve against goes in the manifest's `cross_file_metadata`. `classify` answers for references from the pack's own files and
85
+ runs the whole chain; a source with no pack gets the generic tail in `SymbolIndex.classify_fqn`.
86
+ 3. Add one `Manifest` to `MANIFESTS` in `src/cgis/languages/__init__.py`, with a `load` function that
87
+ imports the pack statically inside it (lazy, yet visible to the review-fingerprint walk). Nothing
88
+ else names the pack: CLI, MCP server, guardian and scripts all go through the registry, and the
89
+ `surface-packs` forbidden-edge gate fails if a surface imports a pack directly.
90
+ 4. A pack never imports another pack or `cgis.storage` (`cross-pack`, `pack-isolation` gates).
91
+ 5. A pack's `__init__` imports no grammar: import the extractor inside `extractor()`. Config reading
92
+ goes in a `ProjectReader` (`cgis.core.project`) whose facts are data keyed by `ingest_state`
93
+ key — the collector (`cgis.import_names`), not the pack, writes them. A key other than the four
94
+ built-ins (`_FACT_SHAPES`) travels as `ImportNames.extra`: recorded, compared, and merged into the
95
+ `state` the pack's `index_facts` reads. Its value must read back equal from JSON (no tuples).
96
+ 6. A FILE node's id comes from `file_node_id`, its definitions' namespace from `scope_of`; they differ
97
+ only where several files share a scope (Go), which the FILE node declares as `metadata["scope"]`.
77
98
 
78
99
  ## Type Discipline
79
100
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codegraph-brain
3
- Version: 0.29.0
3
+ Version: 0.30.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
@@ -29,6 +29,7 @@ Requires-Dist: pydantic>=2.13.4
29
29
  Requires-Dist: pyyaml>=6.0.2
30
30
  Requires-Dist: rich>=15.0.0
31
31
  Requires-Dist: structlog>=25.5.0
32
+ Requires-Dist: tree-sitter-go>=0.25.0
32
33
  Requires-Dist: tree-sitter-python>=0.25.0
33
34
  Requires-Dist: tree-sitter-typescript>=0.23.2
34
35
  Requires-Dist: tree-sitter>=0.25.2
@@ -60,7 +61,7 @@ Description-Content-Type: text/markdown
60
61
 
61
62
  CGIS parses a repository with tree-sitter into a graph of fully qualified symbols and the calls, imports and containment between them, stores it in SQLite, and serves it to AI agents over MCP. An agent that would otherwise grep and read whole files asks the graph instead.
62
63
 
63
- - **Languages:** Python · TypeScript / TSX
64
+ - **Languages:** Python · TypeScript / TSX · Go (pilot)
64
65
  - **Runs:** locally — no account, no telemetry; the graph never leaves your disk ([the one opt-in exception](https://github.com/zaebee/codegraph-brain/blob/main/PRIVACY.md))
65
66
 
66
67
  ```console
@@ -10,7 +10,7 @@
10
10
 
11
11
  CGIS parses a repository with tree-sitter into a graph of fully qualified symbols and the calls, imports and containment between them, stores it in SQLite, and serves it to AI agents over MCP. An agent that would otherwise grep and read whole files asks the graph instead.
12
12
 
13
- - **Languages:** Python · TypeScript / TSX
13
+ - **Languages:** Python · TypeScript / TSX · Go (pilot)
14
14
  - **Runs:** locally — no account, no telemetry; the graph never leaves your disk ([the one opt-in exception](https://github.com/zaebee/codegraph-brain/blob/main/PRIVACY.md))
15
15
 
16
16
  ```console
@@ -57,7 +57,7 @@ The graph is static structure. That boundary is real, and it is better stated he
57
57
  - **Not a penetration test.** Authorisation *coverage* means every handler has a static path to a guard. It does not mean the guard is correct, that the logic behind it is sound, or that the endpoint is unexploitable.
58
58
  - **Not a runtime analysis.** Nothing is executed. Behaviour that only appears under load, concurrency or real data is out of scope.
59
59
  - **Not a business-logic review.** The report says how your code is wired, not whether the wiring implements the right rules.
60
- - **Not language-complete.** Extractors cover Python and TypeScript. Vue, Astro, Go, Rust and everything else are invisible to the graph, and the report will say which parts of your codebase it could not see.
60
+ - **Not language-complete.** Extractors cover Python and TypeScript, with Go as a pilot outside this offer. Vue, Astro, Rust and everything else are invisible to the graph, and the report will say which parts of your codebase it could not see.
61
61
  - **Not a substitute for judgement.** An empty impact result means *no static callers found*, not *safe to delete*. Dynamic dispatch, registries and framework decorators do not appear in any static graph. The report flags where this matters instead of asserting a safety it cannot see.
62
62
 
63
63
  Roughly a tenth of call edges in a typical Python codebase cannot be resolved statically at all — they are calls on objects typed at runtime. That number is in the report too, because it tells you how much of the analysis to trust.
@@ -188,35 +188,37 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
188
188
  models_Node["Node (models.py:89)"]:::classNode
189
189
  end
190
190
  subgraph sg_import_names["import_names.py"]
191
- import_names_ImportNameCollector["ImportNameCollector (import_names.py:96)"]:::classNode
192
- import_names_ImportNameCollector_collect["collect (import_names.py:151)"]:::methodNode
193
- import_names_ImportNameCollector_note["note (import_names.py:143)"]:::methodNode
191
+ import_names_ImportNameCollector["ImportNameCollector (import_names.py:147)"]:::classNode
192
+ import_names_ImportNameCollector_collect["collect (import_names.py:168)"]:::methodNode
193
+ import_names_ImportNameCollector_note["note (import_names.py:163)"]:::methodNode
194
194
  end
195
- subgraph sg_pipeline["pipeline.py"]
196
- pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:314)"]:::methodNode
197
- pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:449)"]:::methodNode
198
- pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:375)"]:::methodNode
199
- pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:399)"]:::methodNode
200
- pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:274)"]:::methodNode
201
- pipeline_IngestionPipeline_run["run (pipeline.py:135)"]:::methodNode
202
- pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:118)"]:::methodNode
203
- pipeline_observe["_observe (pipeline.py:76)"]:::funcNode
204
- pipeline_refresh_dispatch["refresh_dispatch (pipeline.py:40)"]:::funcNode
205
- end
206
- subgraph sg_engine["engine.py"]
207
- engine_ResolverEngine["ResolverEngine (engine.py:49)"]:::classNode
208
- engine_ResolverEngine_resolve["resolve (engine.py:87)"]:::methodNode
195
+ subgraph sg_init["__init__.py"]
196
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (__init__.py:394)"]:::methodNode
197
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (__init__.py:532)"]:::methodNode
198
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (__init__.py:455)"]:::methodNode
199
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (__init__.py:479)"]:::methodNode
200
+ pipeline_IngestionPipeline_process_file["_process_file (__init__.py:354)"]:::methodNode
201
+ pipeline_IngestionPipeline_run["run (__init__.py:209)"]:::methodNode
202
+ pipeline_IngestionPipeline_workspace_root["workspace_root (__init__.py:192)"]:::methodNode
203
+ pipeline_needs_rebuild["_needs_rebuild (__init__.py:138)"]:::funcNode
204
+ pipeline_observe["_observe (__init__.py:72)"]:::funcNode
205
+ pipeline_refresh_dispatch["refresh_dispatch (__init__.py:36)"]:::funcNode
209
206
  end
210
207
  subgraph sg_uplift["uplift.py"]
211
- uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
212
- uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
208
+ uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:67)"]:::classNode
209
+ uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:92)"]:::methodNode
210
+ end
211
+ subgraph sg_engine["engine.py"]
212
+ engine_ResolverEngine["ResolverEngine (engine.py:63)"]:::classNode
213
+ engine_ResolverEngine_resolve["resolve (engine.py:109)"]:::methodNode
213
214
  end
214
215
  subgraph sg_sqlite_store["sqlite_store.py"]
215
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:65)"]:::classNode
216
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:81)"]:::classNode
216
217
  end
217
218
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
218
219
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
219
220
  pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
221
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_needs_rebuild
220
222
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
221
223
  pipeline_IngestionPipeline_run -->|CALLS| import_names_ImportNameCollector
222
224
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_observe
@@ -239,21 +241,22 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
239
241
  |--------|------|------|
240
242
  | `Node` | CLASS | [`models.py:89`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L89) |
241
243
  | `Edge` | CLASS | [`models.py:146`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/core/models.py#L146) |
242
- | `ImportNameCollector` | CLASS | [`import_names.py:96`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L96) |
243
- | `note` | METHOD | [`import_names.py:143`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L143) |
244
- | `collect` | METHOD | [`import_names.py:151`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L151) |
245
- | `refresh_dispatch` | FUNCTION | [`pipeline.py:40`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L40) |
246
- | `_observe` | FUNCTION | [`pipeline.py:76`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L76) |
247
- | `workspace_root` | METHOD | [`pipeline.py:118`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L118) |
248
- | `run` | METHOD | [`pipeline.py:135`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L135) |
249
- | `_process_file` | METHOD | [`pipeline.py:274`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L274) |
250
- | `_cross_file_inputs_changed` | METHOD | [`pipeline.py:314`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L314) |
251
- | `_is_noop_incremental` | METHOD | [`pipeline.py:375`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L375) |
252
- | `_persist_incremental` | METHOD | [`pipeline.py:399`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L399) |
253
- | `_get_extractor` | METHOD | [`pipeline.py:449`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline.py#L449) |
254
- | `ResolverEngine` | CLASS | [`engine.py:49`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L49) |
255
- | `resolve` | METHOD | [`engine.py:87`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L87) |
256
- | `SemanticUpliftEngine` | CLASS | [`uplift.py:66`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L66) |
257
- | `execute_uplift` | METHOD | [`uplift.py:91`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/uplift.py#L91) |
258
- | `SQLiteStore` | CLASS | [`sqlite_store.py:65`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L65) |
244
+ | `ImportNameCollector` | CLASS | [`import_names.py:147`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L147) |
245
+ | `note` | METHOD | [`import_names.py:163`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L163) |
246
+ | `collect` | METHOD | [`import_names.py:168`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/import_names.py#L168) |
247
+ | `refresh_dispatch` | FUNCTION | [`__init__.py:36`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L36) |
248
+ | `_observe` | FUNCTION | [`__init__.py:72`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L72) |
249
+ | `_needs_rebuild` | FUNCTION | [`__init__.py:138`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L138) |
250
+ | `workspace_root` | METHOD | [`__init__.py:192`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L192) |
251
+ | `run` | METHOD | [`__init__.py:209`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L209) |
252
+ | `_process_file` | METHOD | [`__init__.py:354`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L354) |
253
+ | `_cross_file_inputs_changed` | METHOD | [`__init__.py:394`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L394) |
254
+ | `_is_noop_incremental` | METHOD | [`__init__.py:455`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L455) |
255
+ | `_persist_incremental` | METHOD | [`__init__.py:479`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L479) |
256
+ | `_get_extractor` | METHOD | [`__init__.py:532`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/__init__.py#L532) |
257
+ | `SemanticUpliftEngine` | CLASS | [`uplift.py:67`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/uplift.py#L67) |
258
+ | `execute_uplift` | METHOD | [`uplift.py:92`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/pipeline/uplift.py#L92) |
259
+ | `ResolverEngine` | CLASS | [`engine.py:63`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L63) |
260
+ | `resolve` | METHOD | [`engine.py:109`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/resolver/engine.py#L109) |
261
+ | `SQLiteStore` | CLASS | [`sqlite_store.py:81`](https://github.com/zaebee/codegraph-brain/blob/main/src/cgis/storage/sqlite_store.py#L81) |
259
262
  <!-- END_CGIS_GRAPH -->
@@ -129,4 +129,4 @@ domains:
129
129
  - "*storage.*"
130
130
  ```
131
131
 
132
- **Ontology compliance rule:** Any PR that adds a new `NodeType`, `EdgeType`, or modifies `domains.yaml` must update this document and the `_ONTOLOGY_CLASS` mapping in `src/cgis/resolver/uplift.py`.
132
+ **Ontology compliance rule:** Any PR that adds a new `NodeType`, `EdgeType`, or modifies `domains.yaml` must update this document and the `_ONTOLOGY_CLASS` mapping in `src/cgis/pipeline/uplift.py`.
@@ -12,35 +12,37 @@ classDef externalNode fill:#fff3e0,stroke:#e65100,stroke-width:1px,stroke-dashar
12
12
  models_Node["Node (models.py:89)"]:::classNode
13
13
  end
14
14
  subgraph sg_import_names["import_names.py"]
15
- import_names_ImportNameCollector["ImportNameCollector (import_names.py:96)"]:::classNode
16
- import_names_ImportNameCollector_collect["collect (import_names.py:151)"]:::methodNode
17
- import_names_ImportNameCollector_note["note (import_names.py:143)"]:::methodNode
15
+ import_names_ImportNameCollector["ImportNameCollector (import_names.py:147)"]:::classNode
16
+ import_names_ImportNameCollector_collect["collect (import_names.py:168)"]:::methodNode
17
+ import_names_ImportNameCollector_note["note (import_names.py:163)"]:::methodNode
18
18
  end
19
- subgraph sg_pipeline["pipeline.py"]
20
- pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (pipeline.py:314)"]:::methodNode
21
- pipeline_IngestionPipeline_get_extractor["_get_extractor (pipeline.py:449)"]:::methodNode
22
- pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (pipeline.py:375)"]:::methodNode
23
- pipeline_IngestionPipeline_persist_incremental["_persist_incremental (pipeline.py:399)"]:::methodNode
24
- pipeline_IngestionPipeline_process_file["_process_file (pipeline.py:274)"]:::methodNode
25
- pipeline_IngestionPipeline_run["run (pipeline.py:135)"]:::methodNode
26
- pipeline_IngestionPipeline_workspace_root["workspace_root (pipeline.py:118)"]:::methodNode
27
- pipeline_observe["_observe (pipeline.py:76)"]:::funcNode
28
- pipeline_refresh_dispatch["refresh_dispatch (pipeline.py:40)"]:::funcNode
29
- end
30
- subgraph sg_engine["engine.py"]
31
- engine_ResolverEngine["ResolverEngine (engine.py:49)"]:::classNode
32
- engine_ResolverEngine_resolve["resolve (engine.py:87)"]:::methodNode
19
+ subgraph sg_init["__init__.py"]
20
+ pipeline_IngestionPipeline_cross_file_inputs_changed["_cross_file_inputs_changed (__init__.py:394)"]:::methodNode
21
+ pipeline_IngestionPipeline_get_extractor["_get_extractor (__init__.py:532)"]:::methodNode
22
+ pipeline_IngestionPipeline_is_noop_incremental["_is_noop_incremental (__init__.py:455)"]:::methodNode
23
+ pipeline_IngestionPipeline_persist_incremental["_persist_incremental (__init__.py:479)"]:::methodNode
24
+ pipeline_IngestionPipeline_process_file["_process_file (__init__.py:354)"]:::methodNode
25
+ pipeline_IngestionPipeline_run["run (__init__.py:209)"]:::methodNode
26
+ pipeline_IngestionPipeline_workspace_root["workspace_root (__init__.py:192)"]:::methodNode
27
+ pipeline_needs_rebuild["_needs_rebuild (__init__.py:138)"]:::funcNode
28
+ pipeline_observe["_observe (__init__.py:72)"]:::funcNode
29
+ pipeline_refresh_dispatch["refresh_dispatch (__init__.py:36)"]:::funcNode
33
30
  end
34
31
  subgraph sg_uplift["uplift.py"]
35
- uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:66)"]:::classNode
36
- uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:91)"]:::methodNode
32
+ uplift_SemanticUpliftEngine["SemanticUpliftEngine (uplift.py:67)"]:::classNode
33
+ uplift_SemanticUpliftEngine_execute_uplift["execute_uplift (uplift.py:92)"]:::methodNode
34
+ end
35
+ subgraph sg_engine["engine.py"]
36
+ engine_ResolverEngine["ResolverEngine (engine.py:63)"]:::classNode
37
+ engine_ResolverEngine_resolve["resolve (engine.py:109)"]:::methodNode
37
38
  end
38
39
  subgraph sg_sqlite_store["sqlite_store.py"]
39
- sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:65)"]:::classNode
40
+ sqlite_store_SQLiteStore["SQLiteStore (sqlite_store.py:81)"]:::classNode
40
41
  end
41
42
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Node
42
43
  pipeline_IngestionPipeline_run -->|REFERENCES| models_Edge
43
44
  pipeline_IngestionPipeline_run -->|REFERENCES| sqlite_store_SQLiteStore
45
+ pipeline_IngestionPipeline_run -->|CALLS| pipeline_needs_rebuild
44
46
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_IngestionPipeline_workspace_root
45
47
  pipeline_IngestionPipeline_run -->|CALLS| import_names_ImportNameCollector
46
48
  pipeline_IngestionPipeline_run -->|CALLS| pipeline_observe
@@ -55,8 +55,9 @@ Reachability/authorization audit — which sources never reach a checkpoint.
55
55
  NOT transitively reach an ownership check. Reachability follows behavioral edges
56
56
  (CALLS *and* FastAPI ``Depends()`` DEPENDS_ON), so a guard wired via DI counts.
57
57
 
58
- Select sources with ``from_type`` (a NodeType like ``ROUTE_HANDLER`` /
59
- ``API_ENDPOINT`` / ``FUNCTION``) and/or ``from_prefix`` (FQN prefix) — at least
58
+ Select sources with ``from_type`` (the ``ROUTE_HANDLER`` role — FastAPI handlers on
59
+ a router built in the same module — or a NodeType like ``FUNCTION``) and/or
60
+ ``from_prefix`` (FQN prefix) — at least
60
61
  one is required. Returns JSON ``{target, covered, gaps}`` where each gap carries
61
62
  ``fqn``/``file``/``line``. Generalizes to validators, event tracking, or
62
63
  service-layer-boundary rules by pointing ``target`` at the required node.
@@ -68,7 +69,7 @@ Reachability/authorization audit — which sources never reach a checkpoint.
68
69
  | :--- | :--- | :---: | :--- |
69
70
  | `target` | `string` | ✓ | FQN of the checkpoint every source must reach, e.g. an ownership check. A unique dot-boundary suffix also resolves. |
70
71
  | `db_path` | `string` | | SQLite graph built by cgis_ingest. A relative path resolves against the MCP server's working directory, not the agent's — prefer an absolute path. |
71
- | `from_type` | `any` | | NodeType of the sources to audit, e.g. ROUTE_HANDLER, API_ENDPOINT or FUNCTION (any case). Give this, from_prefix, or both. |
72
+ | `from_type` | `any` | | NodeType or role of the sources to audit (any case): ROUTE_HANDLER selects FastAPI handlers on a router built in the same module; a structural type such as FUNCTION selects by type. Give this, from_prefix, or both. |
72
73
  | `from_prefix` | `any` | | Only audit sources at or under this FQN prefix, matched on whole dot-segments. A selection matching no source is an error naming the whole-segment prefixes it may have meant. Combined with from_type when both are given. |
73
74
  | `depth` | `integer` | | Maximum reachability depth; a longer path is reported as a gap. |
74
75
 
@@ -6,10 +6,10 @@ domains:
6
6
  description: "Source code parsing and AST extraction"
7
7
  heuristics:
8
8
  file_path_patterns:
9
- - "*extractors/*"
9
+ - "*languages/*"
10
10
  fqn_patterns:
11
11
  - "*.Extractor*"
12
- - "*extractors.*"
12
+ - "*languages.*"
13
13
 
14
14
  StorageLayer:
15
15
  description: "Database storage, schemas, and persistence"
@@ -21,7 +21,7 @@ domains:
21
21
  - "*storage.*"
22
22
 
23
23
  SemanticEngine:
24
- description: "Symbol resolution, linkage, and semantic uplift"
24
+ description: "Symbol resolution and linkage"
25
25
  heuristics:
26
26
  file_path_patterns:
27
27
  - "*resolver/*"
@@ -29,8 +29,6 @@ domains:
29
29
  - "*.Resolver*"
30
30
  - "*.ResolverEngine*"
31
31
  - "*resolver.*"
32
- - "*.uplift*"
33
- - "*.SemanticUplift*"
34
32
 
35
33
  QueryLayer:
36
34
  description: "Graph traversal and query operations"
@@ -53,12 +51,13 @@ domains:
53
51
  - "*.EdgeType*"
54
52
 
55
53
  Pipeline:
56
- description: "Ingestion pipeline orchestration"
54
+ description: "Ingestion pipeline orchestration and its post-write passes (semantic uplift, dispatch)"
57
55
  heuristics:
58
56
  file_path_patterns:
59
- - "*pipeline.py"
57
+ - "*pipeline/*"
60
58
  fqn_patterns:
61
59
  - "*.IngestionPipeline*"
60
+ - "*pipeline"
62
61
  - "*pipeline.*"
63
62
 
64
63
  APILayer:
@@ -114,22 +114,47 @@ patterns:
114
114
  # measurement (see plan: docs/specs/plans/2026-06-10-motif-basis-part-b.md).
115
115
  project_domains:
116
116
  # Python graph (ingest root: src/ → FQNs carry the cgis. prefix)
117
- - name: "extraction"
118
- fqn_prefix: "cgis.extractors"
117
+ # Language packs (spec: Drift gates, Domains) — one domain per pack, one shared
118
+ # bar (ruling G2), so a new pack is measured against it from its first commit;
119
+ # tests/unit/test_patterns_yaml.py fails for a pack without one.
120
+ # Was the single "extraction" domain over cgis.extractors / cgis.languages
121
+ # (#116, #183, steps 1-5). Measured at step 6 (main ca32430): python layered_dag
122
+ # 0.393 (best fit funnel 0.328), typescript layered_dag 0.184. Shared
123
+ # tolerance = loosest + headroom.
124
+ - name: "languages.python"
125
+ fqn_prefix: "cgis.languages.python"
119
126
  expected_pattern: layered_dag
120
127
  profile: python
121
- # Re-negotiated in #116: PythonExtractor was decomposed from a God Object into a
122
- # layered package (orchestrator python_extractor → handlers → _python_ast core),
123
- # so the domain is no longer pure_utility. Best-fit is now layered_dag (same
124
- # pattern as cgis.query).
125
- # Re-baselined in #183 (≈0.32 → 0.37): the resolver stopped fabricating phantom
126
- # `module.list.append`-style internal FQNs for builtin-method calls (e.g. `edges.append`
127
- # where `edges: list[Edge]`). Those fake intra-domain CALLS edges had been artificially
128
- # deflating this domain's drift; 0.37 is the honest census of the real structure (no real
129
- # edges lost — verified by edge-diff). Correctness-driven re-baseline, not ratchet loosening.
130
- drift_tolerance: 0.40
128
+ drift_tolerance: 0.42
131
129
  hygiene_baseline:
132
- unresolved_ratio: 0.37 # measured 0.3604 when the gate came alive (#149)
130
+ unresolved_ratio: 0.37 # measured 0.356 at step 6 (the old extraction baseline)
131
+
132
+ - name: "languages.typescript"
133
+ fqn_prefix: "cgis.languages.typescript"
134
+ expected_pattern: layered_dag
135
+ profile: python
136
+ drift_tolerance: 0.42
137
+ hygiene_baseline:
138
+ unresolved_ratio: 0.31 # measured 0.295 at step 6
139
+
140
+ - name: "languages.go"
141
+ fqn_prefix: "cgis.languages.go"
142
+ expected_pattern: layered_dag
143
+ profile: python
144
+ drift_tolerance: 0.42
145
+ hygiene_baseline:
146
+ unresolved_ratio: 0.26 # measured 0.242 at step 7b (drift 0.285)
147
+
148
+ # The pack contract and the model (spec: Core). layered_dag, not the spec's
149
+ # pure_utility — measured 0.215 vs 0.554 at step 6: since steps 1-4 the contract
150
+ # is layered (extractor/index/resolution/project -> models) (ruling G1).
151
+ - name: "core"
152
+ fqn_prefix: "cgis.core"
153
+ expected_pattern: layered_dag
154
+ profile: python
155
+ drift_tolerance: 0.25
156
+ hygiene_baseline:
157
+ unresolved_ratio: 0.21 # measured 0.191 at step 6
133
158
 
134
159
  - name: "resolution"
135
160
  fqn_prefix: "cgis.resolver"
@@ -137,7 +162,12 @@ project_domains:
137
162
  profile: python
138
163
  drift_tolerance: 0.40 # v2 measured ≈0.25 post-#115 split (tv_imp 0.00 — real 021C chain engine→symbols→indices; residual is tv_calls)
139
164
  hygiene_baseline:
140
- unresolved_ratio: 0.45 # measured 0.4451 when the gate came alive (#149)
165
+ # Re-baselined 0.45 -> 0.46 in language-packs step 5 (user decision): moving
166
+ # resolver/uplift.py into cgis/pipeline/ took 70 calls, 28 of them unresolved
167
+ # (0.40), out of a domain at 0.44 — 136/309 became 108/239 = 0.452 with no
168
+ # unresolved edge added and the moved code unchanged. A denominator effect,
169
+ # not a resolution regression; 0.46 keeps the ratchet's usual small headroom.
170
+ unresolved_ratio: 0.46 # measured 0.4519 after step 5 (was 0.4451 at #149)
141
171
 
142
172
  - name: "pipeline"
143
173
  fqn_prefix: "cgis.pipeline"
@@ -252,15 +282,9 @@ project_domains:
252
282
  hygiene_baseline:
253
283
  unresolved_ratio: 0.79 # measured 0.7857 when the gate came alive (#149)
254
284
 
255
- # ── Project-level quotient binding (spec §3.4) — OBSERVE-ONLY burn-in ────────
256
- # Measured quotient IMPORTS census {021D .4, 021U .4, 030T .2}: the domain
257
- # graph is an orchestrator star out of `pipeline`, NOT the chain the spec
258
- # example claimed. enforce stays false until the burn-in settles whether to
259
- # rebind to orchestrator or restructure; flipping to true makes it a ratchet.
260
- project_level:
261
- - name: "cgis-project"
262
- fqn_prefix: "quotient"
263
- expected_pattern: pipeline_stage
264
- profile: python
265
- drift_tolerance: 0.15
266
- enforce: false
285
+ # ── Project-level quotient ───────────────────────────────────────────────────
286
+ # Retired in language-packs step 6 (#146). cgis's topology is enforced by the
287
+ # forbidden-edge gate (tests/self_parsing/test_architecture.py, exact shrinking
288
+ # allowlists); the build/read plane quotients are printed observe-only by
289
+ # tests/self_parsing/test_drift.py. The `project_level` section remains a
290
+ # supported feature for other repositories.
@@ -11,7 +11,10 @@
11
11
  # update the lock and justify it in the PR description.
12
12
 
13
13
  project_domains:
14
- extraction: 0.40
14
+ languages.python: 0.42
15
+ languages.typescript: 0.42
16
+ languages.go: 0.42
17
+ core: 0.25
15
18
  resolution: 0.40
16
19
  pipeline: 0.25
17
20
  storage: 0.20
@@ -25,6 +28,3 @@ project_domains:
25
28
  store: 0.15
26
29
  providers: 0.17
27
30
  utils: 0.20
28
-
29
- project_level:
30
- cgis-project: 0.15