fix-ci | 從失敗檢查定位並修正 CI
本頁以 pstack-claude 0.9.126 移植版為準。fix-ci 不在此次核對的 Cursor 原版 pstack 技能目錄中。本次未連線 PR、讀取遠端日誌或執行 CI。
定位與適用情境
持續整合 (continuous integration, CI) 失敗時,最後一行通常只說工作結束。此技能先找第一個可處理的錯誤,再做最小安全修正,避免整批重構掩蓋真正原因。
情境是一個匯出功能 PR 的型別檢查與整合測試都失敗。型別檢查指出欄位名稱已變,整合測試可能只是相同問題的後果。輸入是目標分支、PR 檢查集合與失敗工作日誌。結果應是可追溯的修正次序,而不是「重跑到綠」的碰運氣紀錄。
準備
- 確認正確儲存庫、分支及 PR,並準備 GitHub CLI
gh的讀取權限。 - 準備本地重現失敗指令所需的既有環境。若檢查來自外部服務,先確認是否允許開啟該連結與讀取日誌。
- 先界定可修改檔案,以及是否允許 stage、commit、push。只讀取日誌與改本地檔案,不會自動取得推送權限。
Claude Code 使用 /pstack:fix-ci。Codex 插件選單插入 $pstack:fix-ci,skills-only 使用 $fix-ci。若沒有 gh 或服務權限,應回報受阻,不能假裝有相同工具。
操作步驟
- 列出整組檢查。 解析目前分支 PR,執行原文指定的
gh pr checks --json name,bucket,state,workflow,link。核對哪些失敗、哪些仍在等待,以及各自來源連結。 - 抽出第一個可處理錯誤。 優先讀 GitHub Actions 日誌。不是 Actions 的檢查,則由 check link 找出失敗指令或服務。把「型別欄位不存在」與後續連帶錯誤分開,不只複製最後的結束碼。
- 先做最小修正。 針對欄位更名調整實際錯誤位置,再跑相關本地檢查。一次處理一個可行動失敗,不為了讓檢查變綠而大幅重構或跳過錯誤。
- 經授權後才推送重查。 本地結果確認後,依已核准的範圍暫存、提交與推送。再以
gh pr checks核對整組狀態,而非只看剛修的工作。沒有推送授權就停在本地修正與待執行步驟。 - 交代目前狀態。 按實際次序列出根本錯誤、修正及每輪結果。若還有失敗或等待中工作,明寫下一步,不宣稱整體已通過。
可直接使用的提示詞
用 pstack:fix-ci 處理目前分支 PR 的失敗檢查。
先用 gh pr checks 取得整組狀態,讀失敗日誌並找第一個可處理錯誤。
一次只修一個根因,先列出要改的檔案,不做廣泛重構。
允許在目標功能範圍內做本地修正及執行既有相關檢查。
若檢查需外部服務、安裝工具或額外資料,先回報限制。
本輪不 stage、commit 或 push,修正後列出等待授權的推送與重查步驟。
不要停用必需檢查、改寫歷史、強推、merge 或部署。
報告包含主失敗工作、根因、修正順序及最新可取得的 CI 狀態。
預期結果與驗收
- 可從失敗檢查追到日誌中的具體錯誤,再追到本地修正。每項改動都對應已確認的失敗,不混入無關整理。
- 本地檢查通過與遠端 CI 通過分開記錄。未推送的新程式不可能已由該次遠端 CI 驗證。
- 若有權限完成完整流程,最後狀態仍以
gh pr checks的整組檢查為準。失敗消失但工作尚未結束,不等於 green。
限制與權限
原文完整循環包含 push 與重新查核,但技能流程不取代授權。讀取檢查、本地編輯、暫存 (stage)、提交 (commit)、推送 (push)、改寫歷史及合併 (merge) 是不同動作。推送還可能觸發外部 CI 或其他自動化,應先確認影響。
此技能不授權強制推送 (force-push)、部署、資料刪除或對客戶發訊息。原文沒有指定最多迭代輪數,不應把 babysit 的三輪停止規則說成此技能自己的限制。工具或日誌缺失時,保留無法判定的結論,不以猜測更改程式。