Files

135 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: issues-analyze-to-file
description: 讀取一或多筆 Gitea issue URL(優先用 tea,否則用 Gitea API),彙整成一份完整**需求文件檔案**,依功能拆成多個實作階段並各建立一個 issue(沿用來源 issue 的里程碑/專案,依需求性質填入標籤),再配合使用者指定的 repositories 或 issue 所在 repo 產生**實作草稿檔**,最後產出**交付文件檔**並依 issues 分組留言到對應 issue;本 skill 以「先落地草稿檔、經使用者確認再寫回 Gitea」為核心,適合需要保留需求文件與交付文件檔案的流程。當使用者明確要「產出需求文件/實作草稿/交付文件檔案」的 issue 分析、或提到 issues-analyze-to-file、issue 需求分析文件、issue 拆階段交付文件時使用此 skill。不適用於:全程不落地檔案、以議題描述與留言保存中間成果的需求拆分(用 issues-analyze);實作議題程式碼(用 issues)。兩者都可能符合、使用者未指明時,先詢問要「檔案交付」還是「議題留言」再選擇。
---
# 分析 Issue 並拆解為實作階段與交付留言
你要讀取使用者提供的一或多筆 Gitea issue,彙整成完整需求文件,依功能拆成多個實作階段(每階段建立一個 issue),配合指定的 repositories 產生實作草稿,最後產出交付文件並依 issues 分組留言。**建立 issue 與留言屬於對外且不易復原的動作,必須先讓使用者確認過草稿再執行**。所有需求彙整、階段拆分與實作草稿一律先產生草稿檔,再詢問使用者是否實際建立 issue / 留言。請依下列階段依序完成。
## 共用規範(shared plugin,必要前置)
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
- `/jsc-shared:spec-output`:繁體中文為主英文為輔、UTF-8(不含 BOM)無亂碼、Mermaid 呈現、個資(PII)去識別化。
- `/jsc-shared:spec-execution`:不臆測/需人工確認、不擴及無關檔案。
- `/jsc-shared:spec-gitea``GITEA_TOKEN` 機密保護、不依賴 `jq`、API 呼叫慣例(`Authorization: token`、分頁完整讀取)。
## 前置:輸入與工具
- **輸入**:至少一筆 issue URL(可多筆)。可另外指定「repositories 位置」(本機含多個專案的資料夾);若未指定,實作草稿以各 issue 所在的 repository 為準。
- **工具優先序**
1. 若該 issue host 在 `tea login list` 中有對應 login,優先用 `tea``tea issues``tea comment` 等),並以 `--login <name> --repo <owner>/<repo>` 指定目標。
2. 否則改用 Gitea REST API + `curl`,帶標頭 `Authorization: token $GITEA_TOKEN`(環境變數 `GITEA_TOKEN` 已設定)。
- **不要依賴 `jq`**:依 `/jsc-shared:spec-gitea`(JSON 用 tea 結構化輸出或交給 subagent 解析,不 pipe 到 `jq`)。
- **工作目錄**:所有草稿與文件放在 `.docs/doc-issues-analyze-to-file/`
- **議題描述流程圖**:依 `/jsc-shared:spec-output` — 產生要寫進 issue 的描述(尤其各階段 issue 的 body)時,有助理解就加入 Mermaid 流程圖(處理流程、狀態轉移、階段相依關係),忠實反映需求與拆分結果、不得杜撰。
## 第 0 步:解析 issue URL 與準備工具
1. 從每一筆 issue URL 解析出 `host``owner``repo``index`(例如 `https://<host>/<owner>/<repo>/issues/<index>`)。
2. 執行 `tea login list`,判斷各 issue host 要走 tea 還是 API
- 有對應 login → tea。
- 無 → APIbase 為 `https://<host>/api/v1/repos/<owner>/<repo>`
3. 建立 `.docs/doc-issues-analyze-to-file/`(若不存在)。
4. 若使用者指定了 repositories 位置,先確認該路徑存在並列出其中的專案;若未指定,記錄「以 issue 所在 repo 為準」,並確認本機是否已 clone 對應 repo(沒有就在草稿中標註需人工提供或 clone)。
## 第 1 步:讀取 issues 內容
對每一筆 issue,讀取完整內容:`title``body``state``labels``milestone``assignees`、以及**所有 comments**;若 Gitea 版本支援,另讀該 issue 所屬 `project`
- tea`tea issues <index> --repo <owner>/<repo> --login <name> --comments`,或用 `tea issues list --fields index,title,body,labels,milestone,comments,url --output csv` 過濾。
- API
- issue 本體:`GET {base}/issues/{index}`
- 留言:`GET {base}/issues/{index}/comments`
- 同時盤點該 repo 既有的分類資源,供後續階段沿用:
- 標籤:`GET {base}/labels`tea`tea labels list`
- 里程碑:`GET {base}/milestones`tea`tea milestones list`
- 專案(若該 Gitea 版本有此 API):`GET {base}/projects`;若不支援就記錄「此 Gitea 版本不支援 project API,需人工處理」。
## 第 2 步:彙整需求文件
把所有 issue 內容彙整成一份完整需求文件 `.docs/doc-issues-analyze-to-file/requirements.md`,內容至少包含:
- 來源 issue 清單:每筆的 URL、標題、狀態、現有 labelsmilestoneproject。
- 完整需求描述:整合各 issue 的正文與留言,去除重複、補齊上下文,形成單一連貫的需求敘述。
- 驗收條件/預期結果:能從 issue 推得的,逐條列出;不能確定的標註「需人工確認」。
- 分類資源盤點:此 repo 現有可用的 labels、milestones、projects(供第 3 步沿用)。
需求彙整只做整理與歸納,不得編造 issue 未提及的需求;無法確定處保守描述並標註。
## 第 3 步:依功能拆分實作階段(規劃要建立的 issues)
依功能把需求拆成多個實作階段(phase),**每個階段對應一個未來要建立的 issue**,產生草稿 `.docs/doc-issues-analyze-to-file/phases.md`。每個階段記錄:
- 階段編號與標題(將作為新 issue 的 title)。
- 階段描述與範圍(將作為新 issue 的 body),包含該階段要完成什麼、驗收條件、與其他階段的相依順序。
- **里程碑(milestone)沿用規則**:若來源 issues 有 milestone,新 issue 一律放到**相同的 milestone**(同名/同 id)。
- **專案(project)沿用規則**:若來源 issues 有 project,新 issue 一律放到**相同的 project**;若該 Gitea 版本不支援 project API,標註需人工在 UI 補掛。
- **標籤(labels)規則**:若 repo 有 labels,依該階段需求性質,從**既有 labels** 中挑選填入(例如 featurebugenhancement/前端/後端 等);不要自行新建 labels,除非使用者要求。找不到合適 labels 就留空並標註。
- 建立目標 repo:新 issue 一律建立在**對應來源 issue 所在的 repo**(多筆來源分屬不同 repo 時,於草稿標明各階段要建到哪個 repo)。
## 第 4 步:確定 target repositories 並產生實作草稿(派 subagent)
決定要對照的 target repositories:使用者指定位置底下的所有專案,或各 issue 所在的 repository。對**每一個實作階段各派一個 subagent**,研究相關專案程式碼後產生實作草稿 `.docs/doc-issues-analyze-to-file/drafts/phase-{N}.md`。subagent 只讀程式碼與必要上下文、**不修改任何原始碼、不建立 issue、不留言**,只在 `.docs/` 底下寫草稿。每份草稿包含:
- 對應階段與對應(將建立的)issue 標題。
- 涉及的專案/檔案清單與定位(以 `path:line` 形式標出關鍵位置)。
- 建議的實作方式:要新增或修改什麼、涉及的介面/資料流、相依與風險。
- 測試與驗證方式建議。
- 無法從程式碼可靠推得的部分,保守標註「需人工確認」,不要臆測。
## 第 5 步:草稿品質檢查
在對外建立 issue/留言之前,主 agent 必須檢查所有草稿:
- 內容以繁體中文為主、英文為輔,無亂碼、編碼錯誤或破損文字。
- `requirements.md` 涵蓋全部來源 issue`phases.md` 每個階段都有標題、描述、里程碑/專案/標籤的沿用決定;每個階段都有對應的 `drafts/phase-{N}.md`
- 里程碑/專案/標籤的沿用決定,與第 1 步盤點到的既有資源一致(id/名稱對得上)。
- 若發現問題,先修正草稿並重新檢查,通過後才進入下一步。
## 第 6 步:詢問使用者要如何執行(AskUserQuestion
草稿完成並通過檢查後,主 agent 必須用 AskUserQuestion 讓使用者確認要如何執行對外動作,至少提供:
1. 全部執行:建立所有階段 issue,並產生交付文件、依 issues 分組留言。
2. 只建立 issue:建立階段 issue,但先不留言交付內容。
3. 只產生交付文件、先不動 Gitea:不建立 issue、不留言,僅輸出本機文件供檢視。
4. 逐階段確認:每建立一個 issue(及其留言)就回報,待使用者確認後再做下一個。
5. 其他(由使用者輸入自訂方式)。
依使用者選擇進行後續步驟;未獲確認前不得建立 issue 或留言。
## 第 7 步:依階段建立 issues
`phases.md` 為每個階段在對應 repo 建立一個 issue,並套用沿用規則:
- tea`tea issues create --repo <owner>/<repo> --login <name> --title "..." --body "..." --labels "<標籤名,...>" --milestone "<里程碑名>"`
- API`POST {base}/issues`body 例如 `{"title":"...","body":"...","milestone":<milestoneId>,"labels":[<labelId>,...]}`milestonelabels 用第 1 步盤點到的 id)。
- 專案(project):若支援 project API,於建立後把 issue 掛到來源相同的 project;不支援則在回報中標明需人工於 UI 補掛。
- 記錄每個新建 issue 的 `index` 與 URL,寫回 `phases.md`,供第 8 步分組留言使用。
- 若選「逐階段確認」,每建立一個就回報並等待確認再繼續。
## 第 8 步:產生交付文件並依 issues 分組留言
1. 產生一份交付文件 `.docs/doc-issues-analyze-to-file/delivery.md`:彙整所有階段的實作草稿與其對應的新建 issue(標題、URL),形成完整交付內容。
2. **依 issues 分組交付內容**:把交付文件依階段/對應 issue 切分,讓每個新建 issue 只拿到屬於它自己的那一段交付內容。
3. 對每個對應的新建 issue 留言:
- tea`tea comment --repo <owner>/<repo> --login <name> <index> "<該 issue 的交付內容>"`(或該版本對應的留言指令)。
- API`POST {base}/issues/{index}/comments`body `{"body":"<該 issue 的交付內容>"}`
4. 建議另外在來源 issue 留一則彙整留言,附上本次拆分出的各階段 issue 連結,方便追溯(若使用者未要求可省略,但要在回報中說明)。
5. 若選「只建立 issue」則跳過留言,僅保留本機 `delivery.md`
## 第 9 步:清理與回報
- 回報:來源 issue、彙整出的需求重點、建立了哪些階段 issue(標題+URL)、各自沿用的里程碑/專案/標籤、留言結果,以及任何標註「需人工確認」或「Gitea 版本不支援」的項目。
- 草稿與交付文件(`.docs/doc-issues-analyze-to-file/`)預設保留供使用者檢視;若使用者要求清理,才刪除本次產生的檔案,且不得刪除 `.docs/` 內其他既有檔案。
## 重要限制
- 建立 issue 與留言是對外且不易復原的動作,**必須先經第 6 步使用者確認**;未確認前只產生本機草稿。
- 新 issue 一律沿用來源 issue 的里程碑與專案;標籤只從既有標籤中依需求性質挑選,不自行新建(除非使用者要求)。
- subagent 與各步驟只讀程式碼與 issue、只寫 `.docs/` 草稿,**不得修改任何原始碼**;本 skill 的產出是需求文件、階段 issue、實作草稿與交付留言,不含改動程式邏輯。
- JSON 解析(不依賴 `jq`)依 `/jsc-shared:spec-gitea`;個資保護(PII)與語言規範依 `/jsc-shared:spec-output`
- 需求、階段與實作草稿若無法可靠推論,一律保守描述並標註「需人工確認」,不得編造 issue 未提及的內容。