关于 bug-report
用于游戏项目 QA 的 Claude Code 技能,可根据描述或代码分析起草缺陷报告,并验证修复、关闭已验证缺陷。报告由用户决定是否写入项目;不会替用户向第三方仓库提交问题。
主要功能
- 01根据描述生成结构化缺陷报告
- 02分析指定文件并识别潜在问题
- 03检查修复并给出验证结论
- 04为已验证修复记录关闭信息
- 05仅在用户同意后写入报告
适用场景
- 01记录测试中发现的缺陷
- 02检查文件中的潜在错误
- 03确认修复是否解决问题
- 04关闭已验证修复的缺陷记录
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ donchitos/ claude-code-game-studios --skill bug-report安装后在 Claude Code 中输入/bug-report确认已加载。
详细介绍
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation
自动化模式:解析 modes.automation(project.local.yaml →
project.yaml → 默认值 collaborative)。每次调用 AskUserQuestion 和
每次文件写入都遵循 .claude/docs/automation-modes.md
(collaborative 总是提问 · guided 仅在重大事项上提问 · autonomous 记录后继续;
automation_always_ask 类别总是先提问)。
Bug 报告
仅起草。 此技能会将报告写入 production/qa/bugs/。如果问题原因在引擎、插件或其他供应商的代码中,请在 Notes 下为其问题跟踪器起草报告,然后到此为止:绝不要在对方的代码仓库中提交、开启或评论问题或拉取请求。由用户提交。
阶段 1:解析参数
根据参数确定模式:
- 没有关键词 → 描述模式:根据提供的描述生成结构化 Bug 报告
analyze [path]→ 分析模式:读取目标文件并识别潜在 Bugverify [BUG-ID]→ 验证模式:确认报告中提及的修复是否确实解决了 Bugclose [BUG-ID]→ 关闭模式:将已验证的 Bug 标记为已关闭,并记录解决方案
如果未提供参数,请先询问用户对 Bug 的描述。
阶段 2A:描述模式
-
解析描述,提取关键信息:发生了什么问题、何时发生、如何复现,以及预期行为是什么。
-
使用 Grep/Glob 搜索代码库中的相关文件,以补充上下文(受影响的系统、可能相关的文件)。
-
起草 Bug 报告:
# Bug Report
## Summary
**Title**: [Concise, descriptive title]
**ID**: BUG-[NNNN]
**Severity**: [S1-Critical / S2-High / S3-Medium / S4-Low]
**Priority**: [P1-Fix this sprint / P2-Fix soon / P3-Backlog / P4-Won't fix]
**Status**: Open
**Reported**: [Date]
**Reporter**: [the reporter's name as the user gives it, else `—`; never an email address or account ID taken from the session]
## Classification
- **Category**: [Gameplay / UI / Audio / Visual / Performance / Crash / Network]
- **System**: [Which game system is affected — when the bug spans systems, the one whose code must change; the others go under Related systems]
- **Frequency**: [Always / Often (>50%) / Sometimes (10-50%) / Rare (<10%)]
- **Regression**: [Yes/No/Unknown -- was this working before?]
## Environment
- **Build**: [Version or commit hash]
- **Platform**: [OS, hardware if relevant]
- **Scene/Level**: [Where in the game]
- **Game State**: [Relevant state -- inventory, quest progress, etc.]
## Reproduction Steps
**Preconditions**: [Required state before starting]
1. [Exact step 1]
2. [Exact step 2]
3. [Exact step 3]
**Expected Result**: [What should happen]
**Actual Result**: [What actually happens]
## Technical Context
- **Likely affected files**: [List of files based on codebase search]
- **Related systems**: [What other systems might be involved]
- **Possible root cause**: [If identifiable from the description]
## Evidence
- **Logs**: [Relevant log output if available]
- **Visual**: [Description of visual evidence]
## Related Issues
- [Links to related bugs or design documents]
## Notes
[Any additional context or observations]
严重程度和优先级标签使用 /bug-triage 中的 S 和 P 编号及名称;该技能会从本文件中解析这些内容。如果 P4-Won't fix,它表示其 P4 — Won't fix / Deferred(已接受的风险),而不是愿望清单。如果更改任一等级体系,也要同步更改
.claude/skills/bug-triage/SKILL.md。
阶段 2B:分析模式
-
读取参数中指定的目标文件。
-
识别潜在 Bug:空引用、差一错误、竞态条件、未处理的边缘情况、资源泄漏、状态转换错误。
-
对于每个潜在 Bug,使用上述模板生成 Bug 报告,并填写可能的触发场景和建议的修复方案。
阶段 2C:验证模式
按编号查找 Bug 文件,此处和 close 模式均如此:Glob
production/qa/bugs/BUG-*.md,并选取编号与 [BUG-ID] 匹配的文件,
不论其前导零数量如何;较早的带 slug 的三位数文件也按编号查找。如果
没有匹配项,则停止:「production/qa/bugs/ 中没有 Bug [BUG-ID]。」结论:已阻止
——不存在此 Bug。
读取该文件。提取复现步骤和预期结果。
- 重新执行复现步骤——使用 Grep/Glob 检查所述根因代码路径是否仍然存在。如果修复已移除或更改该路径,记录此更改。
- 运行相关测试——如果该 Bug 所属系统在引擎的测试根目录中有测试文件(Godot:
tests/,Unity:Assets/Tests/,Unreal:Source/<Module>/Private/Tests/—.claude/docs/directory-structure.md),则使用 Bash 和project.yaml中的commands.test运行测试;在运行器允许的情况下,将测试范围缩小到受影响的套件——绝不要凭记忆写运行器命令行,因为这样会漏掉引擎所需的标志(gdUnit4 若没有--remote-debug tcp://127.0.0.1:0就会挂起)——并报告通过或失败。若commands.test未设置 → 未运行测试:指出未设置的键,并继续步骤 3。 - 检查回归——在代码库中搜索是否出现了导致该 Bug 的模式。
- 手动验证——当没有运行相关测试时(没有测试覆盖该 Bug——在
qa.level免除测试时通常如此——commands.test未设置,或运行未完成),或 Bug 的 Category 为 Visual 或 UI(其外观没有自动化测试可检查)时,通过AskUserQuestion提问:「你是否已在包含此修复的构建版本上执行复现步骤(见 [bug file])?是哪个构建版本?」——[No longer occurs]/[Still occurs]/[Not played yet]。 按用户提供的内容记录回答和构建版本;代码路径已更改,绝不能视为用户的回答。 作为子 Agent 运行?qa-lead会预加载此技能,而子 Agent 没有AskUserQuestion。请以问题和三个选项的简短列表结束回复,暂不提供结论:调用你的人会询问用户,结论须等到收到回答后再给出。
给出验证结论:
- 已验证修复——所有适用检查均表明 Bug 已消失:任何相关测试都已运行并通过;且在步骤 4 提问时,用户已针对指定构建版本回答
[No longer occurs]。若未运行测试,则仅凭这次实际测试即可完成验证——这属于手动验证,并应记录为[user], manual, build [X]。仅代码路径已更改绝不算通过 - 仍然存在——相关测试在该 Bug 的案例中失败,或用户回答
[Still occurs];修复未能解决此问题 - 无法验证——步骤 4 的回答为
[Not played yet]:说明缺少什么或无法运行什么(没有相关测试、commands.test未设置、运行未完成、Bug 属于 Visual 或 UI),并说明实际执行复现步骤即可确定结果——执行后再次运行/bug-report verify [BUG-ID]
询问:「我可以更新 production/qa/bugs/[bug file],将 Status 设为 Verified Fixed / Still Present / Cannot Verify 吗?」——填写上文找到的文件名,不论其前导零数量或 slug。设置 Status 时,在其下方写入一行 **Verified by**::[test file(s)] — ran and passed;若为手动验证,则写入 [user], manual, build [X]。
如果为 STILL PRESENT:重新打开该 Bug,将 Status 设回 Open,并建议重新运行 /hotfix [BUG-ID]。
阶段 2D:关闭模式
按照 verify 模式中的编号读取 bug 文件。关闭前确认 Status 为 Verified Fixed。如果状态不是该值,则停止并提示:“关闭 Bug [ID] 前,必须先将其标记为 Verified Fixed。请先运行 /bug-report verify [BUG-ID]。”
显示下方的关闭记录和 Status 更改,然后询问:“可以将 production/qa/bugs/[bug file] 更新为 Closed 吗?”在获得肯定答复前,不得写入任何内容;如果用户回答否,则停止——该 bug 保持 Verified Fixed 状态。
如果用户回答是,则将关闭记录追加到 bug 文件中:
## Closure Record
**Closed**: [date]
**Resolution**: Fixed — [one-line description of what was changed]
**Fix commit / PR**: [if known]
**Verified by**: [the verify record's `**Verified by**:` line — the test that ran and passed, or "[user], manual, build [X]"]
**Closed by**: [user]
**Regression test**: [test file path, or "Manual verification" when verify recorded a manual play]
**Status**: Closed
然后将顶层的 **Status**: 字段更新为 **Status**: Closed。
关闭后,检查 production/qa/bug-triage-*.md — 如果该 bug 出现在未关闭的分类报告中,提示:“Bug [ID] 在分类报告中有引用。请运行 /bug-triage 以刷新未关闭 bug 的数量。”
阶段 3:保存报告
向用户展示已完成的 bug 报告。
在询问前分配 ID: Glob production/qa/bugs/BUG-*.md,取最大编号并加 1,补零至四位数(若没有文件,则使用 BUG-0001)。一次运行中有多份报告(分析模式)时,从该编号开始依次分配连续 ID,每份一个 — 绝不重复使用同一 ID。
询问:“可以将其写入 production/qa/bugs/BUG-[NNNN].md 吗?”如果有多份报告,只询问一次并列出所有文件:“可以将这些报告写入 production/qa/bugs/BUG-[NNNN].md、production/qa/bugs/BUG-[NNNN+1].md、……吗?”
如果用户回答是,则写入文件;如有需要,创建目录。判定:COMPLETE — bug 报告已归档。
如果用户回答否,则在此停止。判定:BLOCKED — 用户拒绝写入。
阶段 4:后续步骤
保存后,根据模式提出建议:
归档后(描述/分析模式):
- 运行
/bug-triage,与现有未关闭 bug 一起确定优先级 - 如果是 S1 或 S2:运行
/hotfix [BUG-ID],启动紧急修复工作流
修复 bug 后(开发者确认修复已完成):
- 运行
/bug-report verify [BUG-ID]— 确认修复确实有效后再关闭 - 未经验证,绝不将 bug 标记为已关闭 — 未通过验证的修复仍处于 Open 状态
verify 返回 CANNOT VERIFY 后:
- 在包含修复的构建版本上执行复现步骤,然后再次运行
/bug-report verify [BUG-ID]并回答其问题
verify 返回 VERIFIED FIXED 后:
- 运行
/bug-report close [BUG-ID]— 写入关闭记录并更新状态 - 运行
/bug-triage,刷新未关闭 bug 的数量,并将其从活动列表中移除