v0.9.6
Graphify-Labs/graphifyv0.9.6Jul 4, 2026by safishamsi
AI Summary
Major Ruby improvements including container nodes and singleton-call resolution, fixes for cross-language phantom imports, and hardened semantic extraction.
Key Highlights
- Module/Class/Data.define now emit container nodes with attached methods.
- Constant-receiver singleton-call resolution (e.g., `Service.call`) now works cross-file.
- No more cross-language phantom import edges from bare npm imports.
- Deterministic graph.json ordering for parallel semantic backends.
New Features
- Container nodes for Ruby modules and classes.
- Cross-file singleton call resolution.
- Elimination of phantom import edges.
- Hardened semantic extraction merging.
- Fixes for Apex, Kotlin, Julia, and Scala extractors.
Full Release Notes
graphify 0.9.6 — 19 fixes and features since 0.9.5. ## Ruby (major) - **Module / Struct.new / Class.new / Data.define container nodes (#1640).** Plain `module Foo`, `Foo = Struct.new(...) do ... end`, `Foo = Class.new(StandardError)`, and `Result = Data.define(...)` now get real container nodes with their methods attached; `Class.new(Super)` emits an inherits edge. - **Constant-receiver singleton-call resolution (#1634).** `Service.call`, `Model.where`, `SomeJob.perform_async` now resolve cross-file, so Rails/Zeitwerk apps (no requires) get real cross-file edges instead of near-zero. Binds to the class's owned singleton method when present, else the class node for blast-radius; single-owning-class guard kept. ## Correctness and stability - **No more cross-language phantom import edges (#1638).** An unresolved bare npm import (`import x from "pkg/colors"`) no longer aliases onto an unrelated local `colors.py` via the build alias index. - **Semantic extraction hardened (#1631).** A malformed LLM chunk (a stray non-dict entry) no longer crashes the merge and discards every successful chunk. - **Deterministic graph.json ordering (#1632).** Parallel semantic backends now merge chunks in submission order, so node/edge ordering is stable run-to-run (the model's content variance is separate). ## Contributor extractor fixes - Apex interface multiple inheritance (`interface X extends A, B`) (#1645, @Synvoya). - Kotlin interface delegation (`class Foo : Bar by baz`) (#1644, @Synvoya). Plus fixes to `query` seed diversity (#1596), `cluster-only` sidecar (#1617), `update`/`watch` stale-source reconciliation (#1623), TS/JS extractor gaps (#1615/#1607), `merge-graphs` (#1606), Swift singleton locals (#1604), C# receiver-typed member calls (#1609), TS receiver-typed member calls (#1630), the `to_canvas` dangling-member crash (#1236), a root-source_file crash (#1618), the `claude-cli` backend bisection stall, symlink containment (#1613), and the Homebrew `python@3.x` interpreter path (#1586). See the [CHANGELOG](https://github.com/Graphify-Labs/graphify/blob/v8/CHANGELOG.md) for full detail. Thanks to everyone who filed issues and sent PRs. Follow the org at https://github.com/Graphify-Labs.