/sigma-create-ticket
概覽
/sigma-create-ticket 負責建立和編輯 SPEC、EPIC 和 TICKET 類型的 Issue。它是 /sigma-to-spec 和 /sigma-to-tickets 的閘道。/sigma-unslop 不會呼叫此技能。
此技能是唯一執行 gh issue create 或 gh issue edit 的技能。它不實作、不審查、也不合併。
在建立或編輯前,請先閱讀 CONVENTIONS.md。該檔案包含標題、標籤和主體的詳細規範。
使用時機
- 使用時機: 當使用者呼叫
/sigma-create-ticket,或者/sigma-to-spec或/sigma-to-tickets在此對話中傳遞了一個 Issue 主體。 - 列出或檢視:
/sigma-to-spec會要求list-specs。/sigma-to-tickets會要求view。執行讀取操作並回傳結果。不要建立 Issue。 - 不要使用: 當工作仍處於解決方案訪談階段(
/sigma-plan)、規格階段(/sigma-to-spec)或拆解階段(/sigma-to-tickets)。不要實作、審查或合併。
輸入
一個交接內容包含 caller、action(list-specs、view、create 或 update)、kind(spec、epic 或 ticket)、title、body,有時還包含 number、parent 和 blocked-by。
使用者在同一對話中的回覆才算數。以下情況的回覆算作「yes」,並且不會再次提問:
/sigma-to-spec在使用者對摘要表示同意之後/sigma-to-tickets在使用者對顆粒度與阻礙項表示同意之後
任何其他包含 2 個以上 Issue 的批次,都需要在此明確獲得同意。
Issue 規範
- SPEC: 標題
SPEC: <name>,標籤spec,無上層 Issue。主體包含:此功能是什麼、不是什麼、驗收條件 ID、scripts/下的腳本路徑、不在此範圍的內容。沒有待解決問題。 - EPIC: 標題
EPIC: <name>,標籤type:epic。上層 Issue 為其 SPEC。 - TICKET: 標題
TICKET: <name>,標籤type:ticket加上agent:hitl或agent:afk。上層 Issue 為 EPIC,或當/sigma-to-tickets指定時可為 SPEC。從 Review 拆出的 Ticket 沒有 SPEC 作為上層 Issue,除非交接內容中指定了 EPIC。主體段落:Context、Acceptance、Out of scope、Branchagent/{N}-{slug}、Modehitl或afk。
此技能確保的標籤:spec、type:epic、type:ticket、agent:hitl、agent:afk。Mode 標籤需與 Mode 行保持一致。
步驟
步驟 1 - 解析工作儲存庫
執行 gh repo view --json nameWithOwner。當成功輸出 owner/name 時完成。若失敗,請告知使用者應在工作儲存庫中執行,或先執行 gh auth login,然後停止。
若儲存庫名稱以 sigma-build-factory 結尾,請停止。Issues 應歸屬於工作儲存庫。
步驟 2 - 讀取或寫入
在建立或編輯前,先閱讀 CONVENTIONS.md。
list-specs 執行:
gh issue list --repo "$REPO" --label spec --state all --limit 50 \
--json number,title,state,url,body
view 執行 gh issue view <N> --repo "$REPO" --json number,title,labels,state,url,body。
將 JSON 回傳給呼叫者。不要確保標籤存在,也不要提問。
當呼叫者取得列表或 Issue,或寫入路徑繼續到步驟 3 時,此步驟完成。
步驟 3 - 同意閘道
從輸入中三個「yes」情況傳遞過來的交接內容,可以直接建立 Issue。
直接批次(2 個以上 Issue)而在本對話中沒有獲得同意:顯示每個 Issue 的標題、類型、上層 Issue 和 Mode。提問一次:「要建立這些 Issue 嗎?」等待回覆。沉默不會建立 Issue。
單一 Issue:當標題、類型或功能分支上層 Issue 遺失時,提問一次。當這些欄位都存在時,直接建立。
更新操作而在本對話中沒有獲得同意:顯示 Issue 編號與標題,提問一次,然後編輯。不要建立第二個 Issue。
當已記錄同意,或一個完整的單一 Issue 已準備好建立時,此步驟完成。
步驟 4 - 確保標籤存在
在寫入路徑上,列出標籤並建立任何缺少的規範中的標籤:
gh label list --repo "$REPO" --limit 100 --json name
gh label create <name> --repo "$REPO" --description "<來自 CONVENTIONS.md>"
當 gh label list 顯示 spec、type:epic、type:ticket、agent:hitl 和 agent:afk 時完成。
步驟 5 - 比對現有 Issue
列出 Issue 並比對確切的標題 SPEC: <name>、EPIC: <name> 或 TICKET: <name>。
gh issue list --repo "$REPO" --state all --limit 200 --json number,title,state,url
一個已確認的更新會編輯該編號的 Issue。它不會建立新 Issue。如果新標題已經存在於另一個 Issue 上,則停止該項目並回報兩個編號。
一個建立操作找到一個完全相同的標題時,回報 exists 並重複使用該編號。它不會建立第二個 Issue,也不會編輯主體。找到兩個完全相同的標題則停止該項目。
當每個項目都已確定為建立、更新、重複使用或衝突時,此步驟完成。
步驟 6 - 建立或編輯
將主體寫入暫存檔。不要寫入工作儲存庫中。
當短名稱缺少前綴時,請設定標題前綴。不要重複前綴。
依序建立:EPIC 先於其 Ticket,阻擋項先於被阻擋項。當交接內容指定上層 Issue 時,加入 --parent。當阻擋項的編號已存在時,加入 --blocked-by。當旗標無值時,省略該旗標。
gh issue create --repo "$REPO" --title "<title>" --label "<labels>" --body-file "$f"
從 URL 中解析 N。如果某個 Ticket 主體的 Branch 行遺失或仍包含 {N},則編輯該行使其變為 agent/<N>-<slug>。slug 是前綴後的名稱,轉為小寫,空白替換為連字號。
gh issue edit <N> --repo "$REPO" --body-file "$f"
對於已確認的更新,gh issue edit 會取代標題和主體,並修正標籤。移除另一個模式標籤,僅保留與模式相符的一個。編輯時不變更上層 Issue。
SPEC 僅取得 spec 標籤。EPIC 僅取得 type:epic 標籤。TICKET 取得 type:ticket 和一個模式標籤。
記錄 gh 失敗並繼續處理其他獨立的項目。不要為失敗的 EPIC 建立子 Issue。不要關閉上層 Issue。
當 gh issue view <N> --json title,labels,body 顯示標題、標籤,並且對於 Ticket 顯示 Branch agent/<N>-<slug> 且 Mode 與標籤相符時,此步驟完成。
步驟 7 - 回傳
為每個項目回傳編號、標題和 URL,包括 exists 和失敗的情況。
當呼叫者是另一個技能時,在此停止。該技能會指定下一個指令。當使用者呼叫了 /sigma-create-ticket,則指定下一個指令但不要執行它。SPEC 進入 /sigma-to-tickets <N>。Ticket 進入 /sigma-implement <N>。對於 EPIC,請說明 /sigma-implement 不接受 EPIC。
嚴格規則
| 規則 | 原因 / 違規範例 |
|---|---|
此技能是唯一執行 gh issue create 或 gh issue edit 的技能。其他技能的列表與檢視也在此執行。 | 第二個寫入路徑會使標題、標籤和上層 Issue 偏離。 |
| 先確保五個標籤存在,再建立或編輯。 | 缺少標籤會導致批次中的下一個 Issue 失敗。 |
| 已確認的更新會編輯該 Issue。確切標題相符時不建立重複項目。 | 第二個 SPEC: 或 TICKET: 會分割一個功能。 |
直接批次需等待明確同意。已在同一對話中由 /sigma-to-spec 或 /sigma-to-tickets 確認的主體不會再次提問。 | 再次提問會延遲交接。沉默時建立批次會產生使用者未看過的 Issue。 |
建立後,編輯 Ticket 使 Branch 行變為 agent/<N>-<slug>。模式標籤需與 Mode 行相符。 | 遺留的 {N},或 afk 搭配 agent:hitl,會將建置工具導向錯誤的分支或模式。 |
| 在建立時設定上層 Issue(當交接內容指定時)。來自 SPEC 的 Ticket 之上層 Issue 為 EPIC 或該 SPEC。來自 Review 的 Ticket 省略上層 Issue,除非交接內容指定了 EPIC。 | 自行發明 SPEC 作為上層 Issue,會複製 Review Ticket 不需實作的驗收條件。 |
| 不要實作、審查或合併。 | 此技能僅建立 Issue 並停止。 |
驗證項目
-
gh repo view回傳了工作儲存庫,且儲存庫名稱不以sigma-build-factory結尾。 - 在建立或編輯前已閱讀 CONVENTIONS.md。
-
list-specs與view回傳了 JSON 且未建立 Issue。 - 在建立或編輯前,五個標籤已存在。
- 直接批次已獲得明確同意。上游在本對話中的同意未再次提問。
- 已確認的更新編輯了指定的 Issue。沒有第二個 Issue 共享相同的確切標題。
- 新 Ticket 的 Branch 行為
agent/<N>-<slug>,且模式標籤與 Mode 行相符。 - 來自 SPEC 的 EPIC 之上層 Issue 為該 SPEC。來自 SPEC 的 Ticket 之上層 Issue 為 EPIC 或該 SPEC。來自 Review 的 Ticket 沒有 SPEC 作為上層 Issue,除非交接內容指定了 EPIC。
- 回傳內容為編號、標題和 URL。此技能未實作、審查或合併。