downgradeOpenAIReasoningBlocks was only called on model change, but orphaned reasoning items (e.g. from an aborted stream) can exist without a model switch and cause a 400 from the OpenAI Responses API. Co-Authored-By: Claude Opus 4.6 <[email protected]>