# graphify v0.9.39 - Product: graphify (https://whatsnew.fyi/product/graphify) - Vendor: graphify - Date: 2026-08-10 - Version: v0.9.39 - Original notes: https://github.com/Graphify-Labs/graphify/releases/tag/v0.9.39 - Permalink: https://whatsnew.fyi/product/graphify/releases/v0.9.39 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** — affected now traverses a dynamic import('…') made inside a function or at module scope, keying dedup on the importing file to emit one file-level dynamic_import edge per file/target while keeping the call-site edge - **fixed** — Python member call on an untyped receiver (x.get(...)) no longer binds by name alone to a same-named module-level function, resolving only with receiver-type, import, or self/cls/super evidence - **fixed** — fuzzy dedup no longer over-merges two distinct entities in the same file whose long labels differ by a content word, judging one-token differences on the differing tokens rather than prefix-weighted whole-label similarity - **fixed** — graphify watch now rebuilds on a documentation-only deletion batch, evicting a deleted doc's nodes immediately rather than waiting for the next code-file event - **fixed** — Objective-C @protocol declaration is no longer treated as a receiver type - **fixed** — Objective-C category or class-extension interface (@interface Foo (Bar)) now folds into the base class instead of minting a duplicate node - **fixed** — Objective-C message send to a @property or ivar receiver now resolves through the property/ivar's declared type Correctness release: fixes an `affected` gap for in-function dynamic imports, stops a Python name-only member-call fabrication, tightens fuzzy dedup, closes a watcher deletion residual, and fixes three Objective-C resolution bugs. - Fix: `affected` now traverses a dynamic `import('…')` made inside a function or at module scope (#2584, thanks @phudayyy). The 0.9.38 dedupe keyed only on the target, so an in-function dynamic import (whose symbol-level edge is anchored on the enclosing function) suppressed the file-level edge `affected` follows; the dedupe now keys on the importing file, emitting one file-level `dynamic_import` edge per file/target while keeping the call-site edge. - Fix: a Python member call on an untyped receiver (`x.get(...)`) no longer binds by name alone to a same-named module-level function, fabricating a false high-confidence `calls` edge and a god node (#2417, #2586, thanks @EZZEASY). Such a call is now resolved only with receiver-type, import, or `self`/`cls`/`super` evidence, matching the TypeScript fix from 0.9.37; `super().method()` still resolves. - Fix: fuzzy dedup no longer over-merges two distinct entities in the same file whose long labels differ by a content word (#2576, thanks @wilyan09007). A one-token difference is judged on the differing tokens rather than the prefix-weighted whole-label similarity, so `asset contribution flow` and `asset consumption flow` stay separate while genuine typo and whitespace/case variants still collapse. - Fix: `graphify watch` now rebuilds on a documentation-only deletion batch instead of only flagging it (#2580, thanks @angmeng), so a deleted doc's nodes are evicted immediately rather than waiting for the next code-file event. (The general deleted-file leak was already fixed in 0.9.10; this closes the live-watcher residual.) - Fix: Objective-C member-call resolution (#2589, #2590, #2591, thanks @xiongjianxu). A `@protocol` declaration is no longer treated as a receiver type (it collided with a same-named class); a category or class-extension interface (`@interface Foo (Bar)`) now folds into the base class instead of minting a duplicate node; and a message send to a `@property` or ivar receiver (`[self.svc run]`, `[_svc run]`) now resolves through the property/ivar's declared type.