The most dangerous failure in agent governance is the one that looks like success: a reviewer approves a request, and a slightly different action runs.
It happens because most "approvals" bind to a string of text shown in a UI. Between the click and execution, a retry, a rewrite, or a tool wrapper can change what actually runs. The signature is valid; the consequence is not the one anyone agreed to.
The canonical action object
OSuite collapses every form of a request — a shell command, an SDK call, a gateway POST — into one canonical, hashable action object. Approval binds to that fingerprint. If the consequence changes, the fingerprint changes, and the prior approval no longer applies.
Approval should bind to consequence, not to text a wrapper can rewrite.
Defending against drift
- —Semantic drift — two requests that read differently but do the same thing resolve to one object.
- —Approval drift — a re-issued or mutated action cannot inherit a stale approval.
The result is an approval that means what the reviewer thought it meant — and a proof bundle that lets anyone replay the decision later.