github Graphify-Labs/graphify v0.9.80

4 hours ago

More clone-identical determinism, a large MCP retrieval speedup, and a batch of extractor and resolution fixes.

  • Fix: more node ids and manifest keys stop leaking the local checkout path or OS username, so a clone keeps producing the same graph — a re-clone no longer keeps a previous checkout's absolute manifest keys (#4175, thanks @SrijanSriv), an AST cache hit whose import target has since been deleted is re-extracted instead of replaying the stale absolute-path id (#4185, #4184, thanks @rohit-jsfreaky), and --no-cluster graph.json no longer ships extract()'s run-only absolute source paths or undeclared/dangling endpoints (#4189, #4183, thanks @rohit-jsfreaky).
  • Fix: cross-drive scans no longer abort on a syntax-error warning — the remaining unguarded os.path.relpath in the partial-extraction warning path falls back to a portable display path on Windows cross-drive files, completing the 0.9.78 #4106 fix (#4149, thanks @xiehuanyi).
  • Fix: an external import stub whose last referencing edge is gone is dropped on incremental rebuild instead of lingering as a zero-degree ghost a fresh build never has (#4181, thanks @rohit-jsfreaky).
  • Fix: Python self.<attr>.<method>() calls now resolve through the attribute's constructor/annotation type to the owning class, fail-closed on ambiguity (#4176, #2860, thanks @Mpasha17).
  • Fix: Python obj.method() on a local or parameter whose class is known from an annotation (c: Client, including Optional/union/string forms) or a constructor/with binding now resolves to the owning class's method, fail-closed to a single in-file-or-imported class that owns it (#4198, thanks @rohit-jsfreaky).
  • Fix: Python imports under if TYPE_CHECKING: are marked type-only so they no longer form impossible runtime import cycles (#4179, #3159, thanks @Yyunozor).
  • Fix: Java methods and the calls inside anonymous class bodies (new Runnable() { public void run() {...} }) are now captured, mirroring the Kotlin object-literal handling (#4140, thanks @rajatnagda45).
  • Fix: markdown links to file names containing spaces or percent-encoding ([x](<My Note.md>), [x](My%20Note.md)) resolve to the real file instead of a ghost target; wikilinks stay verbatim and external links stay excluded (#4178, thanks @Yyunozor).
  • Fix: a re_exports edge is kept for both files whose ids collide after separator normalization (a-b/x.ts and a/b/x.ts), removing an order-dependent dropped edge (#4143, thanks @Cintu07).
  • Fix: the Windows graphify console script now uses the multi-core extraction pool instead of silently falling back to single-core, since a non-file __main__.__file__ no longer disables it (#4187, #4186, thanks @rohit-jsfreaky).
  • Perf: the MCP server builds the traversal view and shortest-path graphs once per loaded graph instead of rebuilding them on every call, keyed to the existing graph cache (~1.6x on query_graph, up to ~300x on shortest_path); the two cached path graphs add a bounded, LRU-capped memory cost (#4192, #4191, thanks @rohit-jsfreaky).
  • Perf: the extraction id-remap and call tie-break resolve and parse each path once per run instead of recomputing it for every node and candidate (tens of thousands of redundant Path.resolve() calls eliminated), with byte-identical graph.json output (#4195, thanks @rohit-jsfreaky).
  • Feature: graph_stats (CLI and MCP) now reports the graph's build commit and whether it is behind the current HEAD (#4144, thanks @Mpasha17).
  • Chore: raise the tree-sitter runtime floor to >=0.25 so a resolver cannot pair a 0.23/0.24 runtime (ABI 14) with the ABI-15 grammars pinned here and fail every parse (#4148, thanks @JFWaskin).
  • Test: optional-extra tests now skip cleanly when the extra is not installed, so a default uv sync no longer reports failures for grammars and SDKs it never pulled (#4193, #4190, thanks @yatharth1706).

Don't miss a new graphify release

NewReleases is sending notifications on new releases.