Standards
審查者一遍又一遍地手動執行相同的慣例,留下一條條評論。這個技能將這些評論轉化為書面標準,然後檢查差異是否符合這些標準。每個標準將代理在撰寫程式碼時遵循的規則,與審查者在審查差異時應用的視角(lens)配對。每個編號的 § 都引用了其背後的審查評論,因此任何人都可以將規則追溯到執行該規則的審查者。
核心原則
- 證據優先。一個 § 需要來自至少 3 個不同變更和 2 個不同審查者的審查評論,因為同一變更或同一人的多條評論可能只是單一審查者的個人偏好。
- 每個規則都帶有其原因。即使規則周圍的程式碼形式發生變化,原因仍然能引導代理。
- 每個慣例只有一個歸屬地。兩份副本會產生分歧,而代理只會遵循它先讀到的那個。
- 檢查優於 §。可以被 linter、類型檢查或測試捕捉到的慣例應歸屬於該工具,因為檢查每次都會執行。
- 刪除代理已能遵循的規則。一個無需提示即可遵循的規則,只會在每次載入時浪費上下文,卻不會改變任何行為。
- 腳本是捷徑。每個輸出檔案在
references/schemas/中都有對應的 schema,因此當腳本遺失或失敗時,可以手動編寫相同的檔案。 git是唯一的硬依賴。forge 的 CLI(例如gh或glab)用於添加審查評論,若無此類工具,git log可作為替代方案。
命令
| 命令 | 用途 | 輸出 | 參考文件 |
|---|---|---|---|
mine | 提取審查評論,按慣例標記,根據頻率乘以嚴重性對聚類進行排名 | .standards/clusters.json | references/mine.md |
write | 將排名後的聚類轉換為倉庫中的標準技能,每個 § 包含其原因和證據 | 標準技能 | references/write.md |
review | 應用差異觸發的每個視角,並報告附有 § 引用的發現 | 回覆中的發現 | references/review.md |
prune | 在多個測試場景中對每個規則進行 A/B 測試,並刪除那些代理無需提示即遵循的規則 | prune.json | references/prune.md |
doctor | 標記漂移:無法匹配任何檔案的 glob、已消失的引用檔案、從未觸發的視角、過時的修剪資料 | .standards/doctor.json | references/doctor.md |
路由
調用方式為 standards [command] [scope]。scope 可以是路徑或 glob、來自生成索引的區域 slug,或 § 編號(§2、§2.3)。根據 references/scope.md 解析 scope。mine 只能接受路徑,因為區域只有在 write 之後才存在。
- **無參數。**顯示下方選單並等待選擇。絕不自動執行命令,因為每個命令都會讀取歷史、編輯倉庫或消耗大量代理執行次數。
- **有 scope 但無命令。**在不詢問的情況下對該 scope 執行
review,因為review僅讀取資料。 - **有明確或清晰暗示的命令。**載入其參考文件並逐步遵循。
- **兩個命令都符合。**詢問一次要執行哪一個,說明兩者名稱及其作用。然後遵循答案。
- **從無到有建立標準。**從
mine開始,因為write需要clusters.json。當mine完成時,提供write選項。 - **關於技能本身的問題。**直接從此檔案回答,無需執行任何命令。
選單
standards: 我該做什麼?
mine 從審查評論中挖掘出排名後的慣例
write 根據排名後的慣例撰寫標準
review 根據標準審查差異
prune 測試每個規則並刪除代理已遵循的規則
doctor 檢查標準是否有漂移
每個命令都可以接受一個可選的 scope:路徑、區域或 §。
當生成的標準存在時,在選單下方以 § 編號和 slug 的形式列出其區域。
流程
mine 提供資料給 write,而 write 產出 review 所應用的標準。prune 和 doctor 在之後維護這些標準。
工作檔案位於目標倉庫根目錄的 .standards/ 中。將該資料夾排除在版本控制之外,因為審查評論會引用程式碼和人員。prune.json 是例外,它與生成的標準放在一起,因為 doctor 會從該位置讀取它。
參考文件中的 <skill-dir> 指的是存放此檔案的資料夾。<skill-dir>/scripts/ 中的腳本可以加速 mine,並且只需要 JavaScript 執行環境的標準庫。
判斷模型
mine、prune 和 doctor 會提出許多小型的類型化問題。判斷模型是一種快速模型,能夠以校準後的機率回答類型化問題(從一組選項中選一個、回答是/否的機率、給出分數)。如果你的環境提供判斷模型,請用它來回答這些問題;否則,由你自己回答。你環境自身的指令會決定哪個模型是判斷模型。
生成的標準
- 預設輸出是一個技能,包含一個由一行摘要組成的索引,每個摘要連結到一個 § 檔案。模板:index 和 section。
- 每個區域一個技能是一個可選項,根據 references/write.md 中的形狀實驗(shape experiment)按倉庫設定。
- 生成的標準遵循與此技能相同的規則:僅規範 frontmatter、無 URL、無日期,以及每個規則都要有原因。