v0.17.1
Sticky streaming conformance coverage
Patch release on top of v0.17.0. The canonical TestSticky conformance group previously only exercised sticky sessions on unary calls — this release extends it with four tests that drive the same _StickyCounter through producer and exchange streams, so cross-language ports implementing sticky must now prove the contract holds across the multi-request shape of streaming RPCs (not just one-shot unary calls).
What's covered
TestSticky::test_producer_stream_resumes_session— a producer stream that increments and emitsctx.session.valueon every iteration; verifies the session is rebound across the multi-turn producer shape.TestSticky::test_exchange_stream_resumes_session— an exchange stream that mutates the session counter from the inputbycolumn on each round-trip; verifies state accumulates across independent HTTP exchange requests.TestSticky::test_stream_without_session_raises— streaming method invoked outsidewith_session_token()surfacesRpcErrorwith no session bound.TestSticky::test_session_shared_between_unary_and_stream— open via unary, mutate via unary + producer stream + unary, close — all observe the same backing_StickyCounter.
ConformanceService surface additions
Cross-language ports implementing sticky must add these two methods to pass the streaming TestSticky tests:
stream_session_counter(count: int) -> Stream[StreamState]— producer stream emittingcountincrements of the sticky session counter.exchange_session_counter() -> Stream[StreamState]— exchange stream that adds each inputbycolumn to the sticky session counter.
Describe method count bumps 79 → 81; runner _EXPECTED_METHODS and _STREAM_METHODS gain the two new names so the describe-conformance suite stays in sync.
Compatibility
- No behaviour change for existing callers. Non-conformance code paths are byte-identical to 0.17.0.
- Ports without sticky support skip the entire
TestStickygroup, including the new streaming tests — no port-side action required if sticky isn't implemented. _StickyCountermoved fromvgi_rpc.conformance._impltovgi_rpc.conformance._types(a private helper; the relocation is mentioned only because in-tree tests imported it directly).