Community程式設計與開發github.com

david-mogbeyi/preflight

針對單一追蹤議題的唯讀前置檢查關卡。判斷 AI 編碼代理程式是否能安全地根據當前儲存庫狀態開始實作此議題,並回報 PREFLIGHT READY、READY WITH ASSUMPTIONS 或 BLOCKED 三種結果之一。

preflight 是什麼?

Preflight 是一個嚴格的唯讀前置檢查工具,專為 AI 編碼代理程式(如 Claude Code、Cursor 等)設計。它針對**單一**追蹤議題,判斷當前儲存庫狀態是否已準備好讓代理程式安全地開始實作。此技能的核心原則是:僅在繼續進行會導致重大猜測、違反依賴關係、產生不安全行為,或使正確實作變得極不確定時,才判定為「封鎖」。它偏好記錄小而明確的、基於證據的假設,而非直接封鎖。 此技能會完整讀取議題及其關聯文件,驗證依賴關係是否已就緒,檢查既有的實作模式,並預測受影響的程式碼範圍。最終會產生一個結構化的報告,包含明確的狀態(READY、READY WITH ASSUMPTIONS 或 BLOCKED)以及具體的證據,例如檔案路徑、符號名稱,或觀察到的行為。此技能完全唯讀,絕不對儲存庫或追蹤系統進行任何修改。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/david-mogbeyi/agent-skills/tree/HEAD/skills/preflight

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

preflight 是做什麼的?

扮演一位務實的 Staff 工程師,對單一議題執行嚴格的唯讀前置檢查。回答唯一個問題:

AI 編碼代理程式能否在當前儲存庫及已知依賴關係下,安全地開始實作此議題,而無需猜測重要的需求?

0. 載入專案設定檔

找到 .agents/project-profile.md:先在當前儲存庫根目錄尋找,然後遞迴地往每個父目錄尋找,直到檔案系統根目錄(多儲存庫工作區會在儲存庫的上層目錄保留一個設定檔)。完整讀取其內容。此檔案命名了儲存庫、追蹤系統及其存取方式、基底分支、權威文件,以及此技能依賴的測試慣例。

如果沒有設定檔,則透過探索繼續:讀取 AGENTS.md、CLAUDE.md、README.md、套件或建置清單檔案,以及 CI 設定檔,並推斷出相同的事實。在報告中說明未找到設定檔,以及你推斷了哪些事實。如果無法確定追蹤系統,則停止並說明;這是此技能無法推斷的事實。

與其他技能的關係

  • prepare 決定應該建置什麼並改寫議題。preflight 決定儲存庫是否已準備好開始該工作,且絕不改寫議題。
  • do-ticket 負責實作。preflight 在其之前執行,且絕不實作、分支、提交或開啟拉取請求。
  • 不明確或規格不足的議題是應回報的發現(封鎖因素或假設),而非待修正事項。

指導原則

僅在繼續進行會需要有意義的猜測、違反依賴關係、產生不安全行為,或使正確實作變得實質上不確定時,才予以封鎖。

優先記錄一個小型、明確、基於證據的假設,而非直接封鎖。不要因為儲存庫可以更整潔、命名不一致、無關的技術債,或未解決的假設性未來需求而封鎖。此關卡旨在防止不良實作與範圍蔓延,並非架構審計。

嚴格唯讀

絕不編輯原始碼、測試或遷移檔。絕不更新追蹤系統(狀態、優先級、標籤、評論、描述)。絕不建立分支、提交或拉取請求。絕不修正任何你發現的問題;只需回報。若你即將變更任何檔案或外部狀態,請停止。

1. 解析輸入

接受一個參數:完整的議題 URL,或符合設定檔中議題 ID 模式的簡短識別碼。拒絕缺少參數或多於一個參數的情況。透過設定檔中指定的追蹤系統解析該議題,並要求僅返回一個議題;若無法解析則停止並回報。

2. 完整讀取議題

檢索完整的議題內容:識別碼、標題、完整描述、狀態、優先級、標籤、評論、附件、封鎖/被封鎖/相關關係、父議題與子議題,以及連結的文件。

若議題已經過 prepare 處理,則將其改寫後的描述視為首要規格。針對儲存庫的當前現實進行評估;不要改寫或擴充它。

3. 讀取適用的權威文件

針對設定檔中「權威文件」表格內,其「閱讀時機」條件與此議題相符的每一份文件,閱讀相關章節。若文件過大無法完整閱讀,則搜尋其與議題領域相關的術語,並閱讀相符的章節;在報告中說明你閱讀了哪些章節。當不確定條件是否相符時,應搜尋文件中的議題術語,而非直接跳過。將它們視為與議題連結文件同等權威的行為、狀態與術語來源。若議題與此類文件衝突,則屬於一項發現(見步驟 12)。若無法開啟適用的文件,則將其回報為封鎖因素,而非在無此文件的情況下繼續。

4. 檢查依賴關係就緒狀態

對於每個實際影響此議題的依賴關係:

  • 讀取依賴議題以了解此議題對它的期望。
  • 檢查基底分支上的儲存庫,以驗證預期的模型、狀態、服務、遷移檔、端點或介面確實存在。
  • 將追蹤系統中標示為完成但儲存庫中卻不存在的依賴關係視為未解決。追蹤系統的狀態只是一種聲明,而非證據。
  • 不要遞迴進入無關的依賴關係樹;僅檢查足以判斷此議題是否能繼續進行的程度。

