Repository navigation
Releases: TytaniumDev/HeadsUpCDM
Releases · TytaniumDev/HeadsUpCDM
Release list
v2026.4.15.0
HeadsUpCDM
v2026.4.15.0 (2026-04-15)
Full Changelog Previous Releases
- fix: restore Ayije CDM coexistence after 3.80 ForceRestyleAll regression (#14)
- fix: prevent Ayije 3.80 ForceRestyleAll from resizing our CDM frames
Ayije 3.80 added a new ForceRestyleAll function (registered as the
"viewers_style" refresh callback) that iterates every active itemFrame
in Essential and BuffIcon viewers and calls ApplyStyle, which calls
frame:SetSize() with Ayjie's configured icon size — resizing our 48x48
frames and breaking visual alignment with our row anchors.
Add a fifth interop patch that hooks CDM.ApplyStyle and early-returns
when the frame is a Blizzard CDM item frame (has cooldownID) in one of
our owned viewers. The cooldownID gate keeps Ayjie's own tracker frames
(Trinkets/Defensives, which are styled with vName=ESSENTIAL but lack
cooldownID) on their normal styling path.
Also extend the version-safety check to require ApplyStyle.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback
- Make Patch 5 conditional on CDM.ApplyStyle existing, and remove
ApplyStyle from the mandatory version gate so Patches 1-4 still
activate on pre-3.80 Ayije builds. - Return false (not bare return) from the ApplyStyle skip path for
consistency with Patches 1-2. - Add a regression test asserting the nil-frame guard delegates safely.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: prevent Ayije 3.80 ForceRestyleAll from resizing our CDM frames
v2026.4.10.3
HeadsUpCDM
v2026.4.10.3 (2026-04-10)
Full Changelog Previous Releases
- fix: pair Double Tap with Rapid Fire for MM hunters (#12)
- fix: pair Double Tap with Rapid Fire for MM hunters
Move the Double Tap buff (473370) from Aimed Shot to Rapid Fire in both
MM_DARK_RANGER and MM_SENTINEL presets. Double Tap modifies Rapid Fire,
so displaying it next to Rapid Fire is the intuitive pairing.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback — regression tests for Double Tap pairing
Add assertions in both MM preset describe blocks that verify Double Tap
is paired with Rapid Fire and that Aimed Shot only carries Bulletstorm.
Protects against accidental reverts.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: pair Double Tap with Rapid Fire for MM hunters
v2026.4.10.2
HeadsUpCDM
v2026.4.10.2 (2026-04-10)
Full Changelog Previous Releases
- fix: restore-to-stock-parent crashes on spec switch (#11)
The do-restore snippet was calling b:SetParent(p) where p was the
ActionButton's original Blizzard bar (MultiBarBottomRight, etc.),
captured via btn:GetParent() at file-load time. In WoW 12.0's
restricted execution environment these stock bar frames are protected
but not "explicitly protected" for SetParent targeting, so the
restricted env rejects the unwrapped handle and throws:
RestrictedFrames.lua:622: Invalid frame handle for SetParent
This fired on the first spec switch (RebuildDisplay -> TeardownDisplay
-> DestroyActionColumn -> SetAttribute("do-restore", ...)).
Cross-checked EllesmereUI: it never restores to stock bar parents and
only SetParents to frames it owns (hiddenParent, UIParent). Strong
evidence that "restore to stock parent" is not a viable pattern in
12.0's restricted env.
Fix: change do-restore to just Hide() the buttons. They remain parented
to UIParent (where do-setup put them) in a neutral hidden state. The
next spec's do-setup repositions and Shows whichever buttons the new
spec needs. Drops the origParents cache and orig-N frame refs entirely
since they served no other purpose.
Trade-off: on addon disable without /reload, buttons used by the active
spec stay hidden on the bar until reload (they don't return to stock
positions). Previously they also didn't return — the restore simply
crashed. Spec switches (the common case) are fully fixed.
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com
v2026.4.10.1
HeadsUpCDM
v2026.4.10.1 (2026-04-10)
Full Changelog Previous Releases
- feat: real ActionButton reparenting via SecureHandler (#10)
- feat: add bar/slot fields to actionbar spell entries
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - feat: add bar-to-button mapping and resolver
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - feat: SecureHandler setup for ActionButton reparenting
Replace static icon creation with SecureHandler restricted code that
reparents real Blizzard ActionButtons to HUD row frames. Falls back
to static icons if the button global is missing.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - feat: teardown restores ActionButtons via SecureHandler
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: reparent ActionButton to UIParent, anchor relative to row
Option A (SetParent to plain row frame) confirmed not working in-game.
Try B1: reparent button to UIParent in restricted code, but SetPoint
relative to our row frame. Button is child of UIParent (always visible)
and positioned at the row's screen location.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: use absolute UIParent offsets for ActionButton positioning (Option B2)
Options A and B1 confirmed not working in-game: restricted code cannot
anchor to non-secure frame refs. Now computing absolute screen position
of each row via GetLeft/GetTop, passing as pipe-delimited attribute,
and anchoring to UIParent with BOTTOMLEFT offsets in restricted code.
Matches EllesmereUI's proven pattern.
Handler trigger is deferred via C_Timer.After(0) so row positions are
finalized by ArrangeColumns before we read them.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: create SecureHandler at file-load time for explicit protection
Runtime-created SecureHandler frames cannot execute protected operations
on Blizzard ActionButtons in WoW 12.0. The handler must be created at
file-load time (before PLAYER_LOGIN) to be "explicitly protected".
Changed to match EllesmereUI's exact pattern:
- Single handler created at file scope (not inside CreateActionColumn)
- SecureHandlerAttributeTemplate (not Base)
- SetAttributeNoHandler for snippet installation
- Indexed frame refs (btn-N, orig-N) and layout attributes (layout-N)
- Triggered via do-setup / do-restore attributes
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- fix: compensate for button scale in position calculation
SetScale affects anchor coordinate interpretation — WoW multiplies
SetPoint offsets by the frame's scale. Divide position by scale before
encoding so the final screen position matches the row location.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: don't apply HUD scale to real ActionButtons
SetScale on an ActionButton interacts with SetPoint offsets in the
restricted code, causing position drift that's hard to compensate for.
Leave real ActionButtons at native scale (48x48, scale 1.0). The HUD
scale slider still applies to the column layout and fallback icons.
If consistent sizing across the HUD becomes important, we can revisit
this trade-off.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - feat: remove HUD scale option, re-anchor buttons on drag
- Remove scale slider from options panel and per-column scale defaults
- Remove SetScale calls from ActionColumn, BuffIcons, Layout (alpha only)
- Re-trigger TriggerActionBarHandlers in OnDragStop so real ActionButtons
follow the HUD when it's repositioned in unlock mode - Update tests to reflect alpha-only column settings
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- fix: don't force-show buff icons on reanchor
Blizzard's CDM manages buff icon visibility based on actual buff state.
Calling frame:Show() unconditionally in ReanchorBuffIcons overrode those
decisions, causing inactive buffs (e.g. Bulletstorm, Moonlight Chakram)
to display at full opacity. Remove the Show call — our job is only to
reposition, not to control visibility.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback
Fixes three real bugs flagged by Claude in the PR review:
- Stale layout-i attributes in TriggerActionBarHandlers: the old
code only wrote layout-i when row coordinates were valid, leaving
stale values from prior triggers. Now always clear invalid slots
via SetAttribute(nil) so the restricted code'sif b and layout thenguard skips them cleanly. Also renamecountto
validCountfor clarity. - Combat-lockdown silent failure in DestroyActionColumn: firing
do-restore during combat is silently blocked because restricted
SetParent/SetPoint can't execute. Buttons would stay reparented to
UIParent until /reload. Now: set a pending flag, warn the user,
and flush from Core.lua's OnCombatDrop handler. Same pattern added
to TriggerActionBarHandlers for combat-lockdown re-trigger. - Persistent origParents cache: a deferred restore would target the
wrong parent if a new CreateActionColumn ran before the flush
(btn:GetParent() would be UIParent, not the real Blizzard bar).
File-level weak-keyed table captures the TRUE original parent the
first time we see each button and never overwrites it.
Also: clear btn-count in the restricted do-restore block so a stale
do-setup can't act on already-restored refs.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Sonnet 4.6 noreply@anthropic.com - feat: add bar/slot fields to actionbar spell entries
v2026.4.10.0
HeadsUpCDM
v2026.4.10.0 (2026-04-10)
Full Changelog Previous Releases
- fix: anchor focus bar to column edges to avoid taint-blocked resize (#9)
- fix: anchor focus bar to column edges to avoid taint-blocked resize
The resource bar was created with SetSize + a single TOPLEFT anchor,
and the post-reanchor height sync called SetHeight on it. In WoW 12.0,
that SetHeight call is silently blocked by taint propagation from the
Blizzard CDM hook chain that drives the initial reanchor, so the bar
stayed stuck at the preset's full spell-count height until some later,
non-tainted reanchor (e.g. after using Trueshot) happened to succeed.
Switch to the same two-point anchor pattern BuffBars already uses —
TOPLEFT + BOTTOMRIGHT to the column — so the bar auto-resizes through
anchor geometry whenever the column's height is set. No tainted
SetHeight required.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback
Remove dead resourceBar:SetHeight calls in ActionColumn.lua and
BuffBars.lua. With the two-point anchor change in the previous commit,
the bar's size is already driven by resourceColumn's dimensions, so
the explicit SetHeight calls are no-ops and just confuse future
readers about what's actually syncing.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: anchor focus bar to column edges to avoid taint-blocked resize
v2026.4.9.7
HeadsUpCDM
v2026.4.9.7 (2026-04-09)
Full Changelog Previous Releases
- feat: filler spell icons for non-cooldown abilities (#8)
- feat: add actionbar filler spell support (config, data, options)
- Add actionBar.barName config default (MultiBar7 = bar 8)
- Mark MM Arcane Shot as source="actionbar" in both MM presets
- Correct buff spell IDs from in-game CDM debug:
Precise Shots 260242→260240, Double Tap 260402→473370,
Moonlight Chakram 429444→1264902 - Add "Filler Spell Bar" dropdown to options panel
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- feat: filler spell icon frames and actionbar row layout
Create non-secure icon frames for spells with source="actionbar",
showing the spell texture in the HUD column. Keeps actionbar rows
visible in RelayoutRows, syncs scale/alpha in ReanchorCDMFrames.
Defer SetHeight calls in height sync to avoid taint from Blizzard
RefreshLayout hook chains (WoW 12.0 taint system blocks SetHeight
on addon frames when called from protected callback paths).
Note: full ActionButton repositioning via SecureHandler is partially
working (button visible + scaled) but positioning needs investigation.
Using static icon frames as a reliable workaround for now.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback
- Wrap C_Spell.GetSpellInfo / SetTexture in pcall (taint-safe)
- Use anonymous frames to avoid global namespace pollution on rebuild
- Remove redundant hasCDMFrame assignment (already set via reset loop)
- Add flag-based throttle for deferred height sync closures
- Remove dead actionBar.barName config + options dropdown (not yet used)
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com
v2026.4.9.6
HeadsUpCDM
v2026.4.9.6 (2026-04-09)
Full Changelog Previous Releases
- chore: add Wago release integration and analytics (#7)
- chore: add Wago release integration and analytics
Add X-Wago-ID and WagoAnalytics shim so BigWigsMods packager can
auto-publish to Wago on tag push.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: move WagoAnalytics into Embedded Libraries section
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: add Wago release integration and analytics
v2026.4.9.5
HeadsUpCDM
v2026.4.9.5 (2026-04-09)
Full Changelog Previous Releases
- feat: add /cdm shortcut to open Blizzard CDM settings (#6)
- feat: add /cdm shortcut to open Blizzard CDM settings
Register /cdm slash command and add "Open Blizzard CDM Settings" button
to the options panel General tab. Both toggle the CooldownViewerSettings
frame, matching the pattern used by Ayije_CDM.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback
Use after_each for CooldownViewerSettings cleanup in tests instead of
manual nil resets, improving isolation if a test throws mid-execution.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com - feat: add /cdm shortcut to open Blizzard CDM settings
v2026.4.9.4
HeadsUpCDM
v2026.4.9.4 (2026-04-09)
Full Changelog Previous Releases
- fix: handle CDM spell overrides in slot lookup (Trueshot → Moonlight Chakram) (#5)
- fix: handle CDM spell overrides in slot lookup (Trueshot → Moonlight Chakram)
When Trueshot is activated, Blizzard's CDM replaces it with Moonlight
Chakram via overrideSpellID. The slot lookup only checked the display
spell ID, missing the base spell that was actually registered. Now both
override and base IDs are checked when matching frames to slots, keeping
transformed spells anchored in the correct vertical position.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback — simplify slot lookup
Use explicit overrideID/baseID checks in slot lookup instead of
redundant spellID fallback, per reviewer suggestions.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: handle CDM spell overrides in slot lookup (Trueshot → Moonlight Chakram)
v2026.4.9.3
HeadsUpCDM
v2026.4.9.3 (2026-04-09)
Full Changelog Previous Releases
- fix: make scale/opacity work on CDM frames, remove anchoring (#4)
- fix: make scale/opacity work on CDM frames and remove anchor-to-frame feature
SetScale/SetAlpha on column frames only affected children — Blizzard CDM
frames (action icons, buff icons) are children of the CDM viewers, not
our columns. Now apply SetScale and SetAlpha directly to each CDM frame
in ReanchorCDMFrames and ReanchorBuffIcons.
Also:
- Unified per-column scale sliders into a single HUD scale slider
- Fixed layout math to account for scaled dimensions
- Removed anchor-to-frame feature (Anchor To PlayerFrame/TargetFrame)
in favor of freeform drag positioning only
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- chore: address review feedback
- Add defensive nil guards on settings access in ReanchorCDMFrames and
ReanchorBuffIcons - Reorder OptionsPanel setter calls: reanchor CDM frames before
ArrangeColumns so layout uses up-to-date column dimensions
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: make scale/opacity work on CDM frames and remove anchor-to-frame feature