JD.string vs Evts.targetValue, shouldn't the former throw a compile time error?

Html.Events.on takes a Decoder msg as its second argument and JD.map (UpdateRecVal recId currVal) JD.string is a valid Decoder msg. However it will fail to decode an event, as it is not a string, and therefore the message won’t go to update, as documented in Html.Events.on.

Also note that targetValue is just JD.at ["target", "value"] JD.string.

So everything is fine at compile time, the decoder failure only occurs at runtime.
What compilation error would you have expected?

PS: have a look at Json.Decode debug helpers for some helpers to debug decoders.