22 lines
1.5 KiB
Markdown
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.
|