AI Execution Governance, Part 9: Revocation Complete Is a Conclusion, Not a Status Field
A side-effect row reads revoke_status = revoked. On the screen it becomes a green badge that says revoked. Those three words are not a field value. They are a conclusion, and a conclusion is supposed to be argued: did the compensation actually run, did the target actually return to its previous state, did the other system actually answer. One sentence: “revocation complete” is at least three claims, and folding them into one boolean replaces three unperformed checks with a badge. If that is enough, the rest is a table and three limits.
副作用行显示 revoke_status = revoked。在屏幕上,它变成了一个写着“已撤销”(revoked)的绿色徽章。这三个词并不是一个字段值。它们是一个结论,而结论是需要论证的:补偿是否真的运行了?目标是否真的恢复到了之前的状态?外部系统是否真的做出了响应?“撤销完成”这一句话至少包含三个主张,将它们合并为一个布尔值,等同于用一个徽章取代了三次未执行的检查。如果这样就足够了,那么剩下的不过是一张表和三个限制。
Completion is three things, not one. The compensation happened. The ledger says it ran. This is our own action and the easiest to prove, which is exactly why it gets mistaken for the conclusion. The target returned. The business row is no longer in effect. The ledger and the business table are different places and they can disagree. The outside answered. When the target lives in someone else’s system, only that system can say it is gone. On our side the best we record is “the request arrived” or “it arrived and nothing came back”. The three carry different evidence from different sources. Folding them into one boolean folds away which one is still missing.
完成包含三件事,而非一件。补偿已发生:账本显示它已运行。这是我们自己的操作,也是最容易证明的,这正是它被误认为是结论的原因。目标已恢复:业务行不再生效。账本和业务表是不同的地方,它们可能会产生分歧。外部已响应:当目标存在于他人的系统中时,只有该系统能确认它已消失。在我们这边,我们最多只能记录“请求已到达”或“请求已到达但未收到任何反馈”。这三者携带来自不同来源的不同证据。将它们合并为一个布尔值,会掩盖究竟是哪一部分缺失。
What we return. Our restore check returns three values: compensating → unknown, revoked, target not soft-deleted → restored, anything else → not_restored. Two details matter. First, compensating is unknown, not “not revoked”. It covers both “compensation is still running” and “it never started”. Neither state knows the outcome, and writing either one down would be a claim. Second, the boolean view’s false means unproven. We also expose a boolean, and it returns false for unknown as well. The comment on it says plainly that false means not proven restored, not known not revoked. Callers have to go back and read the three-valued state rather than treat the boolean as the answer.
我们返回的内容。我们的恢复检查返回三个值:补偿中 → 未知;已撤销,目标未软删除 → 已恢复;其他情况 → 未恢复。有两个细节很重要。首先,“补偿中”是未知,而不是“未撤销”。它涵盖了“补偿仍在运行”和“补偿从未开始”两种情况。这两种状态都无法预知结果,将其中的任何一种写下来都是一种主张。其次,布尔视图中的 false 意味着“未证实”。我们也提供了一个布尔值,它对于“未知”状态同样返回 false。相关的注释明确指出,false 意味着“未证实已恢复”,而不是“已知未撤销”。调用者必须回过头来读取三值状态,而不是将布尔值视为最终答案。
On the outside we have two words as well: possibly not delivered, and delivered, no answer. That second one is the absence of a conclusion, and we do not relabel it as completion. Why two values are not enough. Both ways of collapsing are wrong. Collapse to “revoked” turns “I do not know” and “not revoked” into completion. This is what happens whenever the outside is unreachable. Collapse to “not revoked” turns “in progress” into failure, so the revocation is retried or performed a second time. The middle value is not cautious wording. It is the only value that does not lie. A system with only two states will eventually assert something it does not know, on the first external timeout it meets.
在外部,我们也有两个词:可能未送达,以及已送达但无响应。后者代表结论的缺失,我们不会将其重新标记为“完成”。为什么两个值是不够的?两种折叠方式都是错误的。折叠为“已撤销”会将“我不知道”和“未撤销”都变成“完成”。每当外部系统无法访问时,就会发生这种情况。折叠为“未撤销”会将“进行中”变成“失败”,导致撤销操作被重试或执行第二次。中间值并非谨慎的措辞,它是唯一不撒谎的值。一个只有两种状态的系统,在遇到第一次外部超时时,最终会断言一些它根本不知道的事情。
A conclusion has to be refutable. A badge that says revoked counts as evidence only if some observation could overturn it. We give the conclusion a refutation path. Declared against held. What this call says it will revoke is compared against what the ledger actually holds, in both directions. A difference marks the group disputed and refuses to report the revocation complete. The conclusion is blocked, not the write. When they disagree the write still completes. What is stopped is the sentence “it is done”. That keeps non-deterministic tools from stalling on writes whose declarations legitimately differ from what is held.
结论必须是可反驳的。一个写着“已撤销”的徽章,只有在某种观察结果可以推翻它时,才算作证据。我们为结论提供了一条反驳路径:声明与持有对比。该调用声称要撤销的内容会与账本实际持有的内容进行双向比对。如果存在差异,该组会被标记为“有争议”,并拒绝报告“撤销完成”。被阻塞的是结论,而不是写入操作。当它们不一致时,写入仍然会完成。被阻止的是“已完成”这一结论。这防止了非确定性工具在声明与实际持有内容存在合理差异的写入操作上停滞不前。
The test runs backwards. Instead of asking whether two paths are independent, ask whether some fault can move one side and not the other. A break that moves both together means the agreement was never a check. Four checks you can run. Which claims is this “complete” made of? If you cannot say, it is a status field. Does the state machine have a middle value? Without unknown, it will lie on some timeout. What does the boolean’s false mean, refuted or unproven? Mixing the two is the dangerous part. What observation would overturn this conclusion? If none, it was never verified.
测试是反向运行的。与其询问两条路径是否独立,不如询问某种故障是否会导致一边变动而另一边不变。如果一个故障同时移动了两者,说明这种一致性从来就不是一种检查。你可以运行的四项检查:这个“完成”是由哪些主张构成的?如果你说不出来,那它就是一个状态字段。状态机是否有中间值?如果没有“未知”,它在某些超时情况下就会撒谎。布尔值的 false 意味着什么?是被反驳还是未证实?将两者混为一谈是危险的。什么样的观察结果会推翻这个结论?如果没有,那它就从未被验证过。
Closing. Back to the badge. It should stand for three claims holding at once, not for three fields happening to line up. “Revocation complete” is not a status field. It is a conclusion that has to be argued, and when the argument cannot be made the right answer is unknown, not green. The mechanism above is taken from KeelBase, an open-source runtime that sits between an AI agent and a business system, re-checks identity, authorization, scope, risk and confirmation state before a tool runs, and writes every decision into a record that can be verified offline. The three-valued check is a way of reading here, not a shipped feature; KeelBase is its implementation and evidence carrier.
结语。回到徽章的问题。它应该代表三个主张同时成立,而不是三个字段恰好对齐。“撤销完成”不是一个状态字段。它是一个需要论证的结论,当无法论证时,正确的答案是“未知”,而不是绿色。上述机制取自 KeelBase,这是一个位于 AI 代理和业务系统之间的开源运行时。它在工具运行前重新检查身份、授权、范围、风险和确认状态,并将每一个决策写入可离线验证的记录中。三值检查在这里是一种解读方式,而非已发布的功能;KeelBase 是其实现和证据载体。