- a
Paginationnames fields the schema actually accepts, only endpoints that page declare one, and a walk over it terminates; - no
model_validatoris lost on the way to the LLM view, so aoneofis enforced against the model’s input and not only against the wire; - failure detection is an
Envelopeon the factory and never logic inside a response handler, where the first tool added without one reports a failed write as a success; - Google packs send camelCase query parameters, which Google requires and otherwise ignores without complaint;
- a
static_body,static_queryorstatic_headersconstant is never also reachable as a tool argument; - a
Glossreaches the model’s schema and never the documented description, so the vendor’s own text stays comparable to their reference page; - a
PATCHbody mandates nothing, so a partial update cannot demand a field it is not changing.
Checking the checks
A check that reads a declaration and compares it to itself passes forever and protects nothing. So each one is also run against a pack broken on purpose, in the specific way the bug it guards against broke it — eighteen mutations intests/test_conformance_is_not_vacuous.py, each restored afterwards.
One check was vacuous until that file caught it.
What conformance cannot tell you
Whether a schema still matches the vendor’s live API. That is drift, and it needs the published spec rather than introspection. It is on the roadmap. Until thenscripts/live_google_check.py is the shape such a check takes — deliberately not a test, because the suite is offline by rule.