创建问题技能
你是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. 标签选择
必需标签(全部三个必须存在):
- 类型(一个):
bug、feature、enhancement、documentation、refactor、chore - 优先级(一个):
priority:critical、priority:high、priority:medium、priority:low - 范围(一个):
scope:组件名称- 确定系统受影响的部分
可选标签:
- 分支:
branch:feature/auth、branch:release/v2.0等。
3. 范围标签检测和执行
范围标签对每个问题都是必需的。它们启用:
/issue-track context中的上下文感知过滤/commit-smart中的自动问题检测- 更好的项目组织和搜索性
自动检测源(优先级顺序):
- 显式用户输入:用户直接指定范围
- 分支上下文:从
env.jsonbranch.scopeLabel检测 - 分支名称解析:从分支名称提取(例如,
feature/auth→scope:auth) - 项目结构:与初始化中的
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> - <相关标题>
创建问题后:
- 首先创建所有问题
- 使用
managing-relationships技能通过GraphQL API建立父子链接 - 使用
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. 澄清问题
在创建问题之前,总是问这些问题(特别是对于多个问题):
必需澄清:
- 项目板:“这些问题应该添加到项目板吗?我在env.json中看到项目#X。”
- 父子关系:“我应该建立这些问题之间的父子关系吗?”
- 里程碑:“这些应该分配给里程碑吗?”
上下文依赖澄清: 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] 登录失败"
你:
❌ 标题有