{
"description": "Python SDK (cachekit-py) auto-mode storage container: CK v3 frame. Python-SDK-internal \u2014 other SDKs identify and reject, never decode. See spec/wire-format.md 'SDK Storage Containers (auto mode)'.",
"frame_layout": "MAGIC 'CK' (0x43 0x4B) | VERSION u8 (0x03) | HDR_LEN u32 big-endian | HEADER (UTF-8 JSON: {s, m, v}) | PAYLOAD (raw bytes)",
"generator": "mixed provenance \u2014 vectors carrying a per-vector 'generator' field record their own; all others: legacy vectors: cachekit 0.11.1 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate (unchanged since); *_bin twins carry their own per-vector 'generator' field",
"frame_vectors": [
{
"name": "raw_payload_frame",
"description": "Minimal frame: SerializationWrapper.wrap over raw bytes. Parse-level vector.",
"frame_hex": "434b030000004d7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022636f6d70726573736564223a2066616c73657d2c202276223a2022322e30227d68656c6c6f2c2063616368656b697421",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"compressed": false
},
"v": "2.0"
},
"expected_payload_hex": "68656c6c6f2c2063616368656b697421"
},
{
"name": "default_saas_write_msgpack_bytestorage",
"description": "Exact stored bytes for a default @cache write (StandardSerializer, integrity on): CK v3 frame wrapping the ByteStorage envelope of the MessagePack-encoded value. This is what any backend \u2014 including the SaaS \u2014 receives from cachekit-py in auto mode.",
"value_json": {
"user_id": 42,
"name": "cachekit",
"active": true
},
"frame_hex": "434b030000007d7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94dc0022ccf011cc83cca7757365725f69642acca46e616d65cca863616368656b6974cca6616374697665ccc398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "94dc0022ccf011cc83cca7757365725f69642acca46e616d65cca863616368656b6974cca6616374697665ccc398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"payload_envelope": {
"encoding": "rmp_serde::to_vec positional fixarray(4); Vec<u8>/[u8;8] fields encode as msgpack arrays of integers",
"envelope_encoding": "int-array",
"compressed_data_hex": "f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"checksum_hex": "daf468618e624bfe",
"original_size": 32,
"format": "msgpack",
"inner_msgpack_hex": "83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3"
}
},
{
"name": "arrow_dataframe_write",
"description": "DataFrame write via ArrowSerializer: CK v3 frame wrapping the Arrow envelope [8-byte xxHash3-64 checksum][Arrow IPC file]. Arrow IPC bytes are NOT canonical across pyarrow versions (this vector: pyarrow 25.0.0) \u2014 verify frame structure and envelope detection only, never IPC bytes.",
"frame_hex": "434b03000000777b2273223a20226172726f77222c20226d223a207b22666f726d6174223a20226172726f77222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226172726f77227d2c202276223a2022322e30227dcb67c5c798cf52284152524f57310000ffffffff080300001000000000000a000e000600050008000a000000000104001000000000000a000c000000040008000a0000005c02000004000000010000000c00000008000c0004000800080000003402000004000000260200007b22696e6465785f636f6c756d6e73223a205b7b226b696e64223a202272616e6765222c20226e616d65223a206e756c6c2c20227374617274223a20302c202273746f70223a20322c202273746570223a20317d5d2c2022636f6c756d6e5f696e6465786573223a205b7b226e616d65223a206e756c6c2c20226669656c645f6e616d65223a206e756c6c2c202270616e6461735f74797065223a2022756e69636f6465222c20226e756d70795f74797065223a2022737472222c20226d65746164617461223a207b22656e636f64696e67223a20225554462d38227d7d5d2c2022636f6c756d6e73223a205b7b226e616d65223a20226964222c20226669656c645f6e616d65223a20226964222c202270616e6461735f74797065223a2022696e743634222c20226e756d70795f74797065223a2022696e743634222c20226d65746164617461223a206e756c6c7d2c207b226e616d65223a202273636f7265222c20226669656c645f6e616d65223a202273636f7265222c202270616e6461735f74797065223a2022666c6f61743634222c20226e756d70795f74797065223a2022666c6f61743634222c20226d65746164617461223a206e756c6c7d5d2c202261747472696275746573223a207b7d2c202263726561746f72223a207b226c696272617279223a202270796172726f77222c202276657273696f6e223a202232352e302e30227d2c202270616e6461735f76657273696f6e223a2022332e302e33227d00000600000070616e6461730000020000004800000004000000d0ffffff00000103100000001c00000004000000000000000500000073636f7265000600080006000600000000000200100014000800060007000c00000010001000000000000102100000001c0000000400000000000000020000006964000008000c0008000700080000000000000140000000ffffffffd000000014000000000000000c0018000600050008000c000c000000000304001c0000005000000000000000000000000c001e001000040008000c000c00000070000000240000001800000002000000000000000000000000000600080007000600000000000001040000000000000000000000000000000000000000000000000000002100000000000000280000000000000000000000000000002800000000000000210000000000000000000000020000000200000000000000000000000000000002000000000000000000000000000000100000000000000028b52ffd20108100000100000000000000020000000000000000000000000000100000000000000028b52ffd2010810000000000000000f83f000000000000044000000000000000ffffffff00000000100000000c001400060008000c0010000c00000000000400380000002400000004000000010000001803000000000000d80000000000000050000000000000000000000000000a000c000000040008000a0000005c02000004000000010000000c00000008000c0004000800080000003402000004000000260200007b22696e6465785f636f6c756d6e73223a205b7b226b696e64223a202272616e6765222c20226e616d65223a206e756c6c2c20227374617274223a20302c202273746f70223a20322c202273746570223a20317d5d2c2022636f6c756d6e5f696e6465786573223a205b7b226e616d65223a206e756c6c2c20226669656c645f6e616d65223a206e756c6c2c202270616e6461735f74797065223a2022756e69636f6465222c20226e756d70795f74797065223a2022737472222c20226d65746164617461223a207b22656e636f64696e67223a20225554462d38227d7d5d2c2022636f6c756d6e73223a205b7b226e616d65223a20226964222c20226669656c645f6e616d65223a20226964222c202270616e6461735f74797065223a2022696e743634222c20226e756d70795f74797065223a2022696e743634222c20226d65746164617461223a206e756c6c7d2c207b226e616d65223a202273636f7265222c20226669656c645f6e616d65223a202273636f7265222c202270616e6461735f74797065223a2022666c6f61743634222c20226e756d70795f74797065223a2022666c6f61743634222c20226d65746164617461223a206e756c6c7d5d2c202261747472696275746573223a207b7d2c202263726561746f72223a207b226c696272617279223a202270796172726f77222c202276657273696f6e223a202232352e302e30227d2c202270616e6461735f76657273696f6e223a2022332e302e33227d00000600000070616e6461730000020000004800000004000000d0ffffff00000103100000001c00000004000000000000000500000073636f7265000600080006000600000000000200100014000800060007000c00000010001000000000000102100000001c0000000400000000000000020000006964000008000c0008000700080000000000000140000000300300004152524f5731",
"expected_header": {
"s": "arrow",
"m": {
"format": "arrow",
"encoding": "utf-8",
"compressed": true,
"original_type": "arrow"
},
"v": "2.0"
},
"arrow_detection": {
"checksum_len": 8,
"checksum_hex": "cb67c5c798cf5228",
"ipc_magic_offset": 8,
"ipc_magic": "ARROW1"
}
},
{
"name": "default_saas_write_msgpack_bytestorage_bin",
"description": "Default @cache write (StandardSerializer, integrity on) from a protocol 1.1 wheel: the ByteStorage envelope's compressed_data is msgpack bin (serde_bytes) instead of the legacy array of integers. Readers MUST accept both encodings; the legacy encoding stays pinned by default_saas_write_msgpack_bytestorage. When this vector carries 'twin_of', that field \u2014 not this text \u2014 is the claim that the two differ only in envelope encoding, and verify enforces it.",
"value_json": {
"user_id": 42,
"name": "cachekit",
"active": true
},
"frame_hex": "434b030000007d7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"payload_envelope": {
"encoding": "rmp_serde positional fixarray(4); compressed_data encodes as msgpack bin (serde_bytes, protocol 1.1); checksum [u8;8] stays an array of integers",
"envelope_encoding": "bin",
"compressed_data_hex": "f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"checksum_hex": "daf468618e624bfe",
"original_size": 32,
"format": "msgpack",
"inner_msgpack_hex": "83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3"
},
"twin_of": "default_saas_write_msgpack_bytestorage",
"generator": "cachekit 0.17.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate-bin-twin"
},
{
"name": "auto_serializer_write",
"description": "The same value written by AutoSerializer (@cache(serializer=\"auto\")). Its payload and metadata equal default_saas_write_msgpack_bytestorage_bin's and only the recorded name differs (s: auto), so a reader configured with \"default\" that skipped the serializer-name check would decode it to the value. Planted under that reader, it MUST be a miss (spec/cache-key-format.md).",
"value_json": {
"user_id": 42,
"name": "cachekit",
"active": true
},
"frame_hex": "434b030000007a7b2273223a20226175746f222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"expected_header": {
"s": "auto",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"payload_envelope": {
"encoding": "rmp_serde positional fixarray(4); compressed_data encodes as msgpack bin (serde_bytes, protocol 1.1); checksum [u8;8] stays an array of integers",
"envelope_encoding": "bin",
"compressed_data_hex": "f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"checksum_hex": "daf468618e624bfe",
"original_size": 32,
"format": "msgpack",
"inner_msgpack_hex": "83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3"
},
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "standard_serializer_instance_write",
"description": "The same value written by a StandardSerializer() instance (@cache(serializer=StandardSerializer())). The frame records the bare class name, StandardSerializer, over default_saas_write_msgpack_bytestorage_bin's payload and metadata, while the key carries the identity <custom>:StandardSerializer (code x8542). A reader configured with \"default\" MUST miss on it, and a reader configured with an instance of the class MUST read it, which one that compares its key identity instead of the recorded name does not.",
"value_json": {
"user_id": 42,
"name": "cachekit",
"active": true
},
"frame_hex": "434b03000000887b2273223a20225374616e6461726453657269616c697a6572222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"expected_header": {
"s": "StandardSerializer",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"payload_envelope": {
"encoding": "rmp_serde positional fixarray(4); compressed_data encodes as msgpack bin (serde_bytes, protocol 1.1); checksum [u8;8] stays an array of integers",
"envelope_encoding": "bin",
"compressed_data_hex": "f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"checksum_hex": "daf468618e624bfe",
"original_size": 32,
"format": "msgpack",
"inner_msgpack_hex": "83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3"
},
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "std_alias_write",
"description": "{\"pair\": (1, \"two\")}, a map holding a tuple, written under the alias std: byte for byte what the canonical name default writes, so the alias records default and writes StandardSerializer's bytes, which hold the tuple as an array. AutoSerializer writes the same value differently (pythonic_alias_write), so a writer that picks the serializer by the raw spelling fails one of the two.",
"value_json": {
"pair": [
1,
"two"
]
},
"frame_hex": "434b030000007d7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c40dc081a4706169729201a374776f98ccdd4d3e2b58ccad58250ca76d73677061636b",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "94c40dc081a4706169729201a374776f98ccdd4d3e2b58ccad58250ca76d73677061636b",
"payload_envelope": {
"encoding": "rmp_serde positional fixarray(4); compressed_data encodes as msgpack bin (serde_bytes, protocol 1.1); checksum [u8;8] stays an array of integers",
"envelope_encoding": "bin",
"compressed_data_hex": "c081a4706169729201a374776f",
"checksum_hex": "dd4d3e2b58ad5825",
"original_size": 12,
"format": "msgpack",
"inner_msgpack_hex": "81a4706169729201a374776f"
},
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "pythonic_alias_write",
"description": "{\"pair\": (1, \"two\")} written under the alias pythonic: byte for byte what the canonical name auto writes, so the alias records auto and writes AutoSerializer's bytes, which mark the tuple ({\"__tuple__\": true, \"value\": [1, \"two\"]}). StandardSerializer writes the same value differently (std_alias_write).",
"value_json": {
"pair": {
"__tuple__": true,
"value": [
1,
"two"
]
}
},
"frame_hex": "434b030000007a7b2273223a20226175746f222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c420f00f81a47061697282a95f5f7475706c655f5fc3a576616c75659201a374776f98ccfd136dcca1cc812345ccc91ea76d73677061636b",
"expected_header": {
"s": "auto",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "94c420f00f81a47061697282a95f5f7475706c655f5fc3a576616c75659201a374776f98ccfd136dcca1cc812345ccc91ea76d73677061636b",
"payload_envelope": {
"encoding": "rmp_serde positional fixarray(4); compressed_data encodes as msgpack bin (serde_bytes, protocol 1.1); checksum [u8;8] stays an array of integers",
"envelope_encoding": "bin",
"compressed_data_hex": "f00f81a47061697282a95f5f7475706c655f5fc3a576616c75659201a374776f",
"checksum_hex": "fd136da1812345c9",
"original_size": 30,
"format": "msgpack",
"inner_msgpack_hex": "81a47061697282a95f5f7475706c655f5fc3a576616c75659201a374776f"
},
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "integrity_checking_off_write",
"description": "The same value written by StandardSerializer with integrity checking off (@cache(integrity_checking=False), key suffix 0s): the payload is the value's plain MessagePack, with no ByteStorage envelope, and the header records compressed false, which is what an encrypted write of it authenticates in its AAD (spec/encryption.md: the AAD inputs reflect what the write produced).",
"value_json": {
"user_id": 42,
"name": "cachekit",
"active": true
},
"frame_hex": "434b030000007e7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a2066616c73652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": false,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "arrow_compression_off_write",
"description": "DataFrame write via an ArrowSerializer(compression=None) instance: CK v3 frame wrapping [8-byte xxHash3-64 checksum][Arrow IPC file] with uncompressed buffers. The header records compressed false and the bare class name ArrowSerializer; spec/encryption.md gives this write's AAD inputs as (\"arrow\", false, original_type=\"arrow\"). Arrow IPC bytes are NOT canonical across pyarrow versions (this vector: pyarrow 25.0.0) \u2014 verify frame structure and envelope detection only, never IPC bytes.",
"frame_hex": "434b03000000827b2273223a20224172726f7753657269616c697a6572222c20226d223a207b22666f726d6174223a20226172726f77222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a2066616c73652c20226f726967696e616c5f74797065223a20226172726f77227d2c202276223a2022322e30227d94f3165d68ca34a14152524f57310000ffffffff080300001000000000000a000e000600050008000a000000000104001000000000000a000c000000040008000a0000005c02000004000000010000000c00000008000c0004000800080000003402000004000000260200007b22696e6465785f636f6c756d6e73223a205b7b226b696e64223a202272616e6765222c20226e616d65223a206e756c6c2c20227374617274223a20302c202273746f70223a20322c202273746570223a20317d5d2c2022636f6c756d6e5f696e6465786573223a205b7b226e616d65223a206e756c6c2c20226669656c645f6e616d65223a206e756c6c2c202270616e6461735f74797065223a2022756e69636f6465222c20226e756d70795f74797065223a2022737472222c20226d65746164617461223a207b22656e636f64696e67223a20225554462d38227d7d5d2c2022636f6c756d6e73223a205b7b226e616d65223a20226964222c20226669656c645f6e616d65223a20226964222c202270616e6461735f74797065223a2022696e743634222c20226e756d70795f74797065223a2022696e743634222c20226d65746164617461223a206e756c6c7d2c207b226e616d65223a202273636f7265222c20226669656c645f6e616d65223a202273636f7265222c202270616e6461735f74797065223a2022666c6f61743634222c20226e756d70795f74797065223a2022666c6f61743634222c20226d65746164617461223a206e756c6c7d5d2c202261747472696275746573223a207b7d2c202263726561746f72223a207b226c696272617279223a202270796172726f77222c202276657273696f6e223a202232352e302e30227d2c202270616e6461735f76657273696f6e223a2022332e302e33227d00000600000070616e6461730000020000004800000004000000d0ffffff00000103100000001c00000004000000000000000500000073636f7265000600080006000600000000000200100014000800060007000c00000010001000000000000102100000001c0000000400000000000000020000006964000008000c0008000700080000000000000140000000ffffffffb800000014000000000000000c0016000600050008000c000c0000000003040018000000200000000000000000000a0018000c00040008000a0000005c0000001000000002000000000000000000000004000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000100000000000000010000000000000000000000002000000020000000000000000000000000000000200000000000000000000000000000001000000000000000200000000000000000000000000f83f0000000000000440ffffffff00000000100000000c001400060008000c0010000c00000000000400380000002400000004000000010000001803000000000000c00000000000000020000000000000000000000000000a000c000000040008000a0000005c02000004000000010000000c00000008000c0004000800080000003402000004000000260200007b22696e6465785f636f6c756d6e73223a205b7b226b696e64223a202272616e6765222c20226e616d65223a206e756c6c2c20227374617274223a20302c202273746f70223a20322c202273746570223a20317d5d2c2022636f6c756d6e5f696e6465786573223a205b7b226e616d65223a206e756c6c2c20226669656c645f6e616d65223a206e756c6c2c202270616e6461735f74797065223a2022756e69636f6465222c20226e756d70795f74797065223a2022737472222c20226d65746164617461223a207b22656e636f64696e67223a20225554462d38227d7d5d2c2022636f6c756d6e73223a205b7b226e616d65223a20226964222c20226669656c645f6e616d65223a20226964222c202270616e6461735f74797065223a2022696e743634222c20226e756d70795f74797065223a2022696e743634222c20226d65746164617461223a206e756c6c7d2c207b226e616d65223a202273636f7265222c20226669656c645f6e616d65223a202273636f7265222c202270616e6461735f74797065223a2022666c6f61743634222c20226e756d70795f74797065223a2022666c6f61743634222c20226d65746164617461223a206e756c6c7d5d2c202261747472696275746573223a207b7d2c202263726561746f72223a207b226c696272617279223a202270796172726f77222c202276657273696f6e223a202232352e302e30227d2c202270616e6461735f76657273696f6e223a2022332e302e33227d00000600000070616e6461730000020000004800000004000000d0ffffff00000103100000001c00000004000000000000000500000073636f7265000600080006000600000000000200100014000800060007000c00000010001000000000000102100000001c0000000400000000000000020000006964000008000c0008000700080000000000000140000000300300004152524f5731",
"expected_header": {
"s": "ArrowSerializer",
"m": {
"format": "arrow",
"encoding": "utf-8",
"compressed": false,
"original_type": "arrow"
},
"v": "2.0"
},
"arrow_detection": {
"checksum_len": 8,
"checksum_hex": "94f3165d68ca34a1",
"ipc_magic_offset": 8,
"ipc_magic": "ARROW1"
},
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "std_recorded_as_given_frame",
"description": "Constructed: default_saas_write_msgpack_bytestorage_bin's payload and metadata under the recorded name std, the frame a writer that records an alias as given would store. A reader configured with \"default\" MUST miss on it, since it records std, not the canonical name; one that resolves the recorded name through its own alias table before it compares returns the value.",
"value_json": {
"user_id": 42,
"name": "cachekit",
"active": true
},
"frame_hex": "434b03000000797b2273223a2022737464222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"expected_header": {
"s": "std",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack"
},
"v": "2.0"
},
"expected_payload_hex": "94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"payload_envelope": {
"encoding": "rmp_serde positional fixarray(4); compressed_data encodes as msgpack bin (serde_bytes, protocol 1.1); checksum [u8;8] stays an array of integers",
"envelope_encoding": "bin",
"compressed_data_hex": "f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"checksum_hex": "daf468618e624bfe",
"original_size": 32,
"format": "msgpack",
"inner_msgpack_hex": "83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3"
},
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
}
],
"error_vectors": [
{
"name": "truncated_frame",
"frame_hex": "434b03",
"error": "shorter than the 7-byte fixed prefix (magic + version + header length)",
"rejected_by": "prefix_length",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "unsupported_frame_version",
"frame_hex": "434b04000000027b7d",
"error": "frame version 4 (only version 3 is defined)",
"rejected_by": "version",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "header_overrun",
"frame_hex": "434b03000000ff7b7d",
"error": "declared header length (255) exceeds the bytes present in the frame",
"rejected_by": "header_length",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "ck_frame_fed_to_interop_reader",
"frame_hex": "434b030000004d7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022636f6d70726573736564223a2066616c73657d2c202276223a2022322e30227d68656c6c6f2c2063616368656b697421",
"error": "not a single well-formed MessagePack document: 0x43 is fixint 67, so the frame is one 1-byte document plus trailing bytes. Interop readers MUST consume exactly one document and reject trailing bytes; on failure, a 0x43 0x4B prefix SHOULD be reported as 'Python-SDK-internal auto-mode entry \u2014 not an interop value'"
},
{
"name": "truncated_frame_one_short",
"frame_hex": "434b03000000",
"error": "6 bytes, one short of the 7-byte fixed prefix: the default write's magic, version and the first three bytes of its header length",
"rejected_by": "prefix_length",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "unsupported_frame_version_2",
"frame_hex": "434b020000007d7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"error": "default_saas_write_msgpack_bytestorage_bin with frame version 2, one below the only defined version. A reader that rejects only versions above 3 returns the value, because header and payload are intact",
"rejected_by": "version",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "header_overrun_by_one",
"frame_hex": "434b030000007e7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d",
"error": "default_saas_write_msgpack_bytestorage_bin's prefix and header with no payload, the declared header length one past the bytes present. A reader that slices the header to the bytes present gets the real header and an empty payload",
"rejected_by": "header_length",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "bare_envelope_fed_to_frame_reader",
"frame_hex": "94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"error": "default_saas_write_msgpack_bytestorage_bin's payload alone: a bare ByteStorage envelope, cachekit-ts's default auto-mode container. cachekit-py MUST NOT decode another SDK's container; it has no CK magic",
"rejected_by": "magic",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "plain_msgpack_fed_to_frame_reader",
"frame_hex": "83a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c3",
"error": "default_saas_write_msgpack_bytestorage_bin's value as plain MessagePack, the container of cachekit-rs and of cachekit-ts with compression off. cachekit-py MUST NOT decode another SDK's container; it has no CK magic",
"rejected_by": "magic",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "unsupported_frame_version_4",
"frame_hex": "434b040000007d7b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"error": "default_saas_write_msgpack_bytestorage_bin with frame version 4, one above the only defined version. A reader that rejects only versions below 3 returns the value, because header and payload are intact",
"rejected_by": "version",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "serializer_name_missing",
"frame_hex": "434b030000006d7b226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"error": "default_saas_write_msgpack_bytestorage_bin with no serializer name in its header (no 's'). An entry that records no serializer name is a mismatch for every reader, so a miss. A reader that treats a nameless frame as a match returns the value, because the payload is intact",
"rejected_by": "serializer_name",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "serializer_name_empty",
"frame_hex": "434b03000000767b2273223a2022222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b227d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"error": "default_saas_write_msgpack_bytestorage_bin with an empty serializer name ('s': \"\"), which records no name either: a mismatch for every reader, so a miss. A reader that checks only that 's' is present returns the value",
"rejected_by": "serializer_name",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
}
],
"encrypted_reader": {
"master_key_hex": "1111111111111111111111111111111111111111111111111111111111111111",
"tenant_id": "00000000-0000-4000-8000-00000000000a",
"tenant_source": "reader",
"cache_key": "python-frame-vector"
},
"encrypted_read_vectors": [
{
"name": "forged_plaintext_encrypted_false",
"description": "default_saas_write_msgpack_bytestorage_bin's plaintext payload under a header that adds \"encrypted\": false. An attacker with backend write access can write this frame. An encrypted cache MUST NOT let the header downgrade it to the plaintext read path, and MUST fail closed.",
"frame_hex": "434b03000000917b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b222c2022656e63727970746564223a2066616c73657d2c202276223a2022322e30227d94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack",
"encrypted": false
},
"v": "2.0"
},
"expected_payload_hex": "94c422f01183a7757365725f69642aa46e616d65a863616368656b6974a6616374697665c398ccdaccf46861cc8e624bccfe20a76d73677061636b",
"header_claims": "plaintext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "forged_plaintext_orjson",
"description": "the same value written by cachekit-py's orjson serializer with encryption off: the header names another serializer (s: orjson) and claims no encryption. An encrypted cache MUST fail closed, whether it refuses the serializer name or the plaintext claim first.",
"frame_hex": "434b030000007b7b2273223a20226f726a736f6e222c20226d223a207b22666f726d6174223a20226f726a736f6e222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a2066616c73652c20226f726967696e616c5f74797065223a20226f726a736f6e227d2c202276223a2022322e30227d208963cc6973b4127b22616374697665223a747275652c226e616d65223a2263616368656b6974222c22757365725f6964223a34327d",
"expected_header": {
"s": "orjson",
"m": {
"format": "orjson",
"encoding": "utf-8",
"compressed": false,
"original_type": "orjson"
},
"v": "2.0"
},
"expected_payload_hex": "208963cc6973b4127b22616374697665223a747275652c226e616d65223a2263616368656b6974222c22757365725f6964223a34327d",
"header_claims": "plaintext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "ciphertext_key_not_in_keyring",
"description": "the value sealed by cachekit-py for the reader's tenant under another master key, one the reader's keyring lacks (its key_fingerprint names that key). The ciphertext does not authenticate under the reader's key, so the read MUST fail closed, whatever its tamper policy.",
"frame_hex": "434b03000001237b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b222c2022656e63727970746564223a20747275652c202274656e616e745f6964223a202230303030303030302d303030302d343030302d383030302d303030303030303030303061222c2022656e6372797074696f6e5f616c676f726974686d223a20224145532d3235362d47434d222c20226b65795f66696e6765727072696e74223a20226337383732643939646465386466373732363562376636313031646430646465227d2c202276223a2022322e30227d2ee0c1cd440e58cf00000000599c098a00612ea8f89fab1968dcc497e57ea48d72d1a4a043ef749b82310e237c09ac5df9d26339016672916f02e5c951a946e977a3a8fcd56cd6bf561048938770288cf4ebbec91a1cd2",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack",
"encrypted": true,
"tenant_id": "00000000-0000-4000-8000-00000000000a",
"encryption_algorithm": "AES-256-GCM",
"key_fingerprint": "c7872d99dde8df77265b7f6101dd0dde"
},
"v": "2.0"
},
"expected_payload_hex": "2ee0c1cd440e58cf00000000599c098a00612ea8f89fab1968dcc497e57ea48d72d1a4a043ef749b82310e237c09ac5df9d26339016672916f02e5c951a946e977a3a8fcd56cd6bf561048938770288cf4ebbec91a1cd2",
"header_claims": "ciphertext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "ciphertext_other_tenant",
"description": "the value sealed by cachekit-py under the reader's master key for tenant 00000000-0000-4000-8000-00000000000b. A reader that resolves its own tenant (00000000-0000-4000-8000-00000000000a) derives another key and builds another AAD, so the ciphertext does not authenticate and the read MUST fail closed. A reader that takes the tenant from the unauthenticated header decrypts it.",
"frame_hex": "434b03000001237b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b222c2022656e63727970746564223a20747275652c202274656e616e745f6964223a202230303030303030302d303030302d343030302d383030302d303030303030303030303062222c2022656e6372797074696f6e5f616c676f726974686d223a20224145532d3235362d47434d222c20226b65795f66696e6765727072696e74223a20223062643338336362353530313633333932376633383133323832366532613363227d2c202276223a2022322e30227d2ee0c1cd440e58d000000000203bd9f2aa9fbcce7bdb457dcfe5a7525b3f0bc1e8cdc335f917de5c4406b55d51235d9f439b9f75ec6bdcba52f4608e76c4bbf5a2c66d8218b6d25dbe86c77e53bdd6ee2b761d94dadb11",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack",
"encrypted": true,
"tenant_id": "00000000-0000-4000-8000-00000000000b",
"encryption_algorithm": "AES-256-GCM",
"key_fingerprint": "0bd383cb5501633927f38132826e2a3c"
},
"v": "2.0"
},
"expected_payload_hex": "2ee0c1cd440e58d000000000203bd9f2aa9fbcce7bdb457dcfe5a7525b3f0bc1e8cdc335f917de5c4406b55d51235d9f439b9f75ec6bdcba52f4608e76c4bbf5a2c66d8218b6d25dbe86c77e53bdd6ee2b761d94dadb11",
"header_claims": "ciphertext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "ciphertext_plain_msgpack_not_envelope",
"description": "the value's plain MessagePack (default_saas_write_msgpack_bytestorage_bin's inner value, with no ByteStorage envelope), sealed under the reader's own key, tenant and AAD, in the frame of a real encrypted default write, whose header claims format msgpack, compressed true and original_type msgpack. The reader is configured for a ByteStorage envelope, and the container after decryption is the configured one and a parse mismatch hard-fails (spec/encryption.md), so the read MUST fail closed. A reader that falls back to plain MessagePack, or picks the container by looking at the bytes, returns the value. Sealed with a fixed nonce by tools/python-frame-reference.py, which checks that the same frame over the envelope reads back as the value.",
"frame_hex": "434b03000001237b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b222c2022656e63727970746564223a20747275652c202274656e616e745f6964223a202230303030303030302d303030302d343030302d383030302d303030303030303030303061222c2022656e6372797074696f6e5f616c676f726974686d223a20224145532d3235362d47434d222c20226b65795f66696e6765727072696e74223a20223536653635363638303265306432303137346265313137353464343632346463227d2c202276223a2022322e30227da0a1a2a3a4a5a6a7a8a9aaabab6a056afdeb7aadd867f67f07a496e4487bd53588d0a4d64aa5199b749254209a94f25a8a629cac9636b8ef80a3f8d5",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack",
"encrypted": true,
"tenant_id": "00000000-0000-4000-8000-00000000000a",
"encryption_algorithm": "AES-256-GCM",
"key_fingerprint": "56e6566802e0d20174be11754d4624dc"
},
"v": "2.0"
},
"expected_payload_hex": "a0a1a2a3a4a5a6a7a8a9aaabab6a056afdeb7aadd867f67f07a496e4487bd53588d0a4d64aa5199b749254209a94f25a8a629cac9636b8ef80a3f8d5",
"header_claims": "ciphertext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "ciphertext_plain_msgpack_claims_uncompressed",
"description": "ciphertext_plain_msgpack_not_envelope with its header and AAD claiming compressed false, which plain MessagePack is: the ciphertext authenticates under the reader's own key and AAD. The reader is configured for a ByteStorage envelope and the container after decryption is the configured one, never one the stored flag picks (spec/encryption.md), so the read MUST fail closed. A reader that takes the container from the flag reads plain MessagePack and returns the value. Sealed with a fixed nonce by tools/python-frame-reference.py, which checks that the same frame over the envelope reads back as the value.",
"frame_hex": "434b03000001247b2273223a202264656661756c74222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a2066616c73652c20226f726967696e616c5f74797065223a20226d73677061636b222c2022656e63727970746564223a20747275652c202274656e616e745f6964223a202230303030303030302d303030302d343030302d383030302d303030303030303030303061222c2022656e6372797074696f6e5f616c676f726974686d223a20224145532d3235362d47434d222c20226b65795f66696e6765727072696e74223a20223536653635363638303265306432303137346265313137353464343632346463227d2c202276223a2022322e30227da0a1a2a3a4a5a6a7a8a9aaabab6a056afdeb7aadd867f67f07a496e4487bd53588d0a4d64aa5199b74925420ccfd1ae0413d4f16a2e2a438939ae1b4",
"expected_header": {
"s": "default",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": false,
"original_type": "msgpack",
"encrypted": true,
"tenant_id": "00000000-0000-4000-8000-00000000000a",
"encryption_algorithm": "AES-256-GCM",
"key_fingerprint": "56e6566802e0d20174be11754d4624dc"
},
"v": "2.0"
},
"expected_payload_hex": "a0a1a2a3a4a5a6a7a8a9aaabab6a056afdeb7aadd867f67f07a496e4487bd53588d0a4d64aa5199b74925420ccfd1ae0413d4f16a2e2a438939ae1b4",
"header_claims": "ciphertext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "ciphertext_serializer_name_auto",
"description": "the reader's own encrypted write of the value, sealed by cachekit-py under its key, tenant and AAD, with the header's serializer name changed to auto. The name is not an AAD input, so the ciphertext still authenticates and decrypts to the default write's envelope, which the default serializer decodes to the value; generate checks that the same frame recording default reads back as the value. A reader configured with \"default\" MUST miss on it, as on the plaintext name-check frames (spec/cache-key-format.md); one that compares the name only on plaintext entries returns the value.",
"frame_hex": "434b03000001207b2273223a20226175746f222c20226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b222c2022656e63727970746564223a20747275652c202274656e616e745f6964223a202230303030303030302d303030302d343030302d383030302d303030303030303030303061222c2022656e6372797074696f6e5f616c676f726974686d223a20224145532d3235362d47434d222c20226b65795f66696e6765727072696e74223a20223536653635363638303265306432303137346265313137353464343632346463227d2c202276223a2022322e30227d7e1fe675ce59126c000000000e76957ecae4efc3119fbd1740efd5539dda7c3e9b556fdcefeaa741a3ff0e8733efafb61949713572cd2bc6f77fb2cf5fbbbb931965ebce85ffb1b7b06a62e2996d3a33e85657e3a3c8f1",
"expected_header": {
"s": "auto",
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack",
"encrypted": true,
"tenant_id": "00000000-0000-4000-8000-00000000000a",
"encryption_algorithm": "AES-256-GCM",
"key_fingerprint": "56e6566802e0d20174be11754d4624dc"
},
"v": "2.0"
},
"expected_payload_hex": "7e1fe675ce59126c000000000e76957ecae4efc3119fbd1740efd5539dda7c3e9b556fdcefeaa741a3ff0e8733efafb61949713572cd2bc6f77fb2cf5fbbbb931965ebce85ffb1b7b06a62e2996d3a33e85657e3a3c8f1",
"header_claims": "ciphertext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
},
{
"name": "ciphertext_serializer_name_missing",
"description": "ciphertext_serializer_name_auto's write with no serializer name in its header. An entry that records no serializer name is a mismatch for every reader, so the read MUST miss; one that checks for a name only on plaintext entries decrypts it and returns the value.",
"frame_hex": "434b03000001137b226d223a207b22666f726d6174223a20226d73677061636b222c2022656e636f64696e67223a20227574662d38222c2022636f6d70726573736564223a20747275652c20226f726967696e616c5f74797065223a20226d73677061636b222c2022656e63727970746564223a20747275652c202274656e616e745f6964223a202230303030303030302d303030302d343030302d383030302d303030303030303030303061222c2022656e6372797074696f6e5f616c676f726974686d223a20224145532d3235362d47434d222c20226b65795f66696e6765727072696e74223a20223536653635363638303265306432303137346265313137353464343632346463227d2c202276223a2022322e30227d7e1fe675ce59126c000000000e76957ecae4efc3119fbd1740efd5539dda7c3e9b556fdcefeaa741a3ff0e8733efafb61949713572cd2bc6f77fb2cf5fbbbb931965ebce85ffb1b7b06a62e2996d3a33e85657e3a3c8f1",
"expected_header": {
"m": {
"format": "msgpack",
"encoding": "utf-8",
"compressed": true,
"original_type": "msgpack",
"encrypted": true,
"tenant_id": "00000000-0000-4000-8000-00000000000a",
"encryption_algorithm": "AES-256-GCM",
"key_fingerprint": "56e6566802e0d20174be11754d4624dc"
},
"v": "2.0"
},
"expected_payload_hex": "7e1fe675ce59126c000000000e76957ecae4efc3119fbd1740efd5539dda7c3e9b556fdcefeaa741a3ff0e8733efafb61949713572cd2bc6f77fb2cf5fbbbb931965ebce85ffb1b7b06a62e2996d3a33e85657e3a3c8f1",
"header_claims": "ciphertext",
"outcome": "fail_closed",
"generator": "cachekit 0.22.0 (PyPI wheel; Rust core via PyO3), generated by tools/python-frame-reference.py generate"
}
]
}