Skip to content

Releases: optave/codegraph

Dev build 3.3.2-dev.35

24 Mar 09:15
d42798f

Choose a tag to compare

Pre-release

Dev build from commit d42798ffda26b7e6bf95d8067f39d9926fa8eb25 on main.

Dev build 3.3.2-dev.32

24 Mar 08:03
5a97a72

Choose a tag to compare

Pre-release

Dev build from commit 5a97a7276de65145ac036168e5814fdef4480591 on main.

Dev build 3.3.2-dev.31

24 Mar 06:34
f14e7f3

Choose a tag to compare

Pre-release

Dev build from commit f14e7f35656078dbaa4c486af26562494cf53ade on main.

Dev build 3.3.2-dev.30

24 Mar 06:13
b4f8010

Choose a tag to compare

Pre-release

Dev build from commit b4f8010d98ef7186e67744b3a1abe261149b167f on main.

Dev build 3.3.2-dev.29

24 Mar 05:31
f6c80ac

Choose a tag to compare

Pre-release

Dev build from commit f6c80acf50e0df081dfd65aabeafb3a58cd0c9d5 on main.

v3.3.1

20 Mar 07:51
45585a9

Choose a tag to compare

Incremental rebuild accuracy and post-3.3.0 stabilization. This patch fixes a critical edge gap in the file watcher's single-file rebuild path where call edges were silently dropped during incremental rebuilds, aligns the native Rust engine's edge builder kind filters with the JS engine for parity, plugs a WASM tree memory leak in native engine typeMap backfill, and restores query performance to pre-3.1.4 levels. Several post-reorganization import path issues are also corrected.

