☰
《执行缝隙》作者手记 04|当我们终于找到五类关系之后
2026/10/2 12:49:41 网站建设 项目流程

本文是《执行缝隙》(The Execution Gap)的作者手记。 它不是书籍正文的摘要或重写,而是围绕本章问题、工程背景与写作之后的进一步思考。

写到第四章的时候,《执行缝隙》第一次开始出现一种看起来比较像“体系”的东西。

前面几章一直在拆。先拆掉“每一环都对,所以整体就应该对”的推论,再把“执行了”拆成提交、调用、状态、回执、结果和证据这些不能默认等同的对象,随后又把排查视线从组件内部移到对象之间。到了这里,一个不可避免的问题终于出现:既然偏差可能发生在对象之间,那么究竟有哪些关系值得检查?

如果这个问题不继续收窄,“关系”就会变成一个几乎没有工程意义的词。任何两个对象之间都可以找到某种联系,一个复杂系统里可以列出成百上千条关系,最后得到的只不过是另一张比组件清单更长的清单。

所以第四章需要做一件此前一直刻意没有做的事情:开始收敛。

但也正是在这里,我越来越意识到,理论开始形成结构以后,最大的风险有时不是“不够完整”,而是太早产生一种已经完整的错觉。

五类出现以后,最容易做错的事情就是给它们编号

第四章最终收敛出了五类直接机制族:判断与绑定关系失效、执行路径偏离、执行边界失效、执行状态与结果关系失效,以及因果链内证据与证明关系失效。

把这五个名字摆在一起以后,人几乎会本能地想做下一件事:编号。

M1、M2、M3、M4、M5。

然后给每个事故选一个标签,再做一张矩阵,统计每一类出现多少次。

这种做法非常符合工程和研究习惯,因为分类能够迅速降低复杂度。一旦一个现实问题被装进某个盒子,我们就会觉得自己已经比之前更接近答案。

但我最后没有这么做。

因为现实失败给我的感觉恰恰不是“五种故障互相独立”。

同一个事故里完全可能同时看到判断与动作之间的绑定失效,也看到边界没有阻止危险动作继续进入现实;执行路径可能发生偏离,而状态与结果之间的关系也同时出现问题;一份证据本身可能没有错误,却因为它后来获得了继续推动现实动作的资格,而进入另一段因果链。

如果一定要求每个案例只能落进一个类别,那么为了得到干净的分类,我们就不得不牺牲现实本身的复杂性。

而我越来越不愿意这样做。

理论的作用应该是帮助我们看清现实,而不是为了保持理论的整齐,让现实配合我们的表格。

所以这五类从一开始就不是五个互斥的标签。它们真正回答的问题更加有限:一次已经出现的偏差,是通过什么结构位置继续取得进入现实的条件的?

只要把问题限定在这里,五类才开始变得有用。

第一个让我真正警惕的,是“批准过”不等于“仍然批准这件事”

五类里面,我认为最容易被低估的是判断与绑定关系的失效。

因为现代系统已经非常习惯验证“有没有一个有效决定”。

有没有审批,有没有授权,有没有资格,有没有签名,有没有一个已经成立的策略判断,这些都已经做得非常成熟。

真正麻烦的是另外一个问题:

那个已经成立的东西,到执行发生的时候,还在约束同一个对象吗?

批准过一笔交易,不等于后来任何长得相似的交易都被批准;一个签名能够通过密码学验证,也不意味着这把密钥对当前对象、当前范围和当前时刻仍然具有对应资格;一个资格曾经有效,也不能因此自动扩展到另一个对象或者另一个运行环境。

这些情况的共同点不是“上游没有判断”。

恰恰相反,上游判断可能真实存在,而且完全合法。

断掉的是绑定。

这让我重新理解了很多我们过去习惯叫作“权限问题”的事情。权限系统通常回答的是一个主体是否拥有某种能力,但在真正进入执行之前,还存在另一层更细的问题:这份能力、这次批准、这个判断,究竟绑定的是谁、什么对象、什么参数、什么状态,以及什么范围。

如果这些绑定没有一起继续向下走,那么一个真实成立的上游对象,反而可能成为后续执行最有说服力的合法性来源。

这种情况比单纯“没有授权”更加难处理,因为所有人都能找到那份授权。

问题不是它不存在,而是它已经不再完整地指向眼前这件事。

路径和边界,看起来很像,实际上问的是两件事

写第四章时,我花了很多精力阻止另一种合并冲动:把执行路径和执行边界当成同一个问题。

它们确实很容易混在一起。

