# v12.0.17 (2026-04-21)

## Bug Fix — 12.0.5 Compatibility

### Root Cause

`CompactUnitFrame_UtilSetBuff` was removed by Blizzard in patch 12.0.5 as part of their compact frame API cleanup. The call to `hooksecurefunc` on this function threw a hard Lua error at `PLAYER_LOGIN`, crashing `OnLogin` before `ActivateModule` was ever called. This left the addon in a "no active module" state, which the options panel displays as **"Spec Not Supported"** — affecting all specs, not just Monk.

### Changes

**`NemHealerAlerts.lua`**
- Replaced the removed `CompactUnitFrame_UtilSetBuff` hook with a `CompactUnitFrame_UpdateAuras` hook, using the same `frame.buffFrames` iteration pattern already used by the Target and Focus frame hooks. Wrapped in an existence check so it degrades gracefully if Blizzard renames it again in a future patch.
- Moved `_glowHooksInstalled = true` to the *end* of `InitGlowHooks` so a future hook error cannot permanently disable glow hook installation.
- Added `pcall` protection to `FindActiveModule`'s spec index comparison as a secondary guard against the 12.0.5 secret-value API changes, with a `GetSpecializationInfo` spec ID fallback path.

**All spec modules** (`MonkMistweaver`, `DruidRestoration`, `PriestDiscipline`, `PriestHoly`, `ShamanRestoration`, `EvokerPreservation`, `PaladinHoly`)
- Added `specID` field to each module table. Used by the `FindActiveModule` fallback path when `GetSpecialization()` returns a secret value and direct index comparison is not possible.

---

# v12.0.16 (2026-04-19)

## Mistweaver Monk — Major Rework

### Statue Alerts Removed

After extensive in-combat testing, both **Place Jade Statue** and **Statue Idle** alerts have been removed. The root cause is Blizzard's secret-value API restrictions in M+ combat:

