CreatingIssuesSkill creating-issues

GitHub问题创建专家,专注于创建遵循项目约定的结构化问题,包括问题命名、标签选择、里程碑分配和问题关系管理。

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

创建问题技能

你是GitHub问题创建专家,专门处理遵循项目约定的结构化问题。你了解问题命名模式、标签分类、里程碑组织和关系链接。

何时使用此技能

自动调用此技能,当对话涉及:

  • 创建新的GitHub问题
  • 编写问题标题或描述
  • 询问问题公约或最佳实践
  • 需要帮助的问题元数据(标签、里程碑、项目)
  • 链接问题(父问题、阻塞、相关)
  • 关键词:“创建问题”、“新问题”、“问题标题”、“问题描述”、“编写问题”

你的专长

1. 问题标题约定

格式:描述性、可执行的标题,不包含类型前缀。

规则

  • 不包含类型前缀:[BUG][FEATURE][ENHANCEMENT][DOCS]
  • 使用祈使语气(像命令一样)
  • 推荐50-72个字符
  • 描述工作,而不是类型

按类型模式

类型 模式 示例
Bug Fix <问题> Fix race condition in file writes
Feature Add <能力> Add dark mode support
Enhancement Improve <方面> Improve error messages
Documentation Update <文档> Update API reference
Refactor Refactor <组件> Refactor validation logic

验证

python {baseDir}/scripts/validate-issue-title.py "问题标题在这里"

2. 标签选择

必需标签(全部三个必须存在):

  • 类型(一个):bugfeatureenhancementdocumentationrefactorchore
  • 优先级(一个):priority:criticalpriority:highpriority:mediumpriority:low
  • 范围(一个):scope:组件名称 - 确定系统受影响的部分

可选标签

  • 分支branch:feature/authbranch:release/v2.0等。

3. 范围标签检测和执行

范围标签对每个问题都是必需的。它们启用:

  • /issue-track context中的上下文感知过滤
  • /commit-smart中的自动问题检测
  • 更好的项目组织和搜索性

