Files
benilla-octo/crates
gromandClaude Opus 5 c0685f0273 formats: the realm's tenth race, and what it switched on
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
2026-10-31 19:44:37 -06:00
..