- Fix: a module docstring preceded by a leading comment (shebang,
# -*- coding -*-, or a license header) is now extracted instead of silently dropped — comments are skipped when locating the first statement, across module/class/function bodies (#3312, thanks @ayushcodes10). - Fix: two Python definitions whose ids differ only by leading underscores (e.g.
_get_connectionandget_connection) no longer collide and silently drop one — private/dunder members are salted while a unique public member keeps its plain id, so existing graphs are unaffected (#3302, thanks @ayushcodes10). - Fix: a ghost node whose
source_filewas set to the doc that merely mentions a file is now merged onto the real file node via a conservative unique-label fallback, so it stops surviving every rebuild (#3344, thanks @leninherrera94). - Fix: type-use edges (
inherits/implements/references) are no longer fabricated from a symbol that owns no node — e.g. a class nested in a named function, or an abstract method signature — closing a path that leaked phantomext_*-sourced edges (#3356, thanks @VasuBansal7576). - Fix:
graphify watch/updatein no-cluster mode now disambiguates same-basename file labels (e.g. twoerrors.ts) the same way the clustered build does, instead of collapsing them to a bare basename (#3363, thanks @VasuBansal7576). - Fix: a named re-export that forwards an imported binding —
import { x } from './a'; export { x },export { x } from './a'barrels, alias renames, andexport *chains — now resolves to the original definition instead of dangling on a fabricated barrel symbol; ambiguous or unresolved origins are left untouched (#3358, thanks @VasuBansal7576). - Fix: cross-file entity nodes typed only by their file extension (e.g. the same handle mentioned across several docs) now merge like
conceptnodes, gated by an entropy + provenance guard and an own-file-node exclusion so distinct entities stay separate (partially addresses #296, thanks @yotamleo). - Fix: a runtime dynamic
import(...)is no longer blanked by the TS type-argument normalizer — masking parses first and only rewritesimport(...)inside genuine call type-argument positions adjacent to a grammar error, and the whitespace formimport (...)is recovered, so real module dependencies survive (#3210, thanks @zfaustk). - Fix: JSON-config extraction no longer turns every array value into an
extends(inheritance) edge or emits a label-level self-loop dependency — only a real top-levelextendsyields an inheritance edge, and dependency edges are sourced from the manifest node with a namespaced target (#3330, thanks @pranavshipit). - Fix: the claude-cli backend now tolerates a diagnostic line printed before the JSON envelope (e.g. an MCP client notice), recovering the response instead of discarding already-generated output; genuine non-JSON still errors (#3330, thanks @pranavshipit).
- Fix: a code-only
graphify watchrebuild no longer clears the pending semantic-update flag, so a queued re-extraction of changed docs/papers/images is not silently dropped (#3294, thanks @theSatvik). - Fix: the MCP
prstools no longer hang the stdio transport on Windows — the PR subprocesses run with stdin detached, and an explicit--repois passed positionally togh repo view(#3318, thanks @hopstreax).