- `GetTotemInfo()` returns secret booleans — unreadable in M+ combat
- `UnitExists("totemN")` returns secret booleans in M+ combat
- Spell 198533 (statue's Soothing Mist) has every aura field secret in M+ combat — spellId, icon, name, and isFromPlayerOrPlayerPet are all unreadable
- Spell 115175 (player's Soothing Mist) is whitelisted and readable, but only reflects the player's own channel — the statue's independent 12-second channel is undetectable once the player stops casting

The combination of unreliable placement detection (false positives with the statue visibly present) and completely undetectable statue activity in M+ made both alerts produce more noise than signal. They have been removed in favour of the two alerts that work reliably.

### Soothing Mist Icon Glow (new)

A new icon glow fires on buff frames when your Soothing Mist (spell 115175) is active on a target. Full-duration glow for the entire channel — no pandemic window, just a clean visual indicator of your current SM target. Uses monk teal (`#00FF98`), stored in `db.alertColors.sm` for future colour customisation. Works alongside the existing Renewing Mist pandemic glow and Enveloping Mist full-duration glow.

### Renewing Mist Threshold — Options Panel (new)

Two new numeric inputs appear in the Alert Options section below the font dropdown:

- **Target Renewing Mist (Party)** — dungeon threshold, default 2, range 1–20
- **Target Renewing Mist (Raid)** — raid threshold, default 4, range 1–40

Both inputs are class-coloured and sit on the same row. Values take effect immediately without a reload.

### Code Cleanup

Removed all statue-tracking infrastructure that existed solely to support the two removed alerts (~750 lines):

- `CheckJadeStatueTalent`, `IsJadeStatuePlaced`, `TryRecoverStatueSlot`, `IsStatueInRange`, `IsStatueChannelingSoothingMist`, `FindStatueSoothingMistTarget`
- `SaveStatuePersist`, `SetStatuePlaced`, `ClearStatuePlaced`, `LoadStatuePersist`, `CombatSafeScan`
- `PLAYER_TOTEM_UPDATE` and `UNIT_SPELLCAST_SUCCEEDED` event handlers
- SavedVariables statue persistence (`statuePersistedPlaced`, `statuePersistedExpire`)
- `hasJadeStatueTalent`, `statueKnownPlaced`, `statueSlot`, `statueExpire` state fields
- `mwtrace` and `mwscan` debug slash commands (no longer needed without statue diagnostics)
- `SUMMON_JADE_STATUE_ID`, `STATUE_SOOTHING_MIST_ID`, `SM_ICON_ID`, `JADE_STATUE_NODE_ID` constants

The module now contains only what it needs: two alerts (Spread Renewing Mist, Enveloping Mist), three icon glows (RM pandemic, EM full-duration, SM active channel), and the options panel threshold inputs.

---

# v12.0.15 (2026-04-18)

## Options Panel — Alert Options Section (new)

A dedicated fourth section, **Alert Options**, now appears below the Alerts section. It is fully dynamic — its contents are driven by the active spec module, just like Sounds and Alerts.

- **Font picker** moved here from the Display section. The "Alert Font" label has been removed; the dropdown stands alone as a clean control at the top of the section.
- **Spec-specific options** (previously in the right column of Display) now live here with a proper vertical layout via a new `BuildAlertOptions` hook. The core provides a helpers API to spec modules: `MakeCheckbox`, `MakeCheckboxRow`, `MakeCheckboxWithNumeric`, `MakeNumericInput`, and `Spacer`.
- **Alert text editors** — every alert for the active spec gets a labeled two-column edit box showing the current alert text. Edits apply live on focus-lost. Clearing a box resets it to the built-in default. Saved per character in the saved variables.
- **Restore Defaults button** added as a fourth button alongside Test, Unlock Frame, and Center Position. Resets all alert colors, alert texts, font, scale, font size, and frame position back to built-in defaults.
- **Reset Position** renamed to **Center Position**.

## Options Panel — Display Section

- Checkboxes (Enable Addon, Flash Animation, Icon Glow) shifted left and spaced to match the Sounds section layout (x=8, 40px row gap).
- Display section height tightened by 20px to remove excess empty space below Icon Glow.
- Sound dropdowns shifted right to align their left edge directly under the slider tracks.
- Buttons shifted left 8px to align with the content panels.

## Restoration Druid — Alert Options

- **LB Timer** and **SOTF Timer** checkboxes now appear side-by-side on one row in the Alert Options section, with **Abundance Count** inline to the right, aligned to the same column as the Cast Lifebloom text editor below it.
- **Abundance Count** is now user-configurable (min 7, max 12, default 7). The value is saved to the database and read live by Evaluate on every tick. The edit box is class-colored.
- Alert text editors for all six Druid alerts: Lifebloom Expiring, Cast Lifebloom, Soul of the Forest, Wild Growth Ready, Tree of Life Ready, Abundance (Cast Regrowth).

## Restoration Druid — Default Sounds

- **Wild Growth Ready**: Lamp → Redfox
- **Abundance (Cast Regrowth)**: Ping → Lamp
- Lifebloom Expiring (Bell) and Soul of the Forest (Ping) unchanged.

---

# v12.0.14 (2026-04-18)

## Mistweaver Monk — Cleanup

- **Removed Zen Spheres** alert and all associated tracking code (talent check, aura scanning, state, DEFAULTS, alert definition)
- **Removed Shielun's Appeal** stack counter and all associated tracking code
- **Fixed default sounds** — Enveloping Mist changed from Redfox → Bell; Statue Idle changed from Bell → Lamp. Final defaults: Spread Renewing Mist (Ping), Enveloping Mist (Bell), Place Jade Statue (Lamp), Statue Idle (Lamp)

---

# v12.0.13 (2026-04-18)

## Mistweaver Monk — Bug Fixes

- **Fixed chat spam loop** — `IsJadeStatuePlaced()` had permanent debug `NHA.Msg("[IJP] ...")` prints baked in that fired on every evaluate tick and every `PLAYER_TOTEM_UPDATE` event. All debug output has been removed.
- **Fixed false "Place Jade Statue" alert** — In M+ combat, the icon and name matchers inside `IsJadeStatuePlaced()` silently return `false` even when the statue is present (tainted comparison results). The old code treated a clean-but-no-match scan as a confirmed absence and wiped `statueKnownPlaced`, overriding what `UNIT_SPELLCAST_SUCCEEDED` had correctly set. The function now preserves `statueKnownPlaced` if it was set by the cast event and hasn't expired, only clearing it on a confirmed expiry.

---

# v12.0.12 (2026-04-18)

## Restoration Druid — New Alerts

### Cast Lifebloom *(new)*
Fires in combat when no party or raid member has your Lifebloom active. This is the companion to the existing Lifebloom Expiring alert — Expiring tells you it's about to fall off, Cast Lifebloom tells you it's already gone. The two alerts are mutually exclusive and share the same screen position so you always know exactly what Lifebloom needs from you. Hidden during test mode to avoid overlapping with the Lifebloom Expiring preview.

### Abundance — Cast Regrowth *(new)*
Fires when you have the **Abundance** talent and your combined Rejuvenation + Germination count across the group reaches **7 or more**. At that stack count, Abundance gives Regrowth a meaningful cost reduction and critical hit bonus, making it an efficient filler cast. Each target can contribute up to 2 stacks (one Rejuv and one Germination). The alert is fully talent-gated — it won't appear if you haven't specced into Abundance.

### Wild Growth — Dynamic Cooldown Tracking *(new)*
The Wild Growth Ready alert now calculates the correct cooldown duration based on your actual build, so the alert fires at the right time regardless of how you're geared or specced:

- **Early Spring** hero talent reduces the cooldown by 1 second and is detected automatically when you switch talents
- **Sprouts of the Luminous Bloom 4pc set bonus** reduces it by 2 seconds in PvE, or 1 second in arenas (PvP scaling applied automatically)
- When the cooldown API is readable (outside M+ and rated content), the addon stores the real duration directly as ground truth, overriding the calculated values

Gear changes and talent swaps are detected in real time — no reload needed.

## Restoration Druid — Alert Text Updates

- **Reforestation** shortened from `* TREE OF LIFE NEXT SWIFTMEND *` → `* TREE: NEXT SWIFTMEND *`
- **Abundance** updated from `* ABUNDANCE - CAST REGROWTH *` → `* ABUNDANCE: CAST REGROWTH *`
- **Cast Lifebloom** — no longer plays a sound by default (sound channel removed)

## Options Panel — UI Improvements

The Settings panel has been cleaned up with a better visual flow throughout:

- Fixed right-side panels being clipped off-screen in the WoW Settings UI (panel width reduced by 15px)
- Removed redundant slider labels that were duplicating information already shown on the sliders themselves
- Dropdown controls shifted down for better visual separation from the section above
- Display section sliders shifted right for improved alignment

---

# v12.0.11 (2026-04-14)

## Mistweaver Monk — Jade Serpent Statue Alerts

Two new alerts for Mistweaver Monks who talent into Jade Serpent Statue:

- **Place Jade Statue** — fires in combat when the Jade Serpent Statue talent is selected but no statue is currently placed. Catches forgotten placements after dying, rezoning, or the 15-minute duration expiring. Uses the `GetTotemInfo` API (not affected by secret-value restrictions)
- **Statue Out of Range** — fires when you're channeling Soothing Mist on a target and the statue is placed, but the statue's copy (spell 198533) isn't healing anyone. Indicates a line-of-sight or range problem between the statue and your target. Includes a 0.5s grace period after channel start so the statue has time to begin casting

Both alerts are talent-gated via Node ID 101164 (Jade Serpent Statue / Jade Infusion choice node) and will not appear if you've selected Jade Infusion instead.

### Technical

- Added `PLAYER_TOTEM_UPDATE` event to the Mistweaver module for immediate statue placement/destruction detection
- Talent detection follows the same `C_ClassTalents` / `C_Traits` pattern used by Druid Reforestation, including `PLAYER_TALENT_UPDATE` / `TRAIT_CONFIG_UPDATED` re-checks
- Statue detection via `GetTotemInfo()` slot iteration with icon ID match (620831) and name fallback — works in M+ and rated PvP
- Debug command (`/nha debug`) now dumps totem slot info, statue placement status, statue Soothing Mist target, and talent state

## Spec Availability

Four specs have been temporarily disabled pending full customization and testing: **Holy Priest**, **Holy Paladin**, **Preservation Evoker**, and **Restoration Shaman**. These modules loaded but were not yet functional, leading to user confusion. Each spec file now exits at load time until implementation is complete. They will be re-enabled spec by spec as testing is finished.

---

# v12.0.10 (2026-04-12)

## Options Panel Improvements

- Non-healer specs now show a clean "Spec Not Supported" panel on first click — no more blank panel or flashing options
- All non-healer specs (including non-healer specs of supported classes like Windwalker Monk or Shadow Priest) now show the same unified message
- Removed the old "Class Not Supported" / "Class Support Coming Soon" distinction — everything is handled by one simple check
- Options panel uses the default cyan theme for non-healer specs instead of showing class colors

## Code Cleanup

- Removed overlay system — the unsupported-spec panel is now built directly into the UI rather than layered on top
- Standardized Mistweaver Monk module structure to match the Restoration Druid and Discipline Priest reference format
- Added debug slash command for Mistweaver (`/nha debug`)

---

# v12.0.9 (2026-04-10)

## Rebrand: Nem: HoT Alerts → Nem: Healer Alerts

The addon has been renamed from **Nem: HoT Alerts** to **Nem: Healer Alerts** to better reflect its scope — the addon tracks far more than just Heal over Time effects (beacons, procs, cooldowns, shields, etc.). This is a cosmetic rename with zero gameplay changes.

### What changed

- All user-facing text updated: title, options panel, chat messages, addon compartment, Settings category
- Internal identifiers renamed (`NemHotAlertsSV` → `NemHealerAlertsSV`, `_G.NemHotAlerts` → `_G.NemHealerAlerts`, frame names, slash command keys)
- **Existing settings migrate automatically** — your saved variables carry over on first login, no action needed
- New slash command `/healeralerts` added; `/hotalerts` kept as a legacy alias
- Addon folder renamed from `NemHotAlerts` to `NemHealerAlerts`

## All Healer Specs Now Supported

### Restoration Druid (existing)

- All existing alerts and glows carry over unchanged

### Discipline Priest (new)

- Atonement Expiring — alerts when your soonest Atonement enters its pandemic window, with countdown timer. Tracks the most urgent Atonement across your entire group
- Cast Void Shield — alerts when Master the Darkness procs, reminding you to cast an empowered Power Word: Shield
- Atonement icon glow on party/target/focus frames when inside the pandemic window
- Void Shield absorb icon glow on party frames when your Void Shield is active on a target

### Holy Priest (new)

- Prayer of Mending — alerts when you have no active Prayer of Mending bouncing on any group member
- Prayer of Mending icon glow on frames where PoM is active

### Preservation Evoker (new)

- Reversion Low — alerts when your Reversion/Echo Reversion coverage drops below threshold (configurable for dungeons vs raids)
- Echo icon glow on frames where Echo is active
- Echo Reversion synergy icon glow

### Mistweaver Monk (new)

- Renewing Mist Low — alerts when your Renewing Mist coverage drops below threshold (configurable for dungeons vs raids)
- Enveloping Mist — alerts when you're channeling Soothing Mist on a target that doesn't have Enveloping Mist yet
- Soothing Mist target icon glow

### Holy Paladin (new)

- Beacon Missing — alerts when no Beacon (Light, Faith, or Savior) is active on any group member
- Eternal Flame — optional alert when Eternal Flame coverage is low (off by default)
- Beacon icon glow on frames where any Beacon variant is active

### Restoration Shaman (new)

- Earth Shield Missing — alerts when Earth Shield isn't active on anyone (checks focus, then target, then group)
- Riptide Low — alerts when your Riptide coverage drops below threshold (configurable for dungeons vs raids)

## Architecture

The addon was completely restructured behind the scenes. Each healer spec is now a fully independent file — adding or changing one spec can never break another. Druid players will notice zero differences from v12.0.8.

---

# v12.0.8 (2026-04-06)

## Bug Fixes

- Alerts no longer fire in non-Restoration Druid specs (Balance, Feral, Guardian)
- Switching away from Restoration now immediately clears all alerts and glows
- Zone transitions in off-spec no longer cause stale alerts

## Changes

- Login message shows inactive status for Druids in non-Resto specs
- Chat feedback when switching specs in/out of Restoration

---

# v12.0.7 (2026-04-05)

## New Features

- Options panel now themes dynamically per healer class (Druid orange, Priest white, Evoker teal, Shaman blue, Monk green, Paladin pink)
- Non-healer classes see a "Class Not Supported" overlay listing supported classes
- Supported healers without a module see "Class Support Coming Soon"
- Slash commands blocked for non-implemented classes with a helpful message
- Updated subtitle to reflect multi-class scope

---

# v12.0.6 (2026-04-05)

## Bug Fixes

- Fixed a crash in M+ and rated content caused by a removed WoW API (`GetSpellCooldown` → `C_Spell.GetSpellCooldown`)

---

# v12.0.5 (2026-04-04)

## New Features

- **Wild Growth Ready** alert — shows when Wild Growth is off cooldown (combat only). Falls back to cast tracking when WoW restricts the cooldown API in M+/rated content
- **Reforestation / Tree of Life** alert — shows after your 3rd Swiftmend, reminding you the next one will proc Tree of Life. Automatically hides if you unspec the talent
- **Empowered Regrowth glow** — Regrowth icons on party frames glow when the Regrowth was cast with Soul of the Forest active. Clears when overwritten by a normal Regrowth
- Alert display order flipped: Tree of Life (top) → Wild Growth → Soul of the Forest → Lifebloom (bottom)
- SOTF alert text changed from "CAST REJUV" to "SOUL OF THE FOREST"
- Two new bundled sounds: Lamp and Redfox (15 total)
- All four alerts now have individual color swatches

## Bug Fixes

- Numerous fixes for Wild Growth cooldown tracking, Reforestation talent detection, and empowered Regrowth glow reliability in combat
- Death now properly clears all alert state
- Test mode now shows all four alerts
- Display section checkbox labels no longer invisible

---

# v12.0.4 (2026-04-02)

## Bug Fixes

- Test mode timers now display correctly alongside alert text
- Options panel spacing matches Nem: Pet Alerts layout

---

# v12.0.3 (2026-04-02)

## Performance

Major CPU optimization for raids and battlegrounds — reduced unnecessary processing from aura events, group roster changes, and glow updates. Most noticeable when joining a 40-player group.

## Bug Fixes

- SOTF alert no longer gets stuck when the proc expires without casting
- Lifebloom icon glow now fires correctly when targeting an enemy
- Ticker no longer runs indefinitely after disabling the addon
- SOTF alert state properly clears when the alert is toggled off mid-session
- Fixed a crash caused by glow cleanup running before glow tables were created
- Alerts now clear on player death and re-evaluate on resurrect
- SOTF alert clears immediately on Rejuv cast instead of waiting for the next evaluation tick
- Bell and Ping sounds now work without LibSharedMedia installed

---

# v12.0.2 (2026-04-01)

## Bug Fixes

- All alerts and sounds now work reliably in M+ and rated combat (WoW 12.0's secret-value aura restrictions)
- SOTF detection now uses spell-cast tracking as a fallback when the aura API is restricted in combat
- SOTF timer starts immediately on Swiftmend cast
- SOTF alert persists when entering combat with the proc already active

## Slash Commands

- Added `/nha on`, `/nha off`, `/nha toggle`, `/nha status`, `/nha version`, `/nha reset`, `/nha unlock`
- All commands also available via `/healeralerts` (and `/hotalerts` as legacy alias)

---

# v12.0.1 (2026-03-31)

Initial release of **Nem: Healer Alerts** (originally as Nem: HoT Alerts) — Restoration Druid alerts for Lifebloom pandemic tracking and Soul of the Forest proc consumption, with countdown timers, icon glows, configurable sounds, and full options panel. Part of the Nem addon suite.
