跳到主內容

Theme / v0.9.103

Graphify

Codebase 知識圖譜

基礎觀念

v0.9.102:查詢排序、增量更新與效能

整理 Graphify v0.9.102 在查詢層(source nodes 排序、file-first 回答、--depth)、增量更新(只重抽變更檔)與記憶體效能的變更,含各語言呼叫解析修正。含互動測驗與檢查清單。

概述

Graphify v0.9.102 於 2026-11-03 發布。官方 release notes 的定位是:

“A large correctness, performance and workflow release spanning the extractors, the query layer, incremental update, the hooks, the skill runbook and install.”

也就是說,這是一個橫跨抽取器(extractors)、查詢層(query layer)、增量更新(incremental update)、hooks、skill runbook 與安裝(install)的大型正確性、效能與工作流版本。本課逐項對應 release notes 原文;上游沒有細節的行為,這裡也不推測。

多語言呼叫解析修正(call-resolution, extractors)

Go:receiver 型別與 import 綁定

Release notes 原文:「same-file member calls resolve through the receiver’s type; cross-package pkg.T receivers bind only via the file’s import; interface method calls dispatch to implicit implementers (#4966, #4853, #4934).」

三件事:同檔成員呼叫(member call)改依 receiver 的型別解析;跨 package 的 pkg.T receiver 只能經檔案本身的 import 綁定;interface method call 會分派(dispatch)到 implicit implementer。

Rust:模組限定呼叫與巨集引數內呼叫

Release notes 原文:「module-qualified calls (crate::b::helper()) resolve cross-file; calls inside expression-macro arguments are linked (#4944, #4945).」

模組限定呼叫(module-qualified call)如 crate::b::helper() 可跨檔解析;寫在 expression macro 引數內的呼叫會被連結(linked)。

Kotlin 與 Python:重載、init 區塊、singleton 與裸呼叫

  • Kotlin(#4956):「overloaded and init {}-block calls resolve; unreachable external-inherited calls are dropped.」重載(overloaded)呼叫與 init {} 區塊內的呼叫可解析;不可達的 external-inherited 呼叫改為丟棄(dropped)。
  • Python(#4972、#4933):「a module-level singleton’s member calls resolve through its type; a bare method call no longer self-binds.」module-level singleton 的成員呼叫依其型別解析;裸 method 呼叫不再自綁(self-bind)。

JS/TS:CommonJS extends、標註半解析與 default export

Release notes 原文:「class extends through a CommonJS require resolves; a typed tagged template and an import("mod").T<X> annotation no longer half-parse or mint a false dynamic_import edge; default-exported object methods resolve (#4700, #4976, #4967).」

經 CommonJS require 的 class extends 可解析;typed tagged template 與 import("mod").T<X> 標註不再半解析(half-parse)、也不再鑄造假的 dynamic_import edge;default-exported object methods 可解析。

Solidity 與 C++:相對 import 與 receiver 型別

  • Solidity(#4985):「../ imports resolve to the real file.」../ 相對 import 會解析到真實檔案。
  • C++(#4946、#4920、#4921、#4951):「receiver typing from params/fields, split-header owner binding, local-callable suppression, type-alias exact-spelling.」receiver 型別推導來源擴及 params/fields、split-header 的 owner binding、區域可呼叫值(local-callable)抑制、以及型別別名(type-alias)依精確拼寫(exact-spelling)綁定。

查詢(query):排序權重與 file-first 回答

Release notes 原文:「Source nodes rank above tests and docs (a soft weight, not exclusion), and answers are file-first (#4982).」

查詢結果中,source nodes 的排序高於 tests 與 docs。注意這是 soft weight(軟性權重),不是排除(exclusion)——tests/docs 仍會出現,只是排得比較後面。回答也改為 file-first(以檔案為優先)。

Release notes 原文:「graphify query reads query_budget/query_depth from .graphifyrc and gains a --depth flag (#4760).」

graphify query 現在會從 .graphifyrc 讀取 query_budget 與 query_depth 設定,並新增 --depth 旗標(flag)。

增量更新(incremental update)與 watch

Release notes 原文:「graphify update re-extracts only the files whose content changed, with a graph identical to a full rebuild; a contended incremental request is recorded instead of dropped (#4800, #4801, #4802).」

graphify update 只對內容變更的檔案重新抽取(re-extract),且產生的 graph 與完整重建(full rebuild)完全相同。當增量請求發生競爭(contended)時,請求會被記錄(recorded)而非直接丟棄(dropped)。

建置與快取(build / cache)

Release notes 原文:「The write guard no longer counts intentional ghost folds or dedup folds as dropped nodes; independently-sourced semantic evidence survives a fold; cache keys are case-preserving (#4957, #4952, #4927, #4950, #4937).」

三件事:write guard 不再把刻意的 ghost folds 或 dedup folds 計為 dropped nodes;獨立來源(independently-sourced)的語意證據(semantic evidence)在折疊(fold)後仍倖存;快取鍵(cache key)保留書寫時的大小寫(case-preserving)。

Hooks

Release notes 原文:「A file unchanged in content is not re-flagged stale by mtime; a dedicated Grep is held to the strict orientation gate; external searches emit no project hint (#4974, #4973, #4979).」

內容未變的檔案不再因 mtime 被重複標記為 stale(過期);專用的 Grep 受 strict orientation gate 約束;外部搜尋(external searches)不再發出 project hint。

效能(performance)

Release notes 原文:「Lower peak memory in load, resolution and extraction, and a faster cross-file repoint — all with identical output (#4960, #4958, #4959, #4981).」

load、resolution 與 extraction 的尖峰記憶體(peak memory)下降,跨檔 repoint 更快——而且輸出與之前完全相同(identical output),是純效能改進、不改行為。

Skill 與安裝(skill / install)

Release notes 原文:「The --update runbook re-queues partly-read docs instead of stamping them done; Step 4 threads --force; a hub-bypass report is added; uninstall removes the global skill registration (#4816, #4805, #4704, #4975).」

--update runbook 對僅部分讀取(partly-read)的 docs 改為重新排入佇列(re-queues),而不是蓋章標記為完成;Step 4 會傳遞(threads)--force;新增 hub-bypass report;uninstall 會移除全域 skill registration。

AST cache schema bump 至 37

Release notes 原文:「The AST cache schema is bumped to 37; warm caches re-run the affected extractions.」

AST cache schema 版號從 v0.9.101 的 36 升至 37;已有 warm cache 的使用者,受影響的抽取(extractions)會自動重跑。release notes 只說會重跑受影響的抽取,未提供重跑範圍或耗時數據,這裡不做推估。

自我測驗

隨堂測驗

v0.9.102 中,查詢結果把 source nodes 排在 tests 與 docs 之上,這代表 tests/docs 會被排除嗎?

💡 想先看個提示?

注意括號裡的「a soft weight, not exclusion」。

隨堂測驗

v0.9.102 的 `graphify update` 增量更新,會重抽哪些檔案?

💡 想先看個提示?

兩個關鍵詞:only the files whose content changed、identical to a full rebuild。

隨堂測驗

升級到 v0.9.102 後,AST cache schema 的變化與影響是?

💡 想先看個提示?

v0.9.101 是 schema 36,本版往上加一。

動手檢查清單

升級 v0.9.102:動手檢查清單

逐項勾選,確認你已完成升級必要的步驟(進度會保存在此瀏覽器)

0 / 5

延伸閱讀