跳到正文

缺陷报告 ​

维护者打开你的报告时,手里还有几十个同样的任务。报告的价值取决于它能省下多少轮来回追问。

信噪比 ​

用户比贡献者多几个数量级,贡献者又比维护者多一个数量级。这不是礼貌问题,是注意力分配问题:维护者的时间被严重超订,只能优先处理信息完整的报告。

一份能让维护者直接复现的报告,几乎一定会被处理;一份需要三轮追问才能确定版本和入口的报告,很容易沉底。写报告花的十分钟,通常能省掉双方几小时。

必备字段 ​

字段写什么反例
环境系统、版本、相关配置「最新版」
期望具体应该发生什么「应该能用」
实际报错原文、截图、退出码「报错了」
复现入口、角色、数据、点击顺序「点按钮」
已尝试排除过的原因和结果留空

期望和实际要分开写,不要用「不正常」概括。复现步骤具体到「以管理员登录后打开 /settings,点击 Submit」,比「点击按钮」有用一个量级。

bash
# 一次把环境信息给全
uname -a
node --version
npm ls --depth=0

最小复现 ​

最小复现是最有价值的附件。去掉无关依赖、配置和步骤,直到剩下的每一步都必要。

收集过程常常让你自己找到原因,因为每一次删除都在缩小假设空间。如果删到某一步问题消失,你就知道触发条件在哪。

markdown
**环境** macOS 15.2 / node 22.11.0 / pnpm 9.12
**期望** 导出结果包含空列
**实际** 空列被丢弃,行长度不一致
**复现** 导入附件 csv,执行 export,检查第 3 行
**已尝试** 换编码、升级到 main、关闭插件

不要只贴一屏终端输出。日志里真正有用的往往只有两三行,剩下的会让维护者自己去找。

搜索、跟进与披露 ​

  • 先搜 open 和 closed issue,重复就补充到原帖
  • 用 .github/ISSUE_TEMPLATE/bug_report.yml 的字段自查
  • gh issue list --search "关键词" 在终端里搜
  • gh issue create 按模板开单,字段不会漏
  • 等两周再礼貌跟进,不要每天 ping
  • 维护者多是志愿者,时区和你不同
  • 安全漏洞走私下渠道,先读 SECURITY.md
  • 常见披露窗口是 90 天,具体以项目政策为准
  • 贴日志前删掉 token、邮箱、内部主机名

me too 评论对定位问题没有贡献,只是给维护者增加未读。想推动进展,补充你的环境、版本和复现差异。

如果项目用 Git 管理,用 git bisect 找到引入问题的提交,能把一份报告直接变成修复线索,这比任何催促都有效。

从报告到修复 ​

维护者判断优先级的第一件事是能否复现。附带失败测试的报告比任何描述都强,因为它把复现步骤固化成了可执行文件。

  • 能写测试就写,测试名说明期望行为
  • 提供 git bisect 结果,指明引入问题的提交
  • 说明影响范围:多少用户、有没有临时绕过方案
  • 愿意自己提 PR 时,先在 issue 里说一声
  • 注明是回归还是一直存在,附上出错前后的版本
  • 用公开的最小仓库演示,不要依赖私有服务

报告里不必揣测修复方案。把现象和约束讲清,维护者更清楚哪种改法符合项目方向;猜错方向反而增加一轮解释成本。

复现环境尽量贴近项目支持的组合。用系统 Python 跑出的问题,可能在项目固定的虚拟环境里不存在,先按文档搭一遍再下结论。

报告之外 ​

问题修好之后回帖说明版本和验证结果,让后来人知道这个结论适用到哪。只留一句「已修复」,别人还得自己试。

  • 帮忙把重复 issue 合并到主帖
  • 把临时绕过方案写进项目文档
  • 补充平台差异,方便维护者判断范围
  • 参与 triage 是熟悉项目的好方式

贡献不只有代码。一条准确的复现记录,可能比一个匆忙的补丁更有价值。