refactor(skills 共用規範): 抽出共用規範至 generic spec-*,以引用+一行 fallback 摘要取代重複內容

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-07-17 08:58:07 +08:00
co-authored by Claude Fable 5
parent 46e6c0ca7d
commit 847efa03b9
4 changed files with 52 additions and 47 deletions
+14 -16
View File
@@ -7,6 +7,15 @@ description: 讀取使用者選擇的一或多種來源(專案編號、議題
你要先做工具可用性檢查並選擇工具;第二步詢問使用者要讀取哪些來源:專案編號、議題編號、檔案文件,至少選一種,接著讀取選定來源,並在產生保存議題前完整釐清需求——只要有任何不清楚的部分都必須詢問使用者,絕對不可以幻想——確認清楚後才彙整成保存議題內容。第三步必須把上個步驟產生的議題內容拆分成多個小功能議題,並為每個小功能議題產生標題、描述、阻擋關閉規則與依複雜度評估的到期日;若形成子母議題(保存議題為母、小功能議題為子),母議題必須所有子議題都關閉後才可關閉(優先以 issue dependency 阻擋);分析完成後,若議題屬於專案看板且欄位可對應進度語意(例如分析中/待處理/進行中/待測試/已完成),把議題移到「待處理」欄位。第四步必須將小功能議題依到期日排序,逐個議題實作並將進度留言到議題,完成後 PR 到 `develop``master`;**實作任何議題前必須先詢問使用者並取得確認,不得擅自開始修改程式碼;但使用者確認開始實作該議題後,可在該議題範圍內自行 commit、push 與開 PR**。所有中間成果都不准落地成草稿檔,必須一律使用 `tea` 或 Gitea API 保存到議題描述或留言。
## 共用規範(generic plugin,必要前置)
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
- `/jsc:spec-output`:繁體中文為主英文為輔、UTF-8(不含 BOM)無亂碼、表格/Mermaid 呈現、個資(PII)去識別化。
- `/jsc:spec-execution`:不臆測/需人工確認、已知資訊跳過詢問。
- `/jsc:spec-gitea`teaAPI 工具選擇與檢查、`GITEA_TOKEN` 機密保護、不依賴 `jq`、API 分頁完整讀取。
- `/jsc:spec-project-board`:看板欄位語意對應、GET 探測(404/501 不支援)、不往回移、不得新建欄位。
## 絕對準則(不可違反)
- **全程不得在磁碟落地任何檔案**:不建立 `.docs/`、不寫草稿檔、不寫暫存檔、不用檔案傳遞中間結果。所有中間成果(需求彙整、保存議題內容、小功能拆分、到期日排序、實作進度、交付摘要)一律留在**對話內容**與 **subagent 的回傳值**,並透過 `tea` 或 Gitea API **保存到議題描述或留言**。例外只有兩個:(1)使用者確認實作某議題後、在該議題範圍內對**目標 repository 原始碼**進行的正常程式修改與 git commit;(2)為了讀取議題附件(圖片等二進位檔)而**唯讀暫存下載到系統暫存目錄**,讀取完畢後立即刪除,不得下載到工作目錄或任何 repo 內、不得用暫存檔傳遞其他中間成果。除此之外不產生任何本機檔案。
@@ -19,8 +28,7 @@ description: 讀取使用者選擇的一或多種來源(專案編號、議題
- **檔案文件**:本機文件路徑,可多筆;支援 Markdown、純文字與其他可直接讀取的需求文件。
- **保存目標**:合併整理後必須在指定專案建立一張議題保存;若輸入來源未包含可作為保存目標的專案編號,必須詢問使用者提供專案編號,不得自行臆測。
- **repositories 位置**:可另外指定本機含多個專案的資料夾;若未指定,實作參考以來源議題所在 repo、保存目標 repo 或使用者指定 repo 為準。
- **工具選擇**在解析與讀取 Gitea 來源前,先檢查本機是否可用 `tea``tea login list` 是否有對應 login、以及環境變數 `GITEA_TOKEN` 是否已設定;接著詢問使用者要使`tea`Gitea REST API + `curl` + token。使用者已明確指定工具時才可跳過詢問
- **不要依賴 `jq`(環境未安裝)**:需要解析 JSON 時,用 `tea` 的結構化輸出(例如 `--fields ... --output csv`),或把原始 JSON 交給 subagent 解析,不要在指令中 pipe 到 `jq`
- **工具選擇**`/jsc:spec-gitea` 的工具選擇流程(檢查 `tea``tea login list``GITEA_TOKEN` 詢問使用者用 `tea``api`;已明確指定工具時才可跳過詢問;不依賴 `jq`,JSON 改用 tea 結構化輸出或交給 subagent 解析)
- **議題必須連同留言與附件一起讀取**:處理任何議題(含專案底下展開的議題)時,除了 `title``body` 等欄位,必須一併讀取**所有留言(comments**與**所有附件(attachments/assets,含議題本身與各留言的附件)**,其內容都是需求分析的依據:
- 附件清單:`tea` 目前沒有附件指令,一律走 API — 議題附件 `GET {base}/repos/{owner}/{repo}/issues/{index}/assets`、留言附件 `GET {base}/repos/{owner}/{repo}/issues/comments/{id}/assets`,取得每個附件的檔名、類型與下載 URL。
- 文字類附件(Markdown、純文字、CSV、JSON 等):以 `curl` 直接取得內容到對話中分析,不落地。
@@ -28,19 +36,11 @@ description: 讀取使用者選擇的一或多種來源(專案編號、議題
- 無法讀取的格式(或僅有 `tea` 而無 token 可下載附件):在保存議題內容中列出附件檔名與 URL 並標註「附件無法讀取,需人工確認」,不得忽略附件的存在,也不得臆測其內容。
- **禁止草稿落地**:所有流程都不准建立 `.docs/` 或其他本機草稿檔;需求整理、小功能拆分、排序、進度與交付資訊一律使用 `tea` 或 Gitea API 保存到對應議題描述或留言。
- **TODO list**:所有建立或更新的議題描述最後都必須加上依該描述內容推導出的 `## TODO` 區塊,使用 Markdown checklist`- [ ] ...`);TODO 必須可執行、可驗收,且不得加入描述未提及或無法合理推得的工作。
- **議題描述流程圖**:產生保存議題或小功能議題的描述時,有助理解,盡量在描述中加入 **Mermaid 流程圖**` ```mermaid ` flowchartstateDiagramGitea 可直接渲染),把需求流程、狀態轉移或議題間的相依/阻擋關係視覺化;流程圖必須忠實反映需求與拆分結果不得杜撰未提及的流程
- **議題描述流程圖**`/jsc:spec-output`產生保存議題或小功能議題的描述時,有助理解就加入 Mermaid 流程圖(需求流程、狀態轉移相依/阻擋關係),忠實反映需求與拆分結果不得杜撰。
## 第 1 步:工具可用性檢查與使用方式選擇
先檢查可用工具選擇後續使用方式。除非使用者已明確指定 `tea``api`,否則不得自行決定
1. 檢查 `tea` 是否存在:`command -v tea`
2.`tea` 存在,執行 `tea login list`,記錄可用 login 與其 host;若失敗,記錄失敗原因但不要中止。
3. 檢查 `GITEA_TOKEN` 是否已設定,只輸出「已設定/未設定」,不得輸出 token 內容。
4. 依檢查結果詢問使用者要使用哪一種方式:
- `tea`:只有在 `tea` 可執行時才可選;後續解析來源後仍需確認來源 host 有對應 login。
- `api`:只有在 `GITEA_TOKEN` 已設定時才可選;後續使用 Gitea REST API + `curl`,帶標頭 `Authorization: token $GITEA_TOKEN`
5. 若兩種方式都不可用,停止並回報缺少 `tea login``GITEA_TOKEN`;不要要求使用者把 token 貼進對話。
`/jsc:spec-gitea`工具選擇流程執行:檢查 `tea``command -v tea``tea login list`,失敗記錄原因不中止)與 `GITEA_TOKEN`(只輸出「已設定/未設定」)→ 詢問使用者要用 `tea``api`(除非使用者已明確指定,不得自行決定;選 `tea` 後續仍需確認來源 host 有對應 login)→ 兩種方式都不可用則停止並回報缺少 `tea login``GITEA_TOKEN`(不要要求使用者把 token 貼進對話)
## 第 2 步:選擇讀取來源、讀取內容並保存議題內容
@@ -125,10 +125,8 @@ description: 讀取使用者選擇的一或多種來源(專案編號、議題
**分析完成後:把議題移到看板「待處理」欄位**。保存議題與所有小功能議題都建立/更新完成後(即分析階段結束),對其中**確實屬於某個專案看板(project board)**的議題調整進度欄位:
- 若看板欄位名稱可對應進度語意(例如「分析中」「待處理」「進行中」「待測試」「已完成」;一律以看板**實際欄位名稱**為準,語意相近即可對應,不得假設看板一定有這五欄),把議題移動到「待處理」欄位,代表需求分析已完成、等待實作。
- **不往回移**:議題已在「待處理」或更後面的欄位(進行中/待測試/已完成)時維持原欄位,只有在「分析中」或未指定欄位時才移動
- 移動前先探測可用介面:`tea` 目前沒有 project 看板指令;Gitea REST 的 projectcolumn 端點依版本而異,先以 GET 探測端點是否存在(404/501 視為該實例不支援),**不得對未確認存在的端點做寫入**。
- 看板沒有可對應「待處理」語意的欄位、或介面不支援時,不移動、不視為錯誤:改在回報與保存議題留言中列出「議題 → 待處理」建議清單,請使用者到看板手動拖曳;不得新建欄位。
- `/jsc:spec-project-board` 執行(欄位語意以看板實際名稱為準、不往回移、先 GET 探測端點且 404/501 視為不支援、不得對未確認端點寫入、不得新建欄位):把議題移動到「待處理」欄位,代表需求分析已完成、等待實作;議題已在「待處理」或更後面的欄位時維持原欄位
- 看板沒有可對應「待處理」語意的欄位、或介面不支援時,不移動、不視為錯誤:改在回報與保存議題留言中列出「議題 → 待處理」建議清單,請使用者到看板手動拖曳
## 第 4 步:依到期日排序並逐議題實作