Hi,
Personal opinion here: also default off but with the possibility of exceptions for heuristic known to have a low rate of false positive (value of low to be defined, of course).
The example I have in mind is (of course) Thrift where it is documented in the code to be very conservative in heuristic mode and tries much harder when forced with Decode As.
I think that the difficulty with this approach is to define the “acceptable” rate of false positive (which may very well exclude Thrift anyway).
The more magic/fixed bits and bytes the protocol has, mostly in a header, the less false positive it will generate.
My 2 cents,
Triton.