如果一个动作最终不应该发生,我们很自然会认为它一定“走错了路”;反过来,如果它走了一条未经预期的路径,我们又会认为“边界被突破了”。

可继续拆下去,两者问的其实不是同一个问题。

路径关心的是:这一次实际是怎么走到那里的。

有没有跳过步骤,是否进入了替代入口,执行主体是否被替换,顺序有没有改变,旧逻辑是不是被重新激活。

边界关心的则是:即使它已经走到这里,还有没有东西能够拒绝它。

一次动作完全可以沿着正常路径前进,但系统从一开始就没有设置足够的限制;也可以存在一个明确边界,只是它没有覆盖到真正危险的能力范围;甚至边界本身没有被“攻破”,只是设计时根本没有覆盖到这一类动作。

这一点对我后来理解执行控制非常重要。

安全系统很容易把注意力放在“攻击者有没有绕过流程”上,因为绕过是可见的。如果步骤少了一步、身份换了一个、请求进入了异常接口,我们很容易意识到出了问题。

但现实里还有另一种情况:所有步骤都正常,没有任何人绕过流程,而流程最后仍然把一个本来应该停下来的动作送进了现实。

这时候真正值得问的不是“他怎么绕过去的”,而是:

为什么一路走到最后,都没有任何东西拥有最终拒绝它的能力?

这两个问题后来会直接影响《执行控制工程》里对路径、边界、裁决和最终执行权的区分。可在《执行缝隙》这里,我还不希望提前给它们一个过于完整的工程答案。

第四章首先只需要把两者分开。

状态和结果之间,也存在一个很容易被忽略的距离

第三类让我反复停下来的,是执行状态与结果之间的关系。

工程系统非常依赖状态,因为状态是系统理解世界的方式。

任务完成了,状态就变成 completed;订单处理了,就进入 processed;设备停机了,界面就显示 stopped。

久而久之,我们会产生一种非常自然的感觉:状态就是现实。

但状态首先仍然是系统对现实的一种表达。

一个界面上的“已关闭”,可能表示关闭命令已经发出;一个“成功”可能表示请求已经被接受;一个“已完成”也可能表示某个阶段已经完成,而不是整件事情最终已经形成了我们真正关心的结果。

如果这些差异没有被明确保留下来,系统就会很容易拿一个局部状态替代现实终态。

这里最危险的地方不是系统说谎,而是系统说的是真的,只是我们理解成了另一件事。

“命令已经发出”是真的。

“外部已经接收”也是真的。

“某个局部步骤已经成功”仍然可以是真的。

可这些真话拼在一起,并不会因此自动得到“现实结果已经成立”。

所以第四章里的这一类机制,本质上仍然延续着前面几章一直在做的事情:不要因为两个对象长期同步,就把它们当成同一个对象。

真正安全的系统应该能够承认,它此刻知道的是状态,而不是结果;知道的是回执,而不是现实;知道的是一个阶段完成,而不是最终目标已经成立。

这种区分看起来只是语言上的严谨,可一旦系统开始自动连续执行,它就会变成一个非常实际的问题,因为下一步动作究竟依据什么继续,很可能就取决于这里。

证据只有进入因果链以后,才开始真正危险

五类里面,最容易被无限放大的其实是“证据”。

如果不设边界,几乎所有事故都可以说存在证据问题:日志不完整、记录缺失、审计不足、信息没有被看到、调查材料不够。

那样的话,“证据失效”最终什么都可以解释,也就什么都解释不了。

所以这一类真正重要的限制,是因果位置。

一份记录如果只是在事故之后不够完整,让我们难以复盘,这当然是一个问题,但它并不自动属于执行缝隙里的直接机制。

只有当这份证据重新进入当前或者后续动作,并开始影响新的判断、执行、恢复、重试或者资格时,它才真正重新加入因果链。

这条边界对我来说非常重要。

因为“有没有记录”和“记录有没有推动现实继续变化”是两件完全不同的事。

一个错误状态如果只是被保存在日志里,它最多影响我们后来怎样理解事故;可如果这个状态被下一轮自动化任务读取,并因此触发一次新的执行,那么从这一刻开始,证据不再只是观察材料,它已经变成行动条件。

这也是为什么我越来越觉得,未来 AI Agent 系统里的 evidence 不能只被理解成 audit log。

日志主要回答“发生过什么”。

真正进入执行控制的证据还必须回答另一个问题:

这份东西有没有资格参与下一次现实动作?

一旦证据可以直接参与决策和执行,它就不再只是事后证明层,而成为执行链自身的一部分。

为什么 Change 和 Amplification 没有成为第六、第七类

