74de0fd4fe
Relay invokes its finalizer as soon as the provider stream ends, concurrently with Hermes' consumer thread, so any finalizer that reads the consumer loop's closures races the last chunk. #103104 moved `usage` onto the collector; the same race still truncated the final tool-call `arguments` delta, dropped the last content delta, and downgraded `finish_reason` to "stop" in Relay's annotated response (reproduced ~50% of runs). Every other Relay integration (Anthropic, Bedrock, Codex) already rebuilds from collector-observed chunks; this makes chat_completions match via `_RelayChatAccumulator` and removes the single-field nonlocal stopgap. Test: the ordering harness is shared, and a second invariant test pins the tool-call/finish_reason case (fails on the stopgap, passes here). Hermes' own returned response was never affected.