A structured output is only a shape. JSON mode and schema-constrained generation guarantee that a parser can read the response and that the required keys exist with the declared types, and they do that better than asking the model politely to return JSON the MLflow structured-output guide. What they do not guarantee is that the values mean anything. One production write-up puts the boundary plainly: shape is not truth, and a schema-valid customer ID, amount, date or resource reference can still violate domain rules the TrueFoundry schema article.
This is the failure mode that bites after you finish prompt versioning and rendering. The small model returns a ticket object, or an order summary, or a set of function arguments. Every key is present. The types match. Your parser is happy. Then the downstream service looks up customer_id = 88213 and there is no such customer, because the model invented a number in the same range as the real ones.
A research group that benchmarked structural output control across software engineering tasks found the same wall from the other side: strict template-driven generation nearly eliminated syntax errors, yet substantial structural and semantic errors persisted, showing that the bottleneck lies beyond syntax formatting the structured-output control study. Their framing is the one to steal for your design review. To the consuming system, an output that is semantically wrong is indistinguishable from a wrong answer.
So the question is not whether to validate. It is where the validation layer sits relative to your retry logic, and what it is allowed to reject.



