目标
每个逃过评审的生产缺陷都藏着一堂关于评审的课——前提是无责地追溯。重建“更强的评审本该写的那条评论”,把模式晋升进清单,逃逸就成了校准数据;追责则会让人把变更藏到更少眼睛后面,数据从此失真。
步骤要点
- 分析每次逃逸的可评审性:判断修复 diff 在原 PR 里是否可见——bug 在场、测试缺失、风险未被点名,先分类再反馈。
- 重构更强评审的发言:对可达逃逸,基于原始 diff 写出一次彻底评审本该给出的具体评论。
- 以模式而非追责交付:把发现作为模式库更新分享给当事评审者——“以后要留意什么”,绝不做成谁漏了什么的记分卡。
- 模式晋升进评审提示:把复现的逃逸模式升入结构化清单或自动化,让教训活得比个人长。
- 跟踪逃逸类别趋势:监测对应类别在清单项落地后是否减少,验证闭环生效。
排错提示
反馈被当成打分评审者就开始躲,模式库的定位要在机制上写死;同一类逃逸年年重现说明教训没进清单,只讲给个人是复利缺失;模型评论要引用原 diff 的具体行,抽象说教没有校准价值。
适用边界
逃逸归因有事后偏见风险,“本该看见”不等于当时可合理看见,分类要有宽松裁决;部分缺陷本就不可评审发现(需求错、环境差),不可全部归入评审责任。
代码示例
escape: INC-3088 (promo double-applied at checkout)
analysis:
fix diff: guard promo state against concurrent
requests -- WAS visible in original PR #5102
tests present: single-thread only <- missable
classification: REVIEW-REACHABLE
model comment (from original diff):
"blocking: promo state is read-modify-write
with no idempotency guard; two fast clicks
= double discount. Needs a key + test."
delivery (blameless, pattern):
"new pattern in library: RMW state needs
an idempotency question on every PR"
checklist gains: [ ] read-modify-write state:
what happens on concurrent requests?
escape class trend: RMW concurrency --
Q2: 4 Q3: 1 Q4: 0