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

1.5 KiB

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.