- Fix: Ruby methods whose names end in
!,?, or=now keep distinct node ids, sosaveandsave!(orfooandfoo=) no longer collide into one node; the label keeps the raw spelling and member-call resolution still matches (#3077, thanks @hopstreax). - Fix: a Ruby call on a qualified constant receiver (
ActiveRecord::Base.transaction) now matches the receiver's full constant path, so it no longer binds to an unrelated lone class namedBase; an edge is emitted only on a single unambiguous match (#3078, thanks @rohit-jsfreaky). - Fix: a CommonJS member export wrapped in a higher-order function (
exports.x = wrap(fn),module.exports.y = onCall({...}, handler)) is now captured, reaching through the wrapper to the function it wraps without fabricating the wrapper as the export's identity (#3035, thanks @hopstreax). - Fix:
graphify merge-graphsnow offsets each input's community ids so community 0 of one repo no longer fuses with community 0 of another; within-input structure is preserved and the original id is kept inlocal_community(#3014, thanks @santhiprakash). - Fix: a
.graphify_rootmarker written by Windows PowerShell (which prepends a UTF-8 BOM) no longer breaks hook rebuilds or silently mis-roots a scan; PowerShell now writes the marker BOM-less and every reader decodes BOM-tolerantly (#3028, thanks @rohit-jsfreaky). - Perf: ignore-pattern evaluation no longer builds a
Pathand callsrelative_toper pattern per file — it computes the relative path lexically in string space, parses each pattern once into a bounded process cache, and memoizes per-entry work; ignore decisions are unchanged (differential-fuzz verified) and a pattern-heavy monorepo scans dramatically faster (#2226, thanks @Azeem1985). The**-aware matcher was also lifted out of a per-call cache closure that leaked a reference cycle each call. - Feature: C# and TypeScript enum members now each emit a graph node with a
case_ofedge to their enum (matching the existing Java/Kotlin/Swift enum handling), so an enum case is visible as a member; explicit and implicit values,const enum, and quoted TypeScript member names are all handled and no built-in types are fabricated (#3063, #3064, thanks @durmazoguzhan). - Fix:
graphify watchno longer re-triggers on its own reads — read-only inotify events (opened,closed_no_write, emitted by the watcher's own AST rebuild) are dropped, while close-after-write and create/modify/move/delete still trigger; a no-op on the macOS/Windows backends that never emit them (thanks @Azeem1985). - Fix:
pip install graphifyy[postgres]now carries thetree-sitter-sqlgrammar the introspection path needs, and a missing or ABI-incompatible grammar raises an actionable error instead of silently returning zero nodes (thanks @Azeem1985).