graphify 0.9.10 — a correctness batch focused on phantom cross-file/cross-language edges.
Highlights: TS/JS builtin-typed receivers (x: Date) no longer collapse onto same-named user symbols; no cross-language calls edges; build_merge ambiguous aliases no longer merge unrelated files; base-class stubs disambiguated per file; Java enum constants extracted; resumable per-chunk semantic cache.
Install: uv tool install "graphifyy==0.9.10" or pip install graphifyy==0.9.10
Changelog
- Fix: TS/JS member calls on a builtin-typed receiver no longer collapse onto a same-named user symbol (#1726).
_resolve_typescript_member_callsmatched a receiver's type to a definition by casefolded label, sox: Date; x.getTime()bound the caller to a userclass DATE/const DATEin another file — inventing hundreds of phantomreferencesedges and a false god node. Builtin-global receiver types (Date,Promise,Map, ...) are now skipped, mirroring the cross-file call guard; genuine user types are unaffected. - Fix: never bind a cross-file
callsedge to a definition in a different language family (#1718, thanks @edinaldoof). Name-only matching resolved a TSX callback passed by name to a same-named Kotlin method (and a Python call to a Kotlin fun) — phantom edges the spec forbids. Candidates are now filtered by interop family (JVM, native C-family, JS/TS module graph, ...); unknown families stay permissive. - Fix: an ambiguous legacy-stem alias in
build_mergeno longer silently merges two unrelated files (#1713, thanks @mallyskies). The#1504old-stem alias (ping.h/ping.php→ bareping) resolved by hash-order, riding a dangling edge onto an arbitrary same-named file. Aliases are now committed only when exactly one file claims them; a salted.h/.cppfile node is recognized as its own claimant so a genuine collision stays ambiguous (and dropped) instead of picking a wrong winner. - Fix: inline base-class stubs are tagged with
origin_file(#1707, thanks @mallyskies). Five inheritance handlers built cross-file base-class stubs withoutorigin_file, so same-named bases across files collapsed onto one shared stub that could then merge with an unrelated real class (218 wronginheritsedges observed). They now route throughensure_named_node, which sets the tag. - Fix: Java enum constants are extracted as nodes with
case_ofedges to their enum (#1719, thanks @ivanzhl). Closes the Java half of #1700;affected ErrorCode/ "where is ErrorCode.X used" now works for Java. - Fix:
graphifyrebuilds recover from a deleted hook working directory instead of crashing (#1703, thanks @FranciscoJSBarragan). A detached git hook can inherit a CWD that no longer exists; the rebuild now recovers viaGRAPHIFY_REPO_ROOTor fails cleanly instead of raisingFileNotFoundError. - Feat: the semantic cache is checkpointed per chunk so an interrupted extraction resumes instead of restarting (#1715, thanks @A-Levin). Each completed chunk is unioned into the cache immediately (opt out with
GRAPHIFY_NO_INCREMENTAL_CACHE); the final write still overwrites authoritatively. - Docs:
SECURITY.mdno longer claims stdio-only now that an opt-in--transport http(binds127.0.0.1by default) exists (#1714, thanks @Thizeidler); added tests forGRAPHIFY_MAX_GRAPH_BYTESparsing and corrected its unit docstring to binary MiB/GiB (#1722, thanks @Cekaru).