ワンクリックで
issue-analyze
分析 GitLab Issue 的影響範圍,跨 repo 搜尋相關程式碼與 MR,產生影響評估報告。當使用者說「分析 issue」、「analyze issue」、「issue 影響分析」、「這個 issue 會影響什麼」、「評估 issue」時觸發。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
分析 GitLab Issue 的影響範圍,跨 repo 搜尋相關程式碼與 MR,產生影響評估報告。當使用者說「分析 issue」、「analyze issue」、「issue 影響分析」、「這個 issue 會影響什麼」、「評估 issue」時觸發。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | issue-analyze |
| description | 分析 GitLab Issue 的影響範圍,跨 repo 搜尋相關程式碼與 MR,產生影響評估報告。當使用者說「分析 issue」、「analyze issue」、「issue 影響分析」、「這個 issue 會影響什麼」、「評估 issue」時觸發。 |
分析 GitLab Issue 的影響範圍。跨 30+ 子專案搜尋相關程式碼與 MR,產生結構化影響評估報告。Phase 1 為「觀察者模式」,只產生報告不建 MR。
/issue-analyze #123
/issue-analyze --project=backend #45
/issue-analyze https://gitlab.example.com/BizForm/Home/-/issues/123
/issue-analyze #123 --scope=bizform-web,backend,elsa-server
/issue-analyze #123 --depth=shallow
/issue-analyze #123 --write-back
| 參數 | 必要 | 說明 |
|---|---|---|
#IID 或 URL | 是 | 目標 Issue |
--project | 否 | 專案 key(預設 defaultProjectPath) |
--scope | 否 | 限定搜尋的子專案(逗號分隔 key),預設使用智慧選取 |
--depth | 否 | shallow(僅搜尋 repo tree)/ deep(含檔案內容,預設) |
--write-back | 否 | 將報告寫回 Issue 描述底部 |
需要 .issue-config.json 存在。按以下優先順序搜尋:
./.issue-config.json~/.claude/.issue-config.json若均不存在,提示:「找不到 .issue-config.json,請先執行 /issue-init 建立設定。」
從搜尋到的 .issue-config.json 讀取(專案層級優先於使用者層級):
gitlab.projects — 所有可搜尋的子專案清單gitlab.defaultProjectPath / defaultProjectIdanalyze 設定區塊(搜尋深度、安全策略、專案領域映射等)檢查邏輯:
.issue-config.json 不存在 → 提示執行 /issue-init--project 參數 → 映射到 projects[key] 取得 projectId / projectPathanalyze.securityPolicy,初始化安全過濾器三個呼叫可並行:
mcp__GitLab_communication_server__get_issue — 取得 Issue 詳細內容mcp__GitLab_communication_server__list_issue_discussions — 取得所有討論串mcp__GitLab_communication_server__list_issue_links — 取得關聯 IssueAI 語義萃取: 從 title、description、discussions、labels 中萃取:
顯示進度:
📋 Issue #123: [Bug] 計算欄位在子表單中顯示 NaN
Labels: bug, frontend
討論數: 3
萃取關鍵字: 計算欄位, SubForm, NaN, CalculationEngine
使用 config 中 analyze.projectDomains 的靜態映射表,將關鍵字比對到專案領域標籤。
映射邏輯範例:
| 關鍵字類型 | 關鍵字範例 | 映射到專案 |
|---|---|---|
| 前端 UI | 表單元件、CSS、Vue、React | bizform-web, formeditor |
| 後端 API | Controller、API、Swagger | backend |
| Workflow | 簽核、Elsa、流程 | elsa-server, elsa-client |
若使用者用 --scope 明確指定,跳過 Layer 1。
→ 選出 5-8 個候選專案
對候選專案使用 mcp__GitLab_communication_server__get_repository_tree(recursive 必須為 boolean 值 true)。
AI 根據檔案結構判斷:
安全過濾: 所有路徑必須通過安全檢查:
securityPolicy.blockedPaths → 跳過securityPolicy.allowedExtensions → 否則跳過securityPolicy.blockedProjects → 跳過整個專案→ 確認 3-5 個相關專案 + 各專案可能相關的檔案路徑
使用 mcp__GitLab_communication_server__get_file_contents 讀取相關檔案。
限制:
analyze.maxFilesPerRepo(預設 10)個檔案對每個相關專案(可並行):
mcp__GitLab_communication_server__list_merge_requests — search 已合併 MR(state="merged")mcp__GitLab_communication_server__list_merge_requests — search 開放中 MR(state="opened")搜尋關鍵字策略:
每專案最多取 analyze.maxMRsPerRepo(預設 10)個 MR。
對最相關的 MR(最多 analyze.maxDiffMRs,預設 5 個),取得 diff:
mcp__GitLab_communication_server__get_merge_request_diffs從 diff 萃取:修改檔案、新增/刪除行數、修改的函式/類名。
| 分數來源 | 權重 |
|---|---|
| Issue 描述中直接提及的檔案 | +40 |
| MR diff 中修改過的檔案 | +30 |
| Repo Tree 中目錄名稱匹配 | +15 |
| 檔案內容中包含關鍵字 | +10 |
| 關聯 Issue 提及的檔案 | +5 |
| 等級 | 分數 | 含義 |
|---|---|---|
| HIGH | 80-100 | 影響範圍明確,建議可直接採用 |
| MEDIUM | 50-79 | 影響範圍大致正確,建議人工複查 |
| LOW | 20-49 | 資訊不足,僅供參考 |
| INSUFFICIENT | 0-19 | 無法有效分析,建議補充 Issue 描述 |
信心度因子加權:
S — 1-2 檔案,單專案M — 3-5 檔案或跨 2 專案L — 6-10 檔案或跨 3+ 專案XL — 10+ 檔案或核心模組變更報告以 Markdown 格式輸出到終端機,包含:
---
## 🔍 Issue 影響分析報告
> 由 Claude Code `/issue-analyze` 自動產生 | {timestamp}
> [信心度: {LEVEL} ({score}/100)] | [複雜度: {S/M/L/XL}]
### 摘要
| 項目 | 值 |
|------|-----|
| Issue | #{iid} - {title} |
| 類型 | {Bug/Feature} |
| 影響專案 | {project1}, {project2} |
| 影響檔案 | {N} 個 |
| 相關 MR | {N} 個 ({merged} merged, {opened} open) |
| 預估複雜度 | {S/M/L/XL} |
### 影響檔案
#### {project-name} ({N} 檔案)
| 檔案 | 相關性 | 說明 |
|------|--------|------|
| `{path}` | {score}/100 | {description} |
### 相關 MR
| MR | 專案 | 狀態 | 相關性 |
|----|------|------|--------|
| !{iid} - {title} | {project} | {merged/open} | {description} |
### 建議修改方向
1. **主要修改點**: {description}
2. **連帶修改**: {description}
3. **驗證點**: {description}
### 風險與注意事項
- {risk items}
### 安全過濾記錄
{filtered items or "無被過濾的項目"}
### 分析方法
- 搜尋專案: {list}
- 搜尋關鍵字: {keywords}
- Layer 1 排除: {N} 個不相關專案
- Repo Tree 掃描: {N} 個專案
- 檔案內容讀取: {N} 個檔案
- MR 搜尋: {N} 個專案, 找到 {N} 個相關 MR
---
## 🔍 Issue 影響分析摘要
> [信心度: {LEVEL}] | [複雜度: {S/M/L/XL}] | {date} by Claude Code
**影響檔案 ({N})**:
- `{project}`: {file1}, {file2}
**相關 MR**: !{iid} ({state}), ...
**建議方向**: {summary}
---
分析報告完成後,使用 AskUserQuestion 詢問:
寫回方式 — 使用 GraphQL createNote mutation:
mutation CreateNote($noteableId: NoteableID!, $body: String!) {
createNote(input: {
noteableId: $noteableId
body: $body
}) {
note { id body url createdAt }
errors
}
}
變數:
noteableId: gid://gitlab/Issue/{issue_id}(注意:使用 get_issue 回傳的 id 欄位,非 iid)body: 報告內容,使用 <details> HTML 標籤包裝為可折疊區塊報告格式(折疊版):
<details>
<summary>
## 🔍 Issue 影響分析報告
> 信心度: **{LEVEL} ({score}/100)** | 複雜度: **{S/M/L/XL}** | {date} by Claude Code `/issue-analyze`
</summary>
{完整報告內容...}
</details>
---
*由 Claude Code `/issue-analyze` 自動產生 — [Phase 1 觀察者模式]*
注意:
create_issue_note(有 404 "Discussion Not Found" bug)update_issue 修改描述(會污染原始描述)createNote 建立獨立 comment,不影響原始 Issue 內容✓ Issue #{iid} 影響分析完成
信心度: {LEVEL} ({score}/100)
複雜度: {S/M/L/XL} ({N} 檔案, {N} 專案)
影響範圍:
- {project}: {N} 檔案 ({file list})
相關 MR: {N} 個 ({merged} merged, {open} open)
建議修改方向: {summary}
報告已寫回 Issue: {是/否}
| Step | 工具 | 用途 | 可並行 |
|---|---|---|---|
| 2 | get_issue | 取得 Issue 詳細內容 | 是 (2a-2c) |
| 2 | list_issue_discussions | 取得討論串 | 是 |
| 2 | list_issue_links | 取得關聯 Issue | 是 |
| 3 | get_repository_tree | 掃描 repo 檔案結構 | 是 (5-8 並行) |
| 3 | get_file_contents | 讀取檔案內容 | 批次 (最多 30) |
| 4 | list_merge_requests | 搜尋相關 MR | 是 (每專案並行) |
| 4 | get_merge_request_diffs | 取得 MR diff | 是 (最多 5 並行) |
| 7 | get_issue | 取得 Issue 全域 ID(寫回用) | - |
| 7 | execute_graphql | GraphQL createNote 建立 comment | - |
| 允許 | 禁止 |
|---|---|
| 讀取 Issue / 討論 / 關聯 | 建立/刪除 Issue |
| 讀取 repo 檔案結構和內容 | 任何 git push / MR 建立 |
| 搜尋 MR 和 diff | 任何 MR 操作(approve, merge) |
| 寫回分析報告到 Issue 討論串(comment) | 修改 Issue 的 labels/assignee/state |
blockedPaths: 禁止讀取的路徑 glob(.env、secrets、CI/CD 等)blockedProjects: 禁止搜尋的專案(infra、deploy 等)allowedExtensions: 只允許的副檔名白名單(.cs、.ts、.tsx、.js 等)| 模式 | API 呼叫數 | 預估耗時 |
|---|---|---|
| shallow | 15-25 | 10-15 秒 |
| deep(預設) | 25-58 | 20-40 秒 |
get_repository_tree 的 recursive 參數必須傳 boolean true,不能傳字串 "true"create_issue_note 有 404 bug("Discussion Not Found"),寫回改用 GraphQL createNote mutation<details> 折疊區塊包裝報告,避免佔據版面noteableId 使用 gid://gitlab/Issue/{id} 格式,id 來自 get_issue 回傳的 id 欄位(非 iid)智慧建立 GitLab Issue,支援討論式建立和指令式建立。當使用者討論 bug/功能需求到一個段落時,主動詢問是否建立 Issue。也可用指令直接建立。當使用者說「建立 issue」、「create issue」、「新增 issue」、「開 issue」、「開票」,或在討論 bug/feature 時說「好」、「開吧」、「建起來」時觸發。
將當前 LLM 對話討論轉為結構化 GitLab Issue,整合 issue-create 和 issue-split 功能。當使用者說「把討論建成 issue」、「discuss to issue」、「整理成 issue」、「從對話建立 issue」時觸發。
互動式初始化 .issue-config.json,自動偵測 GitLab 專案資訊並設定 Issue 管理規則。當使用者說「init issue」、「初始化 issue 設定」、「setup issue config」、「issue init」時觸發。
批量整理舊有 GitLab Issue,補充標籤、建立關聯、重新分類。當使用者說「整理 issue」、「organize issues」、「清理 issue」、「整理舊 issue」時觸發。
將大型 GitLab Issue 拆分為多個子 Issue,AI 語義理解自動識別子任務並建立關聯。當使用者說「拆分 issue」、「split issue」、「拆 issue」、「分拆」時觸發。
從 Issue 分析結果自動產生 Draft MR 建議。需先執行 /issue-analyze 取得影響分析,再根據分析結果產生程式碼修改建議與 Draft MR。當使用者說「issue 轉 MR」、「自動開 MR」、「issue to MR」、「從 issue 建 MR」時觸發。