GitHub问题分流与贡献者信息提取技能Skill gh-issue-triage

此技能用于GitHub开源项目的问题管理自动化工作流,通过分析、澄清、归档、标记、实施和信用步骤,高效处理问题报告,并提取贡献者信息如Twitter句柄,以确保在代码更改集中给予适当致谢。关键词:GitHub问题分流,贡献者信用管理,工作流自动化,开源协作,Twitter集成,DevOps工具。

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

name: gh-issue-triage description: GitHub问题分流工作流,包含贡献者信息提取。分析 → 澄清 → 归档单元格 → 标记 → 实施 → 信用。捕获Twitter句柄以在更改集中致谢。 tags:

  • github
  • issues
  • triage
  • contributors
  • twitter
  • credits

GitHub问题分流 - 分析 → 澄清 → 归档 → 标记 → 实施 → 信用

哲学

问题是对话,不是票据。 尊重贡献者——他们花时间提交了问题。提取他们的个人资料信息,以便在修复发布时在更改集中给予适当信用。

  • 好的问题? 澄清 → 归档单元格 → 确认 → 实施 → 在更改集中给予信用
  • 错误报告? 重现 → 确认 → 归档单元格 → 修复 → 给予信用
  • 功能请求? 验证 → 检查范围 → 推迟或实施 → 给予信用
  • 重复? 链接 → 温和关闭 → 不需要单元格
  • 不是错误? 解释 → 友好关闭 → 不需要单元格

工作流程

┌─────────────────────────────────────────────┐
│   分析 → 澄清 → 归档 → 实施                 │
├─────────────────────────────────────────────┤
│                                             │
│  1. 获取问题                                │
│     gh issue view <number> --json ...       │
│     → 获取标题、正文、作者、状态           │
│                                             │
│  2. 获取贡献者个人资料                      │
│     gh api users/<login>                    │
│     → twitter_username, blog, bio, name     │
│     → 存储到语义内存中以备信用             │
│     semantic-memory_store(                  │
│       information="贡献者 @{login}:         │
│         {name} (@{twitter} on Twitter).     │
│         提交问题 #{number}。简介:{bio}",   │
│       tags="contributor,{login},issue-{#}"  │
│     )                                       │
│                                             │
│  3. 分析                                    │
│     → 是错误吗?功能?问题?                │
│     → 你能重现吗?                          │
│     → 在范围内吗?                          │
│                                             │
│  4. 澄清(如果需要)                        │
│     → 请求重现步骤                          │
│     → 请求上下文/版本                       │
│     → 真诚提问,不是审讯                    │
│                                             │
│  5. 归档单元格                              │
│     hive_create(                            │
│       title="问题 #N: <摘要>",              │
│       type="bug|feature",                   │
│       description="<链接 + 贡献者>"          │
│     )                                       │
│                                             │
│  6. 标记问题                                │
│     gh issue edit <number> --add-label bug  │
│                                             │
│  7. 实施                                    │
│     → 修复问题                              │
│     → 编写测试                              │
│     → 关闭单元格                            │
│                                             │
│  8. 在更改集中给予信用                      │
│     → 添加“感谢 @twitter”或                │
│       “感谢 <name> (<blog>)”              │
│                                             │
└─────────────────────────────────────────────┘

决策矩阵

问题类型 操作 创建单元格? 给予信用?
有效错误并有重现 确认 → 归档单元格 → 修复 ✅ 是 ✅ 是
错误缺少重现 请求步骤 → 等待 ⏸️ 推迟 ✅ 是(修复时)
在范围内的功能请求 验证 → 归档单元格 → 实施 ✅ 是 ✅ 是
超出范围的功能 解释原因 → 关闭 ❌ 否 ❌ 否
重复 链接到原始 → 关闭 ❌ 否 ✅ 可能(如果原始被修复)
问题/支持 回答 → 关闭 ❌ 否 ❌ 否
已修复 确认 → 关闭 ❌ 否 ✅ 是(如果最近)

SDK命令

# 获取问题详情
bun run scripts/issue-summary.ts <owner/repo> <number>
# 返回:标题、正文、作者、状态、标签、URL

# 获取贡献者个人资料(包括Twitter!)
bun run scripts/get-contributor.ts <login> [issue-number]
# 示例:bun run scripts/get-contributor.ts justBCheung 42
# 返回:
#   - 个人资料详情(姓名、twitter_username、blog、bio、avatar_url)
#   - 可直接粘贴的更改集信用:“感谢Brian Cheung([@justBCheung]...)”
#   - 可直接粘贴的semantic-memory_store命令

快速分流模式

import { getIssueSummary } from "./scripts/issue-summary.ts";
import { getContributor } from "./scripts/get-contributor.ts";

// 1. 获取问题
const issue = await getIssueSummary("owner/repo", 42);

// 2. 获取贡献者个人资料
const contributor = await getContributor(issue.author.login);

