a8843ab985
The text-only drop guard in _finish_chat_stream required content_parts, so a stream that died while still emitting delta.reasoning (no finish_reason, no usage) fell through to the synthesized "stop". With the reasoning-only clean-stop promotion in finish_text_response that stamped "stop" turned the truncated thought into the final answer, where main entered the continuation ladder. Extend the guard with reasoning_parts so the drop yields the partial-stream stub and the ladder still runs; a real clean stop carries finish_reason="stop" and is unaffected. Review follow-up on #110227.