48ebec985b
Previous approach baked playerCoaDispels into group.coaRaidFilter during OnLayoutApplied, which can fire before PLAYER_LOGIN when C_Player isn't ready yet — Venomancer and other CoA classes got cached as false and never re-evaluated. Fix: move all CoA logic into scan() itself so it runs on every PLAYER_ENTERING_WORLD update. getCoaDispels() no longer caches when C_Player is unavailable (returns nil without storing), so the first successful in-world call populates it correctly. updateGroup() is restored to its original form — no group.coaRaidFilter. scan() intercepts filter=="HARMFUL|RAID", calls getCoaDispels(), and if a dispel set is found strips |RAID and applies the per-type check inline.