We have had a few issues with the constants files. One interesting one was that if you upgrade Sereal while processes are running and which have loaded Sereal::(De|En)coder, but not yet loaded the constants file, and then after the upgrade loads the constants file then if there are any changes in the list of constants expected things go boom. Another was how the version of the file was declared. I had some other subtle issues with the constants generation as well. A much simpler approach is to do this in author_tools/update_from_header.pl where we have most of the logic to extract the defines anyway. This also means that it is possible to load the Sereal constants without loading either the decoder or the encoder. We probably should do the same thing in the splitter/merger.
Yves added this in Sereal-3.001_005-2-gbc41b7d but we had 0 tests for it, it could still be tested a lot more, but at least this is something. This is a distilled testcase I had with Sereal 3.001 not canonicalizing a structure properly that prompted me to upgrade to 3.005.
(Would not delta-encode well.)