Claude Code 儲存庫中最近的兩項內容,一項更新日誌修正和一項錯誤報告,描述了審查步驟可能出錯的兩種方式。
Anthropic 在 Claude Code 2.1.305 中修正了什麼?Claude Code 2.1.305 版本的更新日誌中,關於 Anthropic 的託管 pull request 審查工具 Code Review 有這樣一行:「[Code Review] 修正了當多個 push 在審查期間提交到 pull request 時,Code Review 有時無法審查最新提交版本的問題。」
來源:Claude Code CHANGELOG.md, version 2.1.305。如果沒有記錄審查實際讀取了哪個提交版本,那麼對舊版提交的審查看起來會與對最新提交版本的審查相同。Anthropic 已在其產品中修正了這個問題。
在任何審查進行中仍可能提交新提交版本的設定中,包括本地設定,都存在相同的風險。問題 #103536 報告了什麼?問題 #103536 於 2026 年 10 月 19 日索非亞時間 20:45 開啟,標題為「[BUG] 模型在唯讀審查期間編輯了追蹤檔案,儘管已載入『未經要求不得編輯 / 零自主性』規則」。
報告者寫道:「在重新審查 pull request 時,模型主動編輯了一個追蹤檔案 (CHANGELOG.md)。它刪除了一個重複的條目並重新措辭了另一個,而使用者並未要求進行這些操作。」環境部分說明了為何沒有阻止它:「自動批准允許了編輯和 Bash 工具,因此沒有阻止寫入。」
來源:anthropics/claude-code issue #103536。根據該問題,告知模型不要編輯的規則是每回合從 CLAUDE.md 和 MEMORY.md 載入的。編輯工具仍然可用,因此編輯操作得以執行。
閘道如何將審核結果與一個提交版本綁定?two-engines-gate 是一個免費的 MIT 授權本地審查和合併閘道,適用於 Claude Code 和 Codex。bin/review.sh 在開始時讀取 HEAD 的完整雜湊值,並將審核結果儲存為 .ai/reviews/<HEAD 的前 12 個字元>.md(第 22 和 23 行)。它會先刪除該提交版本的所有早期審核結果(第 24 行)。
審查者退出後,它會檢查 HEAD 是否仍然是相同的提交版本,如果已更改,則會以「REVIEW VOID: HEAD moved during the review」停止(第 74 行)。儲存的檔案以一行 Head: 開頭,其中包含完整的 40 個字元雜湊值(第 82 行)。
bin/merge-check.sh 隨後會尋找 .ai/reviews/<HEAD 的前 12 個字元>.md,如果檔案遺失或其 Head: 行命名了不同的提交版本,則會拒絕合併(第 21 至 23 行)。它還需要一個以完整雜湊值命名的測試通過記錄,即 .ai/tests/<HEAD>.pass(第 18 至 20 行),以及一個審查者與建構者是不同引擎的審核結果(第 24 至 27 行)。
當審查後有新的提交版本提交時,merge-check 會找不到對應的審核結果並拒絕合併。README 用兩句話說明了原因:「對舊版提交的 ACCEPT 可能會悄悄地覆蓋無人審查的程式碼。新的提交版本需要新的審查和新的測試執行。」
如何讓審查者遠離編輯和寫入工具?閘道的審查者始終是沒有編寫程式碼的引擎。在預設的 BUILDER=claude 設定下,Codex 進行審查,review.sh 會將其呼叫為 codex exec -s read-only (bin/review.sh, 第 60 行)。
docs/engines.md(第 13 行)將此描述為唯讀沙盒,其中 Codex 可以讀取檔案並執行唯讀命令,例如 git diff,但不能寫入。
在 BUILDER=codex 設定下,Claude Code 進行審查。這是 bin/review.sh 中的呼叫(第 66 至 68 行),此處未顯示可選的模型參數:claude -p "Do the review described on standard input." --restricted --strict-mcp-config --permission-mode dontAsk --tools "Read,Grep,Glob" --allowedTools "Read,Grep,Glob" --disallowedTools "Bash,Edit,MultiEdit,Write,NotebookEdit,WebFetch,WebSearch,Task,Agent" --tools "Read,Grep,Glob" 將會話限制為這三個工具,並且 --disallowedTools 也列出了 Edit、MultiEdit、Write、NotebookEdit 和 Bash。
docs/engines.md(第 30 行)指出,透過此呼叫,Claude Code「無法執行命令,包括 git,也無法編輯或寫入檔案」,這就是 review.sh 將提交版本和完整的差異放入提示詞的原因。review-prompt.md 也告知審查者「不要編輯、建立或刪除檔案」,而閘道並不依賴這句話是否被遵守。
在問題 #103536 中,編輯操作得以執行是因為允許了編輯工具,而在閘道的 Claude Code 呼叫中,審查者開始時沒有該工具。作為第二次檢查,review.sh 在審查後執行 git status,如果 .ai/ 之外的任何檔案發生更改,則會以「REVIEW VOID: files changed during the review」停止(第 75 行)。
閘道不執行什麼?README 列出了其限制。它指出閘道「不會使程式碼正確」,並將其描述為「防止合併錯誤提交版本的本地防護,而非安全邊界」,因為任何對儲存庫具有寫入權限的人都可以寫入 .ai/ 下的檔案。它不執行 push、merge 或與 GitHub 通訊。
試用它和套件。這個免費的閘道位於 github.com/IliyaOblakov/two-engines-gate。在一個複製的儲存庫中執行 bash demo.sh 會透過一個替代審查者逐步演示一個更改,因此不需要模型、帳戶或網路。
Two Engines Kit 是付費套件,目前版本為 v1.0.2。在其中,Claude Code 編寫程式碼,Codex 進行唯讀審查,審查腳本將審核結果儲存在 Codex 審查的提交版本下,並且合併腳本在沒有該提交版本通過測試執行的情況下拒絕觸碰 GitHub。
如果設定 REQUIRE_REVIEW=1,它還會拒絕沒有儲存 ACCEPT 的提交版本。Two Engines Kit 是基於自第一個 Codex 和 Claude CLI 以來收集的資訊而建構的。前 30 份銷售價格為 29 美元,之後為 39 美元,可在 rayastats.com/en/two-engines-kit 購買。