test_streaming_chat_completion_tracks_spend asserted only result.ok, which for
a stream is just the HTTP 200 the proxy commits before the upstream finishes. A
stream that breaks mid-flight comes back as a 200 carrying an SSE error frame
and no [DONE], so the only symptom was a missing spend row E2E_POLL_TIMEOUT
later, blaming spend tracking for a failure on the streaming path. It now
asserts is_streaming, chunks, stream_error and stream_done, the set its passing
sibling already used and the last streaming test in the suite that did not
ProxyClient's spend-log poller had the matching hole on the read side: every
non-success /spend/logs outcome became an empty list, so a window where the
endpoint 500'd or timed out on every read was indistinguishable from a row that
was never written. One successful read anywhere in the window still trusts the
emptiness, so a transient blip polls through, but a window with no successful
read now raises and carries the read that failed