- Fix: a call to a Python function defined nested inside another function now resolves to that inner definition per lexical scope, instead of leaking to a same-named function elsewhere; direct recursion is preserved as a self-loop (#3410, thanks @hopstreax).
- Fix: submodule imports inside a PEP 420 namespace package (a directory with no
__init__.py) now resolve to the target module instead of being dropped (#3429, thanks @flaukowski). - Fix: a bare-name import of a module sitting next to the importing file (a flat script dir with no package) now resolves to that sibling — matching CPython's
sys.path[0]behavior — without over-resolving a genuine third-party name (#3430, thanks @hopstreax). - Fix: a PHP
use Foo\Bar as Baz;import keys its local binding on the alias, so laterBazreferences resolve to the real class, and distinct aliased same-named classes stay separate (#3421, thanks @ayushcodes10). - Fix: a directory literally named
outis skipped as build output only when there is build-output evidence, so a real sourceout/is no longer silently dropped (#3347, thanks @abhay-codes07). - Fix: a shell script invoked in exec position through a variable path (
"$SCRIPT_DIR/foo.sh") now resolves to the target when the variable holds a constant, matching the existingsourcehandling (#3416, thanks @edwardselby). - Fix: added the missing
Iterableimport in build.py so its type annotations resolve (they were an undefined name) (#3462, thanks @xiongjianxu). - Fix:
graphify global addno longer infers an empty repo tag for a path like/tmp/graph.json; it degrades to a sensible non-empty tag via the same helpermerge-graphsuses (#3464, thanks @xiongjianxu). - Feature: SQL extraction now emits index nodes for
CREATE [UNIQUE] INDEX, linked to the table they index (#3467, thanks @L4XB). - Fix: a TypeScript
export *re-export no longer resolves a name to a same-named interface method — only module-level exports are candidates (#3436, thanks @L4XB). - Feature: Rust module-level
staticandconstdeclarations are now extracted as nodes (#3471, thanks @L4XB). - Fix: an incremental rebuild no longer drops a node's
rationale/summarywhen a semantic node's absolutesource_filecollides with its AST twin's relative path during dedup — source paths are normalized first (#3472, thanks @hopstreax). - Fix:
graphify installno longer aborts when the always-on registration target is unwritable (read-only or symlinked config); it skips that step with an actionable warning and still installs the skill (#3474, thanks @dajiaohuang). - Fix: community labelling falls back to an installed
claudeCLI resolved at run time instead of pinning a path that expires (e.g. under snap/nvm), so labelling keeps working across updates (#3475, thanks @ktsang622). - Fix: the
allextra now includespsycopg[binary], sopip install 'graphifyy[all]'provides the postgres driver (#3482, thanks @L4XB).