add-convention
新增一個慣例 — 但僅在評估它是否應該存在以及應歸屬於何處之後。此技能扮演守門員和路由器的角色,而非僅是記錄員。
步驟 0 — 前置條件和背景
- 確認儲存庫已初始化完成。
- 完整閱讀
CONVENTIONS.md和AGENTS.md,以便偵測與現有規則的重疊並判斷適合度。
步驟 0.5 — 評估(先執行)
執行共用的評估協議;分類(步驟 1)和路由(步驟 2)問題都在此協議下提出:
-
優先重複使用已提供的答案。 將請求或本次對話中已提供的適用選擇(包括深度)視為已回答。在不重複詢問的情況下摘要它們;預設值永遠不會取代明確的選擇。如果每個重要選擇都已提供,則繼續進行。僅詢問缺失或衝突的重要選擇。儲存庫偏好本身不是當前的答案或執行授權。
-
未解決選擇的深度選擇器。 如果未提供深度且仍有選擇待定,請詢問這次評估應深入何種程度:快速 — 每個選擇都採用其建議的預設值;僅仍會詢問無法推導出預設值的問題(自由文字的基本問題);引導式 — 僅詢問下方標記為高影響力的問題,加上自由文字的基本問題;完整 — 詢問下方所有問題。如果儲存庫的
CONVENTIONS.md記錄了Assessment depth:,請在詢問時預先選取它作為建議選項;已記錄的深度絕不會被靜默套用。否則,當請求在幾乎沒有背景的情況下到達時建議使用完整,當請求已完全明確時則建議使用快速。在任何問題時,操作者可以回答「從這裡開始使用預設值」或「深入處理」;立即遵循此切換。 -
一次只問一個問題,每個問題都帶有建議選項和一行理由;等待每個答案。
-
使用結構化選擇(單選或多選)。如果主機暴露了結構化的單選/多選問題工具,請使用它並標記建議選項;否則以純文字列出選項 A/B/C 並指出建議選項。僅在無法列舉選項時使用自由文字(例如確切的措辭)。
-
操作者做決定。 在沒有答案的情況下永遠不要越過問題,並且在沒有背景的情況下呼叫時永遠不要猜測範圍。
問題(跳過請求中已回答的任何問題):
- 值得編寫成慣例? — 是(可重複、穩定、可測試)或否(一次性、重複、易變動、模糊)。建議:依據步驟 1 的分類結果;此問題是後續問題的門檻。 (高影響力 — 在引導式中詢問。)
- 歸屬位置 —
AGENTS.md硬性規則 /CONVENTIONS.md指引 /GLOSSARY.md詞條 / 實際上是決策(移交給 new-adr 技能)。建議:依規則的性質而定(見步驟 2)。 (高影響力 — 在引導式中詢問:錯誤的歸屬位置會造成移動的麻煩。) - 在驗證閘道中強制執行? — 是 / 否。建議:否,除非該規則是可機械式檢查的。
- 措辭 — 自由文字(規則陳述本身;在所有深度級別都會詢問)。
步驟 1 — 評估:這值得編寫成慣例嗎?
執行分類。在以下情況下建議不新增:
- 現有慣例已涵蓋(明確或隱含地)— 指向它而不是重複。
- 這是一次性決策,非重複性決策 — 編寫它只會增加雜訊。
- 它很可能會變動 — 過早制定的規則會變成過時的累贅。
- 它太過模糊,無法如實寫出地進行測試或執行。
在以下情況下建議新增:這是一個重複性決策,其模糊性導致返工,且規則穩定,並且可以表述為代理無需進一步解讀即可遵循。在執行任何操作之前,說明你的建議和理由。
步驟 2 — 路由:它屬於哪裡?
決定歸屬位置,並解釋選擇:
- 代理必須遵守的硬性規則 →
AGENTS.md§Hard rules 中的一個要點,內容放在CONVENTIONS.md中。用於不可協商的約束。 - 創作 / 流程指引 →
CONVENTIONS.md中的一個章節。用於提供資訊但不用作門檻的「我們做事的方式」。 - 共用詞條 / 定義 →
GLOSSARY.md(如果不存在則建立它 — 新增第一個詞條會啟用詞彙表層;將其放置在記錄的成品根目錄)。閱讀儲存庫的CONVENTIONS.md§Glossary 並檢查其實際宣告的規則;標準結構是可選的 H1 標題和可選的介紹性文字,然後恰好一個兩列表格,其表頭為Term | Definition。每個詞條佔一個獨立行。永遠不要將詞條記錄為標題、要點或段落,也永遠不要新增第二個表格或不同的欄位列形狀。宣告較舊或不相關詞彙表慣例的 §Glossary 並不代表採用了此表格:使用標準形狀並提供稽核技能的單獨同意規則和檔案遷移,而不是複製舊形狀。GLOSSARY.md不存在仍然是有效的狀態;此技能僅在實際要新增詞條時才建立。 - 實際上是決策而非慣例(具有替代方案和後果的架構、產品或技術選擇)→ 這是一個 ADR。停止並提供 new-adr 技能;不要將決策埋在 CONVENTIONS 中。
如果慣例是分類/流程規則(例如如何分類傳入的工作),則優先選擇 CONVENTIONS.md,並在 AGENTS.md 中僅對不可協商的部分加入硬性規則要點。
步驟 3 — 起草並確認
為其歸屬檔案起草確切的措辭。保持簡潔、可測試,並使用儲存庫的語言。顯示差異。在寫入之前確認。
步驟 4 — 寫入並提交
套用編輯。如果慣例升級為硬性規則,請確保 AGENTS.md 和 CONVENTIONS.md 保持一致。使用 Conventional Commit(docs: ...);未觸及 ADR 則不需要 Rationale: 頁尾,但如果儲存庫的協定要求對慣例變更進行此標記,則應添加。
新增或擴充詞彙表。 使用下方定義的標準結構和已宣告規則的檢查;形狀不得在不同執行之間偏移。
- 規則的來源。 如果
CONVENTIONS.md沒有 §Glossary 章節(早於此機制的舊儲存庫,或在記錄規則之前啟用的層),則回退到上述產品預設標準形狀:可選的# Glossary標題和介紹文字,然後一個Term | Definition表格。不要為該儲存庫發明不同的形狀,也不要靜默編輯不相關的慣例。 - 讀取已宣告的規則。 當 §Glossary 存在時,讀取它實際宣告的內容。如果它描述了標準的兩欄
Term | Definition表格,則遵循它,並且僅在明確請求時才變更它。如果它陳述了不同的或較舊的詞彙表慣例(要點、文字、另一種欄位列形狀),則儲存庫尚未採用此表格:不要複製舊形狀,也不要靜默重寫規則。使用標準形狀來處理詞條,並提供稽核技能的遷移,該遷移將規則和檔案作為一個單獨同意的差異一起涵蓋。 - 記錄慣例。 當 §Glossary 不存在時,提議(作為其自己的已確認編輯,與正在新增的詞條分開)在
CONVENTIONS.md中記錄一個## Glossary章節,說明實際使用的形狀。顯示該差異,並且僅在使用者接受時才寫入它;永遠不要重寫或重新排序CONVENTIONS.md的其他章節以騰出空間,如果使用者拒絕,則保持詞彙表標準但保持CONVENTIONS.md不變。 - 建立檔案。 寫入可選的
# Glossary標題和儲存庫所需的任何簡短介紹文字,然後是單個兩欄表格,表頭為Term | Definition,並將新詞條作為其第一行。不要發明佔位符詞條。 - 擴充現有檔案。 逐位元組保留標題、介紹文字、條目順序和每個現有行。將新詞條作為一個新行附加;永遠不要重建、重新排序或重新格式化檔案,也永遠不要引入第二個表格。
- 定位錨點。 如果新詞條的行可以從傳入連結已使用的標題定位錨點到達,則將該定位錨點保留在該行上而不是丟棄目標;如果無法保留定位錨點,則停止並標記它,而不是猜測。
- 保留含義。 完全按照提供的內容保留詞條的拼寫、別名、連結和內聯程式碼。將文字豎線轉義為
\|。如果定義真的是多行的,則將其保留在一個儲存格中,使用<br>進行強制換行,而不是擴散到額外的行。 - 重複和歧義。 如果詞條已存在,則顯示現有和提議的定義,並詢問是否更新或保留現有行。永遠不要靜默合併、替換或為同一個詞條新增第二行,也永遠不要猜測定義。
- 非標準檔案。 如果現有的
GLOSSARY.md是要點、文字、標題或混合形狀,不要附加衝突的行,也不要因新增詞條而作為副作用重寫檔案。揭露非標準結構並提供稽核技能的同意遷移;僅在使用者接受具體差異時才應用它。被拒絕的遷移會保留使用者保持的檔案。
命名執行的規則和傳播;列出未更新的儲存庫。
結案報告
每次執行結束時,包括被阻擋、失敗和停止的執行,都必須以一個標題為 Status at a glance 的章節結束,其中包含以下三個標籤:
- This run: 僅實際嘗試的動作及其結果;引用每個驗證閘道的確切輸出和退出碼,包括逾時或中斷。
- Overall: implemented(已實作)、partially verified(部分驗證)、verified(已驗證)、blocked(被阻擋)、failed(失敗)或 unknown(未知)。通過的子步驟不等於整體通過;不完整或缺失的證據永遠不會變成成功。
- Yet to do: 每個剩餘的動作、未解決的發現、驗證、清理或所需的輸入。僅在整個任務可驗證完成時才寫入 None;永遠不要因為預算耗盡而省略工作。
常規進度訊息不需要區塊。保持最終結果簡潔,並區分在 PR 上準備的工作和已確認交付的工作。