Dual encoding for categoryKind (int 0..5 OR
"stance"/"form"/"aspect"/"presence"/"posture"/"sigil");
exclusive accepts bool or int. members[] serializes as a
plain JSON array of spell IDs — directly editable for
adding or removing spells from a mutex group without
touching the binary.
All 3 presets (warrior/druid/all) byte-identical
roundtrip OK. Token-form import smoke-tested with mixed
preset values. CLI flag count 1117 -> 1119.
Novel replacement for the hardcoded class-mutex tables
the WoW client uses to grey out incompatible action-bar
buttons. Each entry is one mutually-exclusive spell
group: Warrior stances (Battle/Defensive/Berserker),
Druid shapeshift forms (Bear/Cat/Travel/Tree/Moonkin),
Hunter aspects (Hawk/Cheetah/Pack/Viper/Dragonhawk/Beast/
Wild), DK presences (Frost/Unholy/Blood). The action-bar
update path uses the catalog to know which spells share
a mutex bucket and clear "currently active" outlines
when a sibling is cast.
Six categoryKind enum values (Stance / Form / Aspect /
Presence / Posture / Sigil) and variable-length members[]
array of spell IDs (refs WSPL). Three presets:
makeWarrior (Warrior 3-stance), makeDruid (5 shapeshift
+ 2 flight, separate buckets so flying isn't broken by
Cat Form), makeAllMutex (cross-class catalog with one
representative group per mutex-having class).
Validator catches several authoring bugs: empty members[]
(group has nothing to switch between), spellId 0,
duplicate spellId within a group, and — most usefully —
the same spellId appearing in two different exclusive
groups (which would make the action-bar mutex
undecidable: which group's outline does the bar use?).
Warns on single-member groups (mutex with one element
has no exclusion to enforce).
Format count 98 -> 99 (one short of triple-digit
milestone). CLI flag count 1112 -> 1117.