df919ed moved complete() to stream-and-accumulate, but the test fakes only
stubbed messages.create — every complete() test died on AttributeError. The
fakes now expose a stream() context manager (get_final_message returns the
canned response) alongside create, which the public stream() path still uses.
test_gate_order_write_fence_survives_bypass probed the fence with a literal
C:/ path — absolute on Windows, but a relative dir named 'C:' on POSIX, which
_candidate() resolves INTO the workspace root; the fence passed and Bypass
allowed. The probe now uses tmp_path.parent, out-of-root on every OS.
Normalized TokenUsage (input/output/cache split) captured in every provider's
stream and complete paths, persisted as an assistant-message sidecar and sent
on the assistant_message event; matrix gains verified context-window sizes.