GitHubIssue自动生成技能Skill create-issue

这个技能用于自动化生成全面的GitHub issue,包括问题规范、技术细节、TDD计划、接受标准和代理指令,以便自主管理PR生命周期,提高开发效率和协作质量。关键词:GitHub issue、自动化、PR管理、TDD、DevOps、软件开发、持续集成、代码审查。

DevOps 0 次安装 0 次浏览 更新于 3/24/2026

创建GitHub Issue技能

创建全面的、结构良好的GitHub issue,内置代理指令以自主管理PR生命周期。

概述

此技能生成自包含的工作包形式的GitHub issue。每个issue包括:

  1. 问题/功能规范,带有清晰的范围
  2. 技术规范,包括类型、架构和API设计
  3. TDD实现计划,采用测试优先循环
  4. 接受标准清单
  5. 代理指令,涵盖完整的PR生命周期(实现→审查→合并)

用法

/project:create-issue

交互流程

步骤 1: 问题类型

询问用户:

这是什么类型的问题?
1. 功能 - 新功能
2. 错误 - 某些功能损坏
3. 重构 - 改进现有代码

步骤 2: 简要描述

问题或功能的简要描述?(1-2句话)

步骤 3: 复杂度评估

估计的复杂度是多少?
1. 简单(< 1天)
2. 中等(2-5天)
3. 复杂(> 1周)

步骤 4: 上下文收集

有任何相关的文件、服务或问题需要引用吗?
(或者说“探索代码库”,我会进行调查)

步骤 5: 生成问题

基于输入,使用下面的适当模板生成完整的issue。


Issue模板

功能模板

## 摘要

[1-2句话描述]

**复杂度**: [简单|中等|复杂]
**预计工作量**: [X天]

---

## 问题

[这解决了什么问题?为什么需要它?]

### 证据

[日志、指标、用户报告或推理]

### 范围

- ✅ 范围内: [包括什么]
- ❌ 范围外: [明确不包括什么]

---

## 架构决策

**决策**: [将采用什么方法]
**理由**: [为什么采用这种方法,为什么不是替代方案]

---

## 技术规范

### 类型/接口

```typescript
// 关键类型定义
```

### Zod架构(如果适用)

```typescript
// 验证架构
```

### API端点(如果适用)

| 方法 | 路径 | 描述 |
| ------ | ---- | ----------- |

### 数据库更改(如果适用)

[架构更改、需要的迁移]

---

## TDD实现计划

### 循环 1: [快乐路径]

```typescript
it("应该[预期行为]", async () => {
  // 测试代码
});
```

### 循环 2: [错误处理]

```typescript
it("应该处理[错误案例]", async () => {
  // 测试代码
});
```

### 循环 3: [边界案例]

### 循环 4: [集成]

---

## 错误处理

| 场景 | 行为 | 日志记录 |
| -------- | -------- | ------- |

---

## 实现阶段

### 阶段 1: [核心](高优先级)

- [ ] 任务 1
- [ ] 任务 2

### 阶段 2: [增强](中等优先级)

- [ ] 任务 3

---

## 要创建/修改的文件

- **新建**: `路径/到/新文件.ts`
- `路径/到/现有文件.ts` - [什么更改]

---

## 接受标准

- [ ] 所有TDD循环已实现并通过测试
- [ ] 零TypeScript错误(`pnpm typecheck`)
- [ ] 零lint警告(`pnpm lint`)
- [ ] 所有测试通过(`pnpm test --run`)
- [ ] **JSDoc文档**添加到所有新/修改的服务
- [ ] **`docs/SERVICE_INVENTORY.md`** 更新(如果新/修改服务)
- [ ] **`scripts/service-registry.json`** 更新(如果新/修改服务)
- [ ] **模拟工厂** 添加/更新于 `src/lib/services/mock-factories.ts`(如果新服务)
- [ ] PR已创建且所有CI检查通过
- [ ] **所有代码审查评论已处理**(见代理指令)
- [ ] 所有审查线程已解决
- [ ] PR已批准并合并

