Theme / v0.9.56

Graphify

Codebase 知識圖譜

實戰範例

實戰範例 002:大型 monorepo 重購

用 graphify path 與 prs --conflicts 分析 monorepo 重購的影響範圍與 merge 順序風險

背景

大型 monorepo 要做架構重購(例如拆分 billing 模組、引入新 auth middleware)。重購前必須回答:

  • 這個改動會影響哪些 community / god node
  • 多個並行 PR 是否會互相衝突?merge 順序?
  • 兩個看似無關的 service 在圖譜上暗中耦合嗎?

graphify 的 graph impact--conflicts 比手動 git-inspect 跨檔追蹤更快、更結構化。


適用情境

  • 拆分 / 重命名模組
  • 引入 cross-cutting middleware(auth、logging、observability)
  • 解耦兩個看似獨立的 service
  • 大型 framework upgrade(例如 React 17 → 19)

完整流程

步驟 1:建圖 baseline

cd ~/my-monorepo

export ANTHROPIC_API_KEY=sk-ant-...
graphify extract . --mode deep --code-only   # AST 為主,可加 docs

💡 大型 monorepo 建議先 --code-only 跑 baseline,後續再加補 docs 語意層。

步驟 2:用 communities 確認重購目標

head -100 graphify-out/GRAPH_REPORT.md

找出重購目標:

  • 想拆分的 billing community
  • 共用過多 god node 的 services(候選解耦目標)

步驟 3:用 path 找暗耦合

graphify path "BillingService" "AuthService"

如果回傳路徑超過 5 跳,且包含多個共用 community,表示兩服務暗中耦合,重購要一併處理。

步驟 4:開 3 個 PR 平行

# PR #1: 拆出 billing module
git checkout -b refactor/extract-billing
# ... edit ...
git commit -m "refactor(billing): extract module"

# PR #2: 新 auth middleware
git checkout -b feat/auth-middleware
# ... edit ...
git commit -m "feat(auth): middleware"

# PR #3: 升級 logger
git checkout -b chore/logger-v2
# ... edit ...
git commit -m "chore: logger v2"

步驟 5:用 prs 分析影響與衝突

# 各 PR 的 graph impact
graphify prs 41       # PR #1
graphify prs 42       # PR #2
graphify prs 43       # PR #3

重點看:

  • 哪些 PR 觸動 god node(high graph impact)
  • 哪些 PR 觸動共用 community

接著找衝突配對:

graphify prs --conflicts

輸出例:

PR #41 ↔ PR #42  shared community: auth (Community 1)
PR #41 ↔ PR #43  shared community: billing (Community 3)

→ PR #41 與兩個都衝突,merge 順序重要。

步驟 6:用 prs --triage 排 review 優先度

graphify prs --triage

graphify 依 graph impact + CI 狀態 + 規模,告訴 reviewer:

1. #41 (HIGH)   billing rewrite — 3 god nodes impacted, CI pending
2. #42 (MED)    auth middleware — 1 community overlap with #41
3. #43 (LOW)    logger v2       — isolated, CI passing

reviewer 先看 #41,決定 merge 順序:

  1. merge #43(無衝突)
  2. merge #42 → rebase #41
  3. merge #41

步驟 7:每個 merge 後 graphify hook 自動重建

有裝 graphify hook install 的話:

graphify hook install

每次 merge 觸發 AST 重建,後續 prs 結果保持最新。


真實輸出範例

$ graphify prs --conflicts
PR #41 ↔ PR #42  shared community: auth (Community 1)
PR #41 ↔ PR #43  shared community: billing (Community 3)

$ graphify prs 41
PR #41 (extract-billing)
  Modified files: 23
  Communities impacted: 1 (billing)
  God nodes touched: 3 — BillingService, Invoice, Subscription
  → Reviewer should know: touches billing god nodes; may regress checkout flow.

$ graphify prs --triage
Triage ranking:
1. #41 (HIGH) billing rewrite
   - 3 god nodes impacted, CI failing
   - Suggested: pair with domain owner
2. #42 (MED) auth middleware
3. #43 (LOW) logger v2

對比傳統做法

任務 傳統(git log + grep) graphify
識別共用 module 跨檔搜 import 看 community 重疊
PR 衝突風險 看 diff 重疊 prs --conflicts 一行給答案
Review 優先度 reviewer 憑感覺 AI 排序基於 graph impact

graphify 的 prs --conflicts 是 graph-level 視角,特別能找出跨檔的隱性衝突(兩 PR 改的字串不在同檔,但都在同一個 community / god node)。


失敗處理

情境 排查
prsgh not authenticated gh auth login
prs --triage 沒 AI 排序 GRAPHIFY_TRIAGE_BACKEND=kimi 或 claude/openai/gemini
衝突結果為空但實際有衝突 確認 graph.json 是最新(graphify hook status 確認 hook 跑過)

內部連結


下一步

  1. PR 審查 + 團隊共享 graphify-out
  2. 探索陌生 codebase