Bug Fixes

  • watcher: close edge gap in single-file rebuild — incremental rebuilds now correctly preserve call edges by coercing native typeMap arrays to Maps and rebuilding edges for reverse-dependency files (#533, #542)
  • native: align edge builder kind filters with JS engine parity — ensures native and WASM engines produce identical edge sets (#541)
  • native: free leaked WASM trees in native engine typeMap backfill (#534)
  • cli: correct ast command import path after src/ reorganization (#532)
  • benchmarks: stabilize benchmark targets across engines and preserve README links (#527)
  • benchmarks: update benchmark script import paths after src/ restructure (#521)
  • ci: sync Cargo.toml version before native binary build (#538)

Performance

  • queries: reduce query latency regression from 3.1.4 to 3.3.0 — cached prepared statements for findReverseDeps and deleteOutgoingEdges (#528)

Tests

  • watcher: incremental edge parity CI check — ensures watcher rebuilds produce identical edge sets to full builds (#539)

Chores

  • ci: add dynamic import verification to catch stale paths (#540)

3.3.0 (2026-03-19)

Resolution accuracy reaches a new level. This release delivers Phase 4 resolution improvements — type inference across all typed languages, receiver type tracking with graded confidence, package.json exports field resolution, and monorepo workspace resolution. Method calls like repo.findCallers() now resolve through receiver types instead of matching any findCallers in scope. Barrel files correctly show re-exported symbols. A precision/recall benchmark suite tracks call resolution accuracy across versions. On the infrastructure side, all hardcoded behavioral constants are centralized into DEFAULTS with recursive deep merge, and the TypeScript migration begins with project setup and core type definitions.

v3.3.0

19 Mar 07:10
be24c76

Choose a tag to compare

Resolution accuracy reaches a new level. This release delivers Phase 4 resolution improvements — type inference across all typed languages, receiver type tracking with graded confidence, package.json exports field resolution, and monorepo workspace resolution. Method calls like repo.findCallers() now resolve through receiver types instead of matching any findCallers in scope. Barrel files correctly show re-exported symbols. A precision/recall benchmark suite tracks call resolution accuracy across versions. On the infrastructure side, all hardcoded behavioral constants are centralized into DEFAULTS with recursive deep merge, and the TypeScript migration begins with project setup and core type definitions.

Features

  • resolution: type inference for all typed languages (TS, Java, Go, Rust, C#, PHP, Python) — obj.method() resolves through declared types in both WASM and native engines (#501)
  • resolution: receiver type tracking with graded confidence — constructors (new Foo()) at 1.0, annotations at 0.9, factory methods at 0.7; highest-confidence assignment wins per variable (#505)
  • resolution: package.json exports field and monorepo workspace resolution — conditional exports, subpath patterns, npm/pnpm/Yarn workspaces resolved with high confidence instead of brute-force filesystem probing (#509)
  • exports: show re-exported symbols for barrel files — codegraph exports now traces through re-exports to show the actual consumers of each symbol (#515)
  • roles: dead role sub-categories — dead-leaf, dead-entry, dead-ffi, dead-unresolved replace the coarse dead role for more precise dead code classification (#504)
  • config: centralize all hardcoded behavioral constants into DEFAULTS with recursive deep merge — partial .codegraphrc.json overrides now preserve sibling keys (#506)
  • benchmarks: call resolution precision/recall benchmark suite — hand-annotated fixtures per language with expected-edges manifests, CI gate on accuracy regression (#507)
  • benchmarks: child-process isolation for benchmarks — benchmark runner spawns builds in separate processes to prevent state leaks (#512)
  • typescript: project setup for incremental migration — tsconfig.json, build pipeline, dist/ output with source maps (#508)
  • typescript: core type definitions (src/types.ts) — comprehensive types for symbols, edges, nodes, config, queries, and all domain model interfaces (#516)
  • languages: add .pyi, .phtml, .rake, .gemspec extensions to Python, PHP, and Ruby parsers (#502)

Bug Fixes

  • cli: reword misleading 'stale' warning in codegraph info — no longer implies the graph is broken when it's simply older than some files (#510)
  • skills: update dogfood and release skill templates to match current CLI surface (#511)

v3.2.0

17 Mar 14:08
edefc50

Choose a tag to compare

Post-Phase 3 decomposition and dead code accuracy. This release completes a thorough decomposition of the remaining monolithic modules — language extractors, AST analysis visitors, domain analysis functions, and feature modules are all broken into focused, single-responsibility helpers. Dead code detection now correctly classifies symbols that are only referenced by tests as "test-only" instead of "dead", and constants are properly included in edge building so they no longer appear as false-positive dead exports. A new brief command provides token-efficient file summaries designed for AI hook context injection. The native engine gains a MAX_WALK_DEPTH guard to prevent stack overflows on deeply nested ASTs.

Features

  • cli: codegraph brief <file> command — token-efficient file summary with symbols, roles, caller counts, and risk tiers; designed for hook-based context injection (#480)

Bug Fixes

  • roles: classify test-only-called symbols as "test-only" instead of "dead" — reduces false positives in dead code detection (#497)
  • builder: include constant nodes in edge building — constants no longer appear as false-positive dead exports (#495)
  • native: add MAX_WALK_DEPTH guard to native engine AST walkers — prevents stack overflows on deeply nested files (#484)
  • cli: support repeated --file flag for multi-file scoping across all commands (#498)
  • versioning: use semver-compliant dev version numbering (-dev.0 suffix instead of non-standard format) (#479)

Refactors

  • extractors: decompose monolithic language extractors (JS/TS, Python, Java) into per-category handlers (#490)
  • ast-analysis: decompose AST analysis visitors and domain builder stages into focused helpers (#491)
  • domain: decompose domain analysis and feature modules into single-responsibility functions (#492)
  • presentation: split data fetching from formatting and extract CLI/MCP subcommand dispatch (#493)
  • cleanup: dead code removal, shared abstractions, and empty catch block replacement across all layers (#489)

v3.1.5

17 Mar 02:09
6daaad9

Choose a tag to compare

Phase 3 architectural refactoring completes. This release finishes the remaining two Phase 3 roadmap tasks — domain directory grouping (3.15) and CLI composability (3.16) — bringing Phase 3 to 14 of 14 tasks complete. The src/ directory is now reorganized into domain/, features/, and presentation/ layers. A new openGraph() helper eliminates DB-open/close boilerplate across CLI commands, and a universal output formatter adds --table and --csv output to all commands. Several post-reorganization bugs are fixed: complexity/CFG/dataflow analysis restored after the move, MCP server imports corrected, worktree boundary escapes prevented, CJS require() support added, and LIKE wildcard injection in queries patched.

Features

  • cli: openGraph() helper and universal output formatter with --table and --csv output formats — eliminates per-command DB boilerplate and format-switching logic (#461)

Bug Fixes

  • builder: restore complexity/CFG/dataflow analysis that silently stopped running after src/ reorganization (#469)
  • db: prevent findDbPath from escaping git worktree boundary — stops codegraph from accidentally using a parent repo's database (#457)
  • mcp: update MCP server import path after src/ reorganization (#466)
  • api: add CJS require() support to package exports — fixes ERR_REQUIRE_ESM for CommonJS consumers (#472)
  • db: escape LIKE wildcards in NodeQuery.fileFilter and nameLike — prevents filenames containing % or _ from matching unrelated rows (#446)

Refactors

  • architecture: reorganize src/ into domain/, features/, presentation/ layers — completes Phase 3.15 domain directory grouping (#456)
  • architecture: move remaining flat src/ files into subdirectories (#458)
  • architecture: resolve three post-reorganization issues (circular imports, barrel exports, path corrections) (#459)
  • queries: deduplicate BFS impact traversal and centralize config loading (#463)
  • tests: migrate integration tests to InMemoryRepository for faster execution (#462)

Tests

  • db: add findRepoRoot and findDbPath ceiling boundary tests (#475)

v3.1.4

16 Mar 06:45
d56a069

Choose a tag to compare

Phase 3 architectural refactoring reaches near-completion. This release delivers 11 of 14 roadmap tasks in Phase 3 (Vertical Slice Architecture), restructuring the codebase from a flat collection of large files into a modular subsystem layout. The 3,395-line queries.js is decomposed into src/analysis/ and src/shared/ modules. The MCP tool registry becomes composable. CLI commands are self-contained modules under src/commands/. A domain error hierarchy replaces ad-hoc throws. The build pipeline is decomposed into named stages. The embedder is extracted into src/embeddings/ with pluggable stores and search strategies. A unified graph model (src/graph/) consolidates four parallel graph representations. Nodes gain qualified names, hierarchical scoping, and visibility metadata. An InMemoryRepository enables fast unit testing without SQLite. The presentation layer (src/presentation/) separates all output formatting from domain logic. better-sqlite3 is bumped to 12.8.0.

Features

  • graph-model: unified in-memory CodeGraph model with 3 builders, 6 algorithms, and 2 classifiers — consolidates four parallel graph representations into src/graph/ (#435, #436)
  • qualified-names: qualified_name, scope, and visibility columns on nodes (migration v15) — enables direct lookups like "all methods of class X" without edge traversal (#437)
  • testing: InMemoryRepository for unit tests without SQLite — repository pattern now supports in-memory and persistent backends (#444)

Refactors

  • queries: decompose queries.js (3,395 lines) into src/analysis/ and src/shared/ modules (#425)
  • mcp: composable MCP tool registry — tools defined alongside their implementations (#426)
  • cli: split cli.js into self-contained command modules under src/commands/ (#427)
  • api: curate public API surface — explicit exports, remove internal leaks (#430)
  • errors: domain error hierarchy — typed errors replace ad-hoc throws (#431)
  • embeddings: extract embedder into src/embeddings/ subsystem with pluggable stores and search strategies (#433)
  • builder: decompose buildGraph() into named pipeline stages (#434)
  • presentation: extract all output formatting into src/presentation/ — viewer, export, table, sequence renderer, result formatter (#443)

Chores

  • ci: add backlog compliance phase to automated PR review (#432)
  • deps: bump better-sqlite3 from 12.6.2 to 12.8.0 (#442)
  • deps-dev: bump @biomejs/biome from 2.4.6 to 2.4.7 (#441)
  • deps-dev: bump @commitlint/cli from 20.4.3 to 20.4.4 (#440)
  • deps-dev: bump @commitlint/config-conventional from 20.4.3 to 20.4.4 (#439)
  • deps-dev: bump @vitest/coverage-v8 from 4.0.18 to 4.1.0 (#438)