---

## 代理指令

**关键**: 实现此issue时遵循此协议。PR在完成所有步骤之前不是完整的。

### 阶段 0: 研究(在编写任何代码之前)

**先阅读这些文件,避免重复造轮子:**

1. **服务清单** - 检查现有服务是否已满足需求:

   ```bash
   # 阅读服务清单
   cat docs/SERVICE_INVENTORY.md
   # 或搜索特定功能
   grep -i "embedding\|search\|cache" docs/SERVICE_INVENTORY.md
   ```

2. **服务注册表** - 检查服务元数据和类别:

   ```bash
   cat scripts/service-registry.json | jq '.services[] | select(.name | test("Search|Cache"; "i"))'
   ```

3. **模拟工厂** - 查看现有模拟以重用模式:

   ```bash
   cat src/lib/services/mock-factories.ts
   ```

4. **类似服务** - 查找具有类似模式的服务:
   ```bash
   # 查找编排器模式
   ls src/lib/services/*-orchestrator*.ts
   # 查找持久性模式
   ls src/lib/services/*-persistence*.ts
   ```

**为什么重要**: 重用现有服务和模式节省时间,保持一致性,防止重复代码。

### 阶段 A: 实现

1. 从主分支创建功能分支:`git checkout -b feat/[简短名称]`
2. 按照上述TDD循环执行
3. **添加JSDoc文档**到所有新/修改的服务
4. 运行本地验证:`pnpm lint && pnpm typecheck && pnpm test --run`
5. **更新服务清单**(如果新服务):
   ```bash
   npx tsx scripts/sync-service-registry.ts --execute
   npx tsx scripts/update-service-inventory.ts
   ```
6. 使用 `/project:create-pr` 创建PR,包含全面描述

### 阶段 B: 代码审查迭代

**等待代码审查后再继续。推送代码后不要标记完成。**

对于每个代码审查迭代:

1. **获取所有评论**(包括琐碎、挑剔和范围外):

   ```bash
   PR_NUMBER=XXX
   OWNER=$(gh repo view --json owner -q .owner.login)
   REPO=$(gh repo view --json name -q .name)
   gh api "repos/$OWNER/$REPO/pulls/$PR_NUMBER/comments" --paginate
   ```

2. **按类别处理所有评论**:

   | 类型                   | 操作                                               |
   | ---------------------- | ---------------------------------------------------- |
   | 🔴 关键/重大      | 立即修复                                      |
   | 🟡 中等/轻微        | 合并前修复                                     |
   | 🔵 **琐碎/挑剔** | **也要修复这些!** 不要跳过                       |
   | 🟣 **范围外**    | **彻底调查** - 通常包含最佳见解 |

3. **对于每个评论**:
   - **< 1天工作** → 在此PR中实施修复
   - **> 1天或架构性** → 创建新的GitHub issue,在响应中链接
   - **不同意** → 回复解释技术原因

4. **更改后**:

   ```bash
   pnpm lint && pnpm typecheck && pnpm test --run
   git add . && git commit -m "fix: 处理审查反馈" && git push
   ```

5. **逐个响应每个评论线程**:

   ```bash
   COMMENT_ID=XXX
   CURRENT_USER=$(gh api user -q '.login')
   gh api "/repos/$OWNER/$REPO/pulls/$PR_NUMBER/comments/$COMMENT_ID/replies" \
     -X POST \
     -f body="在提交$(git rev-parse --short HEAD)中修复。 [解释]

   *(Claude代表@$CURRENT_USER回复)*"
   ```

6. **等待下一个审查周期** - 不要自己解决线程

7. **重复步骤1-6**直到审查者确认满意

### 阶段 C: 线程解决

仅审查者批准后:

1. 重新获取所有线程以获取当前ID
2. 解决每个线程:

   ```bash
   THREAD_ID="PRRT_xxx"
   gh api graphql -f threadId="$THREAD_ID" -f query='
     mutation($threadId: ID!) {
       resolveReviewThread(input: {threadId: $threadId}) {
         thread { id isResolved }
       }
     }'
   ```

