Delivery Gate — Claude Code 的機械式品質閘門
一個停止掛鉤,在 Claude 結束會話前檢查三件事,只使用確定性檢查 — 檔案修改時間戳、磁碟使用量與 transcript 文字上的正規表達式模式。不使用任何 AI 推論。
這與推理閘門(如 self-audit)不同:delivery-gate 檢查機器可驗證的事實;self-audit 則從四個推理維度檢查輸出品質。兩者共同形成縱深防禦:
- delivery-gate:「學習庫今天有更新嗎?磁碟空間安全嗎?」
- self-audit:「檔案內容正確、完整且誠實嗎?」
這與 CI pipeline 閘門的模式相同 — 自動化、確定性的檢查,驗證機器可讀的事實,而非信任自我報告的狀態。
檢查項目
| 檢查 | 機制 | 命中時的反應 |
|---|---|---|
| 合理化模式 | Transcript 結尾的正規表達式 | 僅警告(永不阻擋) |
| 學習庫過時 | 5 個可設定路徑的 mtime | 部分過時時警告;>=3 個過時或增長日誌過時且任務複雜時阻擋 |
| 磁碟空間 < 50GB | shutil.disk_usage | 警告 |
| 磁碟空間 < 15GB | shutil.disk_usage | 阻擋(exit 2) |
合理化檢測會對「暫時跳過測試」、「既存 bug」等模式發出警告 — 這些是思考可能被打斷的表面信號。它永遠不會單獨阻擋,因為正規表達式啟發式可能誤判。阻擋條件為:磁碟危急、>=3 個學習庫過時,或 growth-log 特別過時(均需複雜任務 >=3 次編輯)。
為什麼需要
Claude Code 內建的檢查涵蓋程式碼品質(建置 → 型別 → lint → 測試)。但存在另一種失敗模式:agent 產出可運作的程式碼,但會話衛生被忽視 — 學習未被記錄、合理化捷徑、磁碟空間悄然用盡。
經過許多「交付即遺忘」的會話後,人類並未成長。這個掛鉤強制養成習慣:複雜任務 → 必須更新學習庫。
安裝
cp quality-gate.py ~/.claude/scripts/
加入 ~/.claude/settings.json:
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
學習庫
在專案的記憶體目錄中建立這些檔案。掛鉤會檢查至少有一個在今天被更新:
memory/
├── growth-log/ # 每日學習記錄(目錄)
├── decisions/log.md # 決策日誌
├── output-index.md # 會話輸出索引
├── ratings-tracker.md # 技能評分隨著時間變化
└── tooling_capabilities.md # 已知工具清單
可自訂 LIBS 字典以符合自己的檔案結構。
組態設定
編輯 quality-gate.py:
| 變數 | 預設值 | 用途 |
|---|---|---|
RATIONALIZE | 4 個模式 | 用於檢測合理化的正規表達式模式 |
LIBS | 5 個庫 | 檢查當日更新的檔案/目錄 |
COMPLEX_THRESHOLD | 3 | 將編輯/寫入呼叫歸類為複雜任務的次數門檻 |
DISK_WARN_GB | 50 | 低於此值時警告 |
DISK_CRIT_GB | 15 | 低於此值時阻擋 |
範例
簡單會話 — 允許:
edit_count=1 (< 3, 非複雜) → exit 0
複雜任務,有記錄學習 — 允許:
edit_count=5 (複雜) → 檢查 LIBS → growth-log 今天已更新 → exit 0
複雜任務,未記錄學習 — 被阻擋:
edit_count=4 (複雜) → 檢查 LIBS → 全部 5 個過時 → exit 2
stderr: "Blocked: complex task completed but no learning captured today."
磁碟空間不足 — 被阻擋:
disk_free=12GB < 15GB 危急 → exit 2
stderr: "Blocked: disk space at 12GB (threshold: 15GB)."
限制
掛鉤強制的是更新學習庫的習慣,而非記錄內容的品質。如果 output-index.md 已更新但 growth-log 被跳過,掛鉤仍會通過(5 個庫中更新了 1 個)。這是刻意為之:機械式閘門檢查機器可驗證的事實。如需內容品質驗證,請搭配 self-audit 使用。
相容性
- Python 3.8+(使用
from __future__ import annotations) - 跨平台:Windows、macOS、Linux
- 零依賴,僅需標準函式庫
品質
此程式碼經過 4 輪自動化程式碼審查(CodeRabbit + Greptile),共發現並修復 9 個實際錯誤。
參見
self-audit— 推理品質閘門(完整性/一致性/根據性/誠實性)verification-loop— 程式碼品質檢查(建置/型別/lint/測試)gateguard— PreToolUse 安全閘門