Summary
Top-level np.ndarray values are serialized via _serialize_numpy and returned directly, never passing through Rust ByteStorage.store. Unlike the DataFrame/Series/msgpack branches, the numpy path gets no xxHash3 checksum and no LZ4, regardless of enable_integrity_checking.
Evidence
src/cachekit/serializers/auto_serializer.py:427-430 — data = self._serialize_numpy(obj) returned directly
- Contrast: dataframe (
:678), series (:743), msgpack (:785) all call self._byte_storage.store(...)
- Read side
_deserialize_numpy (:603-645) reconstructs via np.frombuffer with no checksum verification
Impact
A corrupted numpy cache entry (bit flip / truncation) is silently reconstructed as wrong data or raises an opaque reshape error. Violates the "never silently return corrupted data" contract for the entire numpy path.
Fix
Route numpy bytes through ByteStorage (checksum + optional LZ4) like the other branches, or prepend the same 8-byte xxHash3 envelope and verify on read.
Summary
Top-level
np.ndarrayvalues are serialized via_serialize_numpyand returned directly, never passing through RustByteStorage.store. Unlike the DataFrame/Series/msgpack branches, the numpy path gets no xxHash3 checksum and no LZ4, regardless ofenable_integrity_checking.Evidence
src/cachekit/serializers/auto_serializer.py:427-430—data = self._serialize_numpy(obj)returned directly:678), series (:743), msgpack (:785) all callself._byte_storage.store(...)_deserialize_numpy(:603-645) reconstructs vianp.frombufferwith no checksum verificationImpact
A corrupted numpy cache entry (bit flip / truncation) is silently reconstructed as wrong data or raises an opaque reshape error. Violates the "never silently return corrupted data" contract for the entire numpy path.
Fix
Route numpy bytes through
ByteStorage(checksum + optional LZ4) like the other branches, or prepend the same 8-byte xxHash3 envelope and verify on read.