Four goldens, and three of them turn out to be the same fact: `ChrRaces.dbc`
has a tenth row — id 10, **High Elf**, on the Blood Elf art (`ClientFileString`
"BloodElf"), Alliance-side.
- **Every talent tab opened to it.** All 27 `TalentTab` rows went raceMask
511 -> 1023, so race 10 takes every class's tree rather than being gated out
of any; the test asserted the opposite, that "race bit 10 is outside 511".
`Talent.dbc` itself was rebuilt too — 476 rows, 317 ids added, 273 removed,
159 changed — so the trees are the realm's, not 1.12's.
- **Dwarf Mages are real here, and the gate was already written for it.**
`chain_is_stock` calls a chain stock when no playable race exceeds 8, so this
install read as stock until race 10 arrived and the `UNUSED_COMBOS`
Dwarf-Mage skip kept applying; the test's "patched chain or not" passed by
accident. The skip only ever modelled a compare in the *stock* executable at
`0x4706b0`, and this install's own `WoW.exe` has none — the whole builder
holds no immediate compare against 3 or 8 and gates on a `0xFE` sentinel
(`cmpb $0xfe,0x1(%ecx)` at `0x4706e8`). Re-verified against the binary rather
than trusted from the comment. `CharBaseInfo` grew 103 -> 139 bytes, which at
2 bytes a row is 18 new race/class pairs.
- **`CharHairGeosets` was re-authored, and took a test's only coverage with
it.** 299 rows against 148, 136 of the survivors rewritten, and 1.12's one
duplicated key — the goblin male's variation 0, listed four times as geosets
1, 2, 1, 2 — is gone with none replacing it. That key was the *only* thing
exercising the loader's first-row-wins rule, so re-recording the count alone
would have quietly dropped it: `or_insert` could have become `insert` and
nothing would have noticed. The hair decode is now a `hair_geosets_from_bytes`
seam and a synthetic DBC replays 1.12's goblin block to pin the rule, plus
the reverse order to prove the later row is discarded and not merged. The
real-data test asserts the absence instead. Race 9 is where the re-authoring
shows: the goblin has a full hair set for both sexes now, 14 male variations
and 17 female, and the male's variation 0 is `GeosetID` 0 where 1.12's
winning row said 1 — both land on scalp geoset 1, since `visible_geosets`
takes `max(1, GeosetID)`.
Also:
- **WorldStateUI** 20 -> 34 rows, and the realm rewrote the text and tooltip on
every one of 1.12's 20. Only 33 ids are distinct — **168 ships twice**, both
map 0 / area 44, one reading "Banners Controlled: %3809w" and one "Tower
Score : %3811w / %3813w". Safe, and checked rather than assumed: the catalog
exposes no id lookup at all, only `rows()`, and the app filters by (map,
area), so both readouts reach the frame — which is the only thing two rows
under one id can have been meant to do. Four zones narrow by area where 1.12
had two, the new three being outdoor PvP: Redridge Mountains, Hillsbrad
Foothills and Silithus. Live `StateVariable`s run to 3810 where 1.12's three
all sat under 3000.
- **WMOAreaTable** 21115 -> 26653 rows and 21105 -> 26570 distinct
(wmo, nameset, group) keys, so the repeats went 10 -> 83; 5633 ids added, 95
removed, 4080 changed.
benilla-formats: 16 -> 11 failures (and one test more than before). `cargo fmt`
and `clippy -p benilla-formats --all-targets` clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn