run() only handled 'done' events from stream(), silently dropping 'error' events. This caused failed LLM calls to return an empty RunResult that the caller treated as successful.