codegraph-brain 0.13.0__tar.gz → 0.14.1__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 (315) hide show
  1. codegraph_brain-0.14.1/.pre-commit-config.yaml +45 -0
  2. codegraph_brain-0.14.1/.release-please-manifest.json +3 -0
  3. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/CHANGELOG.md +27 -0
  4. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/PKG-INFO +1 -1
  5. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/CURATION.md +97 -0
  6. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/calibration.jsonl +236 -236
  7. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/results.jsonl +118 -118
  8. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian/README.md +11 -0
  9. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/pyproject.toml +1 -1
  10. codegraph_brain-0.14.1/scripts/backfill_calibration_fingerprint.py +246 -0
  11. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/backfill_review_fingerprint.py +26 -2
  12. codegraph_brain-0.14.1/scripts/check_pytest_raises.py +152 -0
  13. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/guardian_bench.py +55 -0
  14. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/guardian_calibrate.py +37 -0
  15. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/guardian_martian.py +11 -3
  16. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/martian.py +53 -1
  17. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/review_fingerprint.py +27 -1
  18. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/runner.py +104 -14
  19. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/conftest.py +11 -3
  20. codegraph_brain-0.14.1/tests/unit/test_backfill_calibration_fingerprint.py +776 -0
  21. codegraph_brain-0.14.1/tests/unit/test_check_pytest_raises.py +119 -0
  22. codegraph_brain-0.14.1/tests/unit/test_guardian_bench_script.py +195 -0
  23. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_calibrate_script.py +92 -0
  24. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_martian.py +2 -3
  25. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_martian_script.py +5 -12
  26. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_runner.py +156 -0
  27. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_review_fingerprint_contract.py +94 -5
  28. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_review_fingerprint_digest.py +53 -0
  29. codegraph_brain-0.14.1/tests/unit/test_temperature_source.py +168 -0
  30. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/uv.lock +43 -46
  31. codegraph_brain-0.13.0/.pre-commit-config.yaml +0 -27
  32. codegraph_brain-0.13.0/.release-please-manifest.json +0 -3
  33. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.claude-plugin/marketplace.json +0 -0
  34. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.gitattributes +0 -0
  35. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.github/workflows/autodoc.yml +0 -0
  36. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.github/workflows/ci.yml +0 -0
  37. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.github/workflows/guardian.yml +0 -0
  38. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.github/workflows/pr-title.yml +0 -0
  39. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.github/workflows/release-please.yml +0 -0
  40. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.gitignore +0 -0
  41. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/.python-version +0 -0
  42. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/CLAUDE.md +0 -0
  43. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/CONTRIBUTING.md +0 -0
  44. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/LICENSE +0 -0
  45. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/Makefile +0 -0
  46. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/PRIVACY.md +0 -0
  47. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/README.md +0 -0
  48. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-122.yaml +0 -0
  49. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-140.yaml +0 -0
  50. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-141.yaml +0 -0
  51. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-142.yaml +0 -0
  52. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-143.yaml +0 -0
  53. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-144.yaml +0 -0
  54. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-278.yaml +0 -0
  55. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/guardian/pr-313.yaml +0 -0
  56. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian/cal_dot_com.json +0 -0
  57. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian/discourse.json +0 -0
  58. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian/grafana.json +0 -0
  59. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian/keycloak.json +0 -0
  60. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian/sentry.json +0 -0
  61. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-judged.jsonl +0 -0
  62. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-p3-judged-run1.jsonl +0 -0
  63. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +0 -0
  64. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-p3-run1.jsonl +0 -0
  65. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-p3-run2.jsonl +0 -0
  66. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-p3-run3.jsonl +0 -0
  67. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-plan.json +0 -0
  68. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-repeat-judged.jsonl +0 -0
  69. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-repeat-reviews.jsonl +0 -0
  70. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/benchmarks/martian-reviews.jsonl +0 -0
  71. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/data/.gitkeep +0 -0
  72. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/AUDIT.md +0 -0
  73. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/CASE_STUDY.md +0 -0
  74. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/GUARDIAN_LOCAL_BENCH.md +0 -0
  75. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/GUARDIAN_REMOTE_OLLAMA.md +0 -0
  76. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/architecture/HOW_IT_WORKS.md +0 -0
  77. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/architecture/ONTOLOGY.md +0 -0
  78. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
  79. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/architecture/SELF_PORTRAIT.md +0 -0
  80. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/architecture/diagrams/pipeline_flow.mermaid +0 -0
  81. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/architecture/health_badge.json +0 -0
  82. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/assets/.gitignore +0 -0
  83. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/assets/cgis-app-avatar.png +0 -0
  84. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/assets/cgis-app-avatar.svg +0 -0
  85. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/assets/generate_avatar.py +0 -0
  86. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/examples/.gitkeep +0 -0
  87. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/how-to/AGENT_ONBOARDING.md +0 -0
  88. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/how-to/CLI_USAGE.md +0 -0
  89. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/how-to/MCP_REFERENCE.md +0 -0
  90. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
  91. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/ontology/.gitkeep +0 -0
  92. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/ontology/core.yaml +0 -0
  93. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/ontology/domains.yaml +0 -0
  94. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/ontology/patterns.yaml +0 -0
  95. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/ontology/tolerances.lock +0 -0
  96. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
  97. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
  98. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
  99. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
  100. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
  101. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
  102. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
  103. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
  104. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
  105. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
  106. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
  107. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
  108. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
  109. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
  110. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
  111. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
  112. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
  113. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
  114. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
  115. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
  116. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
  117. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
  118. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
  119. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
  120. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
  121. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
  122. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
  123. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
  124. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-08-11-guardian-code-review-bench.md +0 -0
  125. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/2026-08-14-review-fingerprint-design.md +0 -0
  126. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/BLUEPRINT.md +0 -0
  127. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/PRD.md +0 -0
  128. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/TDD.md +0 -0
  129. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
  130. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
  131. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
  132. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
  133. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
  134. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
  135. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
  136. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
  137. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
  138. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
  139. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
  140. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
  141. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
  142. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
  143. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
  144. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
  145. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
  146. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/docs/specs/plans/2026-08-14-review-fingerprint.md +0 -0
  147. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/main.py +0 -0
  148. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/plugin/.claude-plugin/plugin.json +0 -0
  149. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/plugin/.mcp.json +0 -0
  150. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/plugin/README.md +0 -0
  151. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/plugin/skills/cgis/SKILL.md +0 -0
  152. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/plugin/skills/ingest/SKILL.md +0 -0
  153. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/release-please-config.json +0 -0
  154. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/colab_bench.sh +0 -0
  155. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/gen_ideal_graph.py +0 -0
  156. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/generate_health.py +0 -0
  157. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/generate_mcp_ref.py +0 -0
  158. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/generate_schema_docs.py +0 -0
  159. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/guardian_review.py +0 -0
  160. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/inject_readme_graph.py +0 -0
  161. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/ollama_visitor.sh +0 -0
  162. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/probe_closure_gap.py +0 -0
  163. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/scripts/probe_tier_ladder.py +0 -0
  164. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/__init__.py +0 -0
  165. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/__main__.py +0 -0
  166. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/api/.gitkeep +0 -0
  167. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/api/__init__.py +0 -0
  168. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/api/mcp_server.py +0 -0
  169. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/cli.py +0 -0
  170. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/core/.gitkeep +0 -0
  171. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/core/models.py +0 -0
  172. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/.gitkeep +0 -0
  173. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/_python_ast.py +0 -0
  174. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/_python_classes.py +0 -0
  175. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/_python_functions.py +0 -0
  176. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/_python_imports.py +0 -0
  177. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/_python_types.py +0 -0
  178. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/base.py +0 -0
  179. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/python_extractor.py +0 -0
  180. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/registry.py +0 -0
  181. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/extractors/typescript_extractor.py +0 -0
  182. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/__init__.py +0 -0
  183. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/axes.py +0 -0
  184. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/bench.py +0 -0
  185. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/calibrate.py +0 -0
  186. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/chunked.py +0 -0
  187. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/chunker.py +0 -0
  188. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/collector.py +0 -0
  189. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/core.py +0 -0
  190. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/diff_index.py +0 -0
  191. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/findings.py +0 -0
  192. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/github_poster.py +0 -0
  193. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/metrics.py +0 -0
  194. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/prompts.py +0 -0
  195. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/providers/__init__.py +0 -0
  196. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/providers/base.py +0 -0
  197. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/providers/gemini.py +0 -0
  198. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/providers/mistral.py +0 -0
  199. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/providers/ollama.py +0 -0
  200. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/recording.py +0 -0
  201. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/render.py +0 -0
  202. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/guardian/skeptic.py +0 -0
  203. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/pipeline.py +0 -0
  204. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/py.typed +0 -0
  205. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/analysis/__init__.py +0 -0
  206. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/analysis/analyzer.py +0 -0
  207. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/analysis/anomaly.py +0 -0
  208. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/analysis/cohesion.py +0 -0
  209. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/analysis/health.py +0 -0
  210. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/analysis/suggest_service.py +0 -0
  211. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/context/__init__.py +0 -0
  212. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/context/audit.py +0 -0
  213. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/context/context_service.py +0 -0
  214. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/context/prompt.py +0 -0
  215. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/context/snippet.py +0 -0
  216. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/__init__.py +0 -0
  217. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/_scc.py +0 -0
  218. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/drift.py +0 -0
  219. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/drift_service.py +0 -0
  220. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/fingerprint.py +0 -0
  221. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/fractal.py +0 -0
  222. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/ontology_init.py +0 -0
  223. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/quotient.py +0 -0
  224. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/drift/triads.py +0 -0
  225. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/engine.py +0 -0
  226. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/fqn.py +0 -0
  227. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/render/__init__.py +0 -0
  228. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/render/graph_json.py +0 -0
  229. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/render/mermaid.py +0 -0
  230. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/query/render/metrics.py +0 -0
  231. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/resolver/.gitkeep +0 -0
  232. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/resolver/__init__.py +0 -0
  233. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/resolver/engine.py +0 -0
  234. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/resolver/indices.py +0 -0
  235. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/resolver/symbols.py +0 -0
  236. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/resolver/uplift.py +0 -0
  237. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/storage/.gitkeep +0 -0
  238. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/src/cgis/storage/sqlite_store.py +0 -0
  239. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/integration/.gitkeep +0 -0
  240. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/.gitkeep +0 -0
  241. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/__init__.py +0 -0
  242. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/conftest.py +0 -0
  243. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/test_architecture.py +0 -0
  244. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/test_drift.py +0 -0
  245. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/test_fractal.py +0 -0
  246. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
  247. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/test_self_parse.py +0 -0
  248. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/test_self_parse_ts.py +0 -0
  249. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/self_parsing/test_suggest.py +0 -0
  250. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/.gitkeep +0 -0
  251. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/guardian_stubs.py +0 -0
  252. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/review_path_inventory.txt +0 -0
  253. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test___main__.py +0 -0
  254. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_analyzer.py +0 -0
  255. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_audit.py +0 -0
  256. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_backfill_review_fingerprint.py +0 -0
  257. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_cli.py +0 -0
  258. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_cohesion.py +0 -0
  259. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_context_service.py +0 -0
  260. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_di_acceptance.py +0 -0
  261. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_drift.py +0 -0
  262. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_drift_service.py +0 -0
  263. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_extractor_registry.py +0 -0
  264. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_fingerprint.py +0 -0
  265. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_fqn.py +0 -0
  266. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_fractal.py +0 -0
  267. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_gen_ideal_graph.py +0 -0
  268. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_generate_mcp_ref.py +0 -0
  269. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_graph_json.py +0 -0
  270. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_axes.py +0 -0
  271. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_bench.py +0 -0
  272. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_calibrate.py +0 -0
  273. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_chunked.py +0 -0
  274. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_chunker.py +0 -0
  275. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_collector.py +0 -0
  276. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_core.py +0 -0
  277. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_diff_index.py +0 -0
  278. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_findings.py +0 -0
  279. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_martian_union.py +0 -0
  280. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_metrics.py +0 -0
  281. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_mistral_sampling.py +0 -0
  282. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_ollama_sampling.py +0 -0
  283. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_ollama_truncation.py +0 -0
  284. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_poster.py +0 -0
  285. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_providers.py +0 -0
  286. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_providers_name.py +0 -0
  287. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_recording.py +0 -0
  288. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_render.py +0 -0
  289. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_review_script.py +0 -0
  290. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_salvage.py +0 -0
  291. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_guardian_skeptic.py +0 -0
  292. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_health_scorer.py +0 -0
  293. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_import_acceptance.py +0 -0
  294. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_mcp_server.py +0 -0
  295. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_mermaid.py +0 -0
  296. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_metrics.py +0 -0
  297. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_models.py +0 -0
  298. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_ontology_compliance.py +0 -0
  299. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_ontology_init.py +0 -0
  300. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_patterns_yaml.py +0 -0
  301. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_pipeline.py +0 -0
  302. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_prompt.py +0 -0
  303. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_python_extractor.py +0 -0
  304. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_quotient.py +0 -0
  305. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_resolver.py +0 -0
  306. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_resolver_indices.py +0 -0
  307. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_resolver_symbols.py +0 -0
  308. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_review_fingerprint_closure.py +0 -0
  309. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_review_fingerprint_record.py +0 -0
  310. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_snippet.py +0 -0
  311. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_sqlite_store.py +0 -0
  312. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_suggest_service.py +0 -0
  313. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_triads.py +0 -0
  314. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_typescript_extractor.py +0 -0
  315. {codegraph_brain-0.13.0 → codegraph_brain-0.14.1}/tests/unit/test_uplift.py +0 -0