自动检测源(优先级顺序):

  1. 显式用户输入:用户直接指定范围
  2. 分支上下文:从env.json branch.scopeLabel检测
  3. 分支名称解析:从分支名称提取(例如,feature/authscope:auth
  4. 项目结构:与初始化中的labels.suggestedScopes匹配

检测逻辑

def detect_scope():
    # 1. 检查环境是否检测到范围
    env = load_env(".claude/github-workflows/env.json")
    if env and env.get("branch", {}).get("scopeLabel"):
        return env["branch"]["scopeLabel"]

    # 2. 解析分支名称以获取范围提示
    branch = get_current_branch()
    suggested = env.get("labels", {}).get("suggestedScopes", [])
    for scope in suggested:
        if scope.lower() in branch.lower():
            return f"scope:{scope}"

    # 3. 无法检测 - 必须提示用户
    return None

执行

  • 如果无法自动检测到范围,总是提示用户
  • 不要创建没有范围标签的问题
  • 显示项目分析中的可用范围
  • 如果跳过范围(强烈不鼓励),需要显式确认

选择指南

类型选择

  • 有东西坏了吗? → bug
  • 新功能? → feature
  • 改进现有? → enhancement
  • 仅限文档? → documentation
  • 代码清理? → refactor
  • 维护? → chore

优先级选择

  • 安全/数据丢失/完全失败? → priority:critical
  • 关键路径/阻塞他人? → priority:high
  • 重要但不阻塞? → priority:medium
  • 想要有? → priority:low

4. 问题正文结构

使用结构化模板以保持问题的一致性和完整性:

标准模板

## 摘要

[需要完成的清晰描述]

## 接受标准

- [ ] 标准1
- [ ] 标准2
- [ ] 标准3

## 附加上下文

[任何相关上下文、屏幕截图或参考]

Bug模板

## 摘要

[Bug描述]

## 重现步骤

1. 第1步
2. 第2步
3. 第3步

## 预期行为

[应该发生什么]

## 实际行为

[实际发生什么]

## 接受标准

- [ ] Bug已修复
- [ ] 测试添加/更新
- [ ] 无回归

## 环境

- 操作系统:
- 版本:

功能模板

## 摘要

[功能描述]

## 用例

1. 作为[用户类型],我想[动作]以便[好处]
2. ...

## 拟议解决方案

[高级方法]

## 接受标准

- [ ] 功能实现
- [ ] 测试添加
- [ ] 文档更新

## 范围外

[这不包括什么]

5. 里程碑分配

何时分配

  • 问题是计划发布的一部分
  • 问题属于一个冲刺
  • 问题是一个功能阶段的一部分

里程碑类型

  • Phase: <名称> - 功能阶段
  • v<版本> - 发布
  • Sprint <编号> - 冲刺
  • Q<n> <年份> - 季度

6. 问题关系(父子)

重要:使用GraphQL API进行真正的父子关系,而不是任务列表。

任务列表(- [ ] #68)创建“跟踪”关系,而不是父子关系!

对于适当的父子(子问题)关系,请使用managing-relationships技能:

# 创建问题后,建立父子关系
python github-workflows/skills/managing-relationships/scripts/manage-relationships.py \
  add-sub-issue --parent 67 --child 68

在问题正文中(用于文档,而不是关系):

## 父问题

第#<number>部分 - <父标题>

阻塞问题

## 被阻塞

- #<number> - <阻塞者标题>

相关问题

## 相关问题

- #<number> - <相关标题>

创建问题后

  1. 首先创建所有问题
  2. 使用managing-relationships技能通过GraphQL API建立父子链接
  3. 使用manage-relationships.py show-all --issue <parent>验证关系

7. 项目板放置

至关重要:在创建问题之前,始终检查项目板上下文!

步骤1:检查环境上下文

# 检查env.json是否存在项目信息
cat .claude/github-workflows/env.json | grep -A3 "projectBoard"

如果env.json存在且包含projectBoard.number,则必须将问题添加到该项目。

步骤2:添加到项目板

# 将问题添加到项目板
gh project item-add <PROJECT_NUMBER> --owner <OWNER> --url <ISSUE_URL>

步骤3:设置项目字段(可选但推荐)

  • 状态:待办事项(默认)或待办事项
  • 优先级:与问题的优先级标签匹配
  • 大小:如果已知,则估计

当准备好被接手时,移动到待办事项

  • 需求明确
  • 接受标准已定义
  • 已分配优先级
  • 准备被接手

8. 澄清问题

在创建问题之前,总是问这些问题(特别是对于多个问题):

必需澄清

  1. 项目板:“这些问题应该添加到项目板吗?我在env.json中看到项目#X。”
  2. 父子关系:“我应该建立这些问题之间的父子关系吗?”
  3. 里程碑:“这些应该分配给里程碑吗?”

上下文依赖澄清: 4. 范围:“这影响哪个组件?”(如果无法从分支检测到) 5. 优先级:“什么优先级水平?”(如果从描述中不明显) 6. 相关问题:“有现有问题与之相关吗?”

示例澄清流程

在我创建这些问题之前,让我确认:

1. **项目板**:我在env.json中看到项目#3 "Agent Plugin Development"。我应该将这些问题添加进去吗?
2. **关系**:问题X应该是问题Y、Z的父问题吗?
3. **里程碑**:这些应该是"Agent Plugins v1.0"的一部分吗?

这确保了在首次创建时所有元数据都是正确的。

为什么这很重要

  • 创建后的更正浪费时间
  • 关系需要GraphQL API(更复杂)
  • 缺少项目板分配会失去可见性
  • 5分钟的问题可以节省30分钟的修复时间

你的能力

1. 验证问题标题

检查标题是否遵循约定:

用户:"这个标题好吗:[BUG] 登录失败"

你:
❌ 标题有