|
17 | 17 |
|
18 | 18 | ### Added |
19 | 19 | - **Codex platform install support** (PR #177): `code-review-graph install --platform codex` appends a `mcp_servers.code-review-graph` section to `~/.codex/config.toml` without overwriting existing Codex settings. |
20 | | -- **Luau language support** (PR #165, closes #153): Roblox Luau (`.luau`) parsing — functions, classes, local functions, requires, tests. |
| 20 | +- **Luau language support** (PR #165, closes #153): Roblox Luau (`.luau`) parsing -- functions, classes, local functions, requires, tests. |
21 | 21 | - **REFERENCES edge type** (PR #217): New edge kind for symbol references that aren't direct calls (map/dispatch lookups, string-keyed handlers), including Python and TypeScript patterns. |
22 | 22 | - **`recurse_submodules` build option** (PR #215): Build/update can now optionally recurse into git submodules. |
23 | 23 | - **`.gitignore` default for `.code-review-graph/`** (PR #185): Fresh installs automatically add the SQLite DB directory to `.gitignore` so the database isn't accidentally committed. |
24 | 24 | - **Clearer gitignore docs** (PR #171, closes #157): Documentation now spells out that `code-review-graph` already respects `.gitignore` via `git ls-files`. |
| 25 | +- **Parser refactoring**: Extracted 16 per-language handler modules into `code_review_graph/lang/` package using a strategy pattern, replacing monolithic conditionals in `parser.py` |
| 26 | +- **Jedi-based call resolution**: New `jedi_resolver.py` module resolves Python method calls at build time via Jedi static analysis, with pre-scan filtering by project function names (36s to 3s on large repos) |
| 27 | +- **PreToolUse search enrichment**: New `enrich.py` module and `code-review-graph enrich` CLI command inject graph context (callers, callees, flows, community, tests) into agent search results passively |
| 28 | +- **Typed variable call enrichment**: Track constructor-based type inference and instance method calls for Python, JS/TS, and Kotlin/Java |
| 29 | +- **Star import resolution**: Resolve `from module import *` by scanning target module's exported names |
| 30 | +- **Namespace imports**: Track `import * as X from 'module'` and CommonJS `require()` patterns |
| 31 | +- **Angular template parsing**: Extract call targets from Angular component templates |
| 32 | +- **JSX handler tracking**: Detect function/class references passed as JSX event handler props |
| 33 | +- **Framework decorator recognition**: Identify entry points decorated with `@app.route`, `@router.get`, `@cli.command`, etc., reducing dead code false positives |
| 34 | +- **Module-level import tracking**: Track module-qualified call resolution (`module.function()`) |
| 35 | +- **Thread safety**: Double-check locking on parser caches (`_type_sets`, `_get_parser`, `_resolve_module_to_file`, `_get_exported_names`) |
| 36 | +- **Batch file storage**: `store_file_batch()` groups file insertions into 50-file transactions for faster builds |
| 37 | +- **Bulk node loading**: `get_all_nodes()` replaces per-file SQL queries for community detection |
| 38 | +- **Adjacency-indexed cohesion**: Community cohesion computed in O(community-edges) instead of O(all-edges), yielding 21x speedup (48.6s to 2.3s on 41k-node repos) |
| 39 | +- **Phase timing instrumentation**: `time.perf_counter()` timing at INFO level for all build phases |
| 40 | +- **Batch risk_index**: 2 GROUP BY queries replace per-node COUNT loops in risk scoring |
| 41 | +- **Weighted flow risk scoring**: Risk scores weighted by flow criticality instead of flat edge counts |
| 42 | +- **Transitive TESTED_BY lookup**: `tests_for` and risk scoring follow transitive test relationships |
| 43 | +- **DB schema v8**: Composite edge index for upsert performance (v7 reserved by upstream PR #127) |
| 44 | +- **`--quiet` and `--json` CLI flags**: Machine-readable output for `build`, `update`, `status` |
| 45 | +- **829+ tests** across 26 test files (up from 615), including `test_pain_points.py` (1,587 lines TDD suite), `test_hardened.py` (467 lines), `test_enrich.py` (237 lines) |
| 46 | +- **14 new test fixtures**: Kotlin, Java, TypeScript, JSX, Python resolution scenarios |
25 | 47 |
|
26 | 48 | ### Changed |
27 | | -- Community detection is now bounded — large repos complete in reasonable time instead of hanging indefinitely. |
| 49 | +- Community detection is now bounded -- large repos complete in reasonable time instead of hanging indefinitely. |
| 50 | +- New `[enrichment]` optional dependency group for Jedi-based Python call resolution |
| 51 | +- Leiden community detection scales resolution parameter with graph size |
| 52 | +- Adaptive directory-based fallback for community detection when Leiden produces poor clusters |
| 53 | +- Search query deduplication and test function deprioritization |
| 54 | + |
| 55 | +### Fixed |
| 56 | +- **Dead code false positives**: Decorators, CDK construct methods, abstract overrides, and overriding methods with called parents no longer flagged as dead |
| 57 | +- **E2e test exclusion**: Playwright/Cypress e2e test directories excluded from dead code detection |
| 58 | +- **Unique-name plausible caller optimization**: Faster dead code analysis via pre-filtered candidate sets |
| 59 | +- **Store cache liveness check**: Cached SQLite connections verified as alive before reuse |
| 60 | + |
| 61 | +### Performance |
| 62 | +- **Community detection**: 48.6s to 2.3s (21x) on Gadgetbridge (41k nodes, 280k edges) |
| 63 | +- **Jedi enrichment**: 36s to 3s (12x) via pre-scan filtering by project function names |
28 | 64 |
|
29 | 65 | ## [2.2.2] - 2026-04-08 |
30 | 66 |
|
|
0 commit comments