- Feature: five new language extractors — COBOL (
.cbl/.cob/.cobol/.cpy; programs, paragraphs,PERFORM/CALL/COPY, pure-regex, no new dependency) (#3713, thanks @Abdul535), VB.NET (.vb; case-insensitive types/methods,Inherits/Implements/Handles) (#3717, thanks @Abdul535), R (.r/.R; assignment-form function defs,library/source, S4/R6 classes) (#3715, thanks @Abdul535), Solidity (.sol; contracts/interfaces/libraries,isinheritance, imports, modifiers) (#3716, thanks @Abdul535), and Erlang (.erl/.hrl/.escript; modules, functions by arity, behaviours, local + remotefoo:bar()calls) (#3714, thanks @Abdul535). The R and Erlang grammars ship via ther/erlangextras (they have no standalone PyPI wheel); Solidity and VB.NET have their own extras. - Feature: Go interface method requirements now resolve to the interface, and their parameter/return types emit
referencesedges (#3672, #3737, thanks @rajatnagda45, @oleksii-tumanov). - Feature: a Rust
self.method()call resolves across files for simple generic impls (impl<T> Foo<T>) (#3653, thanks @oleksii-tumanov). - Fix:
graph.jsonis now deterministic across runs —update/extract/cluster-only/labelpinPYTHONHASHSEEDvia a one-time re-exec, so hash-seed-sensitive community detection (Leiden/Louvain) produces identical output run-to-run and matches hook-triggered rebuilds (#3743, #3641, thanks @ayushcodes10). - Fix: a same-relation edge collision now keeps the higher-confidence edge (EXTRACTED over INFERRED) instead of resolving by arrival order (#3711, thanks @shobhitagnihotri69).
- Fix: a spec-conformant method-node duplicate (dropped class segment / leading dot) is now deduplicated onto its canonical AST node, gated on a method-shaped label and a single unambiguous candidate (#3719, #3705, thanks @shobhitagnihotri69).
- Fix: intra-module Go
imports_fromedges now repoint onto the imported package's real file nodes instead of dangling at ago_pkg_sink; external/stdlib imports stay external (#3748, thanks @carterko23). - Fix: Cargo introspection discovers a
Cargo.tomlin a subdirectory when none sits at the scan root (e.g. Tauri'ssrc-tauri/), degrades gracefully instead of aborting the whole extraction when no manifest is found, and resolvesworkspace = trueinherited dependency identity from[workspace.dependencies](#3740, #3739, thanks @ayushcodes10; #3734, thanks @oleksii-tumanov). - Fix: MCP
get_node/get_neighborsnow accept the node identifier undernode_id/id, not onlylabel, so agents that spell the argument differently no longer get a missing-argument error (#3725, thanks @ahm3dwasim). - Fix:
graphify installno longer corrupts line endings (writes preserve the file's existing EOLs instead of rewriting to CRLF on Windows) and re-install is properly idempotent (a marker-bounded replace instead of a bare substring check) (#3741, #3668, thanks @ayushcodes10). - Fix: community labeling retries a valid-but-truncated LLM response and reports how many communities kept a structural fallback name, instead of silently leaving them unlabeled (#3708, thanks @Ha1baraA11).
- Fix: a stale
.graphify_rootmarker (moved/deleted/symlink-loop target) is now ignored with a fall-back to the graph's directory, and the marker value resolves to an absolute path whenGRAPHIFY_OUTis a shared absolute directory (#3707, thanks @Ha1baraA11; #3735, #3375, thanks @ayushcodes10).