From d89ec68af95e0cad801b56d88df383991e659823 Mon Sep 17 00:00:00 2001 From: safishamsi Date: Thu, 2 Jul 2026 13:03:34 +0100 Subject: [PATCH] release: 0.9.5 Two 0.9.4 regressions (CLI cross-file indirect_call, stale community labels on re-cluster), the case-folding god-node fix (#1581), ~15 language extractor fixes (Ruby/Groovy/Elixir/Fortran/Rust/Julia/SystemVerilog/Scala/PowerShell/ ObjC/PHP/C#/C++/Swift), merge-graphs mixed-type handling (#1606), Swift singleton-into-local resolution (#1604), Homebrew python@ shebang (#1586), hooks foreground-stall perf (#1601), serve query stopwords (#1597) and multi-project MCP serving (#1594), plus JSON-loading hardening, dedup collision warning, and Windows hook worker limit. Built wheel validated in a clean venv: CLI reports 0.9.5, import resolves to the installed package, the case-folding and Swift-singleton fixes verified, and a real `graphify extract` produces indirect_call + inherits edges end-to-end. Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a2df0c..0eb8354 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ Full release notes with details on each version: [GitHub Releases](https://github.com/safishamsi/graphify/releases) -## Unreleased +## 0.9.5 (2026-07-02) - Feat: the MCP server can serve many projects from one process via an optional `project_path` on every tool (#1594, thanks @joanfgarcia). Omit it and nothing changes — the server answers against the graph it was started with. Pass an absolute `project_path` and that call is routed to `//graph.json` instead, with its own mtime+size hot-reload, so one stdio/HTTP server backs a whole workspace of repos. Graphs load lazily and cache per resolved path; a missing/corrupt project graph is a tool error, not a process exit, and the server starts even when its default graph is absent. Backward-compatible and additive. - Fix: Swift singleton cached into a local var now resolves later calls (#1604, thanks @jerryliurui). `let x = NetworkManager.shared` followed by `x.fetchData()` on a subsequent line produced zero call edges — local `let`/`var` bindings inside method bodies weren't typed (only class-level properties and params were), and a static-member init (`Type.shared`, a navigation expression) wasn't recognized even where locals were typed. Method-body locals are now typed from both constructor (`Type()`) and static-member (`Type.shared`) initializers, so `x.method()` resolves to the receiver type via the existing single-definition guard. This singleton-into-local idiom is one of the most common Swift call patterns. diff --git a/pyproject.toml b/pyproject.toml index 7368acb..876602b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "graphifyy" -version = "0.9.4" +version = "0.9.5" description = "AI coding assistant skill (Claude Code, CodeBuddy, Codex, OpenCode, Kilo Code, Cursor, Gemini CLI, Aider, OpenClaw, Factory Droid, Trae, Hermes, Kiro, Pi, Devin CLI, Google Antigravity) - turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph" readme = "README.md" license = { file = "LICENSE" }