@@ -0,0 +1,45 @@
1
+ repos:
2
+ - repo: local
3
+ hooks:
4
+ # SonarCloud's python:S5778, enforced before the push rather than after it.
5
+ # Sonar only decorates a pull request, so the loop was write -> push ->
6
+ # get told -> fix -> forget, five times over. `pass_filenames: false`
7
+ # because the check is a repo-wide ratchet (a stale baseline entry is a
8
+ # failure too), which a staged-files-only view cannot see.
9
+ #
10
+ # This hook is the fast half, not the gate: CI does not run pre-commit,
11
+ # so `tests/unit/test_check_pytest_raises.py` is what actually blocks a
12
+ # merge. Both call the same `check()`.
13
+ - id: pytest-raises-single-call
14
+ name: one throwing call per pytest.raises block (S5778)
15
+ entry: python scripts/check_pytest_raises.py
16
+ language: system
17
+ pass_filenames: false
18
+ files: ^tests/.*\.py$
19
+
20
+ - repo: https://github.com/astral-sh/ruff-pre-commit
21
+ rev: v0.15.16
22
+ hooks:
23
+ - id: ruff
24
+ args: [--fix]
25
+ - id: ruff-format
26
+
27
+ - repo: https://github.com/pre-commit/mirrors-mypy
28
+ rev: v2.1.0
29
+ hooks:
30
+ - id: mypy
31
+ args: [--config-file=pyproject.toml]
32
+ files: ^src/
33
+ additional_dependencies:
34
+ - httpx>=0.27 # imported directly by guardian/providers/base.py (#275)
35
+ - pydantic>=2.13.4
36
+ - structlog>=25.5.0
37
+ - types-pyyaml>=6.0.12.20260518
38
+ - rich>=15.0.0
39
+ - typer>=0.26.7
40
+ - tree-sitter>=0.25.2
41
+ - tree-sitter-python>=0.25.0
42
+ - tree-sitter-typescript>=0.23.2
43
+ - pytest>=9.0.3
44
+ - "mcp[cli]>=2" # must match the pyproject bound
45
+ - duckdb>=1.1.0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.14.1"
3
+ }
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.14.1](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.14.0...codegraph-brain-v0.14.1) (2026-08-16)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **bench:** cutting a release turned the new reachability tests red ([#397](https://github.com/zaebee/codegraph-brain/issues/397)) ([efbca37](https://github.com/zaebee/codegraph-brain/commit/efbca37c13e452fdf7266619b36d86b0e11bb795))
9
+
10
+ ## [0.14.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.13.0...codegraph-brain-v0.14.0) (2026-08-16)
11
+
12
+
13
+ ### Features
14
+
15
+ * **guardian:** give measured recall a reviewer it can name ([#390](https://github.com/zaebee/codegraph-brain/issues/390)) ([#391](https://github.com/zaebee/codegraph-brain/issues/391)) ([acc1887](https://github.com/zaebee/codegraph-brain/commit/acc18874b7ce67fa38b7dab41552838f9578516d))
16
+ * **guardian:** say whether a temperature was chosen or inherited ([#393](https://github.com/zaebee/codegraph-brain/issues/393)) ([#395](https://github.com/zaebee/codegraph-brain/issues/395)) ([1b2c3c3](https://github.com/zaebee/codegraph-brain/commit/1b2c3c3f1619f00d20c36fb315eaca3dce5661d9))
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * **guardian:** close the deferred cleanups that could only narrow silently ([#385](https://github.com/zaebee/codegraph-brain/issues/385)) ([#386](https://github.com/zaebee/codegraph-brain/issues/386)) ([e7020ff](https://github.com/zaebee/codegraph-brain/commit/e7020ff237964a66728f0b437f13b70dc8bfe2f9))
22
+ * **guardian:** refuse a model name carrying whitespace ([#382](https://github.com/zaebee/codegraph-brain/issues/382)) ([#389](https://github.com/zaebee/codegraph-brain/issues/389)) ([45fb110](https://github.com/zaebee/codegraph-brain/commit/45fb110d3e440e858f57c28cd3e343e61218697c))
23
+
24
+
25
+ ### Documentation
26
+
27
+ * **bench:** a failed parse is not a draw ([#394](https://github.com/zaebee/codegraph-brain/issues/394)) ([a70b09b](https://github.com/zaebee/codegraph-brain/commit/a70b09bf1faf67ddefff2d7fdcf555aba51ced9f))
28
+ * **bench:** repeated rows are samples, not corrections ([#392](https://github.com/zaebee/codegraph-brain/issues/392)) ([e1fcc3f](https://github.com/zaebee/codegraph-brain/commit/e1fcc3f4728e61363d06b022b14bc66f45f3a031))
29
+
3
30
  ## [0.13.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.12.0...codegraph-brain-v0.13.0) (2026-08-15)
4
31
 
5
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codegraph-brain
3
- Version: 0.13.0
3
+ Version: 0.14.1
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
@@ -54,6 +54,103 @@ carries `matched`, `noise` and `ambiguous_hits`, so either definition can be
54
54
  re-derived from it. (Contrast `calibration.jsonl`, which *was* rewritten — that
55
55
  was a scorer bug, wrong under its own stated algorithm, not a policy change.)
56
56
 
57
+ ## Repeated rows are samples, not corrections (2026-08-16, #390)
58
+
59
+ **Do not deduplicate any corpus in this repository by "one row per subject,
60
+ latest wins."** Every repeat here was paid for on purpose, and collapsing to the
61
+ newest draw silently discards the experiment it belongs to.
62
+
63
+ Written down because a downstream consumer adopted exactly that rule — reasoning
64
+ that a re-run is a correction, so counting both would let a reviewer improve its
65
+ record by re-running — and nothing in this repository contradicted it. The
66
+ reasoning is sound for a corpus of corrections. It is wrong for these.
67
+
68
+ ### `benchmarks/martian-*.jsonl` — 115 review rows, 83 distinct subjects
69
+
70
+ Keyed by subject and genome (`url`, `head_sha`, `review_fingerprint`,
71
+ `finder_model`, `had_graph`), 32 of 115 rows are repeats. Every one of them
72
+ comes from a registered sampling arm:
73
+
74
+ | repeat group | count | source |
75
+ |---|---|---|
76
+ | `p3-run1` + `p3-run2` | 12 | Phase 3 union arm |
77
+ | `p3-run1` + `p3-run2` + `p3-run3` | 7 | Phase 3 union arm |
78
+ | `reviews` + `repeat-reviews` | 6 | R5 repeat probe |
79
+
80
+ Phase 3 registered three runs at `temperature = 0.7` **because the runs must
81
+ differ** — see the spec, "Configuration under test": at temperature 0 "the three
82
+ runs collapse toward one and the union arm becomes identically equal to a single
83
+ run." Gate G8 is defined as `F₂(union) > F₂(mean of the 3 runs)`; a mean over
84
+ three draws is not computable from one of them.
85
+
86
+ The variance is not theoretical. **21 of the 25 repeat groups disagree on how
87
+ many findings the review produced**, with spreads including 8→14, 15→24, 26→38
88
+ and one 0→25 — the same reviewer, the same commit, the same configuration. Keep
89
+ one draw and the number you publish is a coin flip over that range.
90
+
91
+ ### `benchmarks/guardian/results.jsonl` — 118 scored rows, 53 distinct
92
+
93
+ Repeats here carry an explicit `run` index (0/1/2) for the same reason. A row is
94
+ identified by `pr` + `model` + `guardian_sha` + `run`, and dropping `run` averages
95
+ away the per-PR sampling noise that R5 was written to measure.
96
+
97
+ ### `benchmarks/guardian/calibration.jsonl` — 236 rows, 118 subjects
98
+
99
+ Exactly two rows per recorded review, one per judge (`gemini-2.5-flash` and
100
+ `mistral-medium-latest`). The pair *is* the measurement — inter-judge agreement
101
+ is the G3 statistic — so `row_key` alone is not a unique key here; `row_key` +
102
+ `judge_model` is.
103
+
104
+ ### If you do need one row per reviewer
105
+
106
+ Aggregate over the draws (mean, or union where the arm defines one); do not
107
+ select among them. Selecting by recency is the one choice guaranteed to be
108
+ uncorrelated with quality, and it deletes 28% of this corpus.
109
+
110
+ **Aggregate over the subject's *draws*, which is not the same set as its rows.**
111
+ Say what a draw is rather than which rows to exclude: an exclusion list is
112
+ open-ended and the next entry arrives after it has already been believed, while
113
+ a positive definition is closed.
114
+
115
+ **A draw is a review that completed and whose output was parsed** — a row with
116
+ `parse_failed: false`. That is the whole test; `error` is `None` on all 115 rows,
117
+ because a run that failed outright never reached a record.
118
+
119
+ **A `parse_failed` row is not a draw.** Its structured output could not be read,
120
+ so it carries zero findings, and averaging it in charges the model for a harness
121
+ failure. This is exactly the distinction #374 established ("a truncated review is
122
+ not a review that found nothing"); before it, `parse_failed` was recorded and
123
+ read by nothing.
124
+
125
+ **A row with zero findings and `parse_failed: false` *is* a draw.** Three exist
126
+ (PRs 6, 77754 and 107534, all gemini), and each spent real tokens — 106, 117 and
127
+ 124 completion tokens. The reviewer ran and said nothing, which is evidence about
128
+ the reviewer. Same output shape as the parse failure, opposite meaning; keeping
129
+ them and dropping the parse failure is the one combination that is right about
130
+ both. The `arm` field exists for the mirror of this hazard: a failure and a
131
+ controlled removal must not look alike in the record.
132
+
133
+ There is exactly **one** parse-failed row in the review corpora:
134
+ `martian-p3-run1.jsonl` for PR 11059 — the same row #374 was written about. One
135
+ row out of 115 sounds ignorable and is not, because of how the averaging works:
136
+
137
+ - PR 11059 has three rows. Dropping the parse-failed one leaves draws of `9/13`
138
+ and `8/8`, so the subject contributes mean `c = 8.5` over mean `n = 10.5` —
139
+ a rate of **81.0%**, which is *below* mistral/graph's pooled 86.6%.
140
+ - Averaging the parse failure in as a third draw keeps that 81.0% but shrinks the
141
+ subject to `c = 5.667` over `n = 7.0`. Its **weight** falls, not its rate.
142
+ - A below-average subject carrying less weight pulls the pooled figure **up**:
143
+ 86.6% → **86.9%**.
144
+
145
+ So including the harness failure makes the reviewer look better, which is the
146
+ direction that makes this easy to leave in. That is how the gap was found — a
147
+ downstream consumer computed 86.6%, this repository computed 86.9%, and the
148
+ disagreement had exactly one cause.
149
+
150
+ The same applies to the `error` rows in `results.jsonl`, for the same reason and
151
+ by the same rule: they are already excluded there because `is_scored` requires
152
+ `matched` and `precision`, which a failed run never gets.
153
+
57
154
  ## Curation policy
58
155
 
59
156
  - Style/idiom-only findings → `ambiguous` (guardian's PRECISION RULES forbid