Someone on your team reorders a Pydantic model so the API response reads better — label first, rationale last. No prompt change, no model change, no temperature change. The classification eval drops. The rationales still look great; they just now describe a decision the model had already made.

That is not a coincidence and it is not prompt superstition. With strict structured outputs, JSON Schema field order is a decoding constraint. The grammar compiler turns your property order into a finite-state machine, and that machine assigns probability zero to any token that would start the wrong key. The model cannot reorder. It cannot think first and answer second unless your schema lets it.

TL;DR

JSON Schema field order determines generation order under constrained decoding (OpenAI strict structured outputs, vLLM guided_json, Outlines/XGrammar/llguidance). Objects are emitted in declaration order because tracking arbitrary property order needs 2^k FSM states for k required keys.

Autoregressive models compute in the token stream. A field declared before the answer is scratchpad; a field declared after it is post-hoc rationalization that cannot influence the answer at all.