跳到主內容

Theme / v0.9.103

Graphify

Codebase 知識圖譜

Changelog

版本更新紀錄

收錄 Graphify 的版本變遷軌跡。每條紀錄以舊值→新值呈現,舊值以紅線劃掉但保留可見,方便對照改動軌跡。

當前記錄版本

v0.9.103

查看上游所有 Release ↗
  1. v0.9.103

    當前版本2026-11-06
    • 版本定位:v0.9.102→v0.9.103(上游 2026-11-05 發布)。官方定位:「A broad correctness, performance and robustness release across the extractors, resolution, hooks, the query and update paths, install and the skill runbook.」;AST cache schema 升至 39(v0.9.102 為 37),warm caches 會重跑受影響的抽取。
    • 抽取器(C#)(v0.9.103):preprocessor directives 與會讓 tree-sitter 出錯的 #if branches 在解析前被空白化(byte-length preserving),directive 不再提前關閉 class 而丟失後面的 members 或 calls。
    • 抽取器(Solidity)(v0.9.103):library calls(Lib.f(),含 aliased imports)與指名已宣告 event 或 error 的 emit/revert/require 會連結到它們指名的 member,並以唯一可見的型別與 member 為門檻(gated to a unique visible type and member)。
    • 抽取器(YAML)(v0.9.103):<< merge sequence 對重複的 key 給較早的 anchor 優先權,與 spec 及 PyYAML 一致。
    • 抽取器(Markdown)(v0.9.103):寫成反斜線 namespace(\Foo\Bar)或型別限定成員(Type::member)的 code span 會解析到真實節點;method 名為語言內建(builtin)的 dotted mention 不再被丟棄。
    • 抽取器(Python)(v0.9.103):裸的內建名稱呼叫(bare builtin-named call,如 raise NotImplementedError(...))不再綁到另一個模組中的同名 class,除非有 import。
    • 解析(Resolution)(v0.9.103):top-level def _main() 內的呼叫歸屬於 _main,而不是在 id normalization 後碰撞的公開 main,且不會錯誤歸屬 class member 的型別參照。
    • Hooks(v0.9.103):內容未變的檔案不再因 mtime 被重複標記 stale(extraction hash 會對 manifest 檢查);專用 Grep 受 strict orientation gate 約束;專案內 code 檔的 Bash 檔案讀取(cat/head/sed -n)會得到 read nudge;所有目標都在專案外的搜尋不發出 project hint;Claude Code compaction 之後 nudge budget 會恢復;匯出 CDPATH 時 toplevel anchor 仍可運作。
    • 效能(Performance)(v0.9.103):load、resolution 與 extraction 的尖峰記憶體下降;跨檔 repoint #3252 更快;watch reconcile pass 對每個檔案只解析一次 AST ownership,而非每個節點重讀 header——graph 輸出完全相同。
    • Update/build/cache(v0.9.103):此段與 v0.9.102 release notes 內容重複列出,上游未描述本版自身的此類變更。
    • Query/tree(v0.9.103):此段與 v0.9.102 release notes 內容重複列出,上游未描述本版自身的此類變更。
    • 安裝與執行緒安全(v0.9.103):Pi project skill 寫入 .pi/skills;uninstall 會移除它寫入的全域 skill registration;ambient scan root 保存在 ContextVar,並發的 library callers 抽取不同 root 時不會互相覆蓋(clobber)。
    • 完整教學見 lessons/v09103-extractor-resolution-and-install.mdx。
    上游 Release Notes ↗
  2. v0.9.102

    舊版本2026-11-04
    • 版本定位:v0.9.101→v0.9.102(上游 2026-11-03 發布)。官方定位:「A large correctness, performance and workflow release spanning the extractors, the query layer, incremental update, the hooks, the skill runbook and install.」;AST cache schema 升至 37(v0.9.101 為 36),warm caches 會重跑受影響的抽取。
    • 呼叫解析修正(go)(v0.9.102,#4966、#4853、#4934):同檔成員呼叫改依 receiver 的型別解析;跨 package 的 pkg.T receiver 只經檔案的 import 綁定;interface method call 會分派到 implicit implementer。
    • 呼叫解析修正(rust)(v0.9.102,#4944、#4945):模組限定呼叫(crate::b::helper())可跨檔解析;寫在 expression macro 引數內的呼叫會被連結。
    • 呼叫解析修正(kotlin/python)(v0.9.102,#4956、#4972、#4933):kotlin 的重載(overloaded)與 init {} 區塊內呼叫可解析,不可達的 external-inherited 呼叫改為丟棄;python 的 module-level singleton 成員呼叫依其型別解析,裸 method 呼叫不再自綁。
    • 呼叫解析修正(js/ts)(v0.9.102,#4700、#4976、#4967):經 CommonJS require 的 class extends 可解析;typed tagged template 與 import("mod").T<X> 標註不再半解析或鑄造假的 dynamic_import edge;default-exported object methods 可解析。
    • 呼叫解析修正(solidity/cpp)(v0.9.102,#4985、#4946、#4920、#4921、#4951):solidity 的 ../ import 解析到真實檔案;cpp 的 receiver 型別推導擴及 params/fields、split-header owner binding、區域可呼叫值(local callable)抑制與型別別名精確拼寫綁定。
    • 查詢(query)(v0.9.102,#4982、#4760):source nodes 排序高於 tests 與 docs(屬 soft weight,不排除),回答改為 file-first;graphify query 可從 .graphifyrc 讀取 query_budget/query_depth,並新增 --depth 旗標。
    • 增量更新與 watch(v0.9.102,#4800、#4801、#4802):graphify update 只對內容變更的檔案重新抽取,且結果 graph 與完整重建(full rebuild)相同;受競爭(contended)的增量請求會被記錄而非丟棄。
    • 建置與快取(v0.9.102,#4957、#4952、#4927、#4950、#4937):write guard 不再把刻意的 ghost folds 或 dedup folds 計為 dropped nodes;獨立來源的語意證據(semantic evidence)折疊後仍倖存;快取鍵保留書寫時的大小寫(case-preserving)。
    • Hooks(v0.9.102,#4974、#4973、#4979):內容未變的檔案不再因 mtime 被重複標記 stale;專用 Grep 受 strict orientation gate 約束;外部搜尋不再發出 project hint。
    • 效能(v0.9.102,#4960、#4958、#4959、#4981):load、resolution 與 extraction 的尖峰記憶體下降,跨檔 repoint 更快——輸出維持不變。
    • Skill 與安裝(v0.9.102,#4816、#4805、#4704、#4975):--update runbook 對僅部分讀取的 docs 改為重新排入佇列而非標記完成;Step 4 會帶入 --force;新增 hub-bypass report;uninstall 會移除全域 skill registration。
    • 交叉列表備註:上游 release notes 重列了 v0.9.101 已列過的部分 PR(#4946、#4920、#4921、#4951、#4944、#4945、#4933);本版仍為獨立新版本(cache schema 36→37)。
    • 完整教學見 lessons/v09102-query-incremental-and-performance.mdx。
    上游 Release Notes ↗
  3. v0.9.101

    舊版本2026-11-03
    • 版本定位:v0.9.100→v0.9.101(上游 2026-11-02 發布)。官方定位為「Resolution-accuracy and cache-correctness release across C++, Rust, Python, Go, the build write guard, and incremental rebuilds」;AST cache schema 升至 36,warm caches 會重跑受影響的抽取。
    • C++ 呼叫與定義綁定(v0.9.101,#3215、#4946、#4916、#4920):成員呼叫 x.m() 依 receiver 的型別綁定,型別來源擴及函式參數與 class fields 而不只 locals(void render(Base* b){ b->draw(); } 解析到 Base::draw),未定型或歧義的 receiver 維持 in-file 綁定;out-of-line 或 split-header 定義附加到 include set 含其 class 檔的唯一 owner,不再跨綁到無關的同名函式,歧義 owners fail closed。
    • C++ 區域可呼叫值與型別別名(v0.9.101,#4917、#4921、#4951):lambda 或 std::function 等區域可呼叫值以 byte-range binding lifetimes 排除於全域呼叫解析,不再對同名全域函式鑄造假的 INFERRED 呼叫,之後合法的全域呼叫仍可解析;型別別名(using Foo = Bar; 後 Foo x;)依精確拼寫綁定,salted alias 保留自己的 contains edge。
    • Rust 模組限定呼叫與巨集引數內呼叫(v0.9.101,#2135、#4944、#4945):crate::b::helper()、super::m::f() 等模組限定呼叫經 qualifier 驗證的跨檔解析,且不跨出呼叫者的 crate;寫在 expression macro 引數內的呼叫(println!("{}", f())、vec![g()])會被連結,以 allowlist 限制範圍,macro_rules! 本體與自訂 DSL 不處理。
    • Python/Go 呼叫與匯入解析(v0.9.101,#4933、#4929、#1566、#4931、#2360、#4932):方法內的裸呼叫不再自綁到同名方法,改解析到所指的 imported 或 module-level 函式;imports 可跨多個 src/ 根目錄拆分的 PEP 420 namespace packages 解析;Go 經 receiver field 取得的 method value 以 indirect_call 連結;Go package-level var 初始化式會參照它指名的型別。
    • 寫入防護與節點折疊(v0.9.101,#4940、#4952、#4896、#4927、#4949):entity dedup 把已存節點折疊進倖存孿生節點時,write guard 不再拒絕健康 graph,真正的遺失仍會被拒;獨立來源的語意檔案證據折疊進 AST file-self 節點後仍倖存,一般 INFERRED 提及幽靈仍會折疊以免 graph 累積重複;file-stem alias index 只在 edge 所屬檔案與 alias 目標同語言族時才重綁 edge。
    • 快取鍵與檔案開啟(v0.9.101,#4925、#4937):快取鍵保留書寫時的大小寫,README.md 與 readme.md 不再碰撞;hashed/word-count 檔案改經 os_long_path 開啟。
    • 重建與 watch 修正(v0.9.101,#4923、#4939、#4924、#4926、#4919、#4950、#4943、#4947):--code-only graph 在 hook、update 與 watch 重建中維持 code-only;msvcrt.locking 不受支援時重建不再無限等待;完整 reconcile 會逐出被排除 linked git worktree 的 source records;AST-only 更新保留 node id 與 code 定義碰撞的跨檔語意證據;sliced file 只在每個 slice 都成功後才快取,並按 chunk 順序組裝。
    • 完整教學見 lessons/v09101-resolution-accuracy-and-cache-correctness.mdx。
    上游 Release Notes ↗
  4. v0.9.100

    舊版本2026-11-01
    • 版本定位:v0.9.99→v0.9.100(2026-11-01 00:53:21 UTC 發布,台灣時間 2026-11-01 08:53)。官方 release notes 首項:「Fix: **ids** a type and a function whose names differ only in case (`Foo` the class, `foo` the function) get distinct node ids instead of colliding (which dropped one node and minted a bogus self-loop) (#4904, #4908, thanks @bercedev).」本版 release notes 共列 21 項變更。
    • 大小寫不同的宣告保留不同 node id(v0.9.100,#4904、#4908):名稱僅大小寫不同的型別與函式(如 class Foo 和 function foo)取得不同 node id,避免碰撞導致節點被丟棄並產生錯誤的 self-loop。
    • 抽取 prompt 的 node-id 格式同步(v0.9.100,#4432、#4799):prompt 中的 node-id 格式描述改為符合 ids.py 實際產生的格式——保留 word characters、保留非 ASCII 字母與數字、ASCII 字母轉小寫;不再沿用只允許 [a-z0-9_] 的舊描述。
    • Claude backend system prompt 快取(v0.9.100,#4835、#4855、#4880):Claude backend 以 cache_control 快取穩定且大型的 system prompt,並把快取 tokens 計入 input_tokens;遇到拒絕 cache_control 的 gateway,可用 GRAPHIFY_CLAUDE_PROMPT_CACHE=0 關閉。
    • PHP class-level initializer 的常數參照(v0.9.100,#4648、#4895):class-level initializer(const value、property default、parameter/promoted-constructor default)中的 Scope::MEMBER 會產生 references_constant edge;self::、static::、parent:: 會略過,未知 scope 不會建立 stub。
    • 多語言繼承與名稱解析修正(v0.9.100):R 的 setClass/setRefClass 以 contains= 宣告的 S4/R5 繼承現在會產生 inherits edge(#4902);Elixir 裸函式呼叫優先解析到呼叫者所在模組(#4900);Dart mixin 的 on A, B 會解析每個 superclass constraint(#4899);Fortran derived type 的 extends(base) 會產生 inherits edge(#4897);Scala extension (x: T) def m 會 scope 到 receiver type T,而非 file scope(#2044、#4856);Terraform node 保留原始 scope,使快取專案目錄移動後 id 保持穩定(#4858、#4861)。
    • Java 與 Kotlin 跨檔解析(v0.9.100,#4874、#4879):當書寫的 FQN 唯一對應到 sourced type 時,Java 與 Kotlin 的 imports、extends/implements 及 member calls 可跨檔案、也可跨兩種語言解析。
    • Windows 非 ASCII worktree 路徑(v0.9.100,#4903):git rev-parse 輸出以 UTF-8 解碼,使位於非 ASCII 路徑下的 linked worktree 在 Windows 可正確解析,不再出現 mojibake。
    • JS/TS import resolution 效能(v0.9.100,#4909、#4913):reference edges 依 source 建索引一次,避免每個 import 都重新走訪所有 edges;輸出不變。
    • Code-only graph 的孤立節點提示(v0.9.100,#4887):在僅含程式碼的 graph 中,孤立節點問題原因改為「possible missing edges」,不再提及不適用於此情境的 documentation gaps。
    • Skill 建圖指引(v0.9.100,#4829、#4906):skill 現在說明何時值得建立 graph,並套用於所有產生的 hosts;同時保留「使用者呼叫 /graphify 時照要求執行」的規則。
    • PyAV 相依版本限制(v0.9.100,#4842):video extra 將 PyAV 限制為 av>=11,<19;PyAV 19 移除了 faster-whisper 開啟音訊時無條件傳入的 metadata_errors 參數,未設上限時 Python 3.12+ 的全新安裝會無法轉錄。
    • 平行關係匯出(v0.9.100,#4794):path/explain/wiki rendering 會透過 edge_datas 列出兩節點間每個平行關係;raw --no-cluster 寫入會將 graph 標為 multigraph,讓平行 edges 在重新載入後保留。
    • 備份失敗重試(v0.9.100,#3769、#4834):不完整或失敗的 backup 會回報為「沒有 backup」,並在下次執行重試,不再記錄成成功。
    • affected 與 query seed 名稱解析(v0.9.100,#4792、#4797):graphify affected 與 query --seed 重用 explain 的 resolver,支援相同的 path::Symbol 與 dotted reference 寫法;seed 無法解析時以 ambiguous 的 exit code 3 或 not-found 的 exit code 4 非零結束。
    • Uninstall 清理完整性(v0.9.100,#4782、#4789):graphify uninstall 移除所有平台的 user-scope skills(先前有 13 個遺留)與 kilo global command;graphify kilo uninstall 也移除 kilo skill 的 references/ sidecar。
    • 既有使用者影響:若使用的 gateway 不接受 cache_control,可設 GRAPHIFY_CLAUDE_PROMPT_CACHE=0 停用 Claude prompt cache。
    • 完整教學見 lessons/v09100-ids-collision-and-prompt-cache.mdx。
    上游 Release Notes ↗
  5. v0.9.99

    舊版本2026-10-31
    • 版本定位:v0.9.97→v0.9.99,涵蓋 v0.9.98(2026-10-30 22:55 UTC 發布)與 v0.9.99(2026-10-30 23:42 UTC 發布)兩個 release。主軸:最短路徑的信心誠實化——整體路徑信心回報為最弱跳(weakest hop)、多條等長路線取最保守者、path/explain/neighbors 輸出顯示每條邊的 confidence_score,折疊邊並以 also_seen 保留較弱證據。
    • Feat:等長路線取最保守者(v0.9.99,#4881 下半場):多條路線等長時,graphify path 與 MCP shortest_path 工具回報最保守的一條——在所有最短路徑中,選「最弱跳最弱」的路線,摘並註明它是 N 條等長路線中最弱者。過去任意回傳一條等長路線,信心可能高估連線的確定程度;上半場(折疊邊保留較弱證據於 also_seen)已於 0.9.98 經 #4891 出貨。
    • Feat:路徑整體信心=最弱跳(v0.9.98,#4885、#4892):graphify path 與 MCP shortest-path 輸出以最弱跳(先比最低信心層級、再比最低分數)回報整體路徑信心,附一行點名該跳的摘要。
    • Feat:serve 輸出顯示 confidence_score(v0.9.99,#4882、#4888):path、explain 與 neighbors/get_neighbors 在邊的 tag 旁印出儲存的 confidence_score(如 [INFERRED 0.75]);EXTRACTED 維持裸標(定義上為 1.0),缺失或非有限(non-finite)的分數也維持裸標。可與最弱跳路徑摘要及 also_seen 證據標籤組合。
    • Fix:折疊邊保留較弱證據 also_seen(v0.9.98,#4881、#4891):重複的同關係邊折疊時,輸家(較弱信心)副本的 provenance 保留在存活邊的 also_seen 清單而非丟棄——較弱證據不再靜默流失;該欄位序列化至 graph.json 且跨重建冪等(idempotent)。
    • Fix:path 的 Type.Member 端點(v0.9.98,#4884、#4893):Type.Member 寫法的端點解析到 member 節點而非包含型別——graphify path "Exporter.Run" "PdfReport.Build" 找到真實呼叫路線;精確名稱與檔名仍優先,member 不存在的 Type.Member fail closed。
    • Fix:C# 方法標籤(v0.9.98,#4883、#4889):C# method 節點以擁有型別標示(MyClass.Method)而非裸 Method,跨型別的同名方法可區分;節點 id 與邊不變(僅顯示標籤)。
    • Fix:Go 解析系列(v0.9.99):package 層級 var 初始化器中的呼叫(含 func-literal closure 內——常見的 swappable-hook 模式)歸功到檔案節點而非被丟棄(#2360、#4867);作為函式引數的 method value(Wrap(s.Health))連結為 indirect_call,Go 在 callback-by-method-value 上與 Python/JS 看齊,並保守防範 field-access 誤判(#1566、#4868);receiver 欄位的 struct 宣告在同 package 兄弟檔時可定其型別——成員呼叫跨「struct 在此、methods 在彼」的常見 Go 佈局解析,欄位型別並跨增量重建保存(#3368、#4866)。v0.9.98 另修:var x = T{} 或 var x = &T{}(composite literal)綁定的 receiver 定為 T,與 x := T{} 一致(#4843)。
    • Fix:Python dispatch table(v0.9.99,#1566、#4773):dispatch table(如 {"a": mod.func_a},含巢狀集合)中列出的 module.func 值解析到被引用的函式為 indirect_call,不再被丟棄;不可呼叫、class 與 local-receiver 的值不動。
    • Fix:安裝位置×2(v0.9.99):Windows 上 gemini 有自己的全域 skill 目錄(~/.gemini/skills/graphify),不再與 agents 平台的目錄碰撞;既有的 agents skill 會被註記而非刪除(#2800、#4770)。全域 OpenCode plugin 改寫入 ~/.config/opencode(與全域 skill 同處)而非當前目錄,install/uninstall/refresh 保持對稱,legacy 位置仍被清理(#3398、#4771)。
    • Docs: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。
    • Fix:v0.9.98 抽取與管線批次:extract——檔案 id 與每宣告 id 保持區分,與檔案同名的頂層宣告(如 a.js 中的 class 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 邊,不再只有單一 library 的 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);pdf——轉換文字快取以解析後的來源路徑為鍵,不同 root 中同名相對路徑的兩個 PDF 不再互相污染(#4851)。
    • 完整教學見 lessons/v0998-v0999-path-confidence-and-evidence.mdx。
    上游 Release Notes ↗
  6. v0.9.97

    舊版本2026-10-28
    • 版本定位:v0.9.96 → v0.9.97。主軸:rationale label credential redaction 移至單一 pre-cache choke point 並覆蓋更多洩漏形態;mcp extra 的 anyio 下限升至 >=4.14.2,另有 Markdown、YAML、語言抽取、CLI、build 與 query 修正。
    • Security: rationale redaction(v0.9.97,#4647):rationale labels 的 credential redaction 移至單一 pre-cache choke point(_redact_rationale_labels 位於 _safe_extract),使 extractor 無法略過;涵蓋空 user 或 password 含 //@ 的 URL userinfo、PEM private-key bodies、以 _ 黏連周圍文字的 tokens(例如 ghp_...)、Slack xoxe- refresh tokens、short JWTs,以及先前未遮蔽就建成 labels 的 Common Lisp docstrings。Benign strings(hashes、sk- prose、沒有 userinfo 的 URLs)不受影響。
    • Security: deps(v0.9.97):mcp extra 中 anyio 的下限設為 >=4.14.2,高於 CVE-2026-63374(IDNA 2003 與 2008 hostname-validation bypass,允許 MITM 在 non-ASCII domain 上提供另一個 ASCII host 的憑證,CVSS 9.3);anyio 僅為 transitive dependency,lockfile 已解析至 4.15.1,此下限避免未來重新解析時退回。
    • Fix: markdown 標題解析(v0.9.97,#4790、#4791):ATX headings 依 CommonMark 解析:結尾連續的 # 不屬於標題文字(## Setup ## 是「Setup」),允許最多三個縮排空格(四格是 indented code block),只有井字號的 ## ## 不建立 node。
    • Fix: markdown fenced code blocks(v0.9.97,#4787、#4788):依 CommonMark 規則追蹤 backtick 與 tilde fences、info strings 及相符的 closing length;fence 內看似標題的行不再洩漏為結構,而含 ``` 行的 ~~~ block 後方標題不再遺失。
    • Fix: yaml structural extraction(v0.9.97,#4784、#4785):從 composed node tree 讀取結構,使 key 保留書寫拼法與各自 source line,不再全部落在 line 1;YAML 1.1 的 on/off/yes/no bare keys 不再折成 booleans,workflow on: block 會被抽取而非轉成 True node。
    • Fix: razor(v0.9.97,#4820):component 的 @implements interfaces 會抽取為 implements edges,不再被默默丟棄。
    • Fix: terraform(v0.9.97,#4819):aliased provider block 取得自己的 alias-qualified node,使兩個 provider "aws" blocks 不再合併並遺失 attributes;provider = aws.west reference 會解析至該 node,而名稱為 provider 的 local 不再被誤讀。
    • Fix: cobol(v0.9.97,#4824):nested END PROGRAM 後的 paragraphs 會重新掛回 enclosing program,不再留在 nested program,透過 program stack 處理。
    • Fix: blade(v0.9.97,#4823):wire:click directive 綁定 bare method name;可匹配 dotted modifiers(wire:click.prevent="submit"),從名稱移除 call arguments(deleteItem(5) 綁定 deleteItem),而 $-prefixed magic action 不建立虛構 edge。
    • Fix: pascal(v0.9.97,#4825):regex fallback(未安裝 optional pascal extra 時的預設路徑)會將帶有自身 methods 的 record 辨識為 type,與 tree-sitter 路徑一致;也會抽取 operator members。
    • Fix: vbnet(v0.9.97,#4821):Operator declaration 會抽取為 class 的 operator-kind member,並走訪其 body 中的 calls,使 operator 內的 helper call 不再消失。
    • Fix: fortran(v0.9.97,#4795):call 解析至其實際命名的 subroutine,而非附加呼叫檔名、永遠無法解析的 target;使用 extractor 自己的 cross-file stub idiom。
    • Fix: cli(v0.9.97,#4830):單獨執行 graphify query --help/-h(以及現在的 graphify explain --help/-h)會印出 usage,而非把 --help 當 literal query;較長問題僅包含 --help 子字串時仍作為 query 執行。
    • Fix: js(v0.9.97,#4767):nested(inner)function 不再洩漏到 file-wide name map;其他位置的 call 會綁到同名 top-level function,而非不可見的 inner function;recursion、shadowing 與 sibling scopes 正確解析(將 Python scope scheme 移植到 JS/TS)。
    • Fix: ocaml(v0.9.97,#4822):and-chained module ... and ... 或 class ... and ... 中的每個 binding 都會抽取,不再只抽第一個而默默丟棄後續 bindings;每個 binding 帶有自己的 source line。
    • Fix: verilog(v0.9.97,#4774):SystemVerilog class task method 以與 function 相同方式建模(自身 node、method edge 與 parameter-type references);task-local variable 不再洩漏成 class 上的 false field reference。
    • Fix: build 缺少 relation 的 edge(v0.9.97,#4810、#4826):沒有 relation 的 edge 在 build 與 raw --no-cluster write paths 都會被丟棄;alias folding(relationship 至 relation)先於檢查執行。
    • Fix: build shrink guard(v0.9.97,#4778、#4779):重新載入時折疊至 AST file twin 的 saved document-mention node 會計為仍存在、不再視為遺失;當實際上沒有遺失時,cluster-only write 不再被拒絕。
    • Fix: detect linked git worktree(v0.9.97,#4683、#4833):若 linked git worktree 的 main checkout 解析在 scan root 內,該 worktree 會被 prune,不再將 sibling worktree 當成 repo 的第二份完整副本索引。
    • Fix: resolution workspace glob(v0.9.97,#4681、#4687):pnpm-workspace glob 中的 inline comment 依 YAML 規則移除;Path.glob 拒絕的 glob(含 ** component 或 absolute pattern)改為跳過並發出 warning,不再使整次 extract crash。
    • Fix: report community hub wikilink(v0.9.97,#4696):community hub 的 [[wikilink]] 透過與 export 相同的 export._obsidian_safe_stem 產生 slug,使連結指向 export 實際寫出的檔案而非 dangling。
    • Fix: wiki case-only relabel(v0.9.97,#4508、#4798):community 僅以字母大小寫重新命名時保留 article,不再由 sweep 刪掉該次執行剛寫入的檔案;case-sensitive filesystem 上會 unlink stale lowercase twin,而非 rename 覆蓋新檔並還原舊內容。
    • Fix: query filler verbs(v0.9.97,#4686):query terms 移除 filler verbs get/gets/got/getting(比照既有的 work/works),使標籤為「Get」的 framework hub 不會因 exact-match bonus 成為 BFS seed;對字面值 Get 的 node lookup 仍可解析。
    上游 Release Notes ↗
  7. v0.9.96

    舊版本2026-10-27
    • 2026-10-30 查核:上游最新 release 仍為 v0.9.97(2026-10-27 發布),其後無新版本。
    • 版本定位:v0.9.95→v0.9.96(2026-10-26 發布,release notes 標題日期 2026-10-25)。主軸:依賴安全升級、graphify update 無關聯變更時跳過管線,並包含 LLM、watch、解析與 CLI 等修復。
    • 依賴安全升級:Pillow floor 升至 >=13.0.0(Python 3.11+;3.10 維持 >=12.3.0,Pillow 13 已不支援 3.10)、pypdf 升至 >=6.19.0,lockfile 並刷新至 transitive dependencies 的修補版本(pyjwt、cryptography、certifi、urllib3、anyio、fsspec、soupsieve、virtualenv)——清除大部分開啟中的 Dependabot advisories;Pillow image-parsing CVEs 只在 Python 3.11+ 有上游修補,3.10 安裝維持最新的 3.10 相容 Pillow。
    • Perf:update 無關聯變更跳過管線(#4740、#4748):graphify update 在無相關輸入變更時跳過 detect/extract/build 管線、輸出保持不動——以 scan file-set、config、.graphifyrc、extractor epoch 與 output-completeness stamp 為判斷依據;沒有 manifest row 的檔案(含先前抽取失敗者)仍強制完整重建,之後的修復永遠不會被跳過。
    • LLM 層修正:DeepSeek backend 改以 max_tokens(DeepSeek 認得)送出 output cap,而非被它忽略的 max_completion_tokens,回應不再無上限(#4739、#4753);回應前就失敗的 chunk 不再把檔案誤報為 model omissions,警告會區分失敗 chunk 與真正的遺漏(#3616、#4752);Ollama context window 以把非拉丁字元算成完整 token 的估計與真實 system-prompt 長度計算,非英文或過長的 prompt 不再靜默截斷(#4414、#4761);confidence 寫成不同大小寫(extracted/Extracted)的 code node 仍先證據檢查才折疊到 EXTRACTED,未驗證節點不再被當成 solid(#4733)。
    • 解析修正(多語言):Python member call 綁到實際拼寫的方法而非 case/underscore 摺疊的孿生——run() 不再解析到 _run(),真正的碰撞 fail closed(#4734);Python 呼叫只綁 Python caller 到 Python target,他語言同名類別不再被誤綁(#4757);Zig 的呼叫不再跨越 method 與同名 free function——bare call 綁 free function、receiver call 綁 method(#4755);Dart 未命名的 extension on T { } 宣告也偵測並抽取、成員掛到被擴展型別(#4741);Rust 的 use 限定在所指名的 crate——use serde_json::Value 不再解析到另一個 crate 的同名型別,具名 pub use re-export 會跟隨(#4699、#4712);TypeScript 鏈式裝飾器(@(Link().toMany()))恢復為 decorator reference(#4711、#4715);const X = require('pkg') 的外部套件綁定保留節點(以套件為 source)讓 new X() 仍可解析(#4688、#4702);Python 呼叫經建構子參數注入的欄位、或經方法回傳型別標註的區域變數,在有單一明確 producer 與 class 時解析到目標方法(INFERRED,#4726)。
    • 管線與 CLI:watch 的每次 rebuild 受 GRAPHIFY_REBUILD_TIMEOUT(預設 600s,0 停用)約束,SIGALRM 不可用時改 thread-Timer fallback,hung rebuild 不再拖垮 watcher(#2173、#4724);被 detect() 分類為 paper(arXiv 標記+Abstract)的 Markdown 檔納入 watch quick-scan rebuild,不再貢獻零節點(#4750、#4751);每個未完成的 CheckRun 狀態(WAITING、REQUESTED、PENDING…)都算 pending CI,被 deployment-protection job 擋住的 PR 不再被讀成 ready(#4730);PreToolUse hook 提醒改為事實句式而非命令句,agent 的工具結果串流不再把它讀成 prompt injection 而忽略(#2202、#4764);graphify extract 把每次執行的 token 用量記錄到 graphify-out/cost.json(與 skill 寫的同一本帳,#1769、#4765);AST cache 命中率改以檔案總數為分母,warm run 不再印出誤導的「100% uncached」(#4740、#4746)。
    • 其他修正:Obsidian note 列出兩節點間的所有平行關係(如同時 imports 與 calls)而非只有第一條邊(#4731);hyperedge 以 members/node_ids 別名給成員時,數字 id 也像 nodes 一樣轉字串、hyperedge 不再被丟棄(#4732);MSBuild 產出的 obj/、bin/ 只在附近有 build 證據(restore/runtime 標記)時修剪,掃過 build 後的 C# 專案不再吃進生成原始碼、真實的 src/bin 保留(#4742);XAML codebehind 解析與目錄迭代順序無關,case-sensitive filesystem 上的圖穩定(#4747);Robot framework 同名測試案例以行號加鹽、各有節點(#4697);VB.NET 外部 namespace/type 發出帶空 source_file sentinel 的 sourceless stub、不再產生驗證失敗的節點(#4725、#4728);LLM 標記的 cross-document reference stub 與真實定義碰撞時改以 namespace 區分,兩個節點都不再丟失(#4738、#4743)。
    • 完整教學見 lessons/v0996-deps-security-and-update-skip.mdx。
    上游 Release Notes ↗
  8. v0.9.95

    舊版本2026-10-24
    • 版本定位:v0.9.94→v0.9.95(2026-10-23 發布)。官方定位:21 個社群 pull request,外加安裝安全強化(a security pass on install);主軸:Python、Go、C++、Rust 的明確型別別名(type alias,含 Rust union)抽取為 type node 讓 references 解析到真實宣告、C# method overload 各自成節點,以及 .yaml/.yml 結構化進圖譜。AST cache schema 有 bump,升級後首次建置會重新抽取(re-extract)。
    • 安裝安全:skill 寫入改走隨機名稱暫存檔(#4513):skill-install 的每一次寫入(version stamp、SKILL.md、references)都先寫進以 mkstemp/mkdtemp 建立、帶 O_EXCL 與受限權限的隨機名稱暫存檔,不再用可預測的 *.tmp 名稱——本機攻擊者預先在該路徑放置 symlink 也無法把寫入導向任意檔案(clobber an arbitrary file);最後的搬移維持原子性。
    • .yaml/.yml 結構化抽取(#2214、#4706):YAML 檔以檔案節點加 contains 邊連到各 key 的方式被結構化抽取、並分類為 code 而非 documents——Helm charts、Kubernetes manifests 與 CI pipelines 在 code-only 或 --update 執行中貢獻節點,處理方式與 .json 一致。多文件流(--- 分隔)逐文件走訪;資料陣列、OpenAPI/Swagger spec、JSON-schema-in-YAML 與扁平資料包被跳過,避免資料型 YAML 鑄出孤兒節點;解析用 safe_load,!!python/... tag 永不執行;輸出有界(1 MiB、500 pairs、深度 6)。
    • 型別別名抽取為 type node:Python 的模組層明確別名(X: TypeAlias = ...、type X = ...、NewType)抽取為 type node,以該別名標註型別的 field/parameter 解析到它,隱式指定、區域別名與 re-export 不動(#4578);Go 的 type A = B 別名抽取為 type node(tree-sitter 解析為 type_alias 而非 type_spec),re-export(type Field = pkg.Field)不鑄節點(#4579);C++ 的 namespace 層 using A = B;/typedef B A; 抽取為 type node,class 內成員別名與同名 re-export 排除(#4580);Rust 的 type 別名與 union item 抽取為 type node(union 的 fields 像 struct 一樣引用其型別),impl 附屬的 type 排除(#4581)。references 解析到真實宣告,不再鑄出無來源 stub。
    • C# method overload 各自成節點(#4584、#4591):每個 overload 有自己的節點與 source location,不再折疊為一個;呼叫依參數數量(argument count)綁到對應的 overload,涵蓋 in-file、receiver-typed、裸名跨檔、partial-class 與 interface-dispatch 解析;非 overload 的方法 id 不變。
    • 安全修復×3:SSRF guard 封鎖解析到 multicast 位址(224.0.0.0/4、ff00::/8)的主機,補齊既有的 private/reserved/loopback/link-local 檢查(#4708);Obsidian 匯出把節點的 file-type 與 confidence 放進 frontmatter tags 前先消毒,crafted 值無法 breakout 到相鄰 key(與 community tags 既有的消毒一致,#4709);Google Workspace 捷徑 sidecar 對 file id 與 url 做完整 YAML double-quoted-scalar 跳脫(tab、C0/DEL 控制字元與 Unicode 行斷 U+2028/U+2029/U+0085),敵意捷徑檔無法注入 frontmatter key(#4710)。
    • 圖譜與管線:合併多 repo 圖上 graphify export tree 給每個 repo 自己的根(以 repo tag 為 key),不同 repo 的同路徑檔案不再混同,未標 tag 的節點不計為 repo(#4524、#4525);package.json 相依的 manifest entry 以 declares 邊連到 import 程式碼解析到的節點,manifest entry 與其 importers 共用一個節點而非各自孤立,entry 改標 name@range(#4569、#4572);graphify affected <path> 能解析被 shared-basename 後綴消歧的檔案節點標籤(例如來自不同目錄的兩個 hooks.py),重用 canonical file-label 判定而非裸 basename 比對(#4698、#4713)。
    • 抽取與解析:裸呼叫僅因 caller import 了該符號所在模組而撞到同名符號時(如 from b import other 後呼叫同時定義於 a.py 與 b.py 的 _make_id),不再被升為 EXTRACTED——邊仍發出以維持連通、但維持 INFERRED,未被 import 的符號不再被假認證;真正的符號 import(from a import _make_id)仍解析 EXTRACTED(#2945、#4707);raw(--no-cluster)build 用與 clustered build 相同的 old-stem alias index 解析 import 端點、解析失敗才鑄 external stub,raw 圖不再把 import 凍結在 clustered 圖已能解析的 stub 上(#4670、#4676);欄位預設值 SQL 文法解析不了(如 MySQL/MariaDB 的 DEFAULT current_timestamp())的 CREATE TABLE 改從 ERROR node 救回,資料表與 foreign-key references 仍可解析(#4613、#4677)。
    • 平台與其他:AST cache 在 Windows 走延伸長度(\\?\)路徑讀寫,超過 260 字元限制的深層 cache 路徑不再以 FileNotFoundError 讓抽取失敗,Windows 之外無影響(#4542);binary 媒體檔(圖片或 audio/video)不再被當文字讀取並計入 corpus 字數,SVG 仍以其 XML 文字身分被計入(#4548);跨 repo 的 Objective-C 類別(一 repo 的 header 宣告、另一 repo 的 .m 實作)把成員呼叫綁到實作(同 repo split-dir 修復的跨 repo 版),兩個定義同一 selector 的同名類別維持歧義(#4690、#4691);NS_CLOSED_ENUM 與 NS_ENUM/NS_OPTIONS 一樣抽取為 enum 含 cases(#4705);rebuild hook 從 checkout 頂層執行(取自 git common dir、退回 --show-toplevel),子目錄裡的雜散 graphify-out/ 不再把重建根到錯誤位置並走訪巨大樹(#3258、#4689)。
    • 完整教學見 lessons/v0995-community-batch-yaml-and-install-security.mdx。
    上游 Release Notes ↗
  9. v0.9.94

    舊版本2026-10-23
    • 2026-10-23 查核:上游最新 release 仍為 v0.9.94(2026-10-22 發布),其後無新版本。
    • 版本定位:v0.9.92→v0.9.94,涵蓋 v0.9.93 與 v0.9.94 兩個 release(分別 2026-10-20 與 2026-10-22 發布)。主軸:v0.9.93 以 22 個社群 PR 讓引用解析(reference resolution)落到真實宣告;v0.9.94 以 19 個社群 PR 加入 ingestion 安全防護。兩版皆有 AST cache schema bump,升級後首次建置會重新抽取(re-extract)。
    • 引用解析到真實宣告(v0.9.93):"a reference to a Kotlin type alias, C# delegate, Swift macro, Dart typedef, Python module function or Rust sibling-module use now resolves to its real declaration instead of minting a sourceless stub"——Kotlin typealias 被抽取、以 alias 型別標註的 field/parameter 解析到宣告而非無來源 stub(#4553、#4557);C# delegate 宣告被抽取、references 解析到它,內建 Func<>/Action<> 仍維持 external(#4552、#4556);Swift macro 宣告被抽取、獨立的 #macro(...) 呼叫解析到宣告,未知或標準庫 macro 維持 unresolved 而不鑄 stub(#4551、#4555);Dart typedef(含舊式 typedef R name(args))抽取為 type alias,不再變成 typedef 型別的 bogus variable(#4582);Python module.func() 解析到模組下精確名為 func 的 child,即使有同 key 兄弟(如 func_schema 函式旁的 FuncSchema 類別)造成歧義也不丟邊、絕不綁到無關模組的同名 child(#4577);Rust 根於 sibling mod 的 use(如 use item::Thing;)抵達其宣告,而 external 的 use serde::... 不再劫持同名 local type(#4564、#4567)。
    • v0.9.93 其他抽取與管線修復:Metal/CUDA GPU qualifiers(kernel、device、constant、__global__、__device__ 等)不再鑄出無來源 god nodes,kernel function 仍正常抽取、<<<...>>> launch 仍解析(#4550、#4554);含 extern "C" 的 .h header 改送到 C++ extractor(#4526);帶版本化直譯器 shebang(#!/usr/bin/env python3.11 等)的無副檔名 script 正確分類(#4535);Obsidian vault 相對路徑的 [[wikilink]] 解析到真實頁面而非 ghost node(#4559);節點的漂移或舊式 confidence 以 edges/hyperedges 相同方式折疊為 enum(#4529、#4531);被截斷回覆救回的 community labels 做 JSON 解碼(#4537);.graphifyrc 以 utf-8-sig 讀取以免 BOM 吃掉第一個 key(#4538);GraphML 匯出 MultiGraph 不再輸出空檔(#4536);explain/path 中兩個不同 repo 的同路徑檔案保持可區分(#4512);裸名撞多節點時以 candidates 列表拒絕並回傳 ambiguous exit code(#4511、#4517);PDF 讀不到時印一次性警告而非靜默回傳空文字(#4527);--version/--help 不再改寫或備份 skill 檔(#4545);skill 抽取路徑上 subagent 只讀一半的長檔會寫入 .graphify_partial.txt、標記為 partial,下一次 --update 重新派發,取代「默默保留半讀結果」(#3987、#2225);rationale labels 做 credential 脫敏(API keys、tokens、private-key headers、user:pass@ URLs,git SHAs 與 UUIDs 保留原樣,#4566);PR 工具修復:含斜線的 default branch 不再整批丟棄(#4534)、CI 分類加讀 legacy StatusContext 狀態(#4533)。
    • Ingestion 安全防護(v0.9.94):"a fetched URL with no hostname, with a malformed or zero port, or with embedded user:pass@ credentials is now rejected before the request leaves, on the first fetch and on every redirect"——validate_url 在請求送出前、以及每一次 redirect 前拒絕無 hostname(http:///path)、非數字/超範圍/零 port、或內嵌 user:pass@ credentials 的 URL,畸形或帶憑證的 URL 不再被 fetch 或寫入圖譜;path/query 中正常的 @ 與合法的高 port 仍通過(#4643、#4644、#4645)。text capture 也改用 lstat,dangling symlink 視為已占用、不再沿連結寫到 corpus 之外(#4657)。
    • v0.9.94 其他抽取與解析修復:Maven POM 只貢獻自己的 <dependencies>(含 <profiles> 下的),不再把 <dependencyManagement> 或 build plugin 的相依發成 dependency edges(#4596);JS/TS 對 untyped receiver 的成員呼叫延後到 receiver-typed 解析,不再猜測同檔同名方法(#4598、#4605);CommonJS const X = require('./m') 不再鑄出遮蔽所需檔案 exported class 的 module-scope node,new X() 解析到 required 宣告(#4621、#4634);Objective-C category node ids 維持 repo 相對路徑、跨機器可攜(#4666、#4642);SQL 專題——T-SQL bracketed identifiers 去括號(#4635、#4649)、GO batch separator 結束語句(#4651、#4652)、先引用後 CREATE TABLE 的表折疊到真實定義且不同 schema 的同名表保持可區分(#4653、#4654)、stored procedure 發出 reads_from/writes_to edges;markdown 散文中的裸方法名只在 owning class 同文件被引用時才連結(#4609、#4617);MCP get_node/get_neighbors 與 explain 對 substring near-miss 改為給候選建議而非回傳無關節點(#3917、#4618);cross-repo call edge 指向真正的 call site(#4668、#4669);Objective-C 跨 header/impl 的成員呼叫解析(#4673、#4674);增量建置不再每輪重新排入 extractor 因設計而拒絕的檔案(#2543、#4672);Codex hook command 引號包住含空格路徑的執行檔(#4662);IPv6 bracketed Host header 修復 421(#4656);--help 列出完整且防漂移的 --platform 清單(#4655)。
    • 完整教學見 lessons/v0993-v0994-resolution-and-ingestion-security.mdx。
    上游 Release Notes ↗
  10. v0.9.92

    舊版本2026-10-18
    • 版本定位:v0.9.91→v0.9.92(2026-10-16 發布,單一 release)。官方定位:23 個社群 PR——跨 JS/TS、Python、Go、Rust 與 Solidity 的呼叫解析與 id 碰撞修復;graph round-trip、dedup 與 confidence-folding 修復;skill code-only-update 與 dispatch 修復;LLM/Ollama 與 detection 修復。AST cache schema 有 bump,升級後首次建置會重新抽取(re-extract)。
    • 呼叫解析與 id 碰撞:JS/TS 僅差 _、$ 或 # 的 class members 保留為分開節點(#4475、#4479);TypeScript 的 this.field 型別可從任何 method 內的 assignment 推得(含 static 與 accessor,#4473、#4482);JS 的 workspace 套件 exports 只指進 dist/ 時回退 src/(#4485、#4489)、經 barrel 解析的懸空 import 邊丟棄(#4486、#4488);Python 的 module-level class id 與函式/類碰撞時加鹽分開(#2810、#4467)、pytest fixture 參數的成員呼叫從 fixture 回傳類別取型別(#4332、#4333);Go/Rust 同檔僅大小寫不同的宣告分開(#4468);Solidity 繼承呼叫、super 呼叫與 modifiers 走 C3 linearization 解析(#4379、#4384)。
    • 圖譜與管線:MCP 的 parallel edges 在 graph.json round-trip 與查詢輸出中保留(#4500、#4503);dedup 時有 source_file 的節點在碰撞排名勝過無來源同名節點(#4492、#4496);模型漂移的字串 confidence 在驗證與 dedup 前折疊為合法值(#4495、#4501);detect 只把有效 .git 當 VCS root,家目錄的離散 .git 不再洩漏其 .gitignore(#4444、#4464);hooks 在真 merge 後重建、新增 post-rewrite hook 在 cherry-pick/rebase/pull --rebase 後重建(#4463、#4476、#4490、#4491);tree-sitter-dm 釘在 <0.26 以免新安裝拉到 ABI 不相容的 grammar(#4044)。
    • Skill 與 LLM:code-only --update 路徑在 merge 前先 materialize 抽取、跨所有 hosts 生效(#4447、#4313);雙引號 -c 區塊內的雜散反引號不再中途執行指令(#4461、#4462);Pi 把語意 subagents 派發到原生 delegate agent(#4494、#4502);agent 推送到你給的精確 Neo4j/FalkorDB URI 而非 localhost 範例(#4349);抽取 prompt 把 source_file 釘在派發的檔案(#3377、#2270、#4487);新增 GRAPHIFY_BACKEND 選後端、停用開關,以及誠實的 auto-detect(#4361、#4376)。
    • 既有使用者影響:AST cache schema bump——升級後第一次建置會重新抽取;用 Solidity、pytest fixture 或 barrel imports 的圖譜準確度提升。
    • 完整教學見 lessons/v0992-community-fixes-solidity-c3.mdx。
    上游 Release Notes ↗
  11. v0.9.91

    舊版本2026-10-16
    • 版本定位:v0.9.90→v0.9.91(2026-10-14 發布,單一 release;官方定位:Eight community pull requests)。主軸:MCP stdio、Rust/JS/TS/extract 呼叫解析與 id 碰撞、Ollama context、clustering 標籤保留等八個修正。AST cache schema 有 bump,升級後首次建置會重新抽取(re-extract)。
    • MCP stdio 修正(#4440、#4441):Windows 上 stdio host 之下 graph_stats 不再卡死——_git_head 關閉 git child 的 stdin,git 不再卡在 JSON-RPC pipe;同時不再默默丟掉 built-at-commit staleness 行。
    • 語言解析修正:Rust 的 use crate::…::Name 邊落在它 import 的宣告上,而非 name-folded 目標(#4439、#4443);JS/TS 檔案範圍 callback 的自身參數現被遮蔽,裸參數傳遞不再鑄出幻影 cross-bundle indirect_call 邊(#4448、#4457);extract 中 id 與兄弟檔案 id 同拼法的模組符號(如 const sql 旁的 x.sql)保留在自己的節點,不再被併入兄弟的檔案節點而消失(#4449、#4452);TypeScript class field 的 receiver 型別限定於自身 class 與基底,兩個 class 同欄位名時 this.field.method() 解析到正確的 class(#4294、#4297)。
    • Ollama 與 cluster:抽取與標記請求改走 Ollama 原生 /api/chat,衍生 num_ctx 真正送達 server、大 prompt 不再被靜默截斷;無 /api/chat 的 server 退回 OpenAI 相容端點(#4413、#4414)。cluster 社群在重建後、成員仍與前一社群嚴格多數重疊時,保留 curated 或 LLM 標籤(#2298、#4451)。
    • 既有使用者影響:AST cache schema bump,升級後第一次建置會重新抽取;Windows + stdio host 的 graph_stats 卡死與 Ollama 大 prompt 截斷問題修復。
    上游 Release Notes ↗
  12. v0.9.90

    舊版本2026-10-14
    • 版本定位:v0.9.88→v0.9.90,涵蓋 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,Go/PHP/TS/Kotlin/ObjC):receiver 型別宣告在另一個 repo 時,single-repo build 期間以名稱暫存,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)。
    • 介面派發與 hook(v0.9.89):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);binary captures URL 撞名時編號保留(#4393/#4394)。
    • 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.json sidecar(#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 取得。
    上游 Release Notes ↗
  13. v0.9.88

    舊版本2026-10-13
    • 版本定位:v0.9.86→v0.9.88,涵蓋 v0.9.87(官方標題:十八個社群 pull request)與 v0.9.88(二十個社群 PR),兩者同日發布(2026-10-12)。主軸仍是語言抽取與呼叫解析的正確性,外加 dedup/shrink guard 硬化與查詢、graph.html 的人體工學。兩版都 bump 了 AST cache schema,升級後首次建置會重新抽取(re-extract)。
    • 語言抽取修正(v0.9.87):PHP 的 Class::method() 靜態呼叫改解析到被呼叫的方法而非綁到 class 節點,同 namespace 且不需 use 的呼叫不再停在 INFERRED 信心;C# 的巢狀與泛型 partial 型別改用完整型別路徑合併(如 C# 泛型 arity 標記的 Outer`1.Inner),Foo 與 Foo<T> 保持不同,跨檔的非限定呼叫在唯一自身型別候選時綁到呼叫者合併後的型別,且 var 依被呼叫方法的回傳型別定型;TypeScript 的公開呼叫 c.name() 只在 class 宣告了公開 name 時才連到 #name 節點(foo 與 #foo 共用節點時仍保留邊);Julia 的 parametric/module-qualified functor(可呼叫 struct)型別以其型別命名,不再退回變數綁定。
    • 語言抽取修正(v0.9.88):Java 的鏈式/new/cast 接收者呼叫(factory.builder().size(3).build()、new Builder().size(1)、((Builder) o).build())改沿方法鏈的宣告回傳型別解析,且只在單一明確目標時綁定,跨檔繼承而來的裸呼叫/欄位接收者則解析到最近的宣告父型別;C/C++ 跨目錄的引號 include(#include "../lib/foo.h"、STM32 的 Core/Src → Core/Inc)改以唯一的最長共同目錄前綴匹配解析,同分則 fail-closed,且對 ./、../、絕對路徑與角括號 include 永不猜測;Python 的 @name.setter/.getter/.deleter 裝飾器、Python 與 Swift 的 Self 型別註解、Go 的泛型型別參數([T any])都不再產生無來源的 stub 節點;C# 在結尾為轉義引號的 verbatim interpolated string 之後不再靜默丟掉檔案其餘成員;PowerShell 的 dot-source include(含引號或 $PSScriptRoot 路徑)開始產生 import 邊,function 外的 script-scope 指令也被收為呼叫;JS/TS 的裸或 scoped 外部 import 改錨在套件名而非路徑末端(@scope-a/utils 與 @scope-b/utils 不再混同,lodash/fp/map 收斂到單一 lodash 節點)。
    • 新抽取器與查詢功能:新增 EJS(.ejs)抽取器——scriptlet 函式/類別、require/import 邊、dynamic import 與 <%- include(...) %> 的組合邊(v0.9.88,此前只有一個 top-level 解析錯誤);.graphifyrc 可用 language.<ext>=<language|.ext> 宣告模糊副檔名(.inc、.h、TS family)的語言,宣告會貫穿分類、抽取器選擇、imports、watch 與 AST cache,未宣告時偵測行為逐位元不變(v0.9.87);graphify query --seed 可指定遍歷起點(ids、labels、callable 名稱或路徑)讓外部 ranker 決定起始集合,無法解析的 seed 會被回報並跳過,全部無法解析時 fail-closed(v0.9.88);graphify serve 的點號 Python 查詢(pkg.mod.func、pkg.mod:func)改以 module 路徑解析,同檔歧義時 fail-closed(v0.9.88)。
    • 正確性與寫入保護:graphify affected <PR> 改以指定 PR 而非 repository 預設分支界定影響範圍(v0.9.87);update 在節點總數成長時拒絕丟掉已儲存的語意節點 id(視為不完整的重新抽取),export 保留仍在圖中的整數節點 id;update skill 在語意層蓋上 _origin,使只跑 AST 的 update 不能刪除它未重新抽取的語意節點(v0.9.87);dedup 對失去目錄的語意 id 做路徑限定(a/x.md 與 b/x.md 不再塌成一個而遺失節點,第三方檔案對裸 id 的引用改為未解析並附警告),且被 dedup 合法併入 AST 雙胞胎的語意節點豁免 shrink guard(僅限同路徑同標籤、_origin=="ast" 的嚴格雙胞胎,真正的部分建置遺失仍會被拒)(v0.9.88)。
    • MCP、watch 與 hook:MCP query_graph 的 seed 順序改以匹配強度排序,弱匹配(如字母序較前的詞)不再領先特定詞的精確匹配(v0.9.87);watch 在 rebuild lock 忙碌時,整批重建改為排入佇列(取代已排入的 incremental 路徑)並在進行中的 rebuild 後清空,且只在真的排入時才印出 changes queued(v0.9.87);hook 的軟性 read/search 提示改為每 session 有界,不再對每個符合的檔案都觸發(v0.9.87);update skill 只印出增量步驟的短摘要,完整結果留在 .graphify_incremental.json,不再把每個檔案路徑倒進 agent context(v0.9.87)。
    • install/uninstall 與 wiki(v0.9.88):graphify install/uninstall 只移除自己的 hook 條目(以 hook-guard/hook-check 指令鍵判斷,而非寬鬆的 graphify 子字串),保留同群組中其他使用者 hook 與指令,且 uninstall 走備份;CLAUDE.md、AGENTS.md 與同類檔案在 install/uninstall 前後保留原本的行尾(CRLF 或 LF),不再被正規化為平台預設;wiki 索引列在兩個 community 或 god-node 同名時,改為各自連到自己的文章,而非都指向第一個註冊的 slug。
    • graph.html 與 benchmark:graph.html 新增明/暗/跟隨系統主題切換(暗色預設的前後輸出逐位元相同,v0.9.87),側邊欄新增 hover tooltip 顯示被截斷的 legend/search/neighbor 全名與 legend 節點數,使用者文字以 textContent 寫入以保留內嵌 JSON 的轉義(v0.9.88);benchmark 改為計算 query_graph 實際回傳答案的 token(呼叫真正有預算的查詢路徑),而非另一份無預算的重新實作(v0.9.87);labeling 遵守 GRAPHIFY_CLAUDE_CLI_MODEL 環境變數,不再靜默退回 session 預設模型(v0.9.87)。
    • 既有使用者影響:AST cache schema 有 bump,升級後第一次建置會重新抽取;使用 ambiguous 副檔名(.inc、.h)的專案可用 .graphifyrc 明確宣告語言;呼叫解析的修正(PHP、C#、Java、TS、JS 匯入錨定)會改變既有圖譜的邊,重跑 build/update 後才反映。
    上游 Release Notes ↗
  14. v0.9.86

    舊版本2026-10-12
    • 版本定位:v0.9.79→v0.9.86,涵蓋 v0.9.80~v0.9.86 七個 patch(2026-10-07~10-11)。主軸:跨語言解析正確性(同名不再誤綁、型別化 receiver、own-class-chain)、確定性(可攜 id 再擴)、MCP 大加速、平台整合(OpenCode 2 雙形 plugin)與安全(uninstall --purge 防呆、graph.html 跳脫)。
    • 解析正確性攻堅:Python 型別化 receiver(self.x.m()、註記區域變數)、self/cls/super() 跨檔解析到基底、巢狀類別限定身分、絕對 import 不被本地同名模組劫持、if TYPE_CHECKING: 標 type-only(v0.9.80/81);TS this.field 型別來自 class field 宣告、多檔同名 receiver 綁到實際 import 的那個、public 呼叫不綁 #private(v0.9.81);C# arity 區分 node id、member chain/element access/constructor body 呼叫、enum member 排除、外部型別單一共用 placeholder(v0.9.81/83/84);Java/C#/Scala/C++ 未限定呼叫綁到呼叫者自身 class chain(v0.9.83);Rust 檔內呼叫綁擁有的 impl、grouped use 每名稱一條邊(v0.9.82/86);Julia/Fortran/Elixir/Scala 擷取修正(v0.9.85/86)。大量採「平手/不透明即 fail closed」。
    • 確定性與輸出:manifest key、AST cache 過時 id、--no-cluster 路徑與未解析 re-export id 都不再洩漏 checkout 路徑(v0.9.80/83/86);AMBIGUOUS 邊在社群偵測前降權、不再熔合獨立集群(GRAPHIFY_AMBIGUOUS_SCALE=1.0 還原,v0.9.81);AST cache 目錄加 grammar 版本指紋(v0.9.83);graph.html 跳脫內嵌 JSON 的每個 <(v0.9.85);committed graph.json 改一行緊湊 JSON——重跑 build 為 +1/-1 diff(v0.9.86);explain 對檔內同名拒絕靜默擇一、lookup exit code 0/3/4 區分答案/歧義/找不到(v0.9.86)。
    • MCP 加速(v0.9.80):traversal view 與 shortest-path 圖每個載入的圖只建一次(鍵於 graph cache)——query_graph 約 1.6 倍、shortest_path 最高約 300 倍;兩個快取路徑圖記憶體成本有 LRU 上限。graph_stats 回報 build commit 與是否落後 HEAD。
    • 平台與 Windows(v0.9.84/80/83/85/86):OpenCode plugin 改輸出 V1/V2 雙形(V2 以 default export + setup() 載入、v1 server() 保留),graphify install 刷新 v1-only 副本;Windows console script 走多核心抽取 pool;測試套件在 Windows 通過;git hook 處理非 ASCII 檔名;遵守 git 全域 core.excludesFile(v0.9.86)。Graphify Cloud 一次性提示(互動終端、每專案一次、GRAPHIFY_NO_TIPS 關閉,v0.9.82)。
    • 安全修復(v0.9.86,#4329):graphify uninstall --purge 在 GRAPHIFY_OUT 為空或 . 時直接拒絕——解析後的刪除目標會是專案根、家目錄或檔案系統根,不再默默移除工作樹。v0.9.86 共 18 個社群 PR。
    • 既有使用者影響:v0.9.86 的 Rust grouped use 修正 bump AST cache schema——升級後第一次 build 會重新萃取;OpenCode 2 用戶重跑 graphify install;各語言解析修正多在萃取時寫入,需 full build 生效。
    上游 Release Notes ↗
  15. v0.9.79

    舊版本2026-10-07
    • 版本定位:v0.9.73→v0.9.79,涵蓋 v0.9.74~v0.9.79 六個 patch(2026-10-02~10-06)。主軸:決定性(determinism)與可攜性(node id 不再洩漏 checkout 路徑/OS 使用者名/行尾,clone 處處同圖)、intra-class 呼叫綁定跨五語言、語言結構覆蓋持續擴充、一個 git-hook installer 安全修復(CWE-22),以及 incremental/reload 正確性系列。
    • 決定性與可攜性(v0.9.78):unresolved target 的 node id 不再內嵌本地 checkout 路徑或 OS 使用者名——missing require('./x')、missing Python 相對 import、以 window 為 key 的 .dmf element 都改鑄可攜、clone 相同的 id;C# namespace scope id 改以 row/column 為 key,CRLF checkout 不再寫出與 LF 不同的 scope_chain;原始檔在解析前先解碼——UTF-16 檔不再 0 節點、cp1252 名稱不再截斷;graph.json 新增 schema_version/graphify_version metadata(additive,不影響舊讀取器)。
    • intra-class 呼叫綁定跨語言(v0.9.75):self/this/super 成員呼叫綁到呼叫者自身的 class chain 而非檔案級最後定義——Python(self./cls./super(),in-file MRO 最近祖先)、JS/TS(this.m() 綁到自身 class;super.m() 因 extends 鏈未知而 fail closed)、Swift(class vs struct/extension 感知)、Ruby(class chain 內 self-send);多重繼承平手與未知/外部祖先 fail closed。C# partial-class 合併不再丟失遞迴 self-loop——一個 repo 出現 partial class 曾把全圖遞迴邊清光(v0.9.75 #4017)。
    • 語言結構覆蓋擴充(v0.9.74~77):Ruby paren-less self-send 成 call(局部變數遮蔽正確抑制、fail closed);TS abstract 方法簽名、Scala deferred def、C++ class 內成員函式宣告(含 pure-virtual/const/operator/destructor)成 method;Zig tagged-union variants 與 error-set(case_of)、PHP enum cases、Elixir defmacro/defguard 系列、Rust macro_rules!(std macros fail closed);Scala 型別引用三連修(file-scope val/var 註記、type alias RHS、context bounds 成 references);Solidity/PowerShell enum 與 Objective-C enum 走 case_of;SQL trigger 以 executes 連到執行的函式;Verilog .vh header 檔;Kotlin 註解中的 class-literal;Erlang local fun(fun Name/Arity)成 indirect_call;C# null-conditional(?.)與 cast/interface-typed 呼叫解析;PowerShell 方法呼叫;bash 經非 shell 直譯器叫用腳本成 invokes;Dart part 檔與條件 import 的所有 URI 分支。
    • 安全修復(v0.9.76,CWE-22):graphify hook install 拒絕解析後落在 repo 外的 core.hooksPath(雙邊解析、symlink-safe),改回退至 repo 內 .git/hooks——不再把執行檔寫到 checkout 之外;合法的 in-repo 自訂 hook 路徑、linked worktrees 與 submodules 仍可用。
    • 解析正確性:Rust 型別前向引用改 two-pass、order-independent 掃描(同名碰撞 fail closed);Rust prelude 型別(Option/Result/Vec 等)在抽取期過濾,不再累積假 in-degree 成扭曲社群偵測的 god nodes,tuple-struct 建構由 calls 改 references/constructor;Obsidian wikilink 含點名稱([[note.en]])可解析;PHP 語言結構(isset/eval 等)不再綁到同名 user method;跨語言同名基底類別保持 unresolved(不跨語言綁定);Svelte 只把 <script> 餵 AST(先前 template parse error 丟掉全部符號);Astro 行尾 // 註解不再吞掉同列下一個 block;C++ module export macro(class MYLIB_EXPORT Foo)先遮掉 ALL-CAPS macro 再解析。
    • Incremental/reload/diff 正確性(v0.9.75/77/78/79):hyperedge 以 (id, source_file) 為 key,同 id 不同檔的邊不再被增量更新丟掉;子資料夾 update 不再把 sibling 資料夾檔案誤報為刪除;重載 graph.json 在五種匯出器與 watch re-render 保留邊方向(不再反轉 target 在前的邊);graph_diff 保留方向(反轉邊報為變更而非互相抵銷);未掃描的引用目標保留 placeholder 節點(不當成已刪除);watch reconcile 以每路徑一次 identity 計算將 reconcile 從 10.2s 降到 2.7s(graph.json 逐位元組相同);v0.9.79 修復 v0.9.78 新增的 metadata 被 watch 誤判為 topology change、導致不變重建後每次都重新分群與渲染。
    • CLI 與快取:hook-guard 以真實路徑包含檢查取代子字串比對(同名前綴 sibling 目錄不再誤判);workspace package 同時有 source 與 dist 時優先 source(main/module 比照 exports 的既有偏好);graphify extract 拒絕以 dedup 縮小的圖覆蓋既有圖(除非 --allow-dedup-shrink,並回報實際合併數);graphify path 經 contains 邊回到符號所在檔案(跨檔依賴經共享符號可達);AST cache 多 root 各寫各的 stat-index.json;merge-graphs --previous 以 node id 恢復前次社群分配;Ollama num_ctx 併入而非覆蓋 extra_body;graphify 不再索引自身安裝的 skill 資料夾。
    • 其他:單一實作者的 interface dispatch 抽成語言無關核心並用於 Swift protocol(2+ 實作者 fail closed);乾淨解析但零符號的程式檔警告一次(資料字面值常態);R 符號綁定(%||%)不再塌縮到檔案節點;Windows 不同磁碟機的檔案不再中止整個抽取;code-intelligence benchmark 結果登上 README(key-fact coverage 82.0% vs 70.8% grep baseline,n=6)。
    • 既有使用者影響:跨機器比較 graph 的使用者受益最大(v0.9.78 的可攜 id);watch 用戶升級後不再每次重跑分群(v0.9.79);使用自訂 core.hooksPath 指到 repo 外的環境會被拒絕並回退(安全修復);新語言結構需 graphify update 或 full rebuild 生效。
    上游 Release Notes ↗
  16. v0.9.73

    舊版本2026-09-30
    • 版本定位:v0.9.69→v0.9.73,涵蓋 v0.9.70~v0.9.73 四個 patch(2026-09-27~09-30)。主軸:enum 成員擷取擴及四個語言、Fortran 與 Aider/Devin 的安全修復、watch 的 Windows 並行重建序列化,以及各語言解析正確性。
    • 安全修復×3(v0.9.70):Fortran 大寫 F 的 cpp 步驟不再讓不可信的 .F/.F90 原始碼讀取主機任意檔案——-nostdinc -I /dev/null 無法阻擋絕對或穿越式 #include,現在每個 #include 指令在預處理前被移除並以 stdin 餘給 cpp,保留宏展開(GHSA-pcc4-rvhr-2pr8,CWE-22/73/200);Aider/Devin monolith --watch 片段不再將 agent 代入的 INPUT_PATH 插入 shell 指令,改讀受信任的 graphify-out/.graphify_root;Terraform secret redaction 涵蓋 name/value pair 清單中 secret 命名的 value(含 ECS valueFrom)。
    • enum 成員擷取擴及四個語言(v0.9.73):Rust enum variants、Zig enum members、C++ enum/enum class enumerators(含巢狀 enum)、Scala 3 enum cases 及其方法——皆以 case_of 邊連接。
    • 更多語言結構:SQL CREATE TRIGGER 抽取並連到 ON 的表(含 OR REPLACE/OR ALTER、INSTEAD OF 與程序性 BEGIN…END 主體)(v0.9.71);Groovy enum 宣告與常數(v0.9.71);Solidity file-level free functions(0.7+,contract 外宣告)(v0.9.73);Blade 模板 @extends 連結 view 與 layout(v0.9.72);JSX 元件使用產生 calls 邊——<MyButton/> 連到元件,小寫 DOM 標籤與成員標籤保守跳過(v0.9.70)。
    • 解析正確性:Java 呼叫繼承方法與 super.method() 解析到宣告祖先(走 inherits 鏈,最近者勝),未知或外部祖先 fail closed(v0.9.73);VB.NET 型別/模組限定呼叫解析到目標方法(v0.9.73);R 的 R6::R6Class/methods::setRefClass 類別辨識與 self$/private$ 內部呼叫解析(v0.9.71);C# 具名 tuple 元素名不再誤記為型別引用(v0.9.70);絕對 Python import 對 scan root 巢狀 namespace 的投射解析(v0.9.70);Kotlin 同時有註記與推斷型別的屬性不再 crash 丟整檔(v0.9.72);PostgreSQL DO $$...$$ 前的 SQL DDL 被萃取(v0.9.72);Razor @functions {} 區塊的 C# 成員(v0.9.72);Astro 檔只將 frontmatter 與 <script> 塞給 AST pass,行號保留(v0.9.73)。
    • Watch 與輸出品質:graphify watch 在 Windows 以 msvcrt 位元組範圍鎖序列化並行重建,修 WinError 32 競態(POSIX fcntl 路徑不變)(v0.9.70);graph.html Node Info 面板顯示真實 Type/Source/Community(v0.9.72);docx sidecar 轉換保留表格位置與所有文字(含追蹤插入、content control、text box)(v0.9.72);GRAPH_REPORT.md 社群列表重用真實節點過濾器,rationale/concept 節點不再膨脹計數(v0.9.72);label/signature sidecar 原子化發布(labels 先於 signatures),中斷的重建不再殘留過時社群標籤(v0.9.72)。
    • 安裝與整合:套件升級後 graphify 自動刷新過時的已安裝 skills(SKILL.md + references sidecar),本地編輯備份為 SKILL.md.bak,不碰 marker-bounded 的 CLAUDE.md/AGENTS.md/GEMINI.md 區段,可用 GRAPHIFY_NO_AUTO_REFRESH=1 停用(v0.9.72);graphify hook status 將舊版寫入的 hooks 回報為過時(跑 graphify hook install 刷新)(v0.9.73);instructions 檔為 symlink 時 install 回報真實目標、uninstall 保留 symlink 只刪 graphify 區段(v0.9.73);wikilink 索引遵守 .graphifyignore/.gitignore/--exclude(v0.9.71、v0.9.72)。
    • 效能:Neo4j/FalkorDB --push 路徑在 node upsert 迴圈前建立 per-label id index,修大圖吞吐崩塌(v0.9.73)。
    • 其他:Rust virtual-workspace-root Cargo.toml(只有 [workspace] 無 [package])視為設計上跳過而非警告零節點(v0.9.73);manifest 重新錨定以 posixpath/ntpath 保留外來平台 key 的路徑語法(v0.9.71);graphify/graphify --help 顯示 logo 與 hosted platform 連結(v0.9.72)。
    • 既有使用者影響:新語言結構與解析修正需重新萃取(graphify update 或 full rebuild)才生效;以 Fortran 大寫 F 原始碼建圖的環境應立即升級(安全修復);hook 用戶升級後跑一次 graphify hook install。
    上游 Release Notes ↗
  17. v0.9.69

    舊版本2026-09-26
    • 版本定位:v0.9.65→v0.9.69,涵蓋 v0.9.66~v0.9.69 四個 patch(2026-09-22~2026-09-26 連續發布)。主軸是:extractor(語言擷取器)擴充(五個新語言 + 既有語言的結構深度)、決定性(determinism)與 Windows 可靠性、跨檔 resolution(Go / Rust / TS solution layout),以及一個 shell injection(命令注入)安全修復。
    • 新增五個語言 extractor(v0.9.66):COBOL(.cbl/.cob/.cobol/.cpy;program、paragraph、PERFORM/CALL/COPY,純 regex、不新增相依)、VB.NET(.vb;大小寫不敏感的型別/方法、Inherits/Implements/Handles)、R(.r/.R;assignment-form 函式定義、library/source、S4/R6 class)、Solidity(.sol;contract/interface/library、is 繼承、import、modifier)、Erlang(.erl/.hrl/.escript;module、以 arity 區分的 function、behaviour、本地與遠端 foo:bar() 呼叫)。R 與 Erlang 的 grammar 走 r/erlang extras(無獨立 PyPI wheel),Solidity 與 VB.NET 各有自己的 extra。
    • 既有語言的結構深度(v0.9.69):OCaml class 的方法(method 關係)與 instance variable;Elixir defprotocol/defimpl 抽成容器節點並帶同檔 implements 邊;Fortran derived-type 的 contains block 把 type-bound procedure 連到型別並解析 => impl 目標;Julia macro 定義與 @enum(含 red = 1 與 Color::UInt8 形式,成員用 case_of);Kotlin annotation(class/function/property、use-site target)與 primary constructor 的 val/var property。
    • 跨檔 resolution(v0.9.66、v0.9.69):Go interface 的 method requirement 解析到 interface 本身,且其參數/回傳型別發出 references 邊(#3672/#3737);Rust 簡單 generic impl(impl<T> Foo<T>)的 self.method() 跨檔解析持續(#3653);TypeScript solution-style tsconfig.json(自身只有 references、沒有 paths)改為解析被引用專案設定中的 path alias,tsc -b layout 的 alias import 不再懸空(#3753/#3745)。
    • 決定性(determinism)與 Windows(v0.9.66→v0.9.68):update/extract/cluster-only/label 以一次性 re-exec pin PYTHONHASHSEED,讓 Leiden/Louvain 社群偵測的 graph.json 逐次一致、與 hook 觸發的 rebuild 相符(v0.9.66/#3743);v0.9.67 改以 python -m graphify 重啟,修 Windows 上 console-script .exe 無法重啟的回歸(#3780);v0.9.68 再修 Windows 上 os.execvpe 只是 spawn 新行程、父行程競速前進導致 update/extract/cluster-only/label 崩潰——Windows 改走 subprocess.run 並以子行程 exit code 結束,POSIX 路徑不變(#3816/#3799)。
    • 安全修復:shell injection(命令注入)(v0.9.68):/graphify add … --watch 不再把 agent 代入的 INPUT_PATH 佔位符未加引號地寫進 shell 指令(… -m graphify.watch INPUT_PATH),避免 scan root 含 $(…)、backtick 或 ; 時被執行;watcher 改讀 Step 1 解析出的受信任 graphify-out/.graphify_root,沒有可替換的路徑(#3742/#3642)。注意:Aider/Devin 的 monolith --watch 片段仍有同一佔位符,上游另案追蹤。
    • 增量更新與圖譜正確性(v0.9.68):增量更新(update/extract --code-only/watch)保留指向未變檔案的跨檔 imports/calls/uses 邊——symbol-resolution facts 的 target index 加入唯讀的 resolution context,重萃取單一檔案不再默默丟掉連向圖譜其餘部分的邊;真正被移除的邊仍會 prune(#3812/#3776)。另修 C# 型別引用不再解析到同名非型別節點(enum member/property/field/method 被排除出 type-definition index)、沒有 contains 邊的 partial class 解析恢復(#3815/#3795);dedup 合併時保留有真實 source location 的節點而非較豐富但無來源的推論/stub(#3786/#3775)。
    • 其他修正(v0.9.66~v0.9.69,節錄):Maven pom.xml 依賴的 groupId/version 可從本地 <parent> 繼承並展開 ${property}/${project.*}(#3823);Terraform secret redaction 擴及 secret 命名的 variable default 與 output value(#3817);固定格式 COBOL 帶序號欄位時正確辨識(#3813)、PERFORM A THRU/THROUGH Z 兩端點都連邊(#3814);PHP closure(匿名 function()、arrow fn() =>、作為參數傳入)成為節點、route closure 取 VERB /path 語意名(#3461);絕對 Python import 解析到 scan root 內的本地 package/module(#3729);export 不再每次重寫內容未變的 wiki/Obsidian 頁面(#3760);process pool 在 spawn 無法 re-import __main__(stdin、python -c、REPL、embedded)時逕行跳過、改走正確的 sequential run(#3754);dedup 保留既有的 self-loop(遞迴呼叫、self-referential FK)但丟棄合併產生的新 self-loop(#3825);ingest 改以解析後的 host 判定 URL 類型(#3831)。
    • 既有使用者影響:新語言與新解析能力不會自動出現在既有 graph,需重新萃取(graphify update 或 full rebuild)才生效;Windows 使用者務必升到 v0.9.68 以上(v0.9.66/v0.9.67 的 hash-seed re-exec 在 Windows 上無效或競速崩潰);以 /graphify add … --watch 建圖的流程應升級取得注入修復;長期用 watch/hook 維護 graph 的團隊升級後建議做一次完整 update,讓跨檔邊與 manifest 由新版接手。
    上游 Release Notes ↗
  18. v0.9.65

    舊版本2026-09-20
    • 版本定位:v0.9.56→v0.9.65,涵蓋 v0.9.57~v0.9.65 九個 patch。主軸依序是:正確性(incremental rebuild 不再丟節點)、語言模型擴充(Terraform、Elixir、Go/Swift interface)、跨檔 resolution(Rust/Kotlin/Ruby 繼承鏈)、效能(Python 解析快 47%)與安全(Pillow CVE)。
    • 安全(v0.9.65,#3698):svg/all extras 對 Pillow 加下限 >=12.3.0,修 CVE-2026-54058(Pillow 經 matplotlib 間接被拉入);注意 Pillow 12.3.0 已不提供 glibc<2.27 的 cp310 Linux wheel,老舊 glibc + Python 3.10 主機裝 svg/all extra 會從 sdist 建置。
    • Terraform 支援(v0.9.62/#3571、v0.9.64/#3644):module call 帶字面 local source(./…/../…)解析到 directory-scoped module node,揭露 caller→implementation 拓撲(remote / registry source 不猜);resource/data/module node 保留屬性(ami、instance_type、cidr_block 等)可查可搜,secret 命名屬性(password、*secret*、*token*、*_key、連線字串)入 graph 前先 redact——寫死在 .tf 的 credential 不會洩進 graph.json 或模型。升級既有 graph 後跑一次 graphify update . 重建 Terraform id 與拓撲。
    • Incremental rebuild 正確性(v0.9.57/#3411、v0.9.59/#3477、v0.9.65):v0.9.57 修「重萃取一個 .csproj/.sln 會丟掉 referenced project 的 package/framework 節點」(AST-replacement set 改從實際萃取的檔案推導);v0.9.59 修增量重建不再丟未觸及檔案的 cross-file concept 節點;v0.9.65 再修 eviction pass 重查 kept set,moved-file/symlink layout 不會再把 shrink guard 卡死到拒絕每次 update。
    • 跨檔 / 繼承鏈 resolution(v0.9.58–v0.9.65):Python 巢狀函式依 lexical scope 解析(#3410);PEP 420 namespace package 子模組 import 解析(#3429);Ruby 隱式 self 呼叫與已知型別 receiver 的 member call 可沿單一無歧義繼承鏈升級到 superclass method(#3569/#3585);Rust self.method() 跨檔解析到 split-impl 同型別 method,v0.9.63 起支援,v0.9.64 擴及簡單 generic impl(#3602/#3653);Kotlin receiver 呼叫跨檔解析(#3598/#1698);C++ scope-qualified static call Foo::bar() 跨 translation unit 解析(#3613/#2348);Go interface 與 Swift protocol 的 method requirement 攜在 interface/protocol 節點上(#3672/#3673);Elixir alias/import/require/use 解析到 defmodule 節點(#3603)。
    • Graph 資料完整性(v0.9.57/#3372、v0.9.63):重複節點合併時保留較完整(richer)的 survivor 並折入 loser 的非空欄位,不再讓較短 id 的順帶提及贏得合併;graph.json 每條邊的端點都必是宣告過的節點——對外部模組(stdlib、第三方)的 imports/re_exports 邊改為鑄造 typed external stub node,不再留 dangling endpoint 給 loader 物化成無屬性 phantom;跨 repo merge 把同一外部模組統一成單一 global node。
    • Markdown / 文件進圖(v0.9.62/#3562):文件內 inline code span(如 `Widget.render`)在整個 corpus 恰有一個 callable 匹配時發出 references 邊——generic 詞彙與歧義名稱不連,文件加入圖而不產生假邊洪流;另外修正檔名為裸複數「tokens」(如 TOKENS.md)的文件不再被誤判為 credential dump(#3527)。
    • PHP / JS / Java 修正(v0.9.58+、v0.9.64、v0.9.65):PHP use Foo\Bar as Baz; 以 alias 為 key 讓後續 Baz 引用解析到真實 class(#3421);PHP 檔內 inline <script> 以 JS 索引並映射回真實行號(#3627/#2320);JS/TS let/const 綁定改為 block-scoped,block-local 綁定不再壓制同函式其他地方的真實 indirect_call 邊(#3688);Java enum body member 掛回 enum 而非 file,enum 內部呼叫可解析(#3674);Verilog module instantiation 連到本地定義而非幻影重複(#3675)。
    • 效能與 Python 3.12+ 可攜性(v0.9.59/#3500-#3502、v0.9.61):Python symbol resolution 快約 47%(path resolution memoize、每檔跨兩個 pass 只解析一次、tree walk 改迭代式);graphify.serve 在 Python 3.12/3.13 可正常 import(chinese extra 自 3.12 起改 pin jieba-py);v0.9.60 新增 Python 3.14 支援。
    • Windows / 其他修正(v0.9.60):atomic write 在 WinError 17(跨磁碟區移動)正確 fallback;無法分類的檔案以計數與 top extensions 呈現而非從「成功」run 中消失(#3511);graphify-out/converted/ 的 Office/Workspace sidecar 不因 graphify-out/ 被-gitignore 而丟掉(#3504);git hook 的 rebuild-root guard 拒絕 symlink-loop 或 dangling 的 .graphify_root(v0.9.61)。
    • 既有使用者影響:有 Terraform 的 repo 升級後務必跑一次 graphify update .;依賴 Rust / Kotlin / Ruby 繼承鏈、Elixir module graph 或 Go/Swift interface 的分析也建議 rebuild;使用 svg/all extra 的老 glibc 主機注意 Pillow 可能需要從 sdist 建置。
    上游 Release Notes ↗
  19. v0.9.56

    舊版本2026-09-07
    • 版本定位:v0.9.53→v0.9.56,涵蓋 v0.9.54~v0.9.56。這三版以「graph 正確性、跨 repo 解析、Windows 穩定性與大型 TypeScript 效能」為主,對依賴 Graphify 做 impact analysis 的團隊比一般 UI 新功能更重要。
    • 新增功能:merge-graphs 可在 receiver type 位於另一個 repo 時,對唯一且不歧義的 type + method 組合補出 member-call 關係;query scorer 也新增 rationale tier,讓只存在 rationale 文字的節點有更好的搜尋召回。
    • 語言模型新增 / 改善:Rust trait 的 signature-only 與 default-bodied methods 都會成為節點;JS/TS @/ project-root alias、Node package.json imports 的 #subpath / wildcard / conditions 能正確解析;Python imported type 與 named re-export / barrel / alias chain 更精準;Dart node/edge 補上 source_location。
    • 行為改變:與語言 builtin 同名的 member call(例如 .open、.get、.map)不再直接被當 builtin 略過,而是交由 cross-file resolution 判斷;MCP query_graph 從只有 incoming edges 的 leaf node 起查時改採 undirected traversal,因此「誰呼叫我」類問題能得到完整結果。
    • 效能改善:TS import-type normalization 從 O(matches × ranges) 改為 sorted-index lookup,避免大型 mixed TypeScript file 長時間吃滿 CPU;source lookup、duplicate-edge 處理與 no-cluster basename disambiguation 也同步修正。
    • 穩定性 / Windows:MCP prs 在 Windows 會 detach stdin 避免 stdio transport 卡死;atomic-write temp filename 改為 bounded,避免接近 Windows MAX_PATH / 255-char component limit 時失敗;rebuild watchdog timeout 會先殺掉 extraction workers,不再留下 orphan process。
    • 資料完整性:definition_file 改為 scan-root relative canonical path,graph 可跨機器保持 byte-stable;.graphify_version、Obsidian vault 與 graph.canvas 採 atomic write;code-only watch rebuild 不會再清掉 pending semantic-update flag。
    • 移除 / Breaking Change:v0.9.54~v0.9.56 沒有宣告 CLI removal;主要是 extractor 與 resolver 行為變得更正確。這類更新雖不屬 API breaking,但可能讓同一份 codebase 產生更多、或不同的 node/edge。
    • 既有使用者影響:舊 graph 不會自動擁有新 extractor 能力;若你依賴 Rust trait、JS/TS alias、Python import 或跨 repo member-call 關係做分析,升級後應重新執行 graphify update 或完整 rebuild,才能讓既有 graph 反映新版解析結果。
    • 學習重點 / 建議用法:這版最適合拿來理解「知識圖譜工具的準確度不是只有 parser,而是 parser + symbol identity + cross-file resolution + incremental rebuild」;做 code intelligence 時,任何一層錯誤都可能產生看似合理、其實錯誤的 impact path。
    上游 Release Notes ↗
  20. v0.9.53

    舊版本2026-08-30
    • v0.9.51→v0.9.53:涵蓋 v0.9.52 與 v0.9.53 兩個 patch。
    • v0.9.53 為 cross-language inheritance release:JS class X extends Y 發出 inherits 邊(#1790);PHP interface / enum / trait 獨立為 class-like node 並保留 heritage(#1791);Scala trait 成為 class-like node,qualified extends/with 解析到 tail type(#1792/#1794);Kotlin qualified supertype 解析到 tail type(#1793);C# interface 繼承 interface 歸類為 inherits 而非 implements(#1817);Go interface type-set constraint 不再發出假的 embeds 邊(#1818)。
    • v0.9.53 新增 Robot Framework 支援(.robot/.resource,optional [robot] extra):suite / test case / user keyword、keyword-call 邊與 resource / library import,keyword 名稱大小寫 / 空白 / 底線不敏感比對(#3192)。
    • v0.9.53 安全加固:chat-template control token 改按形式(<|…|>、[INST]/[SYSTEM])defang,封住 attacker-chosen token(如 <|eot_id|>)的 prompt-injection 缺口(#3183);git hook-guard 只在 executed position 偵測 search command,comment / quoted message 不再誤判(#3121)。
    • v0.9.53 穩定性:graphify watch/update 在目標 node 仍以不同拼寫存活時保留 authored markdown link(#3190 後續,deleted-target gate 不放寬);semantic tier 未實際重萃取時不再默默丟失 semantic node,unverified per-source shrink 會武裝 shrink guard 並於下輪重新排入佇列(#3203);graphify install 覆寫前先備份分歧的 SKILL.md 並輸出可操作警告(#3144)。
    • v0.9.52 修正 code-only rebuild 時默默丟失指向 semantic-backed 文件的 Markdown link:[[wikilink]] 重指向目標檔的 representative node,不會復活已刪除目標(#3190);T-SQL 解析成 tree-sitter ERROR node 的 routine(CREATE OR ALTER、PROC 簡寫、[dbo].[Get Widgets] 括號名)以名稱回復,不因註解或 dynamic SQL 製造假節點(#3164);Razor @inject/@using 走 scope-aware C# type resolver,跨檔定義可解析(#3187 部分修正,file-scoped-namespace bare inject 尚待後續)。
    • v0.9.52 完成物件建立建模:PHP new Foo() 發出 calls 邊(namespaced name 取最後段,#3115),補齊 C#(#2998)與 TypeScript(#3135);field 型別宣告在祖先類別時可從子類解析,lookup 走繼承鏈且 cycle-safe(Java/C# per-file、Java/Objective-C cross-file,#3151);Obj-C field-to-type 表隨 node-id rewrite 重新 keying(#3150);TS type-only import(import type)不再製造假的 import cycle(#3123);import(...) 作為 call type-argument 時先正規化,其後宣告不再被丟棄(#3185)。
    • v0.9.52 其他:graphify --help 補列 prs / provider 指令與實際支援的 export 格式;MCP prs 工具把真實失敗以 MCP error(isError)回報、get_node 改用與 get_neighbors 相同的 tiered resolver;install --project hook 改為 run time 解析的 bare graphify 指令,不再 pin 絕對 interpreter 路徑。
    上游 Release Notes ↗
  21. v0.9.51

    舊版本2026-08-28
    • v0.9.43→v0.9.51:涵蓋 v0.9.44 至 v0.9.51 八個 patch。
    • v0.9.51 加固 incomplete-build shrink guard:chunk「hollow / 不可解析 / 缺 files」時保持武裝,靜默損失內容的 run 不再以更小的圖覆寫既有 graph(--allow-partial 仍可強制);extract --force --code-only 真正全量重掃,不再留下過期 import / alias 解析。
    • v0.9.49 / v0.9.50 強化 graphify merge-graphs:跨 repo 共享型別(同 fully-qualified namespace + name)發出 same_type_as 邊;community id 依輸入 offset,不再跨 repo 融合 community 0(原 id 保留於 local_community);Ruby save 與 save! 保持各自 node id。
    • v0.9.46 / v0.9.47 穩定性:post-checkout hook 在 HEAD 未變時跳過重建(git checkout -b 不再全圖重建);慢檔 chunk timeout 改為 bisection;cache 以 symlink 身分 keying;graphify query 把 _ 當 token 分隔符。
    • v0.9.44 新增 graphify hook install 讀 committed .graphifyrc(viz_node_limit)烘焙進 git hooks,團隊共享;JS/TS inline / nested function expression 參數 shadow 修正;v0.9.48 大圖 graphify update / label / cluster-only 不再缺 graph.html。
    上游 Release Notes ↗
  22. v0.9.43

    舊版本2026-08-14
    • 本站此前的記錄版本,已升級至 v0.9.51。
    • v0.9.41→v0.9.43:涵蓋 v0.9.42 與 v0.9.43 兩個 patch。
    • v0.9.42 為 correctness / determinism / portability release:JS/TS for...of/for...in loop binding shadow 不再製造假的 indirect_call 邊(#2685);Python 相對子套件 import 解析到套件 __init__(#2688);FIFO/device 等 non-regular file 跳過,不再卡住 extraction(#2463)。
    • graphify update 對 mtime tick 內「同長度重寫」的檔案會重新排入增量佇列(#2466);built_at_commit 改取自被分析的 repo 而非 shell cwd(#2699);損毀的 semantic-cache 條目會重新萃取而非默默遺漏(#2683)。
    • source_file 統一 canonicalize 為 POSIX 路徑,Windows atomic write / install 加固(#2620/#2622);GRAPH_REPORT.md 改用 portable basename(#2682);affected 支援 ./-relative seed(#2707)。
    • v0.9.43 新增 OCaml 支援(.ml/.mli,optional [ocaml] extra);修正跨檔 INFERRED uses 邊錯綁 import 行旁所有 class 的問題(#2652)、巢狀具名 function declaration 不再懸空(#2653)、Bash source 兩種路徑形式與 wiki link 檔名逐字比對(#2596/#2597)。
    上游 Release Notes ↗
  23. v0.9.32

    舊版本2026-08-10
    • 本站此前的記錄版本(correctness release),已升級至 v0.9.37。
  24. v0.9.41

    舊版本2026-08-10
    • v0.9.32→v0.9.41:跳過九個 patch(v0.9.33–v0.9.40)。
    • v0.9.35 為 correctness release,重新啟用 build_merge 的 shrink guard(修正
    • graphify update 會把新加入 .graphifyignore/--exclude 的檔案從既有 graph 中移除(fail-closed
    • 修正 Java local class 與同名 external annotation(如本地 class Component vs Spring @Component)合併為單一 node 的問題(#2504)。
    • callflow、query 變為方向 / relation aware。
    • v0.9.41 的 graphify update 不會以本次 extractor 失敗導致的縮小圖譜覆寫既有資料;語意節點新增 rationale 萃取。
    上游 Release Notes ↗

圖例

  • 當前版本 本站現在記錄的版本
  • 舊版本 已被取代,保留作歷史對照
  • 已同步 與上游 release 對齊
  • 僅上游變動 上游 main 有 commit,但未發佈新版