【2026 最新】Claude Code 大型 Repo 安全改版:Blast Radius、Code Review Graph 與冷審查教學

最後更新: ·
Claude Code 大型 Repo 安全改版教學首圖:Blast Radius、Code Graph、行為測試、Git Diff 與冷審查

Claude Code 一口氣改 15–20 個檔案,能不能信?不能只看檔案數,也不能只看它說「測試通過」。真正該問的是:如果其中一個假設錯了,損害會擴散到哪裡?你能不能在合併前看見、驗證,並回滾到最後一個正確狀態?

這篇 Claude Code 大型 Repo 安全改版教學會把答案做成一套可操作的工作流:先定義 Blast Radius(爆炸半徑),用 Code Review Graph 找靜態依賴,再用行為測試與 Git diff 交叉驗證,最後交給沒有參與開發的 fresh context 做「冷審查」。核心公式只有一句:

安全改版 = 小批次 × 三角驗證 × 可回滾

Code Graph 預測「可能影響誰」;Tests 驗證「已知行為有沒有壞」;Git diff 約束「實際改了什麼」。三者答案不一致,才是該停下來查的地方。

Claude Code 大型 Repo 安全改版的五道閘門:Baseline、Plan、Slices、Verify、Cold Review
大型 Repo 安全改版不是一個 Prompt,而是五道能留下證據的交付閘門。

為什麼現在需要 Claude Code 大型 Repo 安全改版工作流?

需求不是憑空想像。2026 年 7 月 27 日查核時,一則「有人真的信任 Claude Code 修改 15–20 個檔案嗎?」的 Reddit 討論已有至少 40 則留言;另一則描述百萬行、15 年歷史 C#/React SaaS 的 Ask HN,當時是 4 points、16 comments。這些是社群個案,不是科學抽樣,卻準確指出同一個焦慮:AI 可以很快產生跨層變更,但人類 reviewer 的注意力沒有同步增加。

同一週,開源工具 Code Review GraphGitHub Trending weekly 顯示新增 6,423 stars。市場已經不只想要「更多程式碼」,而是想知道變更會穿過哪些 caller、介面、流程與測試。

先把三個名詞講白:

  • Blast Radius(爆炸半徑):一個錯誤在最壞合理情境下,可能影響的模組、使用者流程、資料與部署邊界。
  • Code Graph(程式碼圖譜):把函式呼叫、繼承、測試關係等連成圖,協助追蹤多跳依賴;它是候選範圍,不是執行時真相。
  • 冷審查:讓沒有參與原本對話的 reviewer 從零看計畫、diff、測試證據與風險,先假設實作可能錯,再嘗試推翻它。

第一步:開工前,把 Blast Radius 寫成契約

大型 Repo 最危險的起手式是「幫我完成這個功能」。Claude 會自行補齊大量隱含決策,但 reviewer 最後只看到結果。更好的做法是先建立一份 PLAN.md,把它當作此次改版的臨時契約,而且第一輪只准讀、不准改。

契約至少要有四欄

  1. 現況基準:目前哪些測試通過?哪個畫面、API response、資料表或效能指標代表現有行為?
  2. 驗收條件:使用者可觀察的結果是什麼?正常、錯誤、權限、重試與相容性情境各要怎麼驗?
  3. 禁止觸碰範圍:例如 production infra、migration、billing、公開 API schema、產生檔與不相關重構。
  4. 停止條件:遇到規格衝突、需要資料遷移、無法建立會失敗的測試,或預測範圍超過原計畫,就先回報,不自行擴張。

可直接把下面這段交給 Claude Code:

進入 Plan Mode。先不要修改任何檔案。

任務:<一句話描述功能>
驗收條件:
1. <可觀察行為>
2. <錯誤/權限情境>
3. <相容性條件>

