用工程环境提高交付质量
让知识可发现,让关键约束和结果可验证。
对应资料:Harness Engineering [S065]
沿着对象与状态理解本章
先写出要守住的行为,再用会失败的反例证明确实需要修改。测试通过必须绑定被测代码版本;之后再改文件,旧绿色结果不再证明当前交付。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
测试是找反例,不是给代码盖绿章
为什么“测试都通过”仍可能交付错东西?
测试只能验证它实际检查的行为和版本。一条只断言“不报错”的测试无法证明排除规则正确。好的测试围绕需求构造能击中错误的输入;代码修改以后,旧绿色结果也不再自动属于新版本。
输入与适用条件:构造的文件筛选任务;通配符语义须由需求明确,不在动画里偷偷改变“匹配文件名”与“匹配完整路径”的规则。
1 / 6 · 明确需求
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
不先说匹配对象与目录语义,无法判断哪个输出才正确。
本步状态由图形与说明共同给出。默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
减少返工和虚假完成,而非让审查循环无限增长。
怎样实现
围绕可观察行为、反例和当前版本组织验证。
可能的代价与误解
测试与实现共用同一错误假设、只测顺利路径、频繁审查无实际修复。
如何判断是否做对
故意引入一处已知错误,测试应失败;恢复后再通过。
让代码环境成为可靠的信息与反馈系统
本篇对应Harness Engineering。模型能力之外,仓库知识是否可发现、工具是否清晰、测试是否能运行,都会影响最终交付。官方文章提供特定团队经验,不是通用效率承诺。[S065]
原创对照:项目A只有一句“严格遵守规范”;项目B提供模块入口、路径约定、可运行测试与重要边界。后者给出可操作证据,而不是要求模型凭空理解。
把规则放在合适位置
全局入口提供地图,模块文档提供局部事实,Skill提供专业方法,测试和静态检查落实稳定约束。相同规则复制在多处会产生冲突,需要明确权威来源。[S122][S139]
不是所有规则都应写成强制检查。约束稳定且违反后果严重时适合自动化;需要情境判断时保留原则与证据,避免把复杂问题硬编码为脆弱规则。
从失败模式决定流程
简单Bug有明确复现与局部补丁时,可以快速修改验证。跨模块约定不清时,需要调查;高风险变更需要更强独立检查。固定Analysis→Task→Review并非对所有任务都最优。
代码审查应提高健康度,不因非关键不完美无限阻塞。小且明确的问题可以直接修复再验证,重要设计分歧再回到决策。[S136][S137]
长任务交接必须可恢复
交接保留目标、当前代码、已完成内容、验证与待办。文字说“功能完成”不足够,必须知道对应版本。任务恢复也不能盲目重复外部动作。[S130][S142]
原创例子:补丁已应用、测试未运行。新会话应先确认文件,再运行验证;不能重新应用补丁后声称重复执行就是更安全。
工程机制也要接受回归测试
Prompt、工具、上下文裁剪和模型配置都可能改变质量。官方产品复盘表明Harness调整也会造成回退,因此长任务、压缩、恢复和边界任务需要覆盖。[S141]
完成本篇后,应该能对每项规则回答:防什么错误、有没有证据、执行成本多少、模型或环境变化后是否仍需要。
继续深入:第6章 · 真实编码Agent 或阅读拓展阅读目录6.3的逐项讲义。所有链接均为本地内容。
把“支持exclude”变成可以验收的输入输出表
输入与条件。需求:exclude=["a"]时不构建a及其子目录,但ab仍参与;空exclude不改变原行为。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1正常路径 | 输入a、a/x | 预期均排除。 |
| 2相邻反例 | 输入ab/x | 预期保留,区分目录边界与字符串前缀。 |
| 3空集合 | exclude=[] | 所有原候选仍按原规则处理。 |
| 4异常条件 | 路径是否规范化、大小写是否敏感 | 先查实际平台要求,不能凭空追加跨平台承诺。 |
| 5验收 | 对当前补丁运行这组行为测试 | 通过后再看是否有真实集成风险。 |
把过程连起来。验收不是“代码能运行”,而是覆盖能区分正确实现与常见错误实现的输入。
边界与反例。示例需求仅含声明条件;生产项目还需按真实目录、构建系统与用户约束补充。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。