概述
v0.9.98 與 v0.9.99 於 2026-10-30 連續發布(22:55 與 23:42 UTC)。兩版合起來的主軸是最短路徑的信心誠實化:
- 整體路徑信心=最弱跳(v0.9.98):
graphify path與 MCP shortest-path 輸出以鏈上最弱的一跳回報整體信心。 - 等長路線取最保守者(v0.9.99):多條最短路徑並列時,回報「最弱跳最弱」的那條,不再任意挑一條。
confidence_score進入輸出(v0.9.99):path、explain與neighbors在邊的標籤旁印出儲存的分數。also_seen保留較弱證據(v0.9.98):折疊邊時,輸家副本的出處不再被丟棄。
其餘是 Go/Python 的呼叫解析推進、C# 方法標籤、安裝位置修正,以及一批抽取與管線修正。
整體路徑信心=最弱跳(v0.9.98,#4885、#4892)
graphify path 與 MCP shortest-path 輸出現在把整體路徑信心回報為最弱跳(weakest hop)——先比最低的信心層級(confidence tier)、再比最低分數——並附一行點名該跳的摘要(summary line naming that hop)。
一條路徑的可信度取決於最弱的一環:就算九成邊是 EXTRACTED,只要有一跳是低信心的 INFERRED,整體答案就不該假裝很確定。
等長路線取最保守者(v0.9.99,#4881 下半場)
當多條路線等長時,graphify path 與 MCP shortest_path 工具回報最保守的一條:在所有最短路徑中,選「最弱跳最弱」的路線,摘要並註明它是 N 條等長路線中最弱者(the weakest of N equal-length routes)。
官方說明動機:過去任意回傳一條等長路線,「the confidence could overstate how sure the connection is」——信心可能高估這條連線的確定程度。
confidence_score 進入 serve 輸出(v0.9.99,#4882、#4888)
path、explain 與 neighbors/get_neighbors 現在在邊的標籤(tag)旁印出儲存的 confidence_score,例如 [INFERRED 0.75]。規則:
- EXTRACTED 維持裸標——定義上它的信心是 1.0,不需要附分數。
- 缺失或非有限(non-finite)的分數也維持裸標。
- 可與最弱跳路徑摘要及
also_seen證據標籤組合呈現。
折疊邊保留較弱證據:also_seen(v0.9.98,#4881、#4891)
重複的同關係(same-relation)邊折疊時,過去輸家——信心較弱的那份副本——的出處(provenance)直接被丟棄。現在它被保留在存活邊的 also_seen 清單上:
- 較弱證據不再靜默流失。
- 該欄位序列化至 graph.json。
- 跨重建冪等(idempotent)——反覆重建不會重複累積。
Type.Member 端點解析(v0.9.98,#4884、#4893)
graphify path 的端點寫成 Type.Member 時,現在解析到 member 節點而非包含它的型別——graphify path "Exporter.Run" "PdfReport.Build" 找到真實的呼叫路線。邊界行為不變:精確名稱與檔名仍優先;member 不存在的 Type.Member fail closed(寧可失敗不猜)。
C# 方法標籤帶擁有型別(v0.9.98,#4883、#4889)
C# method 節點現在以擁有型別標示——MyClass.Method——而非裸 Method,跨型別的同名方法因此可區分。注意:節點 id 與邊完全不變,這只是顯示標籤(display label)的改變。
Go 呼叫解析系列
v0.9.99 一次修三個(皆感謝 @nothariharan):
- package 層級
var初始化器中的呼叫(#2360、#4867):含 func-literal closure 內的呼叫(常見的 swappable-hook 模式)歸功到檔案節點,不再被丟棄。 - method value 作為函式引數(#1566、#4868):
Wrap(s.Health)這種以 method value 當參數的寫法連結為indirect_call——Go 在 callback-by-method-value 上與 Python/JS 看齊;並保守防範 field-access 的誤判(false positives)。 - 跨檔 struct 型別(#3368、#4866):receiver 欄位的 struct 宣告在同 package 的兄弟檔時可定其型別——成員呼叫跨「struct 在此、methods 在彼」的常見 Go 佈局解析,且欄位型別跨增量重建保存。
v0.9.98 另修(#4843,感謝 @ayushcodes10):以 composite literal 綁定的 receiver——var x = T{} 或 var x = &T{}——型別定為 T,與 x := T{} 形式一致,其成員呼叫因此可解析。
Python dispatch table(v0.9.99,#1566、#4773)
dispatch table 中列出的 module.func 值——{"a": mod.func_a},含巢狀集合——現在解析到被引用的函式並發出 indirect_call,不再被丟棄。不可呼叫(non-callable)、class 與 local-receiver 的值則維持不動。
安裝位置修正(v0.9.99)
- gemini 的全域 skill 目錄(#2800、#4770):Windows 上 gemini 有自己的目錄
~/.gemini/skills/graphify,不再與agents平台的目錄碰撞;既有的agentsskill 會被註記而非刪除。 - OpenCode 全域 plugin 位置(#3398、#4771):改寫入
~/.config/opencode(與全域 skill 同處)而非當前目錄;install/uninstall/refresh 保持對稱,legacy 位置仍被清理。
產生 skill 的措辭修正(v0.9.99,#4061、#4721)
skill 中的「Follow these steps in order. Do not skip steps.」(依序執行、不得跳步)改寫為「unless the fast path above applies」(除非上方的快速路徑適用)——解決與既有圖譜快速路徑(existing-graph fast path)的矛盾,套用到所有產生 host。
v0.9.98 其他抽取與管線修正
| 範圍 | 修正 | PR |
|---|---|---|
| extract | 檔案 id 與每宣告 id 保持區分——與檔案同名的頂層宣告(class Js in a.js)不再因 id 碰撞被靜默丟棄;跨檔引用綁到宣告 id |
#4854、#4857 |
| dedup | 跨檔 document mention 與 AST 節點在 defining id 碰撞時,AST 節點保留 id;同檔 enrichment、extension twins 與 single-definer 不動 | #4859、#4872 |
| build | 兩檔 import cycle(a imports b、b imports a)在預設無向 build 中被回報;stamp 在 incremental/watch 重建正確清除,丟掉的 import 不再留下過期 cycle | #4839、#4841 |
| js | 帶 ?query 或 #fragment 後綴的相對 import(./mod.js?v=1)解析到真實模組而非幻影節點;Node #subpath imports 不動 |
#4860、#4876 |
| verilog | SystemVerilog class constructor(function new(...),無回傳型別)有自己的節點、method 邊與參數型別引用 |
#4848 |
| powershell | using module/using assembly:帶副檔名的去掉副檔名(Helpers.psm1 → helpers);無副檔名的點狀模組名保留(Az.Accounts) |
#4847 |
| solidity | 自由函式 using {a, b} for T 集合對每個具名函式發出 uses 邊,不再只有 using Lib for T 單一形式 |
#4846 |
| commonlisp | superclass 在同檔稍後定義的 defclass 綁到該本地節點,不再鑄無來源 stub |
#4845 |
| pascal | inherited 與 inline 形式的 component blocks(.lfm/.dfm)被辨識;後續 object block 不再被損壞的巢狀堆疊重新掛父 |
#4844 |
| serve | 兩節點在 lookup 平手且僅大小寫不同時,與查詢拼法完全相同者勝出(其餘在下一層仍可達),不再全部拒為歧義 | #4870 |
| export | Cypher 文字匯出以穩定節點 id 鍵 MERGE、label 分開設定——label 變更後重新匯入會更新節點而非建立重複 |
#4878 |
| 轉換文字快取以解析後的來源路徑為鍵——不同 root 中同名相對路徑的兩個 PDF 不再互相污染 | #4851 |
v0.9.99 起,多條路線在最短路徑查詢中等長時,`graphify path` 會回報哪一條?
💡 想先看個提示?
保守優先:等長不代表等可信。
v0.9.98 起,重複的同關係邊折疊時,較弱(輸家)副本的出處會如何處理?
💡 想先看個提示?
關鍵字是 also_seen 與「不靜默流失」。
動手升級檢查清單
升級 v0.9.99:動手檢查清單
逐項勾選,確認你已完成升級必要的步驟(進度會保存在此瀏覽器)
延伸閱讀
- 官方 v0.9.98 release notes
- 官方 v0.9.99 release notes
- 前一課:
v0997-rationale-redaction——理由標籤的憑證遮蔽集中到快取前