To Tickets
將計畫、規格或對話內容,分解為一組票證:垂直切片的追蹤子彈(tracer-bullet),每張票證宣告阻塞它的其他票證。
應已提供問題追蹤器與分類標籤詞彙。如果沒有,請告訴使用者執行 /setup-matt-pocock-skills。
流程
1. 收集上下文
從當前對話上下文中已有的內容開始工作。如果使用者傳遞一個參考(規格路徑、問題編號或 URL)作為引數,請擷取它並讀取其完整內容和留言。
2. 探索程式碼庫(選擇性)
如果您尚未探索程式碼庫,請先了解程式碼的當前狀態。票證標題和描述應使用專案的領域詞彙,並尊重您所觸及區域的 ADR。
尋找能讓實作更容易的前置重構(prefactor)機會。「讓變更變得容易,然後做出容易的變更。」
3. 草擬垂直切片
將工作分解為追蹤子彈票證。
- 每個切片切割一條狹窄但完整的貫穿每個層級(schema、API、UI、測試)的路徑:是垂直的,而非單一層級的水平切片。
- 完成的切片本身是可展示或可驗證的。
- 每個切片的大小應適合單一全新的上下文視窗。
- 任何前置重構應優先完成。
為每張票證賦予其阻塞邊界:必須先完成才能開始此票證的其他票證。沒有阻塞的票證可以立即開始。
大範圍重構是垂直切片的例外。 一個大範圍重構是指一項機械性變更(例如重新命名資料行、重新輸入共享符號),其波及範圍橫跨整個程式碼庫,因此單次編輯會同時破壞數千個呼叫站點,且沒有任何垂直切片能順利通過。不要強行將其放入追蹤子彈中;應將其安排為擴展–收縮序列。首先擴展:在舊形式旁添加新形式,以免破壞任何內容。然後根據波及範圍(按套件、按目錄)分批遷移呼叫站點,每個批次都是一張票證,且阻塞於擴展票證,因為舊形式仍然存在,所以批次之間能保持 CI 綠色。最後收縮:當沒有呼叫者存在時,刪除舊形式,這張票證阻塞於每個遷移批次。即使批次本身無法單獨保持綠色,也應保留此序列,但允許它們共享一個整合分支,並由該分支阻塞最終的整合與驗證票證;只有在此處才承諾綠色。
4. 詢問使用者
將建議的分解以編號清單呈現。對於每張票證,請顯示:
- 標題:簡短的描述性名稱
- 被以下票證阻塞:必須先完成的其它票證(如果有的話)
- 交付內容:此票證所實現的端到端行為
詢問使用者:
- 粒度是否合適?(太粗 / 太細)
- 阻塞邊界是否正確:每張票證是否僅依賴於真正會阻擋它的票證?
- 是否有任何票證應該合併或進一步拆分?
反覆直到使用者批准此分解。
5. 將票證發布到已配置的追蹤器
發布已批准的票證。如何發布取決於 /setup-matt-pocock-skills 所配置的追蹤器;無論哪種方式,票證本身相同,僅阻塞邊界的型態會改變:
- 本地檔案 → 在
.scratch/<功能代稱>/issues/<NN>-<代稱>.md下,每個票證一個檔案,按依賴順序(阻塞者優先)從01開始編號。每個檔案的「Blocked by」列出其所依賴的編號/標題。使用以下每張票證的檔案範本:每個票證一個檔案,絕不單獨合併成一個檔案。 - 真實的議題追蹤器(GitHub、Linear 等) → 按依賴順序(阻塞者優先)為每個票證發布一個議題,以便每個票證的阻塞邊界可以引用真實的識別碼。如果平台提供原生阻塞/子議題關係則使用之;否則,將每個票證的「Blocked by」設為阻塞它的議題。除非另有指示,否則應用
ready-for-agent分類標籤;這些票證的設計使其可被代理抓取。
處理前沿:所有阻塞票證都已完成的那張票證。對於純線性鏈,這意味著從上到下。
請勿關閉或修改任何父議題。
: <票證標題>
要建置的內容: 此票證實現的端到端行為,從使用者角度出發,而非逐層實作清單。
被以下票證阻塞: 阻止此票證的票證編號/標題,或「無(可立即開始)」。
狀態: ready-for-agent
- 接受條件 1
- 接受條件 2
父議題
追蹤器上父議題的參考(如果來源是現有議題,則包含此部分;否則省略)。
要建置的內容
此票證實現的端到端行為,從使用者角度出發,而非逐層實作。
接受條件
- 條件 1
- 條件 2
被以下票證阻塞
- 每個阻塞票證的參考,或「無(可立即開始)」。
無論使用哪種形式,請避免指定檔案路徑或程式碼片段:它們很快就會過時。例外情況:如果原型產生的程式碼片段比散文更能精確表達決策(例如狀態機、reducer、schema、型別形狀),則將其內嵌並簡短註明它來自原型。只保留決策相關的部分,不需要可運作的示範,只需重要的位元。