v0.9.52
Fixed 13
- graphify watch/update no longer silently drops Markdown links to semantic-backed documents during code-only rebuilds; authored wikilink references are repointed onto the target file's representative node
- T-SQL routines with CREATE OR ALTER, PROC shorthand, and bracket-delimited names like [dbo].[Get Widgets] are now recovered by name and appear in the graph without commented-out or dynamic SQL fabricating nodes
- graphify --help now lists the prs and provider commands and the export formats it actually supports
- corrected the deepseek-v4-flash pricing entry and the build_merge docstring
- Razor @inject/@using in .razor/.cshtml files now flow through the scope-aware C# type resolver so injected service types resolve to their cross-file definitions
- the MCP prs tools (list_prs, triage_prs, get_pr_impact) now surface genuine failures as MCP errors instead of success text
- the MCP get_node tool now resolves a node through the same tiered resolver as get_neighbors so the two agree deterministically
- graphify install --project now emits a bare graphify hook command resolved at run time instead of pinning the absolute interpreter path, so the committed hook no longer churns across machines
- a PHP new Foo() now emits a calls edge to the constructed class, completing object-creation modeling across C#, TypeScript, and PHP
- a method call through a field whose type is declared on an ancestor class now resolves from a subclass; the field-type lookup walks the inheritance chain
- the Objective-C field-to-type table is now re-keyed alongside node-id rewrites so self.field/obj.field method calls still resolve after graphify update normalizes ids
- TypeScript type-only imports no longer manufacture false import cycles; the type-only edge is marked and excluded from cycle detection while mixed imports keep their real value-import edge
- an import(...) used as a call type-argument no longer causes declarations after it to be dropped; the construct is normalized before parsing with source locations preserved
From graphify
- Fix:
graphify watch/updateno longer silently drops a Markdown link to a semantic-backed document during a code-only rebuild — authored[[wikilink]]references are repointed onto the target file's representative node, preserving links to the semantic tier without resurrecting a deleted target (#3190, thanks @logan683). - Fix: T-SQL routines that parse to tree-sitter ERROR nodes —
CREATE OR ALTER, thePROCshorthand, and bracket-delimited names like[dbo].[Get Widgets]— are now recovered by name over a comment/string-masked copy, so they appear in the graph without commented-out or dynamic SQL fabricating nodes (#3164, thanks @egarcia74). - Fix:
graphify --helpnow lists theprsandprovidercommands and the export formats it actually supports (thanks @SyedFahad7). - Fix: corrected the
deepseek-v4-flashpricing entry and thebuild_mergedocstring (which wrongly claimed it saved the graph; callers persist) (thanks @adrianengkh). - Fix: Razor
@inject/@usingin.razor/.cshtmlfiles now flow through the scope-aware C# type resolver, so an injected service type resolves to its cross-file definition; an external/undeclared type fabricates nothing (partially addresses #3187 — a bare inject of a file-scoped-namespace type still dangles, follow-up) (thanks @hopstreax). - Fix: the MCP
prstools (list_prs,triage_prs,get_pr_impact) now surface a genuine failure as an MCP error (isError) instead of success text, while an empty-but-successful result is unaffected (thanks @noQbot). - Fix: the MCP
get_nodetool now resolves a node through the same tiered resolver asget_neighbors, so the two agree deterministically instead ofget_nodereturning an iteration-order substring match (thanks @noQbot). - Fix: a
graphify install --project(committed/shared) install now emits a baregraphifyhook command resolved at run time instead of pinning the absolute interpreter path, so the committed hook no longer churns across machines; the global install still pins the absolute path (thanks @davidbhoward). - Fix: a PHP
new Foo()now emits acallsedge to the constructed class (namespaced names resolve to the last segment), completing the object-creation modeling across C# (#2998), TypeScript (#3135), and now PHP; dynamic (new $var()),self/static/parent, and unknown external constructions fabricate nothing (#3115, thanks @abhay-codes07). - Fix: a method call through a field whose type is declared on an ancestor class now resolves from a subclass — the field-type lookup walks the inheritance chain (per-file for Java/C#, cross-file for Java/Objective-C), cycle-safe and without fabricating edges (#3151, thanks @abhay-codes07).
- Fix: the Objective-C field-to-type table is now re-keyed alongside the node-id rewrites, so
self.field/obj.fieldmethod calls still resolve aftergraphify updatenormalizes ids (#3150, thanks @abhay-codes07). - Fix: TypeScript type-only imports (
import type { T } from './m') no longer manufacture false import cycles; the type-only edge is marked and excluded from cycle detection while a mixedimport { type A, B }keeps its real value-import edge (#3123, thanks @abhay-codes07). - Fix: an
import(...)used as a call type-argument (f<typeof import('mod')>()) no longer causes declarations after it to be dropped; the construct is normalized before parsing with source locations preserved (#3185, thanks @hopstreax).