--- name: format-commit description: Use when committing changes - drafts a Why/How commit message from git diff and conversation context, shows it once for approval, then executes git commit. Only asks the user when the reasoning genuinely can't be inferred. --- 先讀 [AI 檢核與人工審核共用流程](../../docs/ai-human-review-workflow.md),依當前客戶端可用工具執行;先完成適用檢核與修訂,再交人審核決策。 # Format Commit Message 協助產生符合專案格式的 commit message,包含 `## Why is this necessary?` 和 `## How does it address?` 區塊。**先起草、一次給使用者確認**,不要逐項發問。 ## Instructions ### 步驟 1: 分析當前變更 1. 執行 `git status` 查看當前變更的檔案 2. 執行 `git diff --staged` 讀完整內容(不是只看 stat)——type、scope、Why、How 都要從這裡推導 ### 步驟 2: i18n 健康檢查(條件式) 只在 staged 變更包含 UI 原始檔(`.tsx`/`.jsx`/`.vue`/`.svelte`)或 locale 檔案時才執行;純後端、設定、CI、文件類 commit 直接跳過,不要輸出任何 i18n 相關文字。 觸發時檢查: 1. **locale 同步**:2 個以上 locale 檔案時,比較 top-level key 是否一致 2. **硬編碼字串**:從 `git diff --staged` 新增行(`+` 開頭)找可疑的硬編碼 UI 文字(`>文字<`、`label="..."` 等),排除 import、console.log、type/interface 宣告、URL、className、測試 fixture 3. **未同步警告**:UI 檔案有異動但沒有對應 locale 異動 只有查到問題才輸出: ``` ⚠️ i18n 檢查結果 ─────────────────────────────── [locale 同步] zh-TW.json 缺少 key:settings.title、settings.save [硬編碼字串] src/components/Header.tsx +23:

Settings

[未更新警告] UI 檔案有變更(Header.tsx),但 i18n 檔案未異動 ``` 沒問題就完全不提。這是警告性質,使用者可以忽略繼續 commit。 ### 步驟 3: 起草 Why 和 How **Why(為什麼需要這個改動)**:優先從當前對話脈絡推導——使用者通常已經講過要解決什麼問題、加什麼功能。只有在 diff 和對話都推不出動機時,才用一句話直接問使用者,不要開整個選單。 **How(做了什麼)**:從 `git diff --staged` 分析實際變更內容,自行歸納 3-5 個具體要點。答案已經在程式碼變更裡,不需要問使用者。 **Type / scope / 一句話描述**:從變更的檔案路徑、內容、對話脈絡直接推導,不要另外用 AskUserQuestion 詢問——這些是機械推導,不是只有使用者才知道的決策。 ### 步驟 4: 生成並展示 Commit Message 根據推導結果,直接把完整草稿寫出來給使用者看: ``` (): <簡短描述> ## Why is this necessary? - <原因 1> - <原因 2> - <原因 3> ## How does it address? - <解決方案 1> - <解決方案 2> - <解決方案 3> ``` ### 步驟 5: 確認和執行 使用者這時可以:直接說可以 → 執行;指出要改的地方 → 改完再貼一次不用重問已確定的部分;若對話中已有明確指示(commit type、要強調的原因)直接採用。 確認後將完整訊息寫入檔案,以 `git commit -F ` 執行;提交前核對 staged 範圍仍與受審內容一致,不夾帶他人變更。 ## 何時才用 AskUserQuestion 只有在 diff 和對話都推不出「為什麼要做這個改動」時,才問一個問題請使用者補充 Why。不要為了 type、scope、一句話描述另外發問。 ## 格式規範 ### 標題格式 - 使用 `type(scope): 描述` 格式 - 描述使用繁體中文,簡潔明確 - 如需更詳細說明,使用 `—` 分隔:`type(scope): 簡短描述 — 更詳細說明` ### Why 區塊 - 每個項目以 `-` 開頭 - 說明問題點或需求背景 - 使用繁體中文 - 具體且明確,避免模糊描述 ### How 區塊 - 每個項目以 `-` 開頭 - 說明具體的解決方案或實作方式 - 可包含技術細節(檔案名、函式名、參數等) - 使用繁體中文,技術術語保留英文 ## 範例 ``` feat(ci/cd): 優化 workflow 加入智能檔案變更檢測 ## Why is this necessary? - 目前的 CI/CD 流程無論修改哪個應用,都會 build 和部署所有應用,造成時間浪費 - 只修改 product 相關檔案時,仍會 build 和部署 website,增加 30-50% 的不必要時間 - 部署驗證使用 docker logs 在某些 logging driver 不支援讀取時會失敗 ## How does it address? - CI 新增檔案變更檢測步驟,根據變更路徑決定需要 build 的應用 - 只修改 apps/website 時僅 build website,只修改 apps/product 時僅 build product - 修改 packages/ 或配置檔時 build 所有應用(共享依賴) - Verify job 改用 docker inspect 檢查容器狀態,避免 logging driver 問題 ``` ## 注意事項 1. **分析變更時要仔細**:準確理解程式碼變更才能起草出正確的 Why/How 2. **保持簡潔**:Why 和 How 各 3-5 個要點即可,不要過於冗長 3. **能推導就不要問**:type、scope、描述、How 都是機械推導;只有 Why 在推不出來時才問,而且只問一次 4. **使用繁體中文**:除了技術術語外,一律使用繁體中文