Scope order is fixed — organisation, team, principal, model, provider — so two identical requests always receive the same reason code. An order that varied would make client retry logic untestable.
The first failing scope names the rejection and supplies retry_after from its own window. A user-level limit gives a sub-second retry; a monthly budget gives a much longer one, and the client can tell them apart.
Guardrails at policy publish time enforce that a child scope's quota cannot exceed its parent's. Without that, a team limit larger than the org limit is silently meaningless.