程式碼審查 (Assay)
使用此技能執行本地的、基於閘門的靜態程式碼審查。審查會依序開啟品質閘門;較低閘門的失敗會阻止較高閘門,因為當基本衛生、命名或錯誤處理已經出問題時,後續的判斷是沒有用的。
此技能不會呼叫遠端服務、發布評論、核准程式碼或修改檔案。它會審查本地或貼上的輸入內容,並產生結構化報告。
工作流程
階段 0:解析本地輸入
將使用者的輸入標準化為審查範圍:
| 輸入 | 解決方式 |
|---|---|
| 貼上的程式碼或 diff | 直接審查提供的內容 |
| 本地檔案路徑 | 讀取完整檔案內容;除非有 diff 上下文,否則沒有 diff 上下文 |
| 本地 git diff | 審查變更的檔案和區塊 |
| 提交 hash 或範圍 | 可用時使用本地 git diff |
| 分支名稱 | 可用時使用本地合併基礎 diff |
| 模糊請求 | 詢問檔案、diff、提交/範圍、分支或貼上的程式碼 |
請勿擷取 MR/PR 資料、呼叫遠端 API 或要求驗證。如果需要遠端上下文,請要求使用者提供本地 diff 或貼上的內容。
階段 1:校準審查深度
選擇要開啟多少個閘門。一般本地變更的預設值為閘門 1-5。
| 上下文 | 閘門範圍 |
|---|---|
| 草稿、WIP、探索性程式碼 | 閘門 1-3 |
| 一般功能或內部工具 | 閘門 1-5 |
| 共享函式庫、生產路徑或公開 API | 閘門 1-7 |
| 安全敏感程式碼、驗證、加密、命令執行或使用者輸入邊界 | 閘門 1-8 |
有疑問時,詢問程式碼的目標或風險等級。
階段 2:分流大型範圍
當審查範圍包含超過 5 個檔案時,在深度檢查前先執行快速分流。 若檔案數量為 5 個或更少,則跳過分流,直接進行結構提取。
分流檢查:
| # | 檢查項目 | 失敗訊號 |
|---|---|---|
| 1 | 死程式碼 | 被註解掉的程式碼、未使用的匯入、除錯輸出 |
| 2 | 命名清晰度 | 公開名稱含糊不清或誤導 |
| 3 | 巢狀深度 | 巢狀深度超過 3 層 |
| 4 | 函式長度 | 函式長到足以隱藏多個職責 |
| 5 | 錯誤吞沒 | 空的 catch/except 或忽略的失敗 |
| 6 | 領域混合 | 在一個單元中混合 I/O 與業務邏輯 |
| 7 | 原始欄位組合 | 複雜條件缺乏語義輔助 |
| 8 | 重複味道 | 相似的邏輯重複出現 |
| 9 | 安全味道 | 機密、不安全的插值、敏感日誌、未檢查的危險輸入 |
分類檔案:
| 類別 | 條件 | 後續動作 |
|---|---|---|
| 紅色 | 3 個或更多檢查失敗 | 完整閘門檢查 |
| 黃色 | 1-2 個檢查失敗 | 檢查目標閘門及所有較低閘門 |
| 綠色 | 0 個檢查失敗 | 除非特別要求,否則通過 |
安全味道是雙軌的:即使閘門 8 被較低閘門阻止,也要將其報告為分流警報。
階段 3:結構提取
在開啟閘門前,為每個被審查的函數、類別、模組或相關程式碼單元提取結構。使用提取結果來引導閘門審查;不要僅依賴原始 diff 文字。
記錄:
- 閉包、回呼或巢狀函數。
- 具有行為的內嵌物件或本地實體。
- I/O 操作和外部副作用。
- 最深巢狀及其原因。
- 領域分布:基礎設施、業務、呈現或混合。
- 生命週期:一次性、持久性或混合。
- 捕獲的變數和隱藏相依性。
- 提取過程中發現的明顯異常。
- 閘門 6 的可用真實來源:找到任何規格或治理文件
(
openspec/、PROJECT.md、AGENTS.md、ADRs、連結的問題) 來判斷邏輯, 或註明未找到。
階段 4:順序閘門審查
請參閱 references/gates.md 取得閘門定義。
按順序開啟閘門。如果一個閘門失敗,則停止為該檔案或審查範圍開啟更高的閘門。不要捏造發現結果。對於詳細部分,沉默表示合規;閘門索引仍會記錄哪些閘門已開啟、通過、失敗或被阻止。
階段 5:報告
使用以下格式產出報告:
## 審查記錄
**來源**:[輸入參考]
**校準**:閘門 1-[N] ([原因])
**分流**:[跳過 | 紅色 M 個 / 黃色 N 個 / 綠色 K 個]
**結果**:[通過 | 於閘門 N 失敗]
### 閘門索引
| 閘門 | 重點 | 狀態 |
|---:|---|---|
| 1 | 格式與語法衛生 | [通過 | 失敗 | 被阻止 | 未檢查] |
| 2 | 命名與可讀性 | [通過 | 失敗 | 被阻止 | 未檢查] |
| 3 | 錯誤處理與可觀測性 | [通過 | 失敗 | 被阻止 | 未檢查] |
| 4 | 控制流程與結構清晰度 | [通過 | 失敗 | 被阻止 | 未檢查] |
| 5 | 責任與邊界 | [通過 | 失敗 | 被阻止 | 未檢查] |
| 6 | 業務邏輯完整性 | [通過 | 失敗 | 被阻止 | 未檢查] |
| 7 | 去重與組合 | [通過 | 失敗 | 被阻止 | 未檢查] |
| 8 | 安全與參數完整性 | [通過 | 失敗 | 被阻止 | 未檢查] |
### 安全分流警報
[僅在分流檢查 9 失敗時包含]
### 閘門 N:[名稱]
| # | 位置 | 違規 | 修正建議 |
|---|---|---|---|
| 1 | `file:line` | 閘門 N:違反特定標準 | 具體修正 |
### 結構附錄
[包含與發現結果相關的程式碼單元摘要]
階段 6:可選修正計畫
僅在使用者要求時才產出修正計畫。
修正計畫規則:
- 每個修正處理一項違規。
- 修正順序遵循閘門順序。
- 在同一個閘門內,按檔案和行號排序,除非邏輯相依性要求其他順序。
- 不進行投機性修正。
- 每個修正都包含驗證標準。
規則
- 僅審查;不修改程式碼。
- 僅使用本地或貼上的輸入;不呼叫遠端 PR/MR API。
- 順序開啟閘門,並在第一個失敗的閘門處停止。
- 即使深度安全檢查被阻止,也要報告安全分流警報。
- 提供具體修正;避免模糊建議,例如「建議改善」。
- 如果所有開啟的閘門都通過,閘門索引即為報告;不要捏造發現結果。
- 提及未執行測試、建置或執行時期檢查。
- 堅守崗位;在邊界移交。此技能僅是靜態的本地審查。
對於執行時期/行為正確性,請指向
verify;對於超出閘門 8 表面檢查的深度安全分析, 請指向security-review。指出移交對象,而不是半吊子地做另一個技能的工作。