3. 继续前验证所有线程已解决

### 阶段 D: 合并准备

PR准备好合并仅当所有条件为真:

- [ ] 所有CI检查通过(绿色)
- [ ] **每个**代码审查评论已处理(包括琐碎/范围外)
- [ ] **每个**线程有个别响应
- [ ] 所有线程已解决(审查者批准后)
- [ ] GitHub issue已创建用于任何延迟工作(> 1天)
- [ ] 没有待处理的审查评论等待响应

### 阶段 E: 压缩合并和清理

**重要**: 总是使用压缩合并,从不使用常规合并。

1. **压缩并合并** PR(将所有提交合并为一个干净的提交):

   ```bash
   # 通过GitHub CLI
   gh pr merge $PR_NUMBER --squash --delete-branch

   # 或通过GitHub网页界面:
   # 点击“压缩并合并”(不是“合并”或“变基并合并”)
   ```

2. **删除功能分支**(自动完成,带有--delete-branch标志):

   ```bash
   # 如果分支未自动删除:
   git push origin --delete feat/[分支名称]
   git branch -d feat/[分支名称]
   ```

3. **更新本地主分支**:

   ```bash
   git checkout main
   git pull origin main
   ```

### 参考

详见 `.claude/commands/handle-pr-comments.md` 了解详细协议。

---

## 相关问题

- [相关issue链接]

## 参考资料

- [相关文档、规范或PR链接]


错误模板

使用功能模板,进行以下修改:

标题格式: fix: [简要描述]

替换“问题”部分为

## 错误报告

**优先级**: 🐛 [P0-关键|P1-高|P2-中等|P3-低]
**影响用户**: [影响范围]
**首次报告**: [日期/来源]

### 预期行为

[应该发生什么]

### 实际行为

[实际发生什么]

### 重现步骤

1. 步骤 1
2. 步骤 2
3. 步骤 3

### 根因分析

[如果已知,解释为什么发生]

### 证据

[日志、堆栈跟踪、截图]

替换“TDD实现计划”为

## 测试案例

### 测试 1: 验证修复报告的问题

```typescript
it("应该[正确行为]当[条件]", async () => {
  // 重现错误场景
  // 验证现已修复
});
```

### 测试 2: 回归测试

```typescript
it("应该不回归[相关功能]", async () => {
  // 确保修复不破坏其他功能
});
```


重构模板

使用功能模板,进行以下修改:

标题格式: refactor: [简要描述]

在“摘要”后添加

## 背景

[为什么需要此重构?什么触发了它?]

### 正在处理的审查反馈

> [引用触发此工作的审查评论]

- 原始PR: #XXX
- 评论者: @reviewer

添加到“接受标准”

- [ ] 不破坏公共API
- [ ] 所有现有测试仍通过,无需修改
- [ ] 性能不降低(如果适用)

生成后

生成issue内容后:

  1. 显示预览给用户

  2. 询问是否需要修改

  3. 创建issue,带有适当标签:

    # 功能
    gh issue create --title "feat: [标题]" --body "[内容]" \
      --label "enhancement" --label "complexity:[级别]"
    
    # 错误
    gh issue create --title "fix: [标题]" --body "[内容]" \
      --label "bug" --label "priority:[级别]"
    
    # 重构
    gh issue create --title "refactor: [标题]" --body "[内容]" \
      --label "refactor" --label "complexity:[级别]"
    
  4. 报告issue编号给用户


关键原则

  1. 自包含: Issue应包含代理自主工作所需的一切
  2. TDD优先: 始终在实现前包含测试规范
  3. 完整生命周期: 代理指令涵盖从实现到合并
  4. 无捷径: 必须处理所有审查评论,包括琐碎/挑剔
  5. 范围外=黄金: 标记为范围外的评论通常包含最佳见解
  6. 迭代直到完成: PR在所有线程解决前不完整