# 模块 6:变更证据链与可追溯说明
AI 可以帮助定位和实现,但不能替代研发交付中的说明责任。 一次改动是否值得合入,取决于阅读者能否快速判断:改了什么、为什么改、验证到哪里、还存在哪些边界。
目标
范围
证据
边界
--- # PR 模板不等于证据链
| PR 模板解决什么 | 证据链解决什么 | |---|---| | 让评审者快速阅读改动说明 | 让每条结论回到可核对的事实 | | 组织目标、实现、测试和风险 | 关联需求、diff、测试、CI、日志与人工观察 | | 呈现本次交付 | 支撑结论强度与后续排查 | | 可以由 AI 协助起草 | 必须由真实记录持续校验 |
PR 是阅读入口;证据链是结论能够被复核的依据。
--- # 一条变更证据链包含什么?
| 证据节点 | 能支持的判断 | 不能替代的判断 | |---|---|---| | 需求与规则 | 改动目标、约束和非目标 | 实现已正确运行 | | diff 与代码阅读 | 修改范围、调用关系与关键分支 | 线上或全链路行为 | | 自动化测试 | 对应方法、接口或场景的行为 | 未覆盖路径的行为 | | CI 结果与日志 | 构建、检查和已运行用例的结果 | 所有环境和业务风险 | | API、浏览器或人工观察 | 特定环境下的真实交互结果 | 未观察到的条件组合 | | 已知边界 | 仍需确认的依赖与缺口 | 已完成验证的替代结论 |
--- # 用证据地图连接结论
需求与规则
->
diff 与关键代码
->
测试与 CI
->
技术结论
每个结论都能回指来源
每项证据都有适用边界
缺口不能被推断补全
--- # 技术结论要和证据强度匹配
| 信息类别 | 可以形成的结论 | 常见误区 | |---|---|---| | 代码阅读 | 已定位到调用入口、状态写入点或权限判断 | 把源码推断当作线上运行结论 | | 实际变更 | 本次修改了哪些文件、条件和分支 | 用“优化”“完善”等词掩盖改动范围 | | 自动化验证 | 已覆盖某个方法、接口或用例 | 用局部测试替代全链路验证 | | 待确认事项 | 业务规则、外部调用、环境差异仍需核对 | 用“应该没有影响”替代事实 |
证据能支持多大的结论,就只写多大的结论。
--- # 证据丢失时,结论也会失效
| 缺失的证据 | 常见后果 | 正确处理 | |---|---|---| | 原始 CI 日志 | 无法判断失败来自代码还是环境 | 保留失败阶段、原始错误与关联链接 | | 已执行命令与结果 | “已测试”无法复核 | 记录命令、环境和结果摘要 | | 需求或规则依据 | 不清楚为什么改、是否越界 | 关联明确的约束与非目标 | | diff 与关键位置 | 无法核对实际影响范围 | 说明模块、入口和关键条件 | | 未覆盖边界 | 被误解为全量验证 | 明确写出待确认项和原因 |
没有证据的“已完成”,在工程上等同于不可审查的结论。
--- # 一份可审查的改动说明
```md ## 改动目标 解决什么业务问题或风险,并关联需求或规则依据。 ## 实现范围 涉及的模块、入口和关键判断;明确未修改的相邻范围。 ## 验证证据 已执行的测试、检查项、CI 或实际观察,以及对应结果。 ## 已知边界 尚未覆盖的场景、依赖的前提和需要业务确认的事项。 ```
避免:功能已完成、已充分测试
写清:已覆盖范围与未覆盖范围
--- # 让 AI 产出成为工程知识
| 只保留对话 | 留下可追溯说明 | |---|---| | 结论散落在窗口和临时文件里 | 关键结论随代码或 PR 一起保存 | | 难以判断 AI 建议是否被采纳 | 清楚说明人工选择了什么、舍弃了什么 | | 后续排查需要重新理解上下文 | 可直接定位目标、范围、证据和边界 | | 相同问题容易重复分析 | 可复用判断方式,但重新核对项目事实 |
AI 的价值不止是更快产出代码,也包括留下经得起复核的技术结论。