依賴關係不僅限於追蹤系統中的關聯。沒有此類關聯的議題仍然依賴於內部合約(例如生命週期、令牌或狀態在程式碼中的實際行為),以及在多儲存庫專案中,依賴於同級儲存庫的行為:哪些客戶端呼叫該端點、何時呼叫,以及哪些舊版本仍被安裝。當議題變更或依賴於共用合約時,請檢查設定檔所列出的同級儲存庫的基底分支。

5. 驗證議題的假設是否符合儲存庫

針對議題假設存在的每項內容(模型、資料表、列舉值、服務、模組、認證助手、事件、請求/回應綱要、API 合約、欄位、功能開關、設定、供應商抽象層),確認其存在並記錄其位置,或將其標記為缺失。不要建立缺失的部分。

6. 找出可供重複使用的現有模式

尋找未來實作應遵循的最簡單現有模式:請求處理、服務慣例、授權、錯誤處理、交易、事件發布、資料存取慣例、驗證、API 文件、測試。當已有合適模式存在時,不要推薦新的抽象層。應參考實際的檔案路徑與符號名稱。

7. 預測實作範圍

在預測之前,找出議題所變更資料的每個讀取者和寫入者:在整個儲存庫中搜尋資料表、欄位和模型名稱,包括原始 SQL 字串,而不僅限於顯而易見的服務。對「active」意義的變更必須觸及每個對其進行篩選的查詢。

提供高層級的預期變更範圍(可能受影響的區域,非強制性的檔名,除非你相當確定),以及一段簡短的列表,說明哪些相鄰區域不應變更。這能讓後續階段注意到實作範圍是否失控。不要修正檔案數量。

8. 檢查每個驗收標準

針對每個標準,判斷其所需的程式碼和狀態是否存在、預期結果是否定義得足夠清楚,以及所需的測試設定是否可行。不要設計解決方案。僅標記那些若無發明產品行為就無法實作的標準。

9. 檢查資料與 API 合約就緒狀態

若議題需要資料庫變更:識別相關的模型和資料表,檢查其與當前綱要的相容性,並檢查是否缺少必要的先決遷移檔。若聲明不需要資料庫變更,則檢查所需的狀態是否能從現有資料推導得出,若無當前的事實來源則標記為封鎖因素。不要撰寫遷移檔或提議綱要正規化。

若議題新增或變更 API 行為:檢查相關的路由和模組模式是否存在、其參考的領域概念是否存在、授權上下文是否存在,以及錯誤和文件慣例是否可識別。對於外部或共用合約,確認現有的介面或供應商抽象層存在;不要發明新的。

10. 在必要處檢查安全性與正確性就緒狀態

僅針對議題實際觸及的項目:身分驗證、授權、租戶或擁有者範圍、交易、冪等性、狀態轉換驗證、敏感資料、競爭保護。若議題需要某個缺失的機制,則可能屬於封鎖因素。不要執行廣泛的安全性審計。

11. 檢查測試就緒狀態

根據設定檔的測試慣例,判斷合適的測試層級;所需的測試夾具和輔助函式是否存在;以及驗收標準是否實際可測試。不要撰寫測試,或在現有模式足夠時推薦新的測試基礎設施。

12. 偵測過時程度

檢查議題是否已過時:程式碼已移動、端點已存在、依賴關係已變更、模型已重新命名、遷移檔已使議題的某部分過時,或更新的工作已取代某個假設。儲存庫是當前的實作現實;除非較新的連結規格明確取代,否則議題對於預期行為仍具權威性。回報任何不符之處,包括在步驟 3 中發現的衝突。不要默默信任任一個來源。

13. 分類發現

將所有發現精確歸類到以下類別:

  • 封鎖性問題: 必要的依賴關係在儲存庫中缺失;議題引用了一個無法定義的狀態;兩份權威規格在核心行為上互相矛盾;某個標準需要的資料沒有當前的事實來源;必要的 API 或供應商合約不存在;領域概念存在衝突的實作;基於當前依賴關係無法實現正確的交易行為;範圍需要的架構遠比議題描述的更大。
  • 低風險假設: 可以根據儲存庫慣例做出合理選擇,且不太可能改變產品行為(例如,應將哪個現有欄位視為權威)。
  • 錯誤的建議機制(若按字面實作會違反議題自身的驗收標準)在其意圖明確,且存在不改變產品行為的修正時,屬於低風險假設;請說明修正方法及證據。當每個修正都會改變產品行為,或意圖本身不明確時,則屬於封鎖因素。
  • 非封鎖因素: 精確的命名、檔案放置位置、一個輔助函式 vs. 兩個、選擇性的重構、未來擴展性、測試命名、無關的技術債。完全不回報這些項目。

14. 選擇就緒狀態

僅選擇一個:

  • PREFLIGHT: READY:無重大封鎖因素,無需假設。
  • PREFLIGHT: READY WITH ASSUMPTIONS:可以安全開始,但需將一個或多個明確的低風險假設帶入實作。
  • PREFLIGHT: BLOCKED:必須先解決一個或多個實質性問題。

15. 以固定格式回報

閱讀 output-format.md 並嚴格遵循。將狀態列印為第一行。使用具體證據(路徑、符號、觀察到的行為),而不是如「架構似乎已準備好」這類印象。廣泛檢查;精確回報。不要傾印程式碼或逐個檔案地遍歷儲存庫。

執行期間切勿提問互動式問題。若無法從議題、其依賴關係、文件和儲存庫中判斷出所需資訊,則其本身就是一個封鎖因素;請回報之。

相關技能