審查一個變更
此技能為指導方針,非完整檢查清單。 驗證並擷取變更的即時基礎分支和確切目標分支,然後在使用設定檔的 commands.change-scope 列出變更路徑後,再閱讀 diff 和足夠的周邊程式碼以理解設計。在重新定位或合併後重新建立基礎分支。優先考慮正確性、生命週期、安全性和破壞的必要行為,而非風格;一個帶有實質依據的阻斷性問題的簡短審查,勝過一長串無關緊要的小問題清單。
在判斷 diff 之前,請先閱讀需求。 將變更路徑對應到下方的來源,開啟每個所屬頁面,然後才對照這些需求閱讀 diff。僅憑記憶中的規則來判斷 diff,正是讓違規行為通過審查的原因。
真相來源
AGENTS.md位於根目錄及每個觸及的子樹目錄中:長期命令。.agents/project-profile.md:命令、已啟用的面向、每個面向的證據,以及專案特定規則。docs/defensive-patterns/:審查中強制執行的規則,每個工件系列一個頁面;閱讀 diff 觸及的每個頁面。docs/AGENTS.md和 docs-standard:文件放置位置與紀律。- prose-standard:註解、文件、提示與可見字串所需的覆蓋範圍和編輯判斷。
- error-handling:失敗分類、所有權、包含、保證與報告。
- lifecycle-review:外掛程式、服務和元件中的單例狀態、不可逆效應與清理順序。
- test-reliability:針對擁有資源、非同步或不穩定的測試進行隔離與回歸證明。
.agents/notes/:設計原理。將與代理筆記的分歧視為設計討論,而非自動否決。- 當設定檔啟用
surfaces.ui時,需使用ui-ux-review和responsive-ui技能。
阻斷性要求
- 新文字需接受語義審查。 對每個新增或修改的 Markdown 段落、API 文件、註解、提示、描述、診斷訊息和可見字串使用 prose-standard。自動化檢查無法建立準確性、放置位置或覆蓋範圍。
- 文件與程式碼一致。 設定、預設值、錯誤、連線欄位、事件和公開行為需在同一 diff 中更新其所屬的 README 和 API 文件。標記實作敘述、測試演練、審查歷史和重複的原理說明。
- 所有權與清理。 對於具有生命週期的外掛程式、服務或元件程式碼,對變更的行為和受影響的消費者套用 lifecycle-review。每個新的註冊都需證明其釋放機制。
- 必要的證據存在。 驗證作者已針對此 diff 執行了相關檢查(請參閱 pre-push-checks),且 CI 涵蓋其餘部分;審查兩者都無法偵測到的語義差距。
- 本地化 UI 複製。 當設定檔啟用
surfaces.localized-ui時,拒絕以標記語言、範本、輔助函數回傳值、無障礙屬性或元件預設值嵌入的產品文字;要求使用語言環境機制並提供每個受影響語言環境的證據。使用者資料、模型資料和連線資料保持原樣。 - 記錄重大變更。 當設定檔啟用
surfaces.public-api時,外部可感知的重大變更需在同一 diff 中附上升級指南(請參閱 upgrade-guide)。
手動檢查
- 意圖與介面合約: 追蹤每個變更介面的兩端。確認實作與描述及任何代理筆記相符,包括錯誤、取消、所有權和釋放機制。
- 錯誤處理: 拒絕「捕獲並繼續」的模式,除非狀態擁有者確認後續工作的前提條件仍然成立。
- 生命週期與並發性: 對於非同步設定、回呼、程序或拆卸,檢查發佈前的競爭條件、等待期間的取消、獨立的錯誤報告、回呼的包含性、重入前的所有權、完整的分離清理,以及靜止狀態的釋放機制。
- 能力與消費者適配性: 追蹤每個目前的消費者,然後標記消費者特定的行為洩漏到共享介面中的情況。也標記相反的情況:一個通用服務上的新公開方法,其唯一呼叫者僅為一個內部消費者;更傾向於將私有能力在建構時傳遞給該消費者。
- 範圍、所有權與必要性: 將每個抽象、狀態機、選項、防禦性複製和相容性路徑對應到其目前的合約、生產消費者與所屬模組。挑戰不相關的功能與投機性的通用性。
- 設定與公開選擇: 詢問支援每個預設值、公開操作集合、格式或引入的外部概念的當前消費者證據或既有實作經驗。當該證據不存在時,要求明確的選擇或推遲。
- 模型視角: 當專案將提示、工具架構或結果傳送給模型時,檢查模型實際接收到的確切文字。標記模型任務範圍之外的概念,並透過測試或快照驗證穩定文字保持一致以及動態行為。
- 強制執行: 追蹤每個拒絕路徑直到執行該操作的函式;測試能夠繞過架構、提示、外觀、包裝器或監聽器排序的直接和間接呼叫者。
- 借用與衍生狀態: 確定每個保留的值是借用還是擁有的,然後追蹤通知以及每個快取、提示、UI 回顯、重播和查詢檢視,直到其文件記錄的成功點和權威來源。
- 邊界涵蓋最終操作: 找到完整發出或保留結果(包括包裝器與元資料)的擁有者。探索極小與精確的邊界、過大的單一塊,以及多位元組文字是否受到位元組限制。
- 真實進入點: 測試在相關情況下執行已發佈的載入器、二進位檔案、工作者或子程序。手動組合的測試設定無法捕捉無效的匯出。
- 測試強度: 斷言應針對預期的回歸失敗,並驗證外部狀態、日誌、事件或釋放機制,而非重述實作內容。覆蓋率是必要的,但並不代表該情境是正確的證據。
- 負面控制: 驗證對於每個變更的驗收規則,一個故意無效的情況會透過真正的執行器失敗。
- 已實作的代理筆記與已發佈的現實相符: 當變更實作了一個提議的筆記時,在同一 diff 中將其移動並重寫為現在式的已發佈狀態。
- 翻譯: 比較兩邊的含義與術語;結構相符並不能證明翻譯品質。
報告發現
說明缺陷、位置、影響和證據。將在地化的缺陷以內聯方式放置在相關 diff 範圍的最緊湊範圍內;對於跨架構、範圍或綜合性的問題,使用頂層評論。將阻斷性問題與建議事項分開,並省略已通過檢查強制執行的事項。在接收審查時,驗證每個主張,並以技術理由修正或反駁它。