WeakAuras reads class colours inline at two call sites with the
whole-table-pick pattern — no per-key fallback:
WeakAuras/Types.lua:15
local color = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[classFilename]
WeakAuras/AuraEnvironment.lua:108
local classData = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
local coloredName = ("|c%s%s|r"):format(classData.colorStr, name)
When !ClassColors is loaded it injects a vanilla-10-only
CUSTOM_CLASS_COLORS, so the 22 CoA tokens silently miss. Types.lua
returns the white fallback; AuraEnvironment.lua:109 *hard-crashes* on
classData.colorStr.
New file mirrors any RAID_CLASS_COLORS entry that CUSTOM_CLASS_COLORS
is missing, when !ClassColors is loaded. Idempotent — only fills nil
keys, so user customisations win. Loaded after Compatibility.lua and
ahead of every Types/AuraEnvironment call site. !ClassColors added to
OptionalDeps so it loads first when installed.
Same pattern as coa-omen, coa-kui-nameplates, and
coa-shadowedunitframes.