Follow the bytes
Inspect v4 field types, world order and byte offsets using the round-2 test manifest and example record. The example belongs to the 40,000-seed snapshot.
Record blocks
For a two-dimensional field, finish all categories in West before moving to Main, then East. A three-element scalar array, such as totalSpells, instead stores one number per world.
Every scalar offset and example value
“Type ceiling” is the largest representable number for that unsigned type. It is not the observed maximum or a guarantee that larger true counts could not have been clipped by the generator.
Reordering or removing an entry changes the meaning of later bytes. JSON object-key display order is not the binary order; use the arrays below.
Raw records versus chart totals
The public reader’s default compatibility view keeps axes per world but sums the other world fields for older charts. That is a presentation transform, not how the bytes are stored. Calling readSeed(seed, {raw: true}) preserves all world dimensions. The dedicated audit decoder also preserves every field without aggregation.
The reference example is generated together with the snapshot by npm run bake:precook-v4. Ordinary site builds do not read the ignored input folder. All population statistics refer to v4. Check the schema, seed coverage and world scope before applying an aggregate export to a raw record.