跳到正文
← 返回博客
LEARNING / 学习

一条被 continue 绕过的 Kill 条件检查

从一处不可达分支出发,重新划分保存时提示、结构门禁和任务结束后的结果验证。

一条规则已经写进代码,不等于它真的会执行。

现有即时检查逻辑里,用于识别弱 Kill 条件的分支可能被前面的控制流直接绕过。把代码压缩成等价结构,大致是:

如果一行包含 "Kill:":
    continue

如果 Kill 的内容是 "待定"、"unknown" 或过短:
    报告 weak_kill

第二个判断依赖这一行包含 Kill:,第一步却已经把这类行全部跳过。函数仍能正常返回,规则编号也确实存在,最需要被识别的弱值却到不了对应分支。

这把问题收得很窄:讨论规则应该多早失败之前,先证明检查分支真的可达。

一条存在于代码里、却可能永远不执行的规则

这个缺口不是规则理念问题,而是普通的控制流问题。设计目标可以正确,返回结构也可以完整,实际执行路径仍可能没有完成承诺。

更值得注意的是,现有历史黑盒案例中确实包含一项“弱 Kill 条件应失败”的检查,但它覆盖的是另一条完整验证路径。当前三份测试文件共 40 项,通过数量不能自动证明新增的即时规则入口也被覆盖。

这正好说明两种测试不能互相替代:

  • 历史案例回归保护已有入口的退出契约;
  • 针对即时规则的表驱动测试,才负责证明 continue 前后的具体分支。

40 项测试的证据范围在《四十项测试的证据账本》中单独展开。本文只处理规则入口、控制流和反馈时机。

同一条约束有三个生效时机

时机能取得的材料适合处理的问题不应承担的判断
保存或即时检查当前文本与局部结构缺少字段、弱值、数量上限、明确格式错误业务结果是否真实
提交或收敛完整任务结构与引用关系outcome、直接证据、状态转换是否合法外部命令是否成功
任务结束后test、lint、typecheck、人工验收代码或业务结果是否通过外部检查文本是否表达完整

即时反馈的价值不在于“越早越强”,而在于局部信息已经足够时尽早指出确定性问题。需要仓库、进程、数据库或人工观察的判断,仍然要留给后面的验证阶段。

这也是《把架构规则写进 AI 真正会经过的地方》与本文的分工:前者解释规则为什么要进入工程入口,本文检查进入代码后的规则是否真的执行。

五条现有规则分别属于哪一层

当前入口包含五项检查:

  1. 收敛阶段必须有 outcome;
  2. 收敛阶段必须出现直接证据;
  3. 观察或干预阶段的假设需要可证伪条件;
  4. 活跃假设超过五条时给出 warning;
  5. 互斥假设的概率总和不能超过容差。

前两项更接近结构门禁。第四项是认知负担的经验阈值,不应默认升级成业务硬约束。第五项只有在“互斥”关系定义正确时才有意义。

阶段识别本身也有两种来源:优先读取显式 phase,缺失时再根据 outcome、intervention、prediction 或 hypothesis 等字段启发式推断。后者能够兼容不完整输入,也会带来误分类可能。讨论文字里偶然出现这些词,不应被悄悄升级成正式阶段事实。

因此,一条即时结果至少要保留规则编号、严重级别、命中行和阶段来源。只返回 pass / fail,会把规则本身的不确定性藏起来。

先验证控制流,再讨论规则价值

第一批补测不需要继续增加规则数量,直接覆盖现有分支即可:

输入预期
Kill: unknown报告弱 Kill 条件
Kill: 待定报告弱 Kill 条件
Kill:报告缺失或过短
一个可明确证伪的完整条件不报告弱值
讨论文字中偶然出现 Kill不误判为正式字段

这些是根据控制流缺口提出的测试设计,不是当前套件已经通过的结果。

接入编辑器时,还可以先使用影子模式记录命中,不立即阻断。每次命中至少关联规则、脱敏片段、是否修改,以及后续任务级验证结果。只有这条信息路径存在,才能继续判断提前提示是否减少了后续失败。

这篇文章停在可达性

目前可以确认三件事:五条规则拥有独立 CLI 入口;弱 Kill 条件检查存在不可达风险;任务结束后另有 test、lint 和 typecheck 记录外部结果。

当前材料不能回答保存时调用延迟、真实误报率、命中后是否改变 outcome,也不能证明上表中的即时规则用例已经补齐。

所以本轮最先要修的不是阈值,也不是第六条规则,而是控制流与回归用例。一个从未执行的分支,不需要先争论它应该返回 warning 还是 error。