Null Tolerant Double Serializer
A Double serializer that tolerates a JSON null on decode, mapping it to whenNull, while keeping the field a non-nullable Double.
Why this exists. A control's unbounded bounds are ±∞, and an EventGenerator's "run forever" value is +∞. Over the MCP wire, a document's structuredContent sanitizes every non-finite double to null (the transport's serializer cannot carry ±∞ — it would hang). Because ControlData.value/lowerBound/upperBound are non-nullable Double, a re-ingested null would otherwise fail to decode, so run_template's output was not accepted by run_config. This serializer accepts that null as the field's canonical non-finite value, restoring the round-trip.
Encoding is deliberately unchanged: the finite-or-non-finite double is written as-is (JSON Infinity/-Infinity under allowSpecialFloatingPointValues, TOML's native inf), so no output format changes and no other codec or consumer is affected — only decode gains the null tolerance. A literal Infinity/-Infinity/inf/NaN on the wire (an already-saved document) still decodes normally through the underlying primitive.