codegraph-brain 0.11.0__tar.gz → 0.14.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.
- codegraph_brain-0.14.0/.gitattributes +6 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.github/workflows/ci.yml +31 -1
- codegraph_brain-0.14.0/.pre-commit-config.yaml +45 -0
- codegraph_brain-0.14.0/.release-please-manifest.json +3 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/CHANGELOG.md +59 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/PKG-INFO +3 -1
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/README.md +2 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/CURATION.md +97 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/calibration.jsonl +236 -236
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/results.jsonl +118 -118
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/martian/README.md +11 -0
- codegraph_brain-0.14.0/benchmarks/martian-judged.jsonl +109 -0
- codegraph_brain-0.14.0/benchmarks/martian-p3-judged-run1.jsonl +2 -0
- codegraph_brain-0.14.0/benchmarks/martian-p3-judged-run1.jsonl.corrupted-backup +11 -0
- codegraph_brain-0.14.0/benchmarks/martian-p3-run1.jsonl +19 -0
- codegraph_brain-0.14.0/benchmarks/martian-p3-run2.jsonl +19 -0
- codegraph_brain-0.14.0/benchmarks/martian-p3-run3.jsonl +7 -0
- codegraph_brain-0.14.0/benchmarks/martian-repeat-judged.jsonl +6 -0
- codegraph_brain-0.14.0/benchmarks/martian-repeat-reviews.jsonl +6 -0
- codegraph_brain-0.14.0/benchmarks/martian-reviews.jsonl +64 -0
- codegraph_brain-0.14.0/docs/GUARDIAN_LOCAL_BENCH.md +157 -0
- codegraph_brain-0.14.0/docs/GUARDIAN_REMOTE_OLLAMA.md +105 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-08-11-guardian-code-review-bench.md +620 -2
- codegraph_brain-0.14.0/docs/specs/2026-08-14-review-fingerprint-design.md +545 -0
- codegraph_brain-0.14.0/docs/specs/plans/2026-08-14-review-fingerprint.md +1389 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/pyproject.toml +1 -1
- codegraph_brain-0.14.0/scripts/backfill_calibration_fingerprint.py +246 -0
- codegraph_brain-0.14.0/scripts/backfill_review_fingerprint.py +314 -0
- codegraph_brain-0.14.0/scripts/check_pytest_raises.py +152 -0
- codegraph_brain-0.14.0/scripts/colab_bench.sh +90 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/guardian_bench.py +58 -8
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/guardian_calibrate.py +37 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/guardian_martian.py +386 -42
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/guardian_review.py +15 -2
- codegraph_brain-0.14.0/scripts/ollama_visitor.sh +107 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/calibrate.py +39 -1
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/core.py +30 -4
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/findings.py +64 -1
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/martian.py +318 -3
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/metrics.py +4 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/providers/base.py +45 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/providers/gemini.py +4 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/providers/mistral.py +49 -2
- codegraph_brain-0.14.0/src/cgis/guardian/providers/ollama.py +211 -0
- codegraph_brain-0.14.0/src/cgis/guardian/review_fingerprint.py +288 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/runner.py +183 -8
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/conftest.py +45 -1
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/guardian_stubs.py +8 -0
- codegraph_brain-0.14.0/tests/unit/review_path_inventory.txt +43 -0
- codegraph_brain-0.14.0/tests/unit/test_backfill_calibration_fingerprint.py +745 -0
- codegraph_brain-0.14.0/tests/unit/test_backfill_review_fingerprint.py +454 -0
- codegraph_brain-0.14.0/tests/unit/test_check_pytest_raises.py +119 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_fingerprint.py +3 -1
- codegraph_brain-0.14.0/tests/unit/test_guardian_bench_script.py +195 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_calibrate_script.py +92 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_chunked.py +3 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_core.py +20 -1
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_martian.py +2 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_martian_script.py +822 -8
- codegraph_brain-0.14.0/tests/unit/test_guardian_martian_union.py +347 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_metrics.py +37 -0
- codegraph_brain-0.14.0/tests/unit/test_guardian_mistral_sampling.py +213 -0
- codegraph_brain-0.14.0/tests/unit/test_guardian_ollama_sampling.py +254 -0
- codegraph_brain-0.14.0/tests/unit/test_guardian_ollama_truncation.py +204 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_providers.py +4 -0
- codegraph_brain-0.14.0/tests/unit/test_guardian_providers_name.py +128 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_runner.py +248 -0
- codegraph_brain-0.14.0/tests/unit/test_guardian_salvage.py +299 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_skeptic.py +3 -0
- codegraph_brain-0.14.0/tests/unit/test_review_fingerprint_closure.py +259 -0
- codegraph_brain-0.14.0/tests/unit/test_review_fingerprint_contract.py +211 -0
- codegraph_brain-0.14.0/tests/unit/test_review_fingerprint_digest.py +226 -0
- codegraph_brain-0.14.0/tests/unit/test_review_fingerprint_record.py +25 -0
- codegraph_brain-0.14.0/tests/unit/test_temperature_source.py +168 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/uv.lock +43 -46
- codegraph_brain-0.11.0/.pre-commit-config.yaml +0 -27
- codegraph_brain-0.11.0/.release-please-manifest.json +0 -3
- codegraph_brain-0.11.0/benchmarks/martian-judged.jsonl +0 -1
- codegraph_brain-0.11.0/benchmarks/martian-reviews.jsonl +0 -1
- codegraph_brain-0.11.0/src/cgis/guardian/providers/ollama.py +0 -99
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.claude-plugin/marketplace.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.github/workflows/autodoc.yml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.github/workflows/guardian.yml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.github/workflows/pr-title.yml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.github/workflows/release-please.yml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.gitignore +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/.python-version +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/CLAUDE.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/CONTRIBUTING.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/LICENSE +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/Makefile +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/PRIVACY.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-122.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-140.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-141.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-142.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-143.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-144.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-278.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/guardian/pr-313.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/martian/cal_dot_com.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/martian/discourse.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/martian/grafana.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/martian/keycloak.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/martian/sentry.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/benchmarks/martian-plan.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/data/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/AUDIT.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/CASE_STUDY.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/architecture/HOW_IT_WORKS.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/architecture/ONTOLOGY.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/architecture/PATTERNS_AND_TRIADS.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/architecture/SELF_PORTRAIT.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/architecture/diagrams/pipeline_flow.mermaid +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/architecture/health_badge.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/assets/.gitignore +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/assets/cgis-app-avatar.png +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/assets/cgis-app-avatar.svg +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/assets/generate_avatar.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/examples/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/how-to/AGENT_ONBOARDING.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/how-to/CLI_USAGE.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/how-to/MCP_REFERENCE.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/lab-notes/2026-06-11-chunked-review-negative-result.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/ontology/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/ontology/core.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/ontology/domains.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/ontology/patterns.yaml +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/ontology/tolerances.lock +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-09-domain-pattern-fingerprint-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-09-pattern-alphabet-motif-basis-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-10-guardian-sprint-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-11-fastapi-di-edges-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-11-guardian-chunked-review-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-11-guardian-chunker-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-11-mcp-drift-validate-fqn-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-11-resolver-split-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-11-symbol-import-edges-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-12-drift-empty-domains-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-12-gate-semantics-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-12-init-ontology-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-12-release-please-ci-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-13-suggest-packages-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-06-13-tangle-anti-pattern-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-29-guardian-skeptic-scoring-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-cgis-fractal-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-cgis-fractal-plan.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-chunk-source-filter-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-chunk-source-filter-plan.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-genai-client-close-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-genai-client-close-plan.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-guardian-precision-bench-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-guardian-precision-bench-plan.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-guardian-timeout-retry-design.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-30-guardian-timeout-retry-plan.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-07-31-finder-bug-class-taxonomy.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/2026-08-01-aura-autoevolution-poc.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/BLUEPRINT.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/PRD.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/TDD.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-09-fingerprint-drift.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-10-guardian-context-skeptic-inline.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-10-guardian-structured-findings-bench.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-10-motif-basis-part-b.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-10-unified-pattern-alphabet.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-11-fastapi-di-edges.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-11-guardian-chunked-review.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-11-guardian-chunker.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-11-mcp-drift-validate-fqn.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-11-resolver-split.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-12-drift-empty-domains.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-12-gate-semantics.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-12-init-ontology.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-12-release-please-ci.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-12-symbol-import-edges.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-06-13-suggest-packages.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/docs/specs/plans/2026-07-29-guardian-skeptic-scoring.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/main.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/plugin/.claude-plugin/plugin.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/plugin/.mcp.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/plugin/README.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/plugin/skills/cgis/SKILL.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/plugin/skills/ingest/SKILL.md +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/release-please-config.json +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/gen_ideal_graph.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/generate_health.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/generate_mcp_ref.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/generate_schema_docs.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/inject_readme_graph.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/probe_closure_gap.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/scripts/probe_tier_ladder.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/__main__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/api/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/api/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/api/mcp_server.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/cli.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/core/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/core/models.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/_python_ast.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/_python_classes.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/_python_functions.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/_python_imports.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/_python_types.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/base.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/python_extractor.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/registry.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/extractors/typescript_extractor.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/axes.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/bench.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/chunked.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/chunker.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/collector.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/diff_index.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/github_poster.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/prompts.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/providers/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/recording.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/render.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/guardian/skeptic.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/pipeline.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/py.typed +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/analysis/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/analysis/analyzer.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/analysis/anomaly.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/analysis/cohesion.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/analysis/health.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/analysis/suggest_service.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/context/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/context/audit.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/context/context_service.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/context/prompt.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/context/snippet.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/_scc.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/drift.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/drift_service.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/fingerprint.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/fractal.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/ontology_init.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/quotient.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/drift/triads.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/engine.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/fqn.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/render/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/render/graph_json.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/render/mermaid.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/query/render/metrics.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/resolver/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/resolver/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/resolver/engine.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/resolver/indices.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/resolver/symbols.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/resolver/uplift.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/storage/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/src/cgis/storage/sqlite_store.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/integration/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/__init__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/conftest.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/test_architecture.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/test_drift.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/test_fractal.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/test_init_ontology_roundtrip.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/test_self_parse.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/test_self_parse_ts.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/self_parsing/test_suggest.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/.gitkeep +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test___main__.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_analyzer.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_audit.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_cli.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_cohesion.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_context_service.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_di_acceptance.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_drift.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_drift_service.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_extractor_registry.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_fqn.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_fractal.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_gen_ideal_graph.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_generate_mcp_ref.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_graph_json.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_axes.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_bench.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_calibrate.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_chunker.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_collector.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_diff_index.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_findings.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_poster.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_recording.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_render.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_guardian_review_script.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_health_scorer.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_import_acceptance.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_mcp_server.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_mermaid.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_metrics.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_models.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_ontology_compliance.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_ontology_init.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_patterns_yaml.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_pipeline.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_prompt.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_python_extractor.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_quotient.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_resolver.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_resolver_indices.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_resolver_symbols.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_snippet.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_sqlite_store.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_suggest_service.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_triads.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_typescript_extractor.py +0 -0
- {codegraph_brain-0.11.0 → codegraph_brain-0.14.0}/tests/unit/test_uplift.py +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# The review fingerprint (#375) hashes file bytes, so a checkout that stores
|
|
2
|
+
# CRLF would produce a different digest for identical code — and the measured
|
|
3
|
+
# digest would disagree with the reconstructed one on the same commit. Pinned
|
|
4
|
+
# rather than normalised at hash time, because a normaliser can only fail by
|
|
5
|
+
# merging two reviewers that differ.
|
|
6
|
+
*.py text eol=lf
|
|
@@ -115,6 +115,34 @@ jobs:
|
|
|
115
115
|
# Deliberately scoped to scripts/. src/ keeps the rule — metrics.py:70
|
|
116
116
|
# is library code and its instance deserves a real answer (#342).
|
|
117
117
|
#
|
|
118
|
+
# pythonsecurity:S2083 ("do not construct the path from user-controlled
|
|
119
|
+
# data") is exempted for scripts/ too, but for a DIFFERENT reason than
|
|
120
|
+
# S8707 above, and the difference matters. S8707's argument is that
|
|
121
|
+
# confining these tools to a root would break legitimate ad-hoc runs.
|
|
122
|
+
# S2083 was raised against backfill_review_fingerprint.py, which does
|
|
123
|
+
# the opposite: `safe_corpus_path` resolves the argument, requires a
|
|
124
|
+
# .jsonl regular file, confines it under the repository root, raises
|
|
125
|
+
# otherwise, and returns the resolved path that `backfill()` then uses
|
|
126
|
+
# for every read and write — the original argument never reaches the
|
|
127
|
+
# filesystem again (#375).
|
|
128
|
+
#
|
|
129
|
+
# The finding survived that. It was reported first at the read, then at
|
|
130
|
+
# the write, unchanged by binding the check to the value used, because
|
|
131
|
+
# SonarCloud's Python taint engine does not model `Path.resolve()` plus
|
|
132
|
+
# `is_relative_to()` as a sanitiser. The remaining report is an engine
|
|
133
|
+
# limitation, not an unvalidated path. Verified rather than assumed:
|
|
134
|
+
# main carries no open S2083, and the one S8707 left in src/ is marked
|
|
135
|
+
# FALSE-POSITIVE by a human, so neither rule has a working precedent
|
|
136
|
+
# here to copy blindly.
|
|
137
|
+
#
|
|
138
|
+
# The alternative considered and rejected was taking a bare filename
|
|
139
|
+
# and building the path from a fixed base, which the engine would
|
|
140
|
+
# accept. It makes traversal inexpressible, but it changes a documented
|
|
141
|
+
# CLI to satisfy an analyser rather than to close a hole that is
|
|
142
|
+
# already closed. If a script ever takes a path it does NOT validate,
|
|
143
|
+
# this exemption hides it — that is the cost, and it is the reason the
|
|
144
|
+
# rule stays on for src/.
|
|
145
|
+
#
|
|
118
146
|
# `sonar.newCode.referenceBranch` overrides the server-side new-code
|
|
119
147
|
# definition for this analysis. The instance default is
|
|
120
148
|
# `previous_version` (confirmed: sonar.leak.period=previous_version,
|
|
@@ -173,9 +201,11 @@ jobs:
|
|
|
173
201
|
-Dsonar.tests=tests
|
|
174
202
|
-Dsonar.python.version=3.12
|
|
175
203
|
-Dsonar.python.coverage.reportPaths=coverage.xml
|
|
176
|
-
-Dsonar.issue.ignore.multicriteria=e1,e2,e3
|
|
204
|
+
-Dsonar.issue.ignore.multicriteria=e1,e2,e3,e4
|
|
177
205
|
-Dsonar.issue.ignore.multicriteria.e1.ruleKey=pythonsecurity:S8707
|
|
178
206
|
-Dsonar.issue.ignore.multicriteria.e1.resourceKey=scripts/**/*.py
|
|
207
|
+
-Dsonar.issue.ignore.multicriteria.e4.ruleKey=pythonsecurity:S2083
|
|
208
|
+
-Dsonar.issue.ignore.multicriteria.e4.resourceKey=scripts/**/*.py
|
|
179
209
|
-Dsonar.issue.ignore.multicriteria.e2.ruleKey=githubactions:S8541
|
|
180
210
|
-Dsonar.issue.ignore.multicriteria.e2.resourceKey=.github/workflows/*.yml
|
|
181
211
|
-Dsonar.issue.ignore.multicriteria.e3.ruleKey=githubactions:S8544
|
|
@@ -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
|
|
@@ -1,5 +1,64 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.14.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.13.0...codegraph-brain-v0.14.0) (2026-08-16)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **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))
|
|
9
|
+
* **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))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* **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))
|
|
15
|
+
* **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))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Documentation
|
|
19
|
+
|
|
20
|
+
* **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))
|
|
21
|
+
* **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))
|
|
22
|
+
|
|
23
|
+
## [0.13.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.12.0...codegraph-brain-v0.13.0) (2026-08-15)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
* **guardian:** an identity for a reviewer, that a commit does not fragment ([#375](https://github.com/zaebee/codegraph-brain/issues/375)) ([#383](https://github.com/zaebee/codegraph-brain/issues/383)) ([e339a38](https://github.com/zaebee/codegraph-brain/commit/e339a38743ddfdaac1e7c8f0724281844d5a8b38))
|
|
29
|
+
|
|
30
|
+
## [0.12.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.11.0...codegraph-brain-v0.12.0) (2026-08-13)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
* **guardian:** an ablation arm, because G5 cannot separate graph from language ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#366](https://github.com/zaebee/codegraph-brain/issues/366)) ([e2374a7](https://github.com/zaebee/codegraph-brain/commit/e2374a72016413414241e71d3cc37a7ce251c590))
|
|
36
|
+
* **guardian:** bound the local finder's output, because it does not stop ([#246](https://github.com/zaebee/codegraph-brain/issues/246)) ([#381](https://github.com/zaebee/codegraph-brain/issues/381)) ([1e0b5e1](https://github.com/zaebee/codegraph-brain/commit/1e0b5e13332c697102a22838f90fed265c0fec67))
|
|
37
|
+
* **guardian:** expose judge concurrency, because Mistral needs it at 1 ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#364](https://github.com/zaebee/codegraph-brain/issues/364)) ([47392e8](https://github.com/zaebee/codegraph-brain/commit/47392e829e8653e6d145533a637342e8a46b4982))
|
|
38
|
+
* **guardian:** keep the valid prefix of a truncated finder response ([#248](https://github.com/zaebee/codegraph-brain/issues/248)) ([#377](https://github.com/zaebee/codegraph-brain/issues/377)) ([d34f01f](https://github.com/zaebee/codegraph-brain/commit/d34f01fa11208c0f8202579edc7e07dccb163ad4))
|
|
39
|
+
* **guardian:** record what the judge spent, per row ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#378](https://github.com/zaebee/codegraph-brain/issues/378)) ([c4eea31](https://github.com/zaebee/codegraph-brain/commit/c4eea31b12492d90dafb92b3afacfbe9a942bab5))
|
|
40
|
+
* **guardian:** refuse a review of a truncated prompt, and supply the missing visitor ([#248](https://github.com/zaebee/codegraph-brain/issues/248)) ([#371](https://github.com/zaebee/codegraph-brain/issues/371)) ([5f3e9b7](https://github.com/zaebee/codegraph-brain/commit/5f3e9b73bcc36aabe64d634e4aa95ea0f5bd7fb7))
|
|
41
|
+
* **guardian:** review --slice, so the registered population is a command ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#373](https://github.com/zaebee/codegraph-brain/issues/373)) ([4d1fe6a](https://github.com/zaebee/codegraph-brain/commit/4d1fe6a8073641cdd46a9d9af24a3c31abd70764))
|
|
42
|
+
* **guardian:** sampling reaches Ollama, instead of the chat template deciding ([#246](https://github.com/zaebee/codegraph-brain/issues/246)) ([#380](https://github.com/zaebee/codegraph-brain/issues/380)) ([14cb966](https://github.com/zaebee/codegraph-brain/commit/14cb9664f200aa9507f1f364f72dfb0de0981259))
|
|
43
|
+
* **guardian:** send the registered temperature, and survive a 429 ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#372](https://github.com/zaebee/codegraph-brain/issues/372)) ([3d7efd8](https://github.com/zaebee/codegraph-brain/commit/3d7efd82efe750283a43eb0d5cb7941f7f67ddd1))
|
|
44
|
+
* **guardian:** the union arm scores offline, and a unit bug made G8 unfailable ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#370](https://github.com/zaebee/codegraph-brain/issues/370)) ([dd290fe](https://github.com/zaebee/codegraph-brain/commit/dd290fef986ad0dcf0b62da9fa2824e0ace1b90d))
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### Bug Fixes
|
|
48
|
+
|
|
49
|
+
* **guardian:** a dead judge is not a reviewer that found nothing ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#376](https://github.com/zaebee/codegraph-brain/issues/376)) ([2772c30](https://github.com/zaebee/codegraph-brain/commit/2772c305e9d7ca70c31bdfc2b12297392768330c))
|
|
50
|
+
* **guardian:** a truncated review is not a review that found nothing ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#374](https://github.com/zaebee/codegraph-brain/issues/374)) ([9f86bb6](https://github.com/zaebee/codegraph-brain/commit/9f86bb63e297e2b8bdda6bf6214e5d1e1bbd9339))
|
|
51
|
+
* **guardian:** the ablation must skip PRs with no graph to remove ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#367](https://github.com/zaebee/codegraph-brain/issues/367)) ([f9c36f5](https://github.com/zaebee/codegraph-brain/commit/f9c36f5cae503d83002ad03957eb7bf0cf31d263))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### Documentation
|
|
55
|
+
|
|
56
|
+
* **guardian:** bench a local model in a notebook, and retire a wrong lever ([#246](https://github.com/zaebee/codegraph-brain/issues/246)) ([#379](https://github.com/zaebee/codegraph-brain/issues/379)) ([419fcc1](https://github.com/zaebee/codegraph-brain/commit/419fcc1eb28fddd9a2c0cef814480d861e6d8c88))
|
|
57
|
+
* **spec:** Phase 2 results — G5 fails at +9.5 pp against a 10 pp gate ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#362](https://github.com/zaebee/codegraph-brain/issues/362)) ([9481a54](https://github.com/zaebee/codegraph-brain/commit/9481a54c02b60786e14e6317d3a71c8a4cee12a0))
|
|
58
|
+
* **spec:** Phase 3 registers the union arm, and the pilot says it is marginal ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#369](https://github.com/zaebee/codegraph-brain/issues/369)) ([bc9caf4](https://github.com/zaebee/codegraph-brain/commit/bc9caf43c16a2ce27a0075b14eb0766569ae8c2d))
|
|
59
|
+
* **spec:** R5 — the noise floor equals the effect, so Phase 2 cannot answer its question ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#368](https://github.com/zaebee/codegraph-brain/issues/368)) ([8540bf1](https://github.com/zaebee/codegraph-brain/commit/8540bf1178a8535849bdd2fadfa5473f42040eb8))
|
|
60
|
+
* **spec:** second judge — G5 fails under both, and the row becomes publishable ([#342](https://github.com/zaebee/codegraph-brain/issues/342)) ([#365](https://github.com/zaebee/codegraph-brain/issues/365)) ([62c49e4](https://github.com/zaebee/codegraph-brain/commit/62c49e4b36c0950df0c10cce26c09418674130eb))
|
|
61
|
+
|
|
3
62
|
## [0.11.0](https://github.com/zaebee/codegraph-brain/compare/codegraph-brain-v0.10.0...codegraph-brain-v0.11.0) (2026-08-12)
|
|
4
63
|
|
|
5
64
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: codegraph-brain
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.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
|
|
@@ -169,6 +169,8 @@ GUARDIAN_PROVIDER=ollama GUARDIAN_MODEL=qwen2.5-coder:14b \
|
|
|
169
169
|
uv run python scripts/guardian_review.py --pr 123 --db graph.db --inline
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
+
No GPU on hand? **[Benchmark it on a notebook GPU →](docs/GUARDIAN_LOCAL_BENCH.md)** — free end to end, since the fixtures score without an LLM judge. Or **[point Guardian at a remote Ollama →](docs/GUARDIAN_REMOTE_OLLAMA.md)** — over an frp stcp tunnel, no public port, and a guard that refuses a review of a silently truncated prompt.
|
|
173
|
+
|
|
172
174
|
---
|
|
173
175
|
|
|
174
176
|
## 📈 Proof at Real Scale
|
|
@@ -119,6 +119,8 @@ GUARDIAN_PROVIDER=ollama GUARDIAN_MODEL=qwen2.5-coder:14b \
|
|
|
119
119
|
uv run python scripts/guardian_review.py --pr 123 --db graph.db --inline
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
+
No GPU on hand? **[Benchmark it on a notebook GPU →](docs/GUARDIAN_LOCAL_BENCH.md)** — free end to end, since the fixtures score without an LLM judge. Or **[point Guardian at a remote Ollama →](docs/GUARDIAN_REMOTE_OLLAMA.md)** — over an frp stcp tunnel, no public port, and a guard that refuses a review of a silently truncated prompt.
|
|
123
|
+
|
|
122
124
|
---
|
|
123
125
|
|
|
124
126
|
## 📈 Proof at Real Scale
|
|
@@ -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
|