Splitting revocation into three claims with different sources of evidence is a useful way to think about it. The ledger saying compensation ran is the easiest one to prove, which is exactly why it gets mistaken for the whole answer.
The point about the boolean is the one I would show to product teams. If false means not proven rather than not revoked, the UI has to say so, otherwise a green badge turns an external timeout into a claim of completion.
I also agree that both collapses are wrong. Reading unknown as not revoked leads to a second revocation, and in payment or messaging systems that can be as harmful as missing the first one.
At Ascendra Ventures we write states like this into the acceptance checks when we build agent features, because "done" for a side effect needs evidence from the system that owns it. How do you surface the disputed state to the person who triggered the original action?