Files
sanguo_moziplus_v2/skills/review-quality.md
T
2026-05-27 00:10:01 +08:00

59 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
---
name: review-quality
description: >-
代码评审的最佳实践:闭环标准、枚举一致性、三层对照、自我纠正。
在执行代码评审、或准备提交评审时触发。
---
# Review Quality(评审质量)
> 来源:从司马懿 122 次纠正和庞统评审经验中蒸馏(卡片 1、2、3、4、5)
## 适用场景
- 执行代码评审时(作为评审者)
- 准备提交代码给评审者时(作为被评审者)
- 设计文档与代码实现的对齐验证
- 多方案并行开发时的闭环跟踪
## 模式清单
### 模式 1:一键三连闭环 — 文档→代码→最终代码确认
评审不是止于方案确认。完整闭环是三步:改文档(设计/方案)→ 改代码(实现)→ 评审者确认最终代码片段。"已采纳建议"不等于"已验证"——采纳后的代码可能引入新问题。评审者的确认必须是具体的(引用代码行号,确认与实际改动一致),不是笼统的"通过"。
> **Evidence**: 卡片 1 — 庞统让司马懿 review 了方案,但实现后没发最终代码确认。用户指出"一键三连最终肯定是以司马懿 review 完最终成果物收尾的"。卡片 5 — 状态跟踪表应包含三列:方案评审 / 最终代码确认 / 状态。
### 模式 2:枚举值一致性审查 — 零容忍硬编码字符串
状态机/枚举值不一致是高频 Bug 根源。审查时重点检查:新代码中的状态值是否从枚举定义取值(硬编码字符串零容忍)、状态转换是否只有一个入口函数(如 `_transition_status`)、所有 spawn/查询/恢复路径是否使用相同的枚举引用。发现不一致时标记为 high severity。
> **Evidence**: 卡片 2 — `get_all_executing_tasks` SQL 用 `'executing'` 但实际枚举是 `'working'`,导致重启恢复遗漏 working 节点(P0-2)。`max_per_agent=2` vs 设计文档的 `1` 也是同类问题。
### 模式 3:三层对照审查 — PRD→设计→代码逐条覆盖
每次代码评审前,先对设计文档逐条检查实现覆盖度。设计文档用明确编号(§B1/B2/B3)便于逐条追踪。评审者的核心职责就是做这种三层对照:PRD 要求了什么 → 设计文档怎么规划的 → 代码实现了多少。遗漏一个章节就等于功能缺失。
> **Evidence**: 卡片 4 — spawner-monitor 设计文档 §B2compact 进行中继续等)在代码中完全遗漏,直到庞统重新读设计文档才暴露。庞统专门发 #311 邮件请求"PRD→设计→代码三层一致性审查"。
### 模式 4:自我纠正机制 — 承认误判比坚持错误更有价值
评审中发现自己的判断有误时,主动发出修正并明确标注。交叉验证是发现误判的有效手段:翻回设计文档对照,看代码实际行为 vs 自己的判断。庞统和司马懿在同一次评审中都做了自我纠正——这说明交叉验证机制在工作。修正保留审计轨迹,不能静默修改。
> **Evidence**: 卡片 3 — 庞统修正"建议删除 recent_compact"为"设计文档明确要求";司马懿回复"你说得对,我判断错了"。
### 模式 5:评审前验证实测数据,不接受"应该是"
涉及外部命令输出解析、API 返回结构、配置文件内容时,评审者应要求看到实测输出样例,而非接受代码中的假设路径。"从第一天就存在的根因 bug"往往源于解析路径是猜的而非验证的。评审时把"需实测验证"作为一条显式检查项。
> **Evidence**: 卡片 1 — 司马懿多次在代码评审中发现方案评审没暴露的 Bug(如 `_do_retry` 续杯失效),靠的是看最终代码而非方案描述。卡片 2 — auto-sync 可能静默修改配置文件,需要与设计文档对照验证。
## 检查清单
- [ ] 方案评审通过后,是否安排了最终代码确认环节?
- [ ] 状态/枚举值是否全部从集中定义取值,无硬编码字符串?
- [ ] 设计文档是否逐条(按编号)检查了实现覆盖度?
- [ ] 发现自己判断有误时,是否主动发出了修正?
- [ ] 外部输出解析路径是否提供了实测样例验证?
- [ ] 评审结论是否具体到代码行号,而非笼统"通过"?
- [ ] 所有 spawn/查询/恢复路径是否覆盖了新功能的参数传递?