This narrows it down a lot. I hadn’t thought to subtract the configs first and treat the common terms as canceled, but the 0.42–0.78 bits/element excess makes the search space much cleaner.
The scale-cost observation is especially interesting. A ~0.5 bit/element config-dependent term landing that close to the historical K4V2 result is enough that I want to inspect the counter before spending time on the packer.
I don’t want to answer the group-size question from memory. I’m going to verify two things directly in the implementation: whether V2 and V4 use the same group size, and whether the scale/zero tensors are included in the counted representation identically in both paths.
I also like the incompressible-code test. If the serializer still reports ~6.1x on uniformly distributed 2-bit symbols, that pretty cleanly turns this into an accounting problem rather than a data-dependent compression explanation.
I’ll trace those two config paths and report back with the actual group sizes and byte components rather than speculate. Thank you for taking the time Dipankar, this is extremely helpful.