Theme / v0.9.103
Graphify
Codebase 知識圖譜
Changelog
版本更新紀錄
收錄 Graphify 的版本變遷軌跡。每條紀錄以舊值→新值呈現,舊值以紅線劃掉但保留可見,方便對照改動軌跡。
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 出錯的
#ifbranches 在解析前被空白化(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。
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.Treceiver 只經檔案的 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_importedge;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):
--updaterunbook 對僅部分讀取的 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。
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 保留自己的containsedge。 - 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-levelvar初始化式會參照它指名的型別。 - 寫入防護與節點折疊(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-onlygraph 在 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。
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和 functionfoo)取得不同 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_constantedge;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);Scalaextension (x: T) def m會 scope 到 receiver typeT,而非 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):
videoextra 將 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。
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與 MCPshortest_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.Memberfail 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平台的目錄碰撞;既有的agentsskill 會被註記而非刪除(#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#subpathimports 不動(#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)被辨識,後續objectblock 不再被損壞的巢狀堆疊重新掛父(#4844);serve——兩節點在 lookup 平手且僅大小寫不同時,與查詢拼法完全相同者勝出(其餘在下一層仍可達),不再全部拒為歧義(#4870);export——Cypher 文字匯出以穩定節點 id 鍵MERGE、label 分開設定,label 變更後重新匯入會更新節點而非建立重複(#4878);pdf——轉換文字快取以解析後的來源路徑為鍵,不同 root 中同名相對路徑的兩個 PDF 不再互相污染(#4851)。 - 完整教學見
lessons/v0998-v0999-path-confidence-and-evidence.mdx。
- 版本定位: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)、多條等長路線取最保守者、
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_...)、Slackxoxe-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/nobare keys 不再折成 booleans,workflowon:block 會被抽取而非轉成Truenode。 - Fix: razor(v0.9.97,#4820):component 的
@implementsinterfaces 會抽取為implementsedges,不再被默默丟棄。 - Fix: terraform(v0.9.97,#4819):aliased provider block 取得自己的 alias-qualified node,使兩個
provider "aws"blocks 不再合併並遺失 attributes;provider = aws.westreference 會解析至該 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:clickdirective 綁定 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
pascalextra 時的預設路徑)會將帶有自身 methods 的record辨識為 type,與 tree-sitter 路徑一致;也會抽取operatormembers。 - Fix: vbnet(v0.9.97,#4821):
Operatordeclaration 會抽取為 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-chainedmodule ... and ...或class ... and ...中的每個 binding 都會抽取,不再只抽第一個而默默丟棄後續 bindings;每個 binding 帶有自己的 source line。 - Fix: verilog(v0.9.97,#4774):SystemVerilog class
taskmethod 以與function相同方式建模(自身 node、methodedge 與 parameter-type references);task-local variable 不再洩漏成 class 上的 false field reference。 - Fix: build 缺少 relation 的 edge(v0.9.97,#4810、#4826):沒有
relation的 edge 在 build 與 raw--no-clusterwrite 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,不再使整次extractcrash。 - 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 仍可解析。
- 版本定位:v0.9.96 → v0.9.97。主軸:rationale label credential redaction 移至單一 pre-cache choke point 並覆蓋更多洩漏形態;mcp extra 的 anyio 下限升至
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 usere-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_filesentinel 的 sourceless stub、不再產生驗證失敗的節點(#4725、#4728);LLM 標記的 cross-document reference stub 與真實定義碰撞時改以 namespace 區分,兩個節點都不再丟失(#4738、#4743)。 - 完整教學見
lessons/v0996-deps-security-and-update-skip.mdx。
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別名與unionitem 抽取為 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 放進 frontmattertags前先消毒,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。
- 版本定位:v0.9.94→v0.9.95(2026-10-23 發布)。官方定位:21 個社群 pull request,外加安裝安全強化(a security pass on install);主軸:Python、Go、C++、Rust 的明確型別別名(type alias,含 Rust
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
usenow resolves to its real declaration instead of minting a sourceless stub"——Kotlintypealias被抽取、以 alias 型別標註的 field/parameter 解析到宣告而非無來源 stub(#4553、#4557);C#delegate宣告被抽取、references 解析到它,內建Func<>/Action<>仍維持 external(#4552、#4556);Swiftmacro宣告被抽取、獨立的#macro(...)呼叫解析到宣告,未知或標準庫 macro 維持 unresolved 而不鑄 stub(#4551、#4555);Darttypedef(含舊式typedef R name(args))抽取為 type alias,不再變成typedef型別的 bogus variable(#4582);Pythonmodule.func()解析到模組下精確名為func的 child,即使有同 key 兄弟(如func_schema函式旁的FuncSchema類別)造成歧義也不丟邊、絕不綁到無關模組的同名 child(#4577);Rust 根於 siblingmod的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"的.hheader 改送到 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 分類加讀 legacyStatusContext狀態(#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);CommonJSconst 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)、GObatch separator 結束語句(#4651、#4652)、先引用後CREATE TABLE的表折疊到真實定義且不同 schema 的同名表保持可區分(#4653、#4654)、stored procedure 發出reads_from/writes_toedges;markdown 散文中的裸方法名只在 owning class 同文件被引用時才連結(#4609、#4617);MCPget_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 bracketedHostheader 修復 421(#4656);--help列出完整且防漂移的--platform清單(#4655)。 - 完整教學見
lessons/v0993-v0994-resolution-and-ingestion-security.mdx。
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 派發到原生delegateagent(#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。
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-bundleindirect_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 截斷問題修復。
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.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 取得。
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 後才反映。
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);TSthis.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、groupeduse每名稱一條邊(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()載入、v1server()保留),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 生效。
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 的.dmfelement 都改鑄可攜、clone 相同的 id;C# namespace scope id 改以 row/column 為 key,CRLF checkout 不再寫出與 LF 不同的scope_chain;原始檔在解析前先解碼——UTF-16 檔不再 0 節點、cp1252 名稱不再截斷;graph.json新增schema_version/graphify_versionmetadata(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 deferreddef、C++ class 內成員函式宣告(含 pure-virtual/const/operator/destructor)成 method;Zig tagged-union variants 與 error-set(case_of)、PHP enum cases、Elixirdefmacro/defguard系列、Rustmacro_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.vhheader 檔;Kotlin 註解中的 class-literal;Erlang local fun(fun Name/Arity)成indirect_call;C# null-conditional(?.)與 cast/interface-typed 呼叫解析;PowerShell 方法呼叫;bash 經非 shell 直譯器叫用腳本成invokes;Dartpart檔與條件 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 恢復前次社群分配;Ollamanum_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 生效。
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(含 ECSvalueFrom)。 - enum 成員擷取擴及四個語言(v0.9.73):Rust enum variants、Zig enum members、C++
enum/enum classenumerators(含巢狀 enum)、Scala 3 enum cases 及其方法——皆以case_of邊連接。 - 更多語言結構:SQL
CREATE TRIGGER抽取並連到ON的表(含OR REPLACE/OR ALTER、INSTEAD OF與程序性BEGIN…END主體)(v0.9.71);Groovyenum宣告與常數(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);PostgreSQLDO $$...$$前的 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 競態(POSIXfcntl路徑不變)(v0.9.70);graph.htmlNode Info 面板顯示真實 Type/Source/Community(v0.9.72);docxsidecar 轉換保留表格位置與所有文字(含追蹤插入、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。
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/erlangextras(無獨立 PyPI wheel),Solidity 與 VB.NET 各有自己的 extra。 - 既有語言的結構深度(v0.9.69):OCaml class 的方法(
method關係)與 instance variable;Elixirdefprotocol/defimpl抽成容器節點並帶同檔implements邊;Fortran derived-type 的containsblock 把 type-bound procedure 連到型別並解析=> impl目標;Julia macro 定義與@enum(含red = 1與Color::UInt8形式,成員用case_of);Kotlin annotation(class/function/property、use-site target)與 primary constructor 的val/varproperty。 - 跨檔 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-styletsconfig.json(自身只有references、沒有paths)改為解析被引用專案設定中的 path alias,tsc -blayout 的 alias import 不再懸空(#3753/#3745)。 - 決定性(determinism)與 Windows(v0.9.66→v0.9.68):
update/extract/cluster-only/label以一次性 re-exec pinPYTHONHASHSEED,讓 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 命名的variabledefault 與outputvalue(#3817);固定格式 COBOL 帶序號欄位時正確辨識(#3813)、PERFORM A THRU/THROUGH Z兩端點都連邊(#3814);PHP closure(匿名function()、arrowfn() =>、作為參數傳入)成為節點、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 由新版接手。
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/allextras 對 Pillow 加下限>=12.3.0,修 CVE-2026-54058(Pillow 經 matplotlib 間接被拉入);注意 Pillow 12.3.0 已不提供 glibc<2.27 的 cp310 Linux wheel,老舊 glibc + Python 3.10 主機裝svg/allextra 會從 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-fileconcept節點;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 callFoo::bar()跨 translation unit 解析(#3613/#2348);Go interface 與 Swift protocol 的 method requirement 攜在 interface/protocol 節點上(#3672/#3673);Elixiralias/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/TSlet/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(chineseextra 自 3.12 起改 pinjieba-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/allextra 的老 glibc 主機注意 Pillow 可能需要從 sdist 建置。
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 也新增rationaletier,讓只存在 rationale 文字的節點有更好的搜尋召回。 - 語言模型新增 / 改善:Rust trait 的 signature-only 與 default-bodied methods 都會成為節點;JS/TS
@/project-root alias、Nodepackage.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 判斷;MCPquery_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。
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);Scalatrait成為 class-like node,qualifiedextends/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 格式;MCPprs工具把真實失敗以 MCP error(isError)回報、get_node改用與get_neighbors相同的 tiered resolver;install --projecthook 改為 run time 解析的 baregraphify指令,不再 pin 絕對 interpreter 路徑。
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);Rubysave與save!保持各自 node id。 - v0.9.46 / v0.9.47 穩定性:
post-checkouthook 在 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。
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...inloop 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);修正跨檔 INFERREDuses邊錯綁 import 行旁所有 class 的問題(#2652)、巢狀具名 function declaration 不再懸空(#2653)、Bashsource兩種路徑形式與 wiki link 檔名逐字比對(#2596/#2597)。
v0.9.32
舊版本2026-08-10- 本站此前的記錄版本(correctness release),已升級至 v0.9.37。
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 Componentvs Spring@Component)合併為單一 node 的問題(#2504)。 callflow、query變為方向 / relation aware。- v0.9.41 的
graphify update不會以本次 extractor 失敗導致的縮小圖譜覆寫既有資料;語意節點新增rationale萃取。
圖例
- 當前版本 本站現在記錄的版本
- 舊版本 已被取代,保留作歷史對照
- 已同步 與上游 release 對齊
- 僅上游變動 上游 main 有 commit,但未發佈新版