禁止觸碰:
- migrations/**
- infra/prod/**
- 公開 API schema
- 與本功能無關的 rename/cleanup

請先輸出:
1. 現況行為與證據
2. 可能涉及的檔案、caller、測試與資料邊界
3. 最多四個可獨立驗證、可回滾的 commit
4. 每段的驗證指令與停止條件
5. 尚未證明的假設

寫入 PLAN.md 後停止,等我核准。

Anthropic 的 Claude Code 最佳實務把複雜任務整理成 Explore → Plan → Implement → Commit,也明確建議給 Claude 可執行的 tests、build 或畫面證據。Plan Mode 可用 /plan 或從終端機啟動:

claude --permission-mode plan

「不要碰」要同時有軟規則與硬邊界

CLAUDE.md適合記錄架構、常用命令與約定,但它是上下文指引,不是作業系統級的護欄。對真正敏感的目錄或動作,應再用 Claude Code permissionsdeny 規則,並把 production credentials、部署身份與正式資料庫隔離在工作環境之外。

{
  "permissions": {
    "deny": [
      "Edit(./migrations/**)",
      "Edit(./infra/prod/**)",
      "Bash(git push *)"
    ]
  }
}

這是「雙層邊界」:PLAN.mdCLAUDE.md說明意圖,permissions 與環境隔離限制能力。前者幫模型做對決策,後者降低做錯決策時的損失。

第二步:安裝 Code Review Graph,先建立依賴地圖

Code Review Graph 會用 Tree-sitter 解析 AST,把函式、類別、呼叫、繼承與測試關係寫進本機 SQLite 圖譜。它的強項不是替你判斷程式「正確」,而是比純文字搜尋更容易追多跳關係,例如「這個 service 改了,哪些 caller、flow 與測試可能受影響」。

截至 2026 年 7 月 27 日,官方 README 的 Claude Code 快速安裝流程如下;需要 Python 3.10 以上:

python --version
pipx install code-review-graph

cd /path/to/your/repo
code-review-graph install --platform claude-code
code-review-graph build
code-review-graph status

安裝器會在 Repo 裡加入工具整合檔,先用 git status --short確認新增內容,再重啟 Claude Code。官方 README 列出的 review 指令是:

/code-review-graph:build-graph
/code-review-graph:review-delta
/code-review-graph:review-pr

若重啟後 slash command 沒出現,不要卡在介面;CLI 仍可完成核心分析:

# 先把圖譜更新到目前工作樹,再分析 HEAD 之後的變更
code-review-graph update --base HEAD --brief
code-review-graph impact --base HEAD --depth 2 --max-results 60

核心圖譜存在 Repo 的 .code-review-graph 本機資料庫;如果啟用選用的雲端 embeddings,程式碼衍生的識別字、signature 或 docstring 可能送到外部服務,也可能產生成本。敏感 Repo 應先讀完資料邊界,再決定是否啟用。

第三步:不要把 20 個檔案做成一個大 Commit

檔案數不是風險的好代理變數。改 20 個獨立文案檔,可能比改 3 個共用權限元件安全;真正要控制的是耦合程度、行為跨度與可回滾單位。實務上可把跨層功能拆成四段:

  1. 建立 Judge:先加 characterization test、golden output 或契約測試,證明現況;最好故意破壞一個條件,確認測試真的會紅。
  2. 核心行為:只改 domain/service,先不接 UI 與大範圍清理。
  3. 邊界接線:接 adapter、API、UI 或 persistence,保留相容層。
  4. 補齊與清理:新增錯誤情境、文件與安全刪除;rename、格式化另開 commit。

Anthropic 在 2026 年的 AI code migration 流程把「先打造夠強的 judge」放在前面:用原始程式和刻意破壞的版本測試 judge,先證明驗收機制會抓錯,再讓 agent 大量改。這個原則不只適用 migration;任何大型改版都一樣。

每段完成後,至少留下這組證據:

git diff --check
git diff --stat
git diff --name-only

# 換成此段真正相關的測試,不要一開始只丟整包慢測試
<your scoped test command>

# 圖譜先更新,再看本段 delta
code-review-graph update --base HEAD --brief
code-review-graph impact --base HEAD --depth 2

Claude Code 的 checkpoints 很適合撤回對話中的檔案編輯,但 官方限制包括:Bash 造成的變更不在追蹤範圍、subagent 的檔案修改不一定能一起還原,symlink/hard link 也有例外。因此 checkpoint 是短期保險,Git commit 才是跨 session、可審查的回滾單位

實測:Graph、Tests、Git Diff 為什麼會互相「打臉」?

為避免只抄工具的行銷數字,我在隔離的暫存 Repo 重播 Code Review Graph 自己的一個真實多檔 commit:先 checkout 22b2715 的父版本、用目前 PyPI 2.3.7 建立圖譜,再把該 commit 套進工作樹但不提交。如此 Git diff 就是已知答案,圖譜與測試則各自提供不同證據;若用歷史 commit 當時自帶的舊版分析器,gap 數字會不同。

Code Review Graph 16 檔實測比較:Git diff 16 files、Graph 額外 27 files 與 13 test gaps、pytest 35 項全通過
隔離實跑快照:Git diff、靜態圖譜與行為測試沒有給出同一個答案,這正是三角驗證的價值。

結果是:

  • Git diff:16 個檔案,新增 1,077 行、刪除 94 行。
  • 圖譜 delta:分析到 36 個 changed functions/classes,risk 0.60,列出 13 個 test gaps。
  • Blast radius:在 depth 2、最多顯示 60 筆的條件下,指出另有 27 個檔案受到關係波及。
  • 相關測試tests/test_eval.py 共 35 項,全部通過;執行時間會依機器與快取而異。

「13 個 test gaps」與「35 tests passed」可以同時成立。前者表示圖譜沒有看見某些 changed symbol 的直接 TESTED_BY 關係,是保守的結構風險提示;後者只證明這 35 個 assertion 在這次執行通過。它們都沒有單獨證明產品行為完整正確。

大型 Repo 安全改版三角驗證:Code Graph、Behavior Tests 與 Git Diff 各自抓不同漏網風險
圖譜抓多跳依賴、測試抓已知行為、Diff 抓範圍漂移;任一邊異常,就回到最小 commit 查證。

怎麼找出 false positive 與漏網依賴?

先把圖譜輸出的每個「受影響檔案」分成三類:

  • 可證實路徑:能從 changed symbol 沿 caller/inheritance/test edge 走到實際消費者;補上測試或人工驗證。
  • 保守候選:關係存在,但本次參數、feature flag 或執行路徑不會到達;記錄排除證據,不直接叫它 bug。
  • 圖譜看不見:reflection、dependency injection、字串路由、SQL/schema、設定檔、訊息佇列與遠端 API contract,必須靠搜尋、runtime trace、契約測試與 domain knowledge 補。

反過來也檢查 Git diff:是否出現計畫外檔案、產生檔、lockfile、權限設定或「順手清理」?如果 Graph 預測了某個重要 caller,diff 與 tests 卻完全沒有對應證據,這不是自動判錯,而是 reviewer 的最高優先查核點。

第四步:用第二模型做冷審查,不讓作者替自己辯護

同一個 session 的 Claude 知道自己為什麼這樣寫,也更容易沿用原本假設。冷審查刻意拿掉這層故事:開一個新 session,或交給另一個模型,只提供 PLAN.md、完整 diff、驗收條件、測試輸出與 graph report。不要附上作者長篇推理,也先不要讓 reviewer 修改程式。

Claude Code 官方最佳實務也提出 Writer/Reviewer 分離與 fresh context 的 adversarial review:讓 reviewer 對照計畫檢查需求、邊界測試與 scope,而且只回報 correctness,不做純風格挑剔。可直接使用這份 prompt:

你是沒有參與開發的冷審查員。
先假設這份實作可能錯,任務是嘗試推翻它,而不是替作者補理由。

輸入只有:
- PLAN.md 與驗收條件
- git diff
- scoped test 輸出
- Code Review Graph delta/impact 報告

請逐項查:
1. 是否碰到禁止觸碰區或超出 scope
2. changed API/symbol 的 caller 是否都被處理
3. 測試是否真的覆蓋驗收條件,並至少有一個會失敗的反例
4. 權限、錯誤、重試、相容性與資料邊界
5. Graph 有提示但 diff/tests 沒有證據的路徑

只回報可重現、可定位的 correctness/security 問題。
每項附:嚴重度、檔案/行號、失敗機制、重現或驗證方法。
不要修改程式;證據不足就標示「待證」,不要猜。

不同模型能降低部分共享盲點,但不是魔法。Ask HN 個案中,作者自述第二模型找到更多相關問題,這只能當經驗訊號,不能推成一般準確率。更可靠的設計是讓 reviewer 身份、上下文與成功條件獨立;Anthropic 的 AI-native SDLC 安全說明也採用多個狹窄、獨立 reviewer 與硬式存取邊界,而不是讓一個 agent 同時當作者、裁判與部署者。

第五步:review-delta 管小段,review-pr 管整體

兩個 review 指令的使用時機不同:

  • review-delta:每完成一個 slice 就跑,關注工作樹相對目前基準新增的 changed symbols、受影響 caller 與 test gaps。它回答「這一小段有沒有長出計畫外觸手?」
  • review-pr:所有 slices 完成、準備開 PR 時跑,重新看整個 branch 對 base 的影響,避免每段都合理、合起來卻破壞跨段契約。

圖譜輸出不能取代既有 CI。建議順序是:更新 graph → 跑 review-delta → 跑該段行為測試 → 看 diff → 冷審查;最後再跑 review-pr、完整必要測試與人工驗收。大型 Repo 若已有 LSP,保留它:LSP 擅長精準 symbol 導航,code graph 擅長多跳關係,兩者互補

Code Review Graph 的 Recall 1.0,為什麼不能當安全保證?

這是本文最重要的工具批判。Code Review Graph 的 README 自己揭露:其 graph-derived ground truth 是從同一張圖產生的答案,所以 recall 1.0 是 by construction 的循環上限,不是拿真實 production incident 做的獨立驗證。專案同頁列出的平均 F1 0.714、precision 0.578,以及 flow detection recall 33%,也都是專案自評結果,不能外推成你的 Repo 準確率。

README 另列出圖查詢相對 whole-corpus context 的中位數約 82× 縮減;但把整個程式庫全塞進 context 本來就是偏弱、甚至不實際的 baseline。小型單檔變更時,正式圖譜 review 還可能比直接讀 changed file 用更多 context。正確解讀是:

  • 這些數字支持「圖譜可能幫你縮小候選範圍」,不支持「它找到了所有風險」。
  • 對跨模組、跨層、caller 很多的變更,圖譜較有價值;對小 Repo 或 trivial diff,直接讀 code+跑 tests 往往更快。
  • 你真正該量的是自己的 miss:Graph 沒報但測試或人工發現的依賴,以及 Graph 報了但證明不會走到的路徑。

把 graph risk score 當排查順序,不要當合併門票。

可直接照做的 90 分鐘安全改版工作流

  1. 0–10 分鐘|鎖現況:乾淨 branch、記錄 baseline、跑 scoped tests,列出 no-touch zones。
  2. 10–20 分鐘|只做 Plan:探索依賴、寫 PLAN.md、把任務拆成不超過四個可回滾 slices。
  3. 20–55 分鐘|逐段實作:一次只做一個行為;每段跑 judge、diff check、graph delta,再 commit。
  4. 55–70 分鐘|三角驗證:逐一解釋 Graph × Tests × Diff 的不一致,將未解風險列成清單。
  5. 70–85 分鐘|冷審查:新 session 或第二模型只讀 artifacts,嘗試推翻 correctness。
  6. 85–90 分鐘|打包證據:PR 附計畫、commit map、驗收輸出、graph 候選、已排除理由與剩餘風險。

90 分鐘不是所有功能的工時承諾,而是一個最小安全迴圈。變更越深,就重複更多輪;不要把所有安全檢查拖到最後一次做。

七個最常見的失敗方式

  1. 圖譜沒更新就分析:先跑 update,不要拿舊 graph 對新工作樹下結論。
  2. 把 recall 1.0 當真實準確率:它的 ground truth 與 graph 同源,不能證明漏網率是零。
  3. 只問「測試有沒有過」:先故意做一個破壞,確認 judge 真的會失敗。
  4. 功能、rename、格式化混在一包:diff 變大,Graph 與 reviewer 的訊噪比一起下降。
  5. 冷 reviewer 看過完整原對話:它會繼承作者的 framing;只給 artifacts 與查核任務。
  6. 把 no-touch 寫在 Prompt 就放心:敏感區還需要 deny rules、身份與環境隔離。
  7. 把 checkpoint 當 Git:Bash 與 subagent 變更可能不在回復範圍;分段 commit 才能持久回滾。

Claude Code 大型 Repo 安全改版 FAQ

Claude Code 改 20 個檔案就算危險嗎?

不一定。風險取決於耦合、公開介面、資料與權限邊界,以及能否用小 commit 驗證與回滾。20 個獨立檔案可能比 3 個共用核心檔安全。

Code Review Graph 可以取代測試嗎?

不可以。圖譜回答關係與候選範圍,測試執行實際行為;兩者會有不同的誤報與漏報。

官方寫 recall 1.0,代表不會漏嗎?

不代表。該數字來自 graph-derived ground truth,是循環上限。README 已明示這不是獨立準確率證明。

小 Repo 也值得建 code graph 嗎?

通常先不用。若一個 diff 直接讀完、caller 可由 LSP 找齊,建圖的維護成本可能高於收益。跨模組、多語言或多跳依賴才更值得。

沒有測試的 legacy Repo 怎麼開始?

先建立最小行為 judge。從最重要使用流程、API contract、golden output 或 characterization test 開始,並用刻意破壞確認它真的會紅,再改 production code。

冷審查一定要換模型嗎?

不一定。fresh context 比「品牌不同」更基本;換模型可增加方法多樣性,但仍要靠明確驗收、可重現證據與人類判斷。

Claude Code checkpoint 足夠回滾嗎?

不足。它適合回復 session 內的檔案編輯,但不是 Git 替代品,也不保證覆蓋 Bash、subagent 與所有檔案型態。

PR 最少要附哪些證據?

至少六項:驗收條件、no-touch zones、commit map、scoped tests、graph impact 與排除理由,以及仍未解的風險。讓 reviewer 不必重建作者整段對話。

重點整理

  • 不要問「能不能信 Claude Code 改 20 個檔」,要問「錯了時,Blast Radius 是否受控」。
  • 開工前先有 baseline、驗收條件、禁止觸碰範圍與停止條件。
  • 大型變更用 plan-first、行為 slices 與分段 Git commit,讓每段都可證明、可回滾。
  • Code Graph、Behavior Tests、Git Diff 回答不同問題;不一致處就是最高價值的 review queue。
  • 冷審查要 fresh context、先假設實作錯,並只接受可定位、可重現的 correctness 證據。
  • Code Review Graph 的自述 benchmark 是工具線索,不是你的 Repo 安全保證。

延伸閱讀:把安全改版接進你的 AI 工程工作流

結論:安全不是少改,而是每一步都能被推翻

大型 Repo 不會因為你把 Prompt 寫得更有自信就變安全。真正可複製的 Claude Code 大型 Repo 安全改版,是把每次改動壓成小批次,用 Graph × Tests × Diff 三角驗證,再讓 fresh context 冷審查,最後用 Git 保留回滾路徑。

所以,AI 能不能改 20 個檔案不是關鍵;關鍵是錯了時,你是否能在合併前指出它會傷到哪裡、用什麼證據證明,並只撤回那一小段。


資料與工具介面查核日期:2026-07-27。本文無業配。Code Review Graph 的 benchmark 數字為專案自述;16 檔案例是 AlphaLab 在隔離環境的一次可重播實測,均不構成獨立準確率認證。AI 具有不確定性;命令請先在分支、測試環境與最小權限下執行,正式合併或部署前仍需依 Repo 的 CI、安全與人工審查規範驗收。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

每週一封,第一時間收到新文章與投資觀察。

我們不會 spam,隨時可退訂。