The preflight-budget change deserves a concurrency test as well as a single staging refusal. Two requests can each fit the remaining ceiling when inspected separately but exceed it together; reserving estimated spend and settling actual usage makes that boundary explicit.
I would also replay a streaming tool-call exchange, a provider timeout and a client cancellation through both paths. An OpenAI-compatible request shape does not by itself establish identical finish reasons, usage accounting or error behavior. Those fixtures would make the migration diff cover the application's failure contract as well as its base URL and credentials.