{"slug": "ai-execution-governance-part-9-revocation-complete-is-a-conclusion-not-a-status", "title": "AI Execution Governance, Part 9: Revocation Complete Is a Conclusion, Not a Status Field", "summary": "A developer behind KeelBase, an open-source runtime that sits between an AI agent and a business system and re-checks identity, authorization, scope, risk and confirmation state before a tool runs, argues that \"revocation complete\" should be treated as a three-part conclusion rather than a single status field. The proposed restore check returns three values — compensating (unknown), revoked with the target not soft-deleted (restored), and anything else (not_restored) — so that an unreachable external system yields \"unknown\" instead of a false green badge. The author notes the three-valued check is a way of reading the runtime's records, not a shipped feature.", "body_md": "A side-effect row reads revoke_status = revoked. On the screen it becomes a green badge that says revoked.\n\nThose 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.\n\nOne sentence: \"revocation complete\" is at least three claims, and folding them into one boolean replaces three unperformed checks with a badge.\n\nIf that is enough, the rest is a table and three limits.\n\nCompletion is three things, not one\n\nThe 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.\n\nThe target returned. The business row is no longer in effect. The ledger and the business table are different places and they can disagree.\n\nThe 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\".\n\nThe three carry different evidence from different sources. Folding them into one boolean folds away which one is still missing.\n\nWhat we return\n\nOur restore check returns three values:\n\ncompensating                    → unknown\n\nrevoked, target not soft-deleted → restored\n\nanything else                    → not_restored\n\nTwo details matter.\n\nFirst, 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.\n\nSecond, 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.\n\nOn 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.\n\nCollapse to \"revoked\" turns \"I do not know\" and \"not revoked\" into completion. This is what happens whenever the outside is unreachable.\n\nCollapse to \"not revoked\" turns \"in progress\" into failure, so the revocation is retried or performed a second time.\n\nThe 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.\n\nDeclared 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.\n\nThe 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.\n\nThe 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.\n\n\"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.\n\nThe 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.\n\nRepository: [https://github.com/rain6fish/KeelBase](https://github.com/rain6fish/KeelBase)\n\nThree things stated plainly. The outside's \"delivered, no answer\" is a design value we have not tested end to end, so we cannot claim it was verified against a real external system. The declared-versus-held difference triggers only on the retry path that hits the idempotency key, because a first write has nothing to compare against. And the three-valued check is a reading of the code, without a bypass experiment.\n\nDrafted with an AI assistant. The system, the positions and the mistakes are mine.", "url": "https://wpnews.pro/news/ai-execution-governance-part-9-revocation-complete-is-a-conclusion-not-a-status", "canonical_source": "https://dev.to/rain6fish/ai-execution-governance-part-9-revocation-complete-is-a-conclusion-not-a-status-field-3l76", "published_at": "2026-11-02 00:46:02+00:00", "updated_at": "2026-11-02 00:51:49.601253+00:00", "lang": "en", "topics": ["ai-agents", "ai-safety", "ai-tools", "developer-tools"], "entities": ["KeelBase", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/ai-execution-governance-part-9-revocation-complete-is-a-conclusion-not-a-status", "markdown": "https://wpnews.pro/news/ai-execution-governance-part-9-revocation-complete-is-a-conclusion-not-a-status.md", "text": "https://wpnews.pro/news/ai-execution-governance-part-9-revocation-complete-is-a-conclusion-not-a-status.txt", "jsonld": "https://wpnews.pro/news/ai-execution-governance-part-9-revocation-complete-is-a-conclusion-not-a-status.jsonld"}}