# graphify v0.9.54 - Product: graphify (https://whatsnew.fyi/product/graphify) - Vendor: graphify - Date: 2026-09-05 - Version: v0.9.54 - Original notes: https://github.com/Graphify-Labs/graphify/releases/tag/v0.9.54 - Permalink: https://whatsnew.fyi/product/graphify/releases/v0.9.54 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **fixed** — 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 - **added** — 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 - **fixed** — 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 - **fixed** — The `god_nodes` command now honours the `exclude_hubs_percentile` flag, so `--exclude-hubs` actually affects god-node ranking - **fixed** — Byte-identical duplicate reference edges are now collapsed when the extractor emits them - **fixed** — 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 - **fixed** — A graph.json carrying top-level hyperedges now keeps them on export, with the loader re-attaching the top-level `hyperedges` slot - **added** — 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** — The `graphify install` command now writes the `.graphify_version` stamp atomically to prevent a truncated version file from a crash mid-write - **fixed** — The Obsidian/canvas export now writes `graph.canvas` and vault notes atomically, preventing concurrent readers from seeing half-written files - **fixed** — 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 - 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-graphs` now 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_file` node attribute (the merged decl/def implementation site) is now stored portably — relative to the scan root with canonical separators, matching `source_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_nodes` now honours `exclude_hubs_percentile`, so `--exclude-hubs` actually 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 `hyperedges` slot that `node_link_graph` otherwise 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 `rationale` attribute 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 install` now writes the `.graphify_version` stamp 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.canvas` and 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 `tomli` no longer silently drops every `pyproject.toml`/`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 ever absent (#3283, thanks @drmikecrypto).