概述
Graphify v0.9.89(16 個社群 PR)與 v0.9.90(14 個社群 PR)皆於 2026-10-13 發布。主軸是跨 repo 的 member-call 解析與 C#/Python 的解析正確性。兩版都 bump 了 AST cache schema——升級後首次建置會重新抽取。
跨 repo member-call 解析(v0.9.89)
問題
Receiver 型別宣告在另一個 repo 時,single-repo build 看不到宣告,member-call 無法綁定。
解法(Go/PHP/TS/Kotlin/ObjC)
- Build 期間以名稱暫存(dangling by name);
merge-graphs/global add時對唯一同名 exported type 綁定;- 歧義時 fail-closed——寧可不綁也不猜(#3152/#3388/#3393/#3385/#3387/#3389/#3391/#3395)。
Go 同 package 跨檔 methods 折疊為單一節點(#3399/#3400)。
泛型、enum 與介面派發(v0.9.89)
- Kotlin/Scala/C++/Swift 的泛型/模板型別參數(
class Box<T>等)不再產生無來源的 stub god-node(#4406-4409)。 - ObjC 的 NS_ENUM/NS_OPTIONS 抽取為 enum 與 members(#4400/#4401)。
- Interface dispatch fan-out:介面成員呼叫連到每個 implementer(#3800/#4396)。
- Pi native guard extension:graphify hook-guard、Oh My Pi 也載入、fail open(#4378)。
- Hook 讀取提示顯示背後的圖節點(#4368);.js import 在無真 .js 時解析到 .tsx(NodeNext 行為,#3486/#4395)。
C# 解析批次(v0.9.90)
- Nameless receiver(
run.Sequence.Apply())不再誤綁 caller 同名方法(#4422)。 new X()不綁到同名方法(#4428);foreach 迴圈變數從集合元素型別取型別(#4423)。- 僅大小寫/前後底線差異的名稱 node id 不合併(#4415/#4416)。
- Colliding ids 在 partial-class merge 前 salt(#4411/#4412)。
語言與資料修正(v0.9.90)
- Go generic receiver 正規化(#4438);Python
mod.func()從方法/巢狀函式解析(walk enclosing scopes,#2447/#4437)。 - 兩端點都存活的邊不因自身 source_file 未派工而丟失(#2276/#4436)。
- Dedup 保留 dropped-folder document 與頂層同名檔(path-qualifying,#4281/#4410)。
- Jinja(.j2/.jinja/.jinja2)分類為 documents(#3427/#3455);孤兒 placeholder 在一般 incremental build 也掃除(#4399)。
查詢與 hook(v0.9.90)
- Query fallback traversal 以 induced subgraph 保留種子間關係與循環(#4314/#4315)。
- Hub-fallback 社群標籤改寫入
.graphify_labels.pending.jsonsidecar(#3334/#3551)。 graphify hook install加 post-merge hook 背景重建——修 graph.json 在 union merge 復活的幻影節點(#2418/#3556)。
既有使用者影響
AST cache schema 有 bump,升級後第一次建置會重新抽取;跨 repo 綁定需在 merge-graphs/global add 時才完成,歧義時 fail-closed;post-merge hook 需重跑 hook install 取得。
學習重點
「名稱暫存 → 合併時綁定 → 歧義 fail-closed」是把不可完成的決策延後到資訊齊備時的範例——single-repo build 不猜,merge 時只對唯一候選綁定;寧可留白也不產生錯誤邊。