From 6c902fd449740dd21c61a717f6cbf3ffbe8adb6f Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 14 Oct 2026 03:19:03 +0200 Subject: [PATCH] cultlib-gaps map: P17 records the mixed-width NaN key refusal as a deliberate exception (py-msgpack-default r5) Co-Authored-By: Claude Opus 5.5 --- docs/cultlib-gaps-map.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/cultlib-gaps-map.md b/docs/cultlib-gaps-map.md index 63d24d14..94f02e22 100644 --- a/docs/cultlib-gaps-map.md +++ b/docs/cultlib-gaps-map.md @@ -487,6 +487,14 @@ refused both ways as `duplicate_map_key`. On the mixed-width pair this refuses s the same kind of residual as `1` beside `1.0`. The other choice would read two float64 NaN keys that the reference refuses. +Revision 5 records this as a deliberate exception to ruling `leaf-acceptance-follows-reference`, because Python +cannot tell the two widths apart (msgpack-python decodes both to one `float`) and no ruling lets the codec read a +pair the reference refuses. Soul s4 probed the C# behaviour: `Dictionary{float.NaN, double.NaN}` +serialises as `82 ca ffc00000 01 cb fff8000000000000 02`, the reference reads it back as two keys, and cultcache-py +refuses it on read as `duplicate_map_key` (base `a59bbc7d` accepted that read). Every same-width NaN pair, with +equal or different payload bits and with +NaN beside -NaN, is refused by both runtimes. The exception lives where a +consumer reads it: the cultcache-py README's Wire Parity section, pinned by a test vector (the bytes above). + ## D. cultcache-rs decode stack safety (cut `decode-stack-safety`) Pinned base: `origin/main` at `ae6ef5a8` (2026-10-14). Imagination pass `imagination-decode-stack`, session