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:04 +08:00
co-authored by Claude Fable 5
parent fc39c1254d
commit 7814e2edea
9 changed files with 119 additions and 163 deletions
+13 -22
View File
@@ -21,15 +21,20 @@ argument-hint: "[--tool <tea|api>] [--repo <owner/repo>] [--issues <編號,以
## 絕對準則(不可違反)
- **不建立任何草稿檔**:不寫 `.docs/`、不寫暫存檔、不用本機檔案傳遞中間結果。需求彙整、TODO 排序、實作進度、驗證結果等所有中間成果,一律留在**對話內容**,並透過 `tea` 或 Gitea API **保存到議題描述或議題留言**。唯一例外是階段 E 在議題範圍內對**目標 repo 原始碼**的正常程式修改。
- **盡量使用表格或圖形**:面向使用者的輸出與寫入議題的內容(需求彙整、TODO 列表、進度回報),優先以 **Markdown 表格**與 **Mermaid 圖**` ```mermaid ` flowchartstateDiagramGitea 可直接渲染)呈現,讓使用者一眼看懂意圖;圖表必須忠實反映議題內容不得杜撰。
- **盡量使用表格或圖形**`/jsc:spec-output`面向使用者的輸出與寫入議題的內容(需求彙整、TODO 列表、進度回報),優先以 Markdown 表格Mermaid 圖呈現,忠實反映議題內容不得杜撰。
## 輸出規範(務必遵守
## 共用規範(generic plugin,必要前置
- **語言**:所有面向使用者的輸出與寫入議題的描述/留言,一律使用**繁體中文(台灣用語)**;僅程式碼識別字、檔名、指令、API 路徑等技術標識保留原文,**不可**使用簡體字。
- **編碼無亂碼**:凡輸出或寫入含繁體中文、全形標點、emoji,一律 **UTF-8(不含 BOM**,不得出現問號方框或錯碼。用 API 送出議題描述/留言時,以 UTF-8 JSON 檔帶入(如 `--data @body.json`),換行必須是實際換行,不可讓議題顯示字面 `\n`
- **Token 機密保護(極重要)**gitea token 一律**從環境變數讀取**(`$GITEA_TOKEN`),**絕不**寫死、不 echo、不寫進議題或 log;顯示給使用者的指令/錯誤訊息一律**遮蔽 token**(以 `***` 取代)。檢查時只輸出「已設定/未設定」
- **不依賴 `jq`**(環境未必安裝):解析 JSON 用 `tea` 的結構化輸出(`--output csv` / `--fields`),或把原始 JSON 直接交給助理解析,不要 pipe 到 `jq`
- **自動執行原則**:除非遇到不可忽略的必要決策(工具皆不可用、專案不明、議題編號缺失、TODO 與需求衝突需人工裁示、實作失敗需使用者決策),否則各階段輸出簡短計畫/進度後直接執行到完成;帶 `--yes` 時更不應為一般寫入/留言反覆詢問。階段 A/B/C 的詢問在「可跳過條件」成立時**必須跳過**,不要重複確認已知資訊
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
- `/jsc:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼、API body 以 UTF-8 JSON 檔帶入且換行為實際換行
- `/jsc:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、已知資訊跳過詢問
- `/jsc:spec-gitea`teaAPI 工具選擇與檢查、`GITEA_TOKEN` 機密保護(不 echo、遮蔽)、不依賴 `jq`、API 分頁完整讀取
本 skill 特有補充:
- **必要決策**(會中斷詢問):工具皆不可用、專案不明、議題編號缺失、TODO 與需求衝突需人工裁示、實作失敗需使用者決策。
- 階段 A/B/C 的詢問在「可跳過條件」成立時**必須跳過**,不要重複確認已知資訊。
---
@@ -49,21 +54,7 @@ argument-hint: "[--tool <tea|api>] [--repo <owner/repo>] [--issues <編號,以
**若使用者已透過 `--tool` 或對話明確選定工具,跳過詢問**,只做該工具的可用性驗證。
1. 檢查 `tea` 是否存在:`command -v tea`;存在則執行 `tea login list` 記錄可用 login 與 host(失敗記錄原因,不中止)。
2. 檢查 `GITEA_TOKEN` 是否已設定,只輸出「已設定/未設定」,不得輸出 token 內容:
```bash
[ -n "${GITEA_TOKEN}" ] && echo "GITEA_TOKEN 已設定" || echo "GITEA_TOKEN 未設定"
```
3. 以表格呈現檢查結果後詢問使用者要用哪一種:
| 選項 | 可選條件 | 後續使用方式 |
| --- | --- | --- |
| `tea` | `tea` 可執行且目標 host 有對應 login | 命令一律帶 `--login <name> --repo <owner>/<repo>` |
| `api` | `GITEA_TOKEN` 已設定 | Gitea REST API + `curl`,標頭 `Authorization: token $GITEA_TOKEN` |
4. 兩種方式都不可用 → 回報缺少 `tea login` 或 `GITEA_TOKEN` 並停止;不要請使用者把 token 貼進對話。
`/jsc:spec-gitea` 的工具選擇流程執行:檢查 `tea``command -v tea``tea login list`)與 `GITEA_TOKEN`(只輸出「已設定/未設定」)→ 以表格呈現檢查結果後詢問使用者要用 `tea``api` → 兩種方式都不可用則回報並停止(不要請使用者把 token 貼進對話)。
## 階段 B:確認議題所在專案(已知則跳過)