CultLib/docs/research/py-msgpack-default/README.md
Meta Vens 897be76fa8 Research: how JSON became cultcache-py's payload default, and the MessagePack-default probes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:13:41 +02:00

22 lines
1.5 KiB
Markdown

# Python MessagePack default payload: history and probes (2026-10-11)
Serves `cultlib-gaps:ruling:py-msgpack-default` and `cultlib-gaps:cut_spec:cut-py-msgpack-default.r1`.
## How a JSON payload default got into .cc
1. Ghostlight `2531b42` (2026-05-06), the first consumer: "The JSONL store is deliberate bootstrap plumbing", msgpack optional.
2. CultLib `b214daab` (2026-05-24) squashed in `python/cultcache-py` from GameCult/cultcache-py@9b4bbb8a with
`define_document_type` already defaulting to `_json_payload_encoder`; msgpack was an optional extra and the README
promised a standard-library-only bootstrap. JSON was the default because it was the only codec without msgpack.
3. CultLib `a1ef58cb` (2026-06-13) made msgpack a hard dependency but kept the JSON default and the optional-import
guards, so the default outlived its reason.
4. Earlier history is unreachable (GameCult/cultcache-py no longer exists; CultLib holds only the squash). voidbot
`search_history` found no discussion of the choice.
## Probes
- `probe1.py`, `probe2.py`: no runtime records a payload's format in the store, so a reader cannot tell JSON from
MessagePack except by trying; a one-byte JSON payload `0`-`9` is valid MessagePack (48-57); a MessagePack map with
a non-str/bytes key packs but `unpackb` refuses it.
- `rmpprobe/`: `rmp_serde::from_slice` reads a JSON object's bytes as `Number(123)`, which is why Brokkr's daemon must
read exactly one MessagePack value with a trailing-bytes check.