第四章形成以后,还有两个词一直具有很强的诱惑力:Change 和 Amplification。

几乎所有严重事故里都能看到变化,也能看到放大。

某个参数变了,状态变了,环境变了;一个原本很小的偏差因为自动化、规模和速度被迅速扩散,最后形成远超最初错误量级的现实后果。

如果只是追求一个看起来完整的理论结构,把它们加成第六、第七类会非常顺。

但我最后认为那样会混淆不同的问题。

五类直接机制问的是:

偏差通过什么结构位置进入了现实?

Change 问的是:

过程中什么发生了变化?

Amplification 问的是:

一个已经出现的偏差后来为什么变得更大?

这三个问题都重要,却不是同一个问题。

一个事故可能存在巨大的放大,却没有出现一种新的直接机制;一次状态变化也可以是后续失败的重要背景,却不意味着“变化”本身就是偏差进入现实的结构位置。

这让我越来越确信,理论分类最重要的不是把所有现象都装进去,而是知道自己到底在回答哪个问题。

一个概念如果什么都可以解释,最后往往什么都无法定位。

所以第四章宁愿留下空白,也没有继续增加机制。

“五类”不是结论,而是当前证据允许我们停下来的地方

我很喜欢“条件冻结”这个说法,因为它比较接近真正的工程研究状态。

它不是说:

现在已经证明世界上只有这五类。

也不是说:

这五类只是临时想到的,随时都可能推倒。

它表达的是一个更克制的状态——在现有十七个经过事实核验的案例里,我们还没有看到必须增加一个新的一级机制才能解释的失败,因此暂时停止增加结构。

但如果未来出现一种新的失败机制,它具有独立对象、独立因果位置,而且可以在多个现实案例中重复出现,那么这套结构就应该重新打开。

反过来,如果后来发现某一类能够被另一类完整吸收,没有独立存在的必要,那么它也应该被删掉。

这可能是我做这套理论过程中慢慢形成的一种习惯:不要为了保护理论而保护理论。

理论如果与现实冲突,应该修改的是理论。

所以这五类对我来说,从来不是一个需要被维护的答案,而只是目前证据允许我们暂停继续增加一级结构的位置。

到这里,真正困难的问题才开始出现

第四章结束以后,我们终于不再面对一个无限扩张的“关系”概念。

至少现在可以继续问几个相对明确的问题:上游判断是否仍然绑定当前动作,实际执行是否走在原来的路径上,限制现实动作的边界是否仍然存在,状态和结果之间是否仍保持对应,以及正在推动当前或后续动作的证据是否仍具有它应有的资格。

但这五类一放回现实案例,马上又会出现新的麻烦。

同一个案例可以同时落在多个位置。

路径偏离和边界失效尤其容易同时出现。一次执行可能确实走了不同的路径,同时系统也缺少能够阻止危险动作继续发生的边界。

那么,两者究竟是不是同一回事?

如果不是,它们真正的分界在哪里?

而更大的问题还在后面:既然五类不是互斥标签,那么面对一次具体偏差,我们究竟应该怎样使用它们,而不是简单地在五个框里挑一个?

这也是为什么第四章对我来说更像一个转折点。

前三章一直在拆掉过去过于简单的理解方式;第四章第一次开始搭结构。但搭结构的第一件事,并不是宣布理论已经完整,而是给每一块结构留下明确边界,同时承认它们以后仍然可能被现实重新打开。

因为真正危险的,从来不只是系统里存在未知。

有时候,更危险的是我们太早相信自己已经把未知全部分类完成。

关于《执行缝隙》

《执行缝隙》(The Execution Gap)是Execution Engineering Trilogy第一卷。

本书讨论一个基础而关键的问题:

从人的意图,到机器最终改变现实世界,中间究竟发生了什么?

在线阅读

  • 繁體中文版 執行縫隙 | Havenlon Research

  • English Edition The Execution Gap | Havenlon Research

  • Amazon Kindle Amazon.com: The Execution Gap: The Structural Discontinuity Between Intent and Action (Execution Engineering Trilogy Book 1) eBook : Wang, Lin, Wu, Mengting, Zhang, Yong, Deng, Jiang: Kindle Store

  • Amazon Paperback The Execution Gap: The Structural Discontinuity Between Intent and Action (Execution Engineering Trilogy): Wang, Lin, Wu, Mengting, Zhang, Yong, Deng, Jiang: 9798177903347: Amazon.com: Books

© 2026 Lin Wang / Havenlon.

本文为作者手记,与《执行缝隙》正式书籍正文相互独立。 未经授权,请勿全文转载或用于商业再出版。 引用请注明作者及出处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询