diff --git a/docs/formats/core-data-regions.md b/docs/formats/core-data-regions.md index c22069b..ab7f5ca 100644 --- a/docs/formats/core-data-regions.md +++ b/docs/formats/core-data-regions.md @@ -847,9 +847,33 @@ every level. **63 of the 64 headers imply exactly one stride.** So header to record layout is very nearly a function: the type determines the record size. -The single exception is header `7542eff271b522a79e45348cca4509ff`, which -appears with three strides, 76, 92 and 104. Either three types share a header, -or one of the three is a misparse. Not resolved. +**Resolved: the single exception is three types sharing a header.** + +Header `7542eff271b522a79e45348cca4509ff` was reported with three strides, 76, +92 and 104. It is not one type with a variable stride, and not a misparse. + +It appears **three times per level**, always with record count 9, always in the +same order and always at the same offsets within the region. On level 0 and on +every other level checked: + +| offset | stride | count | first offset | last offset | +|---|---|---|---|---| +| 863842 | 92 | 9 | 928 | 1640 | +| 867554 | 76 | 9 | 912 | 1520 | +| 872866 | 104 | 9 | 1000 | 1832 | + +The offsets are 3,712 apart each time and the strides differ, so these are +three separate chunks that happen to share 16 header bytes. + +**Consequence for the type ID.** 64 distinct headers for 66 distinct +record layouts, not 64 for 64. The header is *nearly* a type ID but does not +uniquely determine the layout: whatever distinguishes these three is not in the +16 bytes the header captures. Candidates not excluded: a distinguishing byte +sits outside the 16 captured, or the layout varies within a type. + +This does not change the earlier conclusion that 63 of 64 headers imply one +stride -- that remains 63 of 64 -- but the mapping is not a bijection and +should not be used as one. **The ASCII reading is confirmed as a type tag.** Grouping by header bytes 9 and 13: