v4.7.4
What's new
xCT+ Classic
v4.7.4 (2026-09-02)
Full Changelog Previous Releases
- v4.7.4: Fix seven bugs, remove dead code, add static analysis
Seven user-visible bugs, none previously caught because no static
analysis had ever run against this addon.
Bug fixes:- compat.lua installed byte-based string.utf8* stubs and loads before
libs/, so libs/UTF8 (which only fills empty slots) was skipped
entirely. Every utf8.sub was a raw byte slice, corrupting the first
character of the localized Stole/Killed/Dispelled labels on all
non-ASCII locales -- a zhCN locale ships with the addon. - The Proc Name filter input referenced an undefined setProc. AceConfig
accepts a nil setter and silently ignores it, so typing a proc name
appeared to work but wrote nothing. Now uses setSpell. - Outgoing "Show Overhealing" was gated on the incoming Healing frame's
enableOverHeal; its own toggle was never read. - Outgoing "Show Absorbs" was gated on enableOutAbsorbs ("absorbs you
apply") rather than enableAbsorbs, written for exactly this case. - "Merge Ranged Attacks" was bypassed: auto shot merged under "Merge
Melee Swings". Each toggle now governs its own attack type. - "Show Periodic Energy Gains" lost its gate when periodic energize was
folded into SpellEnergize. Re-gated on the SPELL_PERIODIC prefix. - KILLCOMMAND_ID was 83381, the Cataclysm-era pet damage spell, absent
on TBC and Era, so the option never fired and pet Kill Command damage
was labelled as auto attack. Corrected to 34026, matching the id
already used one line above to resolve the spell name.
All re-wired settings default to true, matching the toggle that was
wrongly governing them, so a default profile is unchanged.
Also: the C_AddOns shim omitted EnableAddOn/IsAddOnLoaded/LoadAddOn,
which libs/LibSink-2.0 upvalues at load.
Performance: - The per-frame alpha worker ran an OnUpdate over every frame from load
forever, though the default profile leaves all frames opaque and the
loop produced nothing. Now armed only while a frame uses custom alpha.
Cleanup (-192/+106): - Removed the never-called table pool, the unreachable battle-pet loot
branch (also the only unguarded C_PetJournal call), five orphaned
accessors, eight unused option helpers, CLASS_LOOKUP, the never-read
PLAYER_NAME block, addon.IsTBC, duplicate width keys and dead stores. - Deleted config/merge_race.lua and config/merge_item.lua (payload
entirely commented out, referencing retail-only races and items) and
media/colors.lua (no content, and never listed in media/include.xml,
so it shipped without ever being loaded). - SCHOOL_MASK_* moved from config/profile.lua to compat.lua and now
fills gaps instead of overwriting Blizzard's globals.
Added .luacheckrc describing the addon's WoW API surface. Static
analysis: 434 warnings -> 39, with zero undefined globals. The rest is
mixed tab/space indentation, deliberately left rather than churn 14k
lines.
Not yet verified in game.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01AWwEY7j7phYrfcxJZsQDVb
- compat.lua installed byte-based string.utf8* stubs and loads before
This mod has no additional files

