Files
lingxi/docs/工程规范/07-CodeReview与PR规范.md
T
Stev_Wang 75cedbe97b docs: 明确 Git 提交信息与 PR 标题使用中文
原 GIT-05 要求 subject 用英文祈使句,与团队实际书写习惯不符(已有提交均为
中文),且缺少中英混排与术语约定,容易写出 Chinglish、自造术语或中英标点混乱。

本次改动:
- GIT-05 改为「提交信息一律使用中文」,type / scope 保留英文小写,规定祈使句、
  字数(≤50 汉字 / 整行 ≤72 字符)与不加句末标点;
- 新增 GIT-21~GIT-23:中英文间加空格、使用全角标点与反引号、术语沿用 PRD 术语表、
  禁止 Chinglish 与无信息缩写;
- 新增 §2.2 commitlint 配置要点:中文必须关闭 subject-case、拦截中文句号,
  否则钩子校验实际无效;
- 同步 03(commit-msg 钩子说明)、07(PR-01 标题用中文)与 AGENTS §7 / §9 / 附录。

影响面:仅文档,无代码影响。新规则对后续提交生效,已推送的历史提交不改写
(GIT-15 禁止改写 main 历史)。
回滚方式:git revert 本提交。
2026-11-02 15:12:56 +08:00

130 lines
4.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 07 · Code Review 与 PR 规范
| 项 | 内容 |
| --- | --- |
| 文档版本 | V1.0(2026-11-02) |
| 依据 | 技术架构 §10.1(工程约定)、§4.6(CI/CD) |
| 适用范围 | 所有进入 `main` 的变更 |
| 强制级别 | 强制 |
---
## 1 PR 描述模板(缺项即打回)
```markdown
## 背景
为什么要改(关联 PRD R-xx / 技术架构章节 / issue)
## 改动
做了什么(按文件或模块列 3–6 条,不贴大段 diff)
## 影响面
- 受影响模块 / 端点 / 表 / 队列
- 是否影响存量数据、是否需要回填
- 是否影响权限、审计、成本
## 回滚方式
代码回滚 / 开关关闭 / 数据回滚,写清具体操作
## 验证证据
- 本地命令与结果(lint / typecheck / test)
- 关键截图或录屏(UI)/ 接口示例(API)
- 迁移在 staging 的执行结果
```
- `PR-01` 标题遵循 Conventional Commits 且**用中文**(Squash 时以 PR 标题为准,`scope` 保留英文,写法见 [01](01-Git规范.md) §2)。
- `PR-02` 变更 ≤ 400 行(不含 lock / 生成代码);超出拆分为多个 PR 并在描述写依赖顺序。
- `PR-03` 禁止在功能 PR 中混入无关重构、格式化、依赖升级。
- `PR-04` Draft PR 可用于早期讨论,但**不得**在 CI 未绿时请求 Review。
---
## 2 Review 分工
| 变更类型 | 要求 |
| --- | --- |
| 普通业务代码 | ≥ 1 名同模块 Owner |
| 数据库迁移 / 索引 / 数据回填 | **2 人**(含后端负责人) |
| 权限点 / 角色 / 数据范围 / RLS | **2 人**(含安全或技术负责人) |
| AI 路由 / 供应商 / 密钥 / 成本闸门 | **2 人**(含 AI 工程) |
| 导出 / 分享链接 / 对外公开路由 | **2 人**(含安全) |
| 发布配置 / CI / 基础设施 | **2 人**(含运维) |
| 仅文档 | 1 人(可为作者同组) |
- `PR-05` 作者不得自我批准;禁止「LGTM」式无内容批准。
- `PR-06` 首轮 Review 时效 24 小时内;作者负责推动,超过 48 小时升级到模块负责人。
- `PR-07` Review 意见分「必须改(blocking)/ 建议(non-blocking)」,作者逐条回复;未解决不得合并。
---
## 3 Review 检查清单(按序检查)
**正确性**
- [ ] 逻辑与 PRD 规则一致,边界(空 / 超限 / 并发 / 重试)已处理
- [ ] 状态机迁移合法,非法路径返回明确错误
- [ ] 异步任务幂等,失败可重试且不重复计费
**数据与隔离**
- [ ] 所有查询带 `customer_id`,Repository 接收 `ScopeContext`
- [ ] 无跨模块直接 `prisma.*`
- [ ] 迁移 expand/contract,索引与查询匹配,无 `SELECT *` / N+1
**安全与合规**
- [ ] 守卫链完整,特殊权限单独校验
- [ ] 无密钥 / Token / 签名 URL 进日志或响应
- [ ] 导出 / 分享 / 公开路由有签名、有效期、限流、留痕
- [ ] 审计埋点齐全(谁、何时、对什么、改前改后)
**接口与前端**
- [ ] 入参 Zod 校验,错误码取自常量
- [ ] UI 只用 Semi + 统一图标出口,无散落色值
- [ ] 权限守卫 + 403/404 页;URL 承载可分享状态
**质量**
- [ ] 命名、类型、错误处理符合 [02](02-代码风格.md)
- [ ] 测试覆盖必测清单([06](06-测试与CI规范.md) §2)
- [ ] 无 `eslint-disable` 新增;无 TODO 无主
- [ ] 文档 / OpenAPI / 变更记录同步更新
---
## 4 DoD(合并即完成的定义)
同时满足才可合并:
1. CI 全绿(含契约与集成),无豁免。
2. Review 通过,blocking 意见全部解决。
3. 文档同步:PRD 规则编号、技术架构、OpenAPI、本目录细则(如涉及)。
4. 迁移可回滚,或在描述说明为何不可回滚与前向修复方案。
5. 可观测性就位:关键路径有日志、有指标、失败有告警(如适用)。
6. 影响面与回滚方式已写清,release 记录已补。
---
## 5 合并与合并后
- `PR-08` 统一 **Squash Merge**,提交信息用 PR 标题 + 描述要点。
- `PR-09` 合并后删除分支;关注 CI 与错误率 15 分钟。
- `PR-10` 合并后发现缺陷:优先前向修复;影响面大则按回滚预案执行,并补一次复盘(写 `docs/releases/` 或 issue)。
- `PR-11` 禁止「合并后再补测试 / 再补文档」作为常态;确因紧急修复,须 24 小时内补齐并在 PR 记录追踪链接。
---
## 6 反模式(Review 直接打回)
| 反模式 | 原因 |
| --- | --- |
| 巨型 PR(> 800 行) | 无法有效 Review,缺陷率高 |
| 「顺手」重构无关模块 | 混淆影响面,增加回滚难度 |
| 用 `any` / `@ts-ignore` 绕过类型 | 把问题推到运行时 |
| 在 Controller 写业务规则 | 破坏分层,无法复用与测试 |
| 直接改 `status` 字段 | 绕过状态机,产生非法状态 |
| 同步接口里跑长任务 | 违反异步任务协议,超时不可控 |
| 硬编码阈值 / 客户 ID | 违反 PRD R-26 与客户隔离 |
| 无回滚方案的迁移 | 生产事故无法收敛 |