A vendor permission table is a document, and documents drift. OAuth scopes are strings the resource server defines and the client requests, and the authorization server can grant a subset of what was asked for, so the token you receive is not guaranteed to match the table you read Curity scope best practices. The standard that lets a protected resource query the authorization server about a token's active state and granted rights exists precisely because the token alone does not always tell you what it carries RFC 7662.
Agents make this worse because their behavior shifts with each prompt. A service account runs the same query every night, while an agent may read one customer's record, pull another's contract, and call a refund tool in one conversation, all under whatever grant it holds PlainID. A table that says "read access to invoices" tells you nothing about whether the agent can reach a different tenant's invoices, or chain three allowed calls into a denied outcome. Scopes describe what area of functionality a client can touch; they do not describe who can run which tool under what conditions P0 Security.
That gap is measurable. The Cloud Security Alliance survey cited by Delight.ai found 53% of organizations report their AI agents have exceeded intended permissions Delight.ai. Negative testing, feeding a system invalid or out-of-scope input to confirm it fails predictably, is the standard discipline for finding that class of gap before a customer does Virtuoso QA. A permission diff is negative testing applied to a vendor's access claims.
The decision rule is simple. A row you have tested is a control. A row you have only read is a hope.



