社区 Issue 处理规范
1. 目标
建立高效、透明、友好的 Issue 协作机制,确保用户反馈(Bug、需求、疑问)得到及时响应与闭环处理,提升社区。满意度和项目质量。
2. 处理 SLA(服务等级协议)
SLA 定义了从 Issue 创建到关闭的各阶段时间要求。所有社区管理员、Committer 及 Maintainer 需共同遵守。
| 等级 | 定义 | 首次响应时间 | 处理/解决时间 | 适用场景 |
|---|---|---|---|---|
| P0 (致命) | 核心功能崩溃、数据丢失、安全漏洞、生产环境阻断 | < 12小时 | < 17天 | 全系统宕机、严重安全漏洞、影响范围极广的故障 |
| P1 (严重) | 主要功能异常、无临时解决方案、影响大部分用户 | < 24小时 | < 25天 | 非致命但阻断业务流程、API 严重报错 |
| P2 (一般) | 非核心功能异常、有临时绕过方案、影响小部分用户 | < 48小时 | < 35天 | 界面显示错位、次要功能不可用、文档错误 |
| P3 (提示) | 优化建议、新功能请求、一般性疑问 | < 48小时 | < 45天 (或纳入 Roadmap) | UI 体验优化、新特性提议、非紧急咨询 |
注:
- 首次响应:指由官方成员(Member/Committer)回复"收到"、"正在查看"或打上正确标签。
- 工作时间:通常定义为 UTC+8 09:00 - 18:00(可根据社区成员分布调整)。
2.1 SLA 违规处理
| 违规类型 | 触发条件 | 处理措施 |
|---|---|---|
| 首次响应超时 | 超过 SLA 首次响应时间 | 机器人自动 @值班管理员,发送预警通知 |
| 处理超时 | 超过 SLA 解决时间 | 自动升级优先级,@技术负责人介入 |
| 长期未更新 | 14 天无任何活动 | 标记 stale,询问是否仍需处理 |
| 长期搁置 | 30 天无响应 | 自动关闭,用户可随时重新打开 |
3. Issue 处理流程
整个生命周期分为五个阶段:提交 → 受理 → 处理 → 验收 → 关闭。
3.1 流程图
graph TD
A[用户提交 Issue] --> B{机器人/管理员初筛};
B -->|缺少信息/格式错误| C[标记: pending/Invalid<br>通知用户补充];
C -->|用户补充| B;
B -->|符合规范| D[标记: triage<br>打上分类标签];
D --> E{核心维护者评估};
E -->|Bug/缺陷| F[标记: confirmed/Bug<br>分配优先级 P0/P1/P2];
E -->|功能请求| G[标记: enhancement/Feature<br>进入需求池];
E -->|重复问题| H[标记: duplicate<br>关联原Issue并关闭];
E -->|非项目范围| I[标记: invalid/Wontfix<br>解释原因并关闭];
F --> J[指派负责人/认领];
J --> K[标记: in-progress<br>开发/修复];
K --> L[提交 PR 关联 Issue];
L --> M{代码审查与测试};
M -->|通过| N[合并代码];
M -->|驳回| K;
N --> O[发布版本/部署];
O --> P[在 Issue 中更新版本号];
P --> Q[关闭 Issue];
subgraph 待办区
G
end
3.2 状态流转说明
graph LR
A[提交 Issue] --> B[triage 待初筛]
B -->|信息不完整| C[pending 等待补充]
C -->|用户补充信息| B
B -->|确认有效| D[confirmed 已确认]
B -->|无效/无法复现| E[invalid 无效]
B -->|重复问题| F[duplicate 重复]
D -->|开始处理| G[in-progress 处理中]
G -->|PR 被拒| D
G -->|修复完成| H[关闭]
E --> H
F --> H
3.3 详细步骤说明
3.3.1 提交阶段
- 用户必须使用规定的 Issue 模板提交。
- 机器人自动检查:是否包含必填字段(如版本号、日志、复现步骤)。
3.3.2 受理阶段 (Triage)
- 由 Triage 角色(社区经理或值班维护者)在 SLA 规定时间内 完成初筛。
- 主要工作:检查合规性、去重、打标签(Label)、确定优先级(Priority)。
3.3.3 处理阶段
- 指派:根据标签指派给相应模块的 Maintainer 或开放给社区成员认领。
- 关联:如果是代码缺陷,修复时必须关联 Pull Request (PR)。
- 进度更新:超过 3 天未更新的 Issue,机器人自动评论提醒;超过 7 天无响应,按"超时冻结"处理。
3.3.4 验收与关闭
- 自动化关闭:PR 合并后,如果包含
fixes #123关键词,Issue 自动关闭。 - 手动关闭:如果是无效 Issue,由管理员关闭并注明原因。
- 用户确认:对于复杂 Bug,修复后应由提交者验证确认后关闭。
4. Issue 分类及模板要求
为了便于自动化统计和检索,所有 Issue 必须使用模板,并规范打标签。
4.1 标签体系 (Labels)
建议预置以下四类标签,并配置对应颜色以增强视觉识别:
| 类别 | 标签名称 | 说明 | 推荐颜色 |
|---|---|---|---|
| 类型 | bug |
缺陷,程序错误 | d73a49 (红色) |
enhancement |
现有功能的增强/优化 | a2eeef (青色) |
|
feature |
新功能请求 | 0075ca (蓝色) |
|
question |
咨询/疑问 | fbca04 (黄色) |
|
documentation |
文档相关 | 0e8a16 (绿色) |
|
refactor |
代码重构(行为不变,优化内部结构) | 7057ff (紫色) |
|
engineering |
工程化改进(构建、测试、CI/CD、依赖升级等) | 5319e7 (深紫) |
|
| 状态 | triage |
待初筛 | ededed (灰色) |
confirmed |
已确认为有效 Issue | 128a0c (深绿) |
|
in-progress |
处理中 | ff7b00 (橙色) |
|
pending |
等待提交者补充信息 | d4c5f9 (浅紫) |
|
invalid |
无效(格式错误、无法复现) | e4e4e4 (浅灰) |
|
duplicate |
重复 | cfd3d7 (银灰) |
|
stale |
长期未更新 | 9e9e9e (中灰) |
|
| 优先级 | priority/critical |
P0 | b60205 (深红) |
priority/high |
P1 | e11d21 (亮红) |
|
priority/medium |
P2 | fbca04 (黄色) |
|
priority/low |
P3 | 009800 (绿色) |
|
| 模块 | module/ui |
UI 模块 | 84b6eb (浅蓝) |
module/api |
API 模块 | 5319e7 (深紫) |
|
module/core |
核心模块 | 1d76db (蓝色) |
|
module/component |
组件 | 0e8a16 (绿色) |
4.2 Issue 模板要求
在项目根目录创建 .gitcode/ISSUE_TEMPLATE/ 文件夹,至少提供以下五个核心模板:
模板 1:Bug 报告
---
name: 🐞 缺陷反馈|Bug Report
description: 当您发现了一个缺陷,需要向社区反馈时,请使用此模板。
title: "[Bug]: 【等级:严重/一般/提示】【分类:稳定性/性能/功能/工程/工具】【RNOH版本】【组件】【属性】问题描述"
labels: ["bug", "triage"]
type: "缺陷"
body:
- type: markdown
attributes:
value: |
感谢对RN社区的支持与关注,欢迎反馈缺陷。
- type: textarea
id: problem
attributes:
label: 发生了什么问题?
description: 提供尽可能多的信息描述产生了什么问题。
placeholder: |
1、可提供截图或视频来更清晰地说明发生的行为。
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: 期望行为是什么?
description: 描述期望的行为应该是什么样子的。
placeholder: |
1、可提供截图或视频来更清晰地说明期望的行为。
2、如果期望行为与当前行为不同,请详细说明差异。
validations:
required: true
- type: textarea
id: defect-reproduction
attributes:
label: 如何复现该缺陷?
description: 提供尽可能多的信息描述如何复现该缺陷。
placeholder: |
【预置条件】
【测试步骤】
validations:
required: true
- type: input
id: version
attributes:
label: React Native OpenHarmony 版本。
description: 请提供您使用的React Native OpenHarmony版本信息。
placeholder: "0.72.48"
validations:
required: true
- type: textarea
id: react-native-info
attributes:
label: 涉及编译环境信息,请补充。
description: 在您的终端中运行 `npx @react-native-community/cli info`,然后将结果粘贴到这里。
placeholder: |
请在此处粘贴 `npx @react-native-community/cli info` 的输出结果。 如下所示:
...
System:
OS: macOS 14.1.1
CPU: (10) arm64 Apple M1 Max
Memory: 417.81 MB / 64.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node: ...
version: 22.14.0
...
render: text
validations:
required: true
- type: textarea
id: stacktrace
attributes:
label: 堆栈跟踪或日志
description: 请提供崩溃或故障的堆栈跟踪或日志。
render: text
placeholder: |
请在此处粘贴堆栈跟踪或日志。它们可能看起来像这样:
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libfabricjni.so caused by: com.facebook.react.fabric.StateWrapperImpl result: 0
at com.facebook.soloader.SoLoader.g(Unknown Source:341)
at com.facebook.soloader.SoLoader.t(Unknown Source:124)
at com.facebook.soloader.SoLoader.s(Unknown Source:2)
at com.facebook.soloader.SoLoader.q(Unknown Source:42)
at com.facebook.soloader.SoLoader.p(Unknown Source:1)
...
validations:
required: true
- type: textarea
id: other-info
attributes:
label: 其他补充信息
description: 补充下其他您认为需要提供的信息。
render: text
placeholder: |
1、如果您有复现问题的公共仓库的链接,可提供链接。
2、如果您认为该缺陷与特定的设备、操作系统版本或其他环境因素相关,请提供相关信息。
3、如果您已经尝试过某些解决方法或绕过方法,请描述它们以及它们的效果。
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: 提交前检查清单
description: 请在提交 Issue 前确认以下事项
options:
- label: 搜索现有 Issue,避免重复提交
required: true
- label: 使用正确的 Issue 模板
required: true
- label: 提供清晰的复现步骤(Bug 类)
required: false
- label: 附上相关日志、截图或代码片段
required: false
- label: 说明环境信息(操作系统、版本号等)
required: true
- label: 检查标题是否清晰且包含类型前缀
required: true
模板 2:功能请求
---
name: 💡 新需求|Feature
description: 您需要反馈或实现一个新需求时,使用此模板。
title: "[新需求]: "
labels: ["feature", "triage"]
type: "需求"
body:
- type: markdown
attributes:
value: |
感谢提出新需求。
- type: textarea
id: feature-description
attributes:
label: 新需求提供了什么功能?
description: 请描述下新需求的功能是什么,解决了什么问题?
validations:
required: true
- type: textarea
id: feature-solution
attributes:
label: 新需求建议方案。
description: 请描述下您对需求方案的想法。
placeholder: |
1、如果您有具体的设计方案或实现方案的想法,可以在这里描述。
validations:
required: false
- type: textarea
id: feature-value
attributes:
label: 该需求带来的价值、应用场景?
description: 请描述下该需求的价值,应用场景等。
validations:
required: false
- type: textarea
id: other—info
attributes:
label: 其他补充信息
description: 补充下其他您认为需要提供的信息。
render: text
placeholder: |
1、如果您有其他相关信息或想法,可以在这里补充说明。
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: 提交前检查清单
description: 请在提交 Issue 前确认以下事项
options:
- label: 搜索现有 Issue,避免重复提交
required: true
- label: 使用正确的 Issue 模板
required: true
- label: 提供清晰的描述和必要的细节
required: true
- label: 检查标题是否清晰且包含类型前缀
required: true
模板 3:咨询
---
name: ❓ 使用咨询|Question
description: 如果您对RN社区有疑问,欢迎反馈咨询。
title: "[Question]: "
labels: ["question"]
type: "咨询"
body:
- type: markdown
attributes:
value: |
感谢提出问题,我们将安排人答复!
- type: textarea
id: question-description
attributes:
label: 问题描述
description: 请描述下您遇到的问题
placeholder: |
【背景】我正在尝试做 [...]。
【问题描述】我遇到了 [...]。
【尝试解决方法】我尝试了 [...],但没有成功。
【相关代码/日志】如果有相关的代码片段或者日志信息,可以在这里提供。
validations:
required: true
- type: textarea
id: react-native-info
attributes:
label: 涉及编译环境信息,请补充。
description: 在您的终端中运行 `npx @react-native-community/cli info`,然后将结果粘贴到这里。
placeholder: |
请在此处粘贴 `npx @react-native-community/cli info` 的输出结果。 如下所示:
...
System:
OS: macOS 14.1.1
CPU: (10) arm64 Apple M1 Max
Memory: 417.81 MB / 64.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node: ...
version: 22.14.0
...
render: text
validations:
required: false
- type: textarea
id: other-info
attributes:
label: 其他补充信息
description: 补充下您尝试解决的方法或者其他相关信息。
render: text
placeholder: |
1、如果您尝试过解决方法,可以在这里补充相关代码或者日志。
2、如果您有其他相关信息或想法,可以在这里补充说明。
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: 提交前检查清单
description: 请在提交 Issue 前确认以下事项
options:
- label: 搜索现有 Issue,避免重复提交
required: true
- label: 使用正确的 Issue 模板
required: true
- label: 提供清晰的描述和必要的细节
required: true
- label: 检查标题是否清晰且包含类型前缀
required: true
模板 4:重构(Refactor)
---
name: 🔧 代码重构
about: 优化代码结构,不改变外部行为
description: 如果您对RN社区有重构建议,欢迎反馈咨询。
title: "[Refactor]: 简短描述重构内容"
labels: ["refactor", "triage"]
type: "重构"
body:
- type: markdown
attributes:
value: |
感谢对RN社区的支持与关注,欢迎反馈。
- type: textarea
id: refactor-description
attributes:
label: 代码重构描述
description: 请描述下您觉的需要代码重构的背景与动机。
placeholder: |
【重构原因】请描述下您觉得需要重构的原因是什么?是为了提升性能、改善代码结构、增加可维护性还是其他原因?
validations:
required: true
- type: textarea
id: refactor-content
attributes:
label: 代码重构涉及内容与验证
description: 请提供涉及的模块与测试计划。
placeholder: |
【涉及模块】列出受影响的文件或模块。
【验证计划】描述您计划如何验证重构的效果,例如通过单元测试、性能测试等。
【预期效果】描述重构后预期达到的效果,例如性能提升、代码可读性增强等。
validations:
required: true
- type: input
id: version
attributes:
label: React Native OpenHarmony 版本。
description: 请提供您使用的React Native OpenHarmony版本信息。
placeholder: "0.84.1"
validations:
required: true
- type: textarea
id: other-info
attributes:
label: 其他信息
description: 如果您有其他具体的重构建议或者想法,可以在这里描述。
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: 提交前检查清单
description: 请在提交 Issue 前确认以下事项
options:
- label: 搜索现有 Issue,避免重复提交
required: true
- label: 使用正确的 Issue 模板
required: true
- label: 提供清晰的描述和必要的细节
required: true
- label: 检查标题是否清晰且包含类型前缀
required: true
模板 5:工程(Engineering)
---
name: 🛠️ 工程化改进|Engineering
about: 改进构建、测试、CI/CD、依赖管理等
title: "[Engineering]: 简短描述工程化改进内容"
labels: ["engineering", "triage"]
type: "工程化改进"
body:
- type: markdown
attributes:
value: |
感谢提出工程化改进建议,我们将安排人进行改进!
- type: textarea
id: engineering-description
attributes:
label: 工程化改进描述
description: 请描述下您觉得需要工程化改进的地方。
placeholder: |
【改进原因】请描述下您觉得当前工程方面存在的问题或痛点(例如:构建速度慢、测试不稳定、CI 流程缺失)?
validations:
required: true
- type: textarea
id: engineering-content
attributes:
label: 工程化改进涉方案与验证
description: 请提供涉及的模块与测试计划。
placeholder: |
【改进方案】描述具体要实施的改动,如升级依赖、增加 CI job、优化 Dockerfile 等。
【影响范围】列出受影响的工具链、流程或开发者。
【验证方式】说明如何验证改进有效(如 CI 通过时间缩短、测试成功率提升)。
validations:
required: true
- type: input
id: version
attributes:
label: React Native OpenHarmony 版本。
description: 请提供您使用的React Native OpenHarmony版本信息。
placeholder: "0.84.1"
validations:
required: true
- type: textarea
id: other-info
attributes:
label: 其他信息
description: 如果您有其他具体的重构建议或者想法,可以在这里描述。
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: 提交前检查清单
description: 请在提交 Issue 前确认以下事项
options:
- label: 搜索现有 Issue,避免重复提交
required: true
- label: 使用正确的 Issue 模板
required: true
- label: 提供清晰的描述和必要的细节
required: true
- label: 检查标题是否清晰且包含类型前缀
required: true
5. 角色与职责
| 角色 | 职责 |
|---|---|
| 用户 (Reporter) | 使用规范模板提交 Issue,配合提供信息,验证修复结果 |
| Triage 人员 | 负责初筛、打标签、分配优先级、确保 SLA 达标 |
| 维护者 (Maintainer) | 确认 Issue 有效性,指派责任人,合并修复 PR,关闭 Issue |
| 贡献者 (Contributor) | 认领 Issue,提交 PR 关联 Issue,遵守代码规范 |
6. 最佳实践
6.1 提交 Issue 前的检查清单
- 搜索现有 Issue,避免重复提交
- 使用正确的 Issue 模板
- 提供清晰的复现步骤(Bug 类)
- 附上相关日志、截图或代码片段
- 说明环境信息(操作系统、版本号等)
- 检查标题是否清晰且包含类型前缀
6.2 处理 Issue 的建议
- 快速响应:即使无法立即解决,也要在 SLA 内给出首次响应
- [WIP] 标记:处理中 Issue 应标记
in-progress或标题加[WIP] - 关联 PR:修复 PR 必须使用
fixes #xxx或closes #xxx关键词 - 版本记录:修复完成后,在 Issue 中注明修复版本号
- 超时提醒:利用 GitHub Actions 设置自动超时提醒机制
- 友好沟通:即使是拒绝请求,也要给出清晰的解释和替代方案
6.3 常见场景处理指南
| 场景 | 处理建议 | 示例回复 |
|---|---|---|
| 信息不完整 | 标记 pending,明确指出缺少的信息 |
"感谢反馈!为了更好地定位问题,请补充以下信息:1. 完整的错误日志 2. 复现步骤" |
| 重复问题 | 标记 duplicate,关联原 Issue |
"这个问题已在 #123 中讨论,请关注原 Issue 的进展" |
| 非项目范围 | 标记 invalid,解释原因并建议替代方案 |
"这个功能不在本项目范围内,建议使用 XXX 库来实现" |
| 需求合理但暂不排期 | 标记 enhancement,纳入 Roadmap |
"感谢建议!这个功能已纳入 Roadmap,预计在 Q3 实现" |
| 用户提交了修复 | 感谢并引导 PR 流程 | "感谢贡献!请提交 PR 并关联此 Issue,我们会尽快 Code Review" |
6.4 社区沟通礼仪
- 保持尊重:无论 Issue 质量如何,都要以友好的态度回应
- 及时更新:处理过程中定期更新进度,让用户感知到进展
- 鼓励贡献:对于愿意提交 PR 的用户,提供必要的指导
- 记录决策:重要的技术决策应在 Issue 中留下记录,便于后续追溯
- 避免拖延:如果无法及时处理,应说明原因并给出预计时间
6.5 机器人自动化建议
推荐配置以下自动化规则:
| 触发条件 | 自动操作 |
|---|---|
Issue 标题不包含 [Bug]/[Feature]/[Question]/[Refactor]/[Engineering] |
评论提醒使用模板 |
| 3 天无更新 | 自动评论提醒 |
| 7 天无更新 | 标记 stale,可能自动关闭 |
| 14 天无响应 | 自动关闭,用户可重新打开 |
PR 合并包含 fixes #xxx |
自动关闭对应 Issue |
| 新 Issue 提交 | 自动打 triage 标签 |
Issue 包含 help wanted |
自动推送到社区贡献者群 |
7. 附则
本规范自发布之日起生效。
对于恶意刷 Issue、发表不当言论、提交广告的行为,管理员有权直接关闭并封禁账号。
规范解释权归社区委员会所有,并可根据项目发展阶段进行修订。