v0.9.54
Added 2
- The `graphify merge-graphs` command now resolves a member call whose receiver type is defined in another repo, linking the call at merge time on a single unambiguous cross-repo type and method match
- The query scorer now ranks a match on a node's `rationale` attribute as its own tier between an exact label match and a source-path match
Fixed 9
- A Python type reference to a name imported from another module now resolves to that module's definition instead of a bare-name match, so same-named types in different modules bind to their own definitions
- The `definition_file` node attribute is now stored portably relative to the scan root with canonical separators, matching `source_file`, for byte-stable graphs across machines
- The `god_nodes` command now honours the `exclude_hubs_percentile` flag, so `--exclude-hubs` actually affects god-node ranking
- Byte-identical duplicate reference edges are now collapsed when the extractor emits them
- Two query results saved in the same second whose questions share a 50-character prefix no longer overwrite each other through the addition of a short unique suffix to saved memory-doc filenames
- A graph.json carrying top-level hyperedges now keeps them on export, with the loader re-attaching the top-level `hyperedges` slot
- The `graphify install` command now writes the `.graphify_version` stamp atomically to prevent a truncated version file from a crash mid-write
- The Obsidian/canvas export now writes `graph.canvas` and vault notes atomically, preventing concurrent readers from seeing half-written files
- On Python 3.10 a missing `tomli` no longer silently drops every `pyproject.toml` and `Cargo.toml` from the graph; `tomli` is now a runtime dependency for pre-3.11 and the manifest parser surfaces a visible per-file error if it is absent
From graphify
- Fix: a Python type reference to a name imported from another module now resolves to that module's definition — the sourceless stub is repointed onto the exact imported symbol (not a bare-name match), so two same-named types in different modules bind to their own (#3252, thanks @hopstreax).
- Feature:
graphify merge-graphsnow resolves a member call whose receiver type is defined in another repo — the call is parked at extraction and linked at merge time only on a single unambiguous cross-repo type + method match, composing with the cross-repo type link (#3152, thanks @xiongjianxu). - Fix: the
definition_filenode attribute (the merged decl/def implementation site) is now stored portably — relative to the scan root with canonical separators, matchingsource_file— across graph.json, the AST cache, the watch/incremental path, and direct extract, so a graph is byte-stable across machines (#3223, thanks @abhay-codes07 and @hopstreax). - Fix:
god_nodesnow honoursexclude_hubs_percentile, so--exclude-hubsactually affects god-node ranking (not just clustering); the default output is unchanged (#3205, thanks @abhay-codes07). - Fix: byte-identical duplicate reference edges are now collapsed when the extractor emits them, so the graph-health diagnostic no longer flags duplicates that the build was already discarding (#3251, thanks @abhay-codes07).
- Fix: two query results saved in the same second whose questions share a 50-character prefix no longer overwrite each other — saved memory-doc filenames now carry a short unique suffix (#3301, thanks @daichiyasunami-vottia).
- Fix: a graph.json carrying top-level hyperedges keeps them on export — the loader re-attaches the top-level
hyperedgesslot thatnode_link_graphotherwise drops, so hand-edited or externally written hyperedges survive re-export (#3321, thanks @yiheng-kkk). - Feature: the query scorer now ranks a match on a node's
rationaleattribute as its own tier, between an exact label match and a source-path match — adding recall for rationale-only hits without inflating the exact-match coverage score (#2293, thanks @andytsai821201-spec). - Fix:
graphify installnow writes the.graphify_versionstamp atomically (temp file +os.replace), so a crash mid-write cannot leave a truncated version file (#3286, thanks @drmikecrypto). - Fix: the Obsidian/canvas export now writes
graph.canvasand vault notes atomically, preventing a concurrent reader (or a git mmap hash) from seeing a half-written file (#3282, thanks @drmikecrypto). - Fix: on Python 3.10 a missing
tomlino longer silently drops everypyproject.toml/Cargo.tomlfrom the graph —tomliis now a runtime dependency for pre-3.11, and the manifest parser surfaces a visible per-file error if it is ever absent (#3283, thanks @drmikecrypto).