Skip to content

Commit e366db8

Browse files
tirth8205claude
andauthored
chore: release v2.3.0 (#229)
Additive feature release on top of v2.2.4 — new languages, new platform, new env vars, new MCP tool parameters. No breaking changes. New: - #112 Elixir parser (.ex/.exs) — modules, def/defp/defmacro, alias/import/require/use, internal call resolution - #88 Objective-C parser (.m) — @interface/@implementation, message expressions, C-style main, #import - #197 Bash/Shell parser (.sh/.bash/.zsh) — functions, commands, source imports with path resolution - #83 Qwen Code as a supported MCP install platform - #176 apply_refactor_tool dry-run mode (returns unified diffs without writing, keeps refactor_id valid for follow-up) - #155 CRG_DATA_DIR / CRG_REPO_ROOT env vars for out-of-tree graph storage and scripting from outside the repo - #173 install preview + --no-instructions + -y/--yes (supersedes closed PR #204) - #174 cloud embeddings stderr warning + CRG_ACCEPT_CLOUD_EMBEDDINGS opt-out (supersedes closed PR #179) Fixed: - Multi-edit refactor correctness bug (same-file edits could stomp each other) Docs: - TROUBLESHOOTING.md quick-reference section for the 4 most common support questions (hooks schema error, command not found, scoping, "built but not visible") Verified locally on Python 3.11: - ruff clean, mypy clean, bandit clean - 735 tests pass (+18 vs v2.2.4), coverage 74.63% - 6-repo smoke test still passes end-to-end on express/fastapi/flask/ gin/httpx/next.js Supersedes closed PRs: - #204 (install preview, credit @lngyeen) - #207 (CRG_DATA_DIR, credit @yashmewada9618) - #179 (cloud embeddings warning, credit @Bakul2006) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 3288f59 commit e366db8

3 files changed

Lines changed: 50 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,54 @@
22

33
## [Unreleased]
44

5+
## [2.3.0] - 2026-04-11
6+
7+
Additive feature release — new language parsers, new platform install target, MCP tool UX improvements, and out-of-tree graph storage. No breaking changes from v2.2.4.
8+
9+
### Added
10+
11+
- **Elixir parser** (PR #228, closes #112): `.ex` and `.exs` files now produce modules as Class nodes, `def`/`defp`/`defmacro`/`defmacrop` as Function/Test nodes attached to their enclosing module, `alias`/`import`/`require`/`use` as `IMPORTS_FROM` edges, and everything else as `CALLS` edges. Internal call resolution walks into `do_block` bodies so `MathHelpers.double` correctly resolves its call to `Calculator.compute`.
12+
- **Objective-C parser** (PR #227, closes #88): `.m` files parse classes (`@interface`, `@implementation`, `@protocol`), instance and class methods, `[receiver message:args]` message expressions, C-style `main()`, and `#import`/`#include`. Multi-part selectors like `add:to:` keep `add` as the canonical method name.
13+
- **Bash/Shell parser** (PR #227, closes #197): `.sh`, `.bash`, and `.zsh` files parse functions, `command` invocations as `CALLS`, and `source path` / `. path` as `IMPORTS_FROM` edges with path resolution when the target file exists.
14+
- **Qwen Code as a supported MCP install platform** (PR #227, closes #83): `code-review-graph install --platform qwen` writes a merged `~/.qwen/settings.json` using the same `mcpServers` schema as Cursor/Windsurf — it does not clobber existing Qwen config.
15+
- **`apply_refactor_tool` dry-run mode** (PR #228, closes #176): new `dry_run: bool = False` parameter on the MCP tool and underlying `apply_refactor()` function. When true, returns a unified diff per file without touching disk and leaves the `refactor_id` valid for a follow-up real apply. Multi-edit files now apply sequentially against updated content in both modes (fixes a subtle bug where separate edits on the same file could stomp each other).
16+
- **`CRG_DATA_DIR` environment variable** (PR #228, closes #155): when set, replaces the default `<repo>/.code-review-graph` directory verbatim. Useful for ephemeral workspaces, Docker volumes, shared CI caches, and multi-repo orchestrators. Supported by the CLI, MCP tools, and the registry.
17+
- **`CRG_REPO_ROOT` environment variable** (PR #228, closes #155): `find_project_root()` now checks `CRG_REPO_ROOT` before the usual git-root walk — useful for anyone scripting the CLI from a cwd outside the target repo.
18+
- **`install --no-instructions` and `-y`/`--yes` flags** (PR #228, closes #173): new flags on `code-review-graph install` to opt out of the `CLAUDE.md`/`AGENTS.md`/`.cursorrules`/`.windsurfrules` injection entirely (`--no-instructions`) or auto-confirm it without an interactive prompt (`-y`/`--yes`). The CLI also now prints the list of files it will touch before writing, so even without `--dry-run` users see what's coming.
19+
- **Cloud embeddings stderr warning** (PR #228, closes #174): `get_provider()` now prints an explicit warning to stderr before returning a Google Gemini or MiniMax provider, explaining that source code will be sent to an external API. `CRG_ACCEPT_CLOUD_EMBEDDINGS=1` suppresses the warning for scripted workflows. The warning is on stderr only — it never writes to stdout or reads from stdin, so the MCP stdio transport remains uncorrupted.
20+
- **TROUBLESHOOTING quick-reference** (PR #228): new top section in `docs/TROUBLESHOOTING.md` covering the four most common support questions — hook schema errors, `command not found` after pip install, project-vs-user scoping, and "built the graph but Claude Code doesn't see it".
21+
22+
### Fixed
23+
24+
- **Multi-edit refactor correctness** (PR #228): when a single `apply_refactor` call had multiple edits targeting the same file, the previous implementation re-read the file once per edit and could silently stomp earlier changes. The plan-computation step now groups edits by file and applies them sequentially against the updated content; this fix applies to both the real-write and the new dry-run path.
25+
26+
### Changed
27+
28+
- `install` and `init` commands now preview instruction-file targets before writing (no-op if nothing would change). This is always-on and does not require `--dry-run`.
29+
- Default embedding path remains fully local (`sentence-transformers`); no behavior change unless you explicitly opt in to a cloud provider.
30+
31+
### Deprecated
32+
33+
Nothing.
34+
35+
### Security
36+
37+
- The cloud-embedding stderr warning (#174) is a privacy improvement; it does not change the behavior of offline local embeddings, which remain the default.
38+
39+
### Upgrade notes
40+
41+
- Nothing to do beyond `uvx --reinstall code-review-graph` or `pip install -U code-review-graph`. If you're coming from v2.2.2 or earlier, re-run `code-review-graph install` once to pick up the v2.2.3 hook schema rewrite.
42+
- `CRG_DATA_DIR` is optional — if you don't set it, graphs continue to live at `<repo>/.code-review-graph` as before.
43+
- VS Code extension v0.2.2 (from v2.2.4) still needs to be **repackaged and republished** separately; the PyPI `publish.yml` workflow does not cover it.
44+
45+
### Superseded PRs
46+
47+
- PR #204 (install preview, @lngyeen) — reimplemented cleanly in #228 with `isatty()`-guarded confirmation.
48+
- PR #207 (`CRG_DATA_DIR`/`CRG_REPO_ROOT`, @yashmewada9618) — reimplemented cleanly in #228 without `input()`-on-stdio and `mcp._local_only` fragility.
49+
- PR #179 (cloud embeddings warning, @Bakul2006) — reimplemented cleanly in #228 with stderr-only messaging and no stdio reads.
50+
51+
Credit to @lngyeen, @yashmewada9618, and @Bakul2006 for the original designs.
52+
553
## [2.2.4] - 2026-04-11
654

755
Ships the 11 bugs from PR #222 plus the `v2.2.3.1` smoke-test hotfixes, for users upgrading directly from `v2.2.3` or earlier.

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.2.4"
7+
version = "2.3.0"
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)