Summary
The Python SDK wraps every value (all backends, incl. SaaS) in a b'CK'\x03 + JSON-header frame whose own docstring calls it "Python-SDK-internal". The wire-format spec documents only the bare ByteStorage rmp envelope ("When format is msgpack…") and never mentions the CK frame or the Arrow envelope ([8B xxh3][ARROW1…]). A TS/Rust/Go SDK reading a Python-written SaaS entry receives bytes it has no spec to parse.
Evidence
cachekit-py src/cachekit/serializers/wrapper.py:25 ("Python-SDK-internal"), :86-99 (frame layout); applied unconditionally at cache_handler.py:599
protocol/spec/wire-format.md documents only the rmp envelope; protocol/spec/interop-mode.md ("Plain MessagePack, no ByteStorage envelope") is explicitly NOT IMPLEMENTED in any SDK
Impact
Cross-SDK interop — a core product premise — is broken today for any value written by the Python SDK through the SaaS backend. Latent until a second SDK reads SaaS, but the spec and the implementation disagree now.
Fix
Either (a) document the CK v3 frame + Arrow envelope in the wire-format spec as the canonical container, or (b) define an interop mode that emits the bare documented envelope for cross-SDK keys. Decide and align all SDKs.
Summary
The Python SDK wraps every value (all backends, incl. SaaS) in a
b'CK'\x03+ JSON-header frame whose own docstring calls it "Python-SDK-internal". The wire-format spec documents only the bare ByteStoragermpenvelope ("When format is msgpack…") and never mentions the CK frame or the Arrow envelope ([8B xxh3][ARROW1…]). A TS/Rust/Go SDK reading a Python-written SaaS entry receives bytes it has no spec to parse.Evidence
cachekit-pysrc/cachekit/serializers/wrapper.py:25("Python-SDK-internal"),:86-99(frame layout); applied unconditionally atcache_handler.py:599protocol/spec/wire-format.mddocuments only the rmp envelope;protocol/spec/interop-mode.md("Plain MessagePack, no ByteStorage envelope") is explicitly NOT IMPLEMENTED in any SDKImpact
Cross-SDK interop — a core product premise — is broken today for any value written by the Python SDK through the SaaS backend. Latent until a second SDK reads SaaS, but the spec and the implementation disagree now.
Fix
Either (a) document the CK v3 frame + Arrow envelope in the wire-format spec as the canonical container, or (b) define an interop mode that emits the bare documented envelope for cross-SDK keys. Decide and align all SDKs.