Skip to content

Commit 52cf3bc

Browse files
tirth8205claude
andcommitted
chore: release v2.3.3
Large additive release accumulated since v2.3.2 — 141 non-merge commits. Highlights: - Languages: Nix, Verilog/SystemVerilog, SQL, ReScript, GDScript; .hh and .ksh extensions; Julia parametric ctors / @enum / public. - Platforms: GitHub Copilot, Gemini CLI, Qoder, OpenCode, Cursor hooks; native Codex install alignment. - Framework call resolvers: Spring DI (INJECTS edges), Temporal, Kafka (CONSUMES/PRODUCES), Jedi-based Python, Python callback REFERENCES edges, Mocha TDD suite(), Bun test, __tests__/ dir. - MCP server: streamable HTTP transport, --tools / CRG_TOOLS filter, external DB dir for network filesystems, crg-daemon multi-repo watcher. - Embeddings: OpenAI-compatible provider with configurable batch. - VS Code extension: WCAG 2.1 AA contrast, distinct d3.symbol shapes, full keyboard nav, ARIA roles, help overlay, GitHub Dark palette. - Windows: stdio thread-pool selection, stdin=DEVNULL on git/svn, encoding="utf-8" on subprocess.run, FastMCP banner suppression. - Fixed: C++ scoped/destructor/operator method names, Java method/superclass/import resolution, PHP CALL extraction, module-scope CALLS, hooks JSON schema and merge-not-overwrite, SQLite transaction safety + FTS5 sync, fastmcp>=3 compatibility. - Fixed __version__ stuck at 2.1.0 since v2.1.0 — User-Agent on cloud embedding HTTP was mis-attributing every release until now. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent d644410 commit 52cf3bc

4 files changed

Lines changed: 143 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 140 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,149 @@
22

33
## [Unreleased]
44

5+
## [2.3.3] - 2026-05-08
6+
7+
Large additive release accumulated since v2.3.2 — 141 non-merge commits, 8 new languages/extensions, 5 new platform install targets, 6 new framework call resolvers, comprehensive Windows hardening, VS Code accessibility pass, and a full sweep of community PRs.
8+
59
### Added
610

11+
#### Languages and extensions
12+
713
- **Nix support** (flake-aware): `.nix` files are parsed via the `nix` tree-sitter grammar shipped with `tree-sitter-language-pack`. Top-level and nested attrset bindings become `Function` nodes with flattened dotted names (e.g. `packages.default`, `devShells.default`). In `flake.nix`, `inputs.<name>.url = "..."` strings emit `IMPORTS_FROM` edges to the URL; `import <path>` and `callPackage <path> <args>` applications in any `.nix` file emit `IMPORTS_FROM` edges (relative paths are resolved against the caller's directory). Adds 7 tests (`TestNixParsing`) and fixtures `tests/fixtures/sample.nix`, `tests/fixtures/sample_module.nix`.
8-
- **GDScript support** (Godot): `.gd` files are parsed via the `gdscript` tree-sitter grammar shipped with `tree-sitter-language-pack`. Extracts inner classes (`class Name:`), the file-level `class_name` identity, functions (including `static func`), `extends` parent class as an IMPORTS_FROM edge, direct calls (`call`) and method calls (`attribute_call`). Adds 10 tests and `tests/fixtures/sample.gd`.
14+
- **GDScript support** (Godot, PR #316): `.gd` files are parsed via the `gdscript` tree-sitter grammar. Extracts inner classes (`class Name:`), the file-level `class_name` identity, functions (including `static func`), `extends` parent class as an IMPORTS_FROM edge, direct calls and method calls. Adds 10 tests and `tests/fixtures/sample.gd`.
15+
- **Verilog / SystemVerilog support** (PR #428): `.v`, `.sv`, `.svh` files parse modules, classes, packages, interfaces, programs, functions, and tasks via the `verilog` tree-sitter grammar. Per-construct extractors with dedicated unit tests.
16+
- **SQL support** (PR #398): `.sql` files parse `CREATE FUNCTION`, `CREATE PROCEDURE`, `CREATE TABLE`, and `CREATE VIEW` statements; emits CALLS edges for function invocations.
17+
- **ReScript support** (PR #309/323): `.res`/`.resi` parsing for modules, let-bindings, and external declarations.
18+
- **`.hh` extension support**: C++ header variants now resolve into the C++ parser path.
19+
- **`.ksh` extension and shebang-based detection** (PR #276): `.ksh` files parsed as shell; extension-less scripts detected via `#!/usr/bin/env <lang>` shebang lines.
20+
- **Julia improvements**: parametric constructors, `@enum` declarations, and `public` module exports now produce graph nodes.
21+
22+
#### Platforms and install targets
23+
24+
- **GitHub Copilot platform support** (PR #445): `code-review-graph install --platform copilot` writes Copilot-CLI-compatible MCP config without generating Claude-specific skill artifacts.
25+
- **Gemini CLI platform support** (PR #391): `--platform gemini-cli` skips Claude skills and writes Gemini-native MCP config.
26+
- **Qoder platform support** (PR #245): `--platform qoder` adds MCP server registration for Qoder.
27+
- **OpenCode plugin support** (PR #198 via #366): `--platform opencode` registers the MCP server with the OpenCode plugin manifest.
28+
- **Cursor hooks support** (PR #196): `install` now writes Cursor hook entries (gated behind `~/.cursor` detection so non-Cursor users are not affected).
29+
- **Codex install alignment**: native Codex integration path; no Claude skill files generated for Codex targets.
30+
31+
#### MCP server and CLI features
32+
33+
- **`crg-daemon`**: new multi-repo watch daemon that supervises per-repo file watchers via `subprocess.Popen` child processes. Documented in README, COMMANDS.md, and ROADMAP.md. 35 dedicated tests.
34+
- **Streamable HTTP transport** (PR #277): MCP server can now run over streamable HTTP in addition to stdio.
35+
- **`serve --tools` flag and `CRG_TOOLS` env var**: MCP tool filtering at startup so callers can expose only the subset they need.
36+
- **`--repo` precedence and validation in `get_docs_section`** (PR #378): honors `serve --repo` and validates path containment before returning section content.
37+
- **Search enrichment via PreToolUse hooks** (PR #248): hook-driven search index enrichment ahead of tool calls.
38+
- **External database directory support**: graph DB can now live on a network filesystem via the existing `CRG_DATA_DIR` mechanism, with the file locking path adjusted accordingly.
39+
- **SVN support** (PR #255): basic Subversion working-copy detection alongside git for change analysis.
40+
41+
#### Parser and resolver improvements
42+
43+
- **Spring DI call resolution** (PR #413): receiver method calls (`this.userService.find(...)`) resolve through `@Autowired`/constructor-injected fields to the concrete `InjectedType.method`. Emits `INJECTS` edges and stereotype metadata (`@Service`, `@Component`, `@Repository`, `@Controller`); writes fully-qualified `target_qualified` so `callers_of` queries work.
44+
- **Temporal workflow/activity call resolution**: `WorkflowStub.start(...)` and `ActivityStub.execute(...)` resolve to their concrete workflow/activity implementations.
45+
- **Kafka consumer/producer detection**: `@KafkaListener`-annotated methods and `KafkaTemplate.send(...)` calls emit `CONSUMES` and `PRODUCES` edges keyed on topic.
46+
- **Jedi-based Python call resolution** (PR #247): improved cross-file Python call resolution using the Jedi static-analysis library.
47+
- **Python callback REFERENCES edges** (PR #363): function names passed as callback arguments (`schedule(my_handler)`) now emit `REFERENCES` edges instead of being dropped.
48+
- **Mocha TDD `suite()` recognition** (PR #423): files using Mocha's TDD interface now classify as tests.
49+
- **Bun test runtime support** (PR #421): files importing `bun:test` are detected as tests.
50+
- **`__tests__/` directory detection** (PR #422): all files under `__tests__/` are classified as test files regardless of name.
51+
52+
#### Embeddings
53+
54+
- **OpenAI-compatible embedding provider** (PR #321): pluggable provider supporting OpenAI, Azure OpenAI, and any OpenAI-API-compatible endpoint, with configurable batch size.
55+
- **Localized embedding READMEs**: provider docs translated for non-English users.
56+
57+
#### Visualization, accessibility, and VS Code extension
58+
59+
- **WCAG 2.1 AA contrast pass**: 4.5:1 minimum text contrast across the standalone HTML and VS Code webview.
60+
- **Distinct `d3.symbol` shapes per node kind**: colorblind-friendly differentiation in both the standalone visualization and the VS Code webview.
61+
- **Keyboard navigation**: tab/arrow/enter/escape navigation across nodes, with focus styles and a skip-link to bypass the legend.
62+
- **ARIA roles and labels**: tooltip, detail panel, legend, search results, communities button, edge-pill keyboard activation, search input label.
63+
- **Help overlay**: interaction guide for both the standalone HTML and the keyboard-help overlay.
64+
- **Empty-state webview** in VS Code with a contextual depth slider and tooltip.
65+
- **Edge filter popover** in the VS Code toolbar — fixes density on narrow panels.
66+
- **Detail panel relocated to the left** so it no longer occludes top controls; close button restyled to match the toolbar.
67+
- **CONTAINS edge opacity** raised from 0.08 → 0.14 for visibility on dense graphs.
68+
- **GitHub Dark palette** unified across the VS Code extension.
69+
- **`IMPLEMENTS`, `TESTED_BY`, `DEPENDS_ON` edge types** rendered in the standalone HTML visualization.
70+
71+
### Fixed
72+
73+
#### `__version__` reporting
74+
75+
- **`code_review_graph.__version__` now matches `pyproject.toml`** (was `2.1.0` since the v2.1.0 release). The User-Agent header that `embeddings.py` sends on cloud HTTP requests is built from this string, so cloud-embedding traffic was being mis-attributed across all releases between v2.1.0 and v2.3.2.
76+
77+
#### C++ / Java / PHP parsing
78+
79+
- **C++ scoped/destructor/operator method names** (PR #371, PR #403): `void Foo::bar()`, `Foo::~Foo()`, `Foo::operator==(...)` now extract the correct member name instead of the qualifier or the operator token.
80+
- **Java method name extraction** (PR #275): method names are now read from the `identifier` child of `method_declaration` rather than the return-type child (which was producing names like `int64`).
81+
- **Java superclass / super-interfaces** (PR #278): `extends Foo` and `implements Bar, Baz` now extract bare type names from the `superclass`/`super_interfaces` AST nodes.
82+
- **Java import resolution to file paths** (PR #280): `import com.example.foo.Bar` resolves through `src/main/java/...` and configured source roots to the actual file.
83+
- **PHP `CALL` extraction** (PR #298): method calls (`$obj->foo()`), static calls (`Foo::bar()`), and unqualified function calls now produce CALLS edges.
84+
- **Module-scope `CALLS` edges** (PR #285): top-level executable statements emit CALLS edges (previously only function/method bodies did).
85+
86+
#### Windows
87+
88+
- **Windows MCP stdio hang on long-running tools** (PR #400, PR #292): thread-pool selection now auto-selects on Windows MCP stdio so build/embed do not deadlock.
89+
- **Windows MCP stdin hang** (PR #425): all `git`/`svn` subprocesses now run with `stdin=DEVNULL`, preventing the FastMCP-stdio buffer from filling on Windows.
90+
- **Windows non-UTF-8 locale**: `subprocess.run` calls now pass `encoding="utf-8"` so cp1252 hosts no longer mis-decode git output.
91+
- **Windows test failures** (PR #274): UTF-8 encoding, CRLF normalization, and `stop_at` boundary handling fixes for Windows CI.
92+
93+
#### Hooks and install
94+
95+
- **Hooks JSON schema** (PR #288): `hooks.json` validation no longer fails on the wrapper layout — `matcher` is required and the wrapper is removed.
96+
- **Hooks merge instead of overwrite** (PR #114, PR #145, PR #203): `install_hooks` now merges into existing hook arrays and creates a `settings.json.bak` backup before modifying user config.
97+
- **Pre-commit hook adds `update` command** (PR #315): generated pre-commit hook runs `code-review-graph update` rather than the obsolete subcommand.
98+
- **Skip hooks gracefully outside git** (PR #293): `install` no longer fails when invoked from a non-git directory.
99+
- **Poetry / uv environment detection** (PR #287): `install` now generates the correct MCP serve command for projects using Poetry or uv.
100+
- **Hook quoting and `docs` repo_root** (PR #192): hook commands now quote repo paths with spaces, and the docs repo path is restored on install.
101+
102+
#### MCP server
103+
104+
- **fastmcp 3.x compatibility**: `_apply_tool_filter` restored on fastmcp ≥3, dependency floor bumped to `fastmcp>=3.2.4` to pick up the upstream Windows stdio EOF fixes.
105+
- **FastMCP banner suppressed for stdio transport** (PR #290): the startup banner no longer corrupts the stdio handshake.
106+
- **MCP config `cwd`, skills path, and JSONC parsing**: install now writes `cwd` into MCP config, points skills at the correct project path, and tolerates JSONC (comments + trailing commas) in existing config files.
107+
108+
#### SQLite and post-processing
109+
110+
- **SQLite transaction safety, FTS5 sync, and atomic operations** (PR #94, PR #279): nested-transaction handling, FTS5 content-table synchronization, and resource cleanup on error paths.
111+
- **CLI build/update/watch run post-processing** (PR #98): signatures, FTS, flows, and communities are now refreshed after every CLI graph mutation (was previously only refreshed by the MCP server).
112+
- **`reconcile()` auto-builds graphs and registers new repos**: cold-start path no longer requires a manual `build` before `reconcile`.
113+
- **Flow trace adjacency in-memory** (PR #296): `trace_flows` loads adjacency once instead of querying SQLite per hop.
114+
115+
#### Other
116+
117+
- **`UnicodeDecodeError` in `read_text`** (PR #303): all text reads now use `errors="replace"`.
118+
- **Dead-code callback references** (PR #424): functions referenced as callbacks no longer mis-classify as dead code.
119+
- **Skills.py table formatting** (PR #302).
120+
- **Search.py duplicate logger** removed.
121+
- **`status` command reports alive/dead** from the persisted state file.
122+
123+
### Security
124+
125+
- **Embeddings RCE hardening** (PR #397): remote code execution paths in the embedding provider are gated behind an explicit env var; cloud HTTP requests now send a versioned User-Agent (PR #390) and refuse to mix indexes built with different providers.
126+
127+
### Documentation
128+
129+
- **MCP tools documentation** (PR #306): catalog of all MCP tools with usage examples.
130+
- **venv usage guide** (PR #307).
131+
- **Windows setup guide** for Claude Code MCP integration.
132+
- **pipx / PyPI failure troubleshooting** with a `diagnose_pypi_connectivity.py` diagnostic script.
133+
- **MseeP.ai badge** added to README (PR #399).
134+
135+
### Maintenance
136+
137+
- **Beads (`bd`) issue tracking** initialized for the project (`bd prime` for workflow context).
138+
- **iCloud sync duplicate files** removed from the working tree.
139+
- **Working spec docs** moved out of git (already in `.gitignore`).
140+
- **CI lint and test failures** swept across multiple merged PRs.
141+
142+
### Upgrade notes
143+
144+
- `uvx --reinstall code-review-graph` or `pip install -U code-review-graph`.
145+
- Re-run `code-review-graph install` once after upgrading to pick up the JSONC-tolerant config writer and the corrected `cwd` / skills path in `.mcp.json`.
146+
- The `__version__` fix changes the User-Agent string emitted by cloud embedding providers from `code-review-graph/2.1.0` to `code-review-graph/2.3.3`. Anyone allow-listing the old User-Agent on a proxy needs to update their rule.
147+
- VS Code extension still ships separately — repackage and republish the `.vsix` if you want the v2.3.3 a11y improvements in the Marketplace build.
9148

10149
## [2.3.2] - 2026-04-14
11150

code_review_graph/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Code Review Graph - MCP server for persistent incremental code knowledge graphs."""
22

3-
__version__ = "2.1.0"
3+
__version__ = "2.3.3"

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "code-review-graph"
7-
version = "2.3.2"
7+
version = "2.3.3"
88
description = "Persistent incremental knowledge graph for token-efficient, context-aware code reviews with Claude Code"
99
readme = {file = "README.md", content-type = "text/markdown"}
1010
license = "MIT"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)