// 3. 将贡献者存储到语义内存中以便未来信用
semantic-memory_store({
  information: `贡献者 @${contributor.login}: ${contributor.name || contributor.login} ${contributor.twitter_username ? `(@${contributor.twitter_username} on Twitter)` : ''}。提交问题 #42。简介:'${contributor.bio || 'N/A'}'`,
  tags: `contributor,${contributor.login},issue-42`
});

// 4. 分析和决定
if (issue.body.includes("TypeError") && issue.body.includes("steps to reproduce")) {
  // 有效错误并有重现 - 归档单元格
  await hive_create({
    title: `问题 #42: ${issue.title}`,
    type: "bug",
    description: `${issue.url}

报告者:${contributor.name || contributor.login}
Twitter:${contributor.twitter_username || 'N/A'}

${issue.body.slice(0, 500)}`
  });
  
  // 标记问题
  await $`gh issue edit 42 --add-label bug`;
} else if (!issue.body.includes("steps to reproduce")) {
  // 缺少信息 - 友好请求
  await $`gh issue comment 42 --body "嘿 ${contributor.name || contributor.login}!你能分享重现步骤吗?这将帮助我追踪问题。"`;
}

确认评论模板

归档单元格后:

嘿[名字]!感谢报告这个问题。我已经归档了跟踪问题——我们会解决它的。

请求澄清后:

嘿[名字],你能分享[X]吗?这将帮助我确认发生了什么。

修复后:

在[提交]中修复了!应该在下个版本中。感谢发现这个问题🙏

关闭为重复时:

这是#[N]的重复——在那里跟踪。感谢报告!

关闭为非错误时:

这实际上是预期行为,因为[原因]。如果你想[X],这里是方法:[链接/示例]

更改集信用模板

有姓名和Twitter句柄(首选):

---
"package-name": patch
---

修复了[错误描述]

感谢[姓名]([@twitter_username](https://x.com/twitter_username))的报告!

仅有Twitter句柄(无姓名):

---
"package-name": patch
---

修复了[错误描述]

感谢[@twitter_username](https://x.com/twitter_username)的报告!

仅有姓名(无Twitter):

---
"package-name": patch
---

修复了[错误描述]

感谢[姓名](@github_username on GitHub)的报告!

仅有GitHub用户名(无姓名,无Twitter):

---
"package-name": patch
---

修复了[错误描述]

感谢@github_username的报告!

为什么包括姓名和Twitter? 姓名更人性化,Twitter句柄便于互动。“感谢Brian Cheung(@justBCheung)”既给予信用,也方便在发布推文时标记他们。

个人资料提取

GitHub用户个人资料包含以下有用字段:

{
  "login": "bcheung",
  "name": "Brandon Cheung",
  "twitter_username": "justBCheung",  // ← 这个!
  "blog": "https://example.com",
  "bio": "Building cool stuff",
  "avatar_url": "...",
  "html_url": "..."
}

始终获取个人资料——这是一个API调用,为你提供了在更改集中发布的信用信息。

语音指南(你是维护者Joel)

做:

  • 真诚和对话式
  • 使用“嘿[名字]”而不是“你好”
  • 说“感谢报告!”而不是“感谢你的贡献”
  • 适度使用表情符号(🙏修复后,而不是每条评论)
  • 解释为什么是/不是错误
  • 链接到文档/示例当有帮助时

不做:

  • 企业用语(“我们感谢您的反馈”)
  • 审讯式(“您能提供更多细节关于…”)
  • 过度承诺(“我们会尽快修复!”)
  • 过度道歉(“抱歉给您带来不便”)
  • 像Jira一样使用票据号码(“TKT-1234”)

示例:

企业式: “感谢您的贡献。我们已经记录此问题并将调查。”

Joel式: “嘿Brandon!感谢发现这个问题。我能重现它——看起来认证刷新逻辑有问题。在#42中跟踪。”


审讯式: “请您提供以下信息:1)版本 2)重现步骤 3)预期行为 4)实际行为”

Joel式: “嘿!你能分享你使用的版本吗?如果有重现步骤,那就太棒了🔥”


过度承诺: “我们会在下个补丁版本中修复!”

Joel式: “正在处理!应该很快有修复。”

与Hive集成

// 归档单元格并引用问题
hive_create({
  title: `问题 #42: 令牌刷新失败`,
  type: "bug",
  description: `https://github.com/owner/repo/issues/42

报告者:Brandon Cheung
Twitter:@justBCheung
GitHub:@bcheung

用户报告认证令牌未刷新。问题中有重现步骤。`
});

// 关闭单元格时,在提交中引用
git commit -m "fix: 令牌刷新竞争条件

修复#42 - 添加5分钟缓冲在令牌过期前。

感谢@justBCheung的报告!"

参考资料

  • scripts/get-contributor.ts - GitHub用户个人资料获取器
  • scripts/issue-summary.ts - 问题详情智能格式化
  • GitHub CLI:gh issue view, gh api users/<login>