PRODUCTION SCENARIO
Your classification service prefills the assistant turn with an opening brace so that the reply is a JSON object, and it has worked for two years. After the move to Claude Sonnet 4.6, every request returns a 400 error. The prefill's only job is forcing the object shape, not suppressing preamble or re-injecting reminders; downstream parses the response strictly, and the service's latency and price targets depend on staying on the new model.
What should replace the prefill?
Answering here is anonymous. Nothing is saved unless you sign in.
Show answer and explanation
Answer: Constrain the response with a JSON schema in output_config.format
From Claude 4.6 onward a prefilled assistant message on the last turn returns a 400, and the documented migration for a prefill that forces a format is structured outputs, which constrain the whole response to a schema a strict parser can rely on. The no-preamble instruction is the migration for a prefill that existed to skip an opening line of prose, which is not this prefill's job. Moving text into the user turn is the migration for a prefill used to re-inject context in a long conversation, and no reminder is involved. Staying on an earlier generation is right when the request shape cannot change, and this service moved for the new model's latency and price.