DispelAlert 0.5.6.1
=================

Retail WoW 12.1 protected dispellable-debuff sound alerts.

Configuration
-------------
/da options

DispelAlert now uses a standalone, movable and resizable AceGUI-3.0 settings
window. The window has two tabs:

General
- Enable / disable DispelAlert.
- Monitor Player, Party / Followers and Raid.
- Auto / Force On / Force Off for Magic, Curse, Poison and Disease.
- Select and test alert sounds.
- Rebuild protected alerts and enable debug messages.
- View current registration/status information.

Profiles
- Current Profile.
- New Profile.
- Copy From.
- Delete a Profile.
- Specialization Profiles.
- Reset Current Profile.

Profiles continue to use AceDB-3.0 and AceDBOptions-3.0. Existing
DispelAlertAceDB profile data is retained.

Blizzard Settings Launcher
--------------------------
Esc -> Options -> AddOns -> DispelAlert

The Blizzard AddOns settings page now contains only a DispelAlert title and an
"Open DispelAlert Options" button. The button invokes the same options path as
/da options. Blizzard Settings / Game Menu frames are closed before the
standalone AceGUI window is shown.

Titan Panel / LibDataBroker
---------------------------
DispelAlert embeds LibDataBroker-1.1 and registers a launcher data object.
Titan Panel and other LDB displays can show the DispelAlert icon/text.
Left-clicking the broker launcher opens the standalone AceGUI options.

Window Position
---------------
The AceGUI Frame is movable and resizable. Its position and size are stored in
AceDB global data and restored when reopened.

Specialization Profiles
-----------------------
Specialization profile assignments remain optional and per-character. When
enabled, changing specialization automatically selects its assigned AceDB
profile.

Commands
--------
/da test
/da status
/da options
/da debug
/da reset

Notes
-----
Protected sound registrations cannot be rebuilt during combat. Outside combat,
DispelAlert lets C_UnitAuras.AddAuraSound itself decide whether each protected
registration is currently legal. Registrations are reconciled per unit + spell:
an incomplete/rejected refresh cannot erase an already accepted matching entry.

0.5.6.1
-------
- Fixed late-joining/zoning into an already active instance leaving protected
  party aura-sound registrations bound to the previous or empty party1-party4
  identities. The reconciler now tracks the real player identity behind each
  accepted party token registration and transactionally rebinds it when that
  identity changes.
- GROUP_ROSTER_UPDATE now performs an immediate protected reconciliation before
  the delayed LFG/world refresh sequence, restoring the rebind timing that made
  0.5.5.3 reliable for active-instance joins.
- Existing working registrations are still preserved if Blizzard rejects a
  replacement during a restricted transition. /da status now reports rebound
  and stale party-binding counts for diagnosis.

0.5.6
-----
- Release version bump from 0.5.5.13. No functional behaviour changes.
- Retains global protected Magic/Curse/Poison/Disease registration coverage
  and the existing raid false-positive protections.

0.5.5.13
--------
- Restored the protected dungeon/party registration strategy from 0.5.5.3:
  registrations are global again and are no longer narrowed to the current
  dungeon, Delve or area. This prevents valid Magic/Curse/Poison/Disease spell
  IDs from being dropped simply because their database location label differs
  from the current instance.
- All bundled dungeon and Delve dispel spell IDs are now armed together for the
  enabled player/party unit tokens, with duplicate spell IDs removed.
- Raid false-positive protections remain isolated to raid detection; they no
  longer change protected dungeon/party coverage.
- /da status reports the protected scope as global so registration coverage is
  immediately visible during testing.

0.5.5.12
--------
- Reworked dungeon protected-sound registration as a per-unit + spell reconciler.
  Existing accepted registrations are reused, and a replacement is not removed until
  Blizzard has accepted its successor. A rejected refresh can no longer erase the
  matching protected entries that were already working.
- Removed the broad add-on-restriction pre-check introduced in 0.5.5.11. The addon
  now calls C_UnitAuras.AddAuraSound directly and treats its returned registration
  ID as the authority for whether that individual registration was accepted.
- Recognised dungeons/Delves now build a small instance-scoped protected set rather
  than needlessly rebuilding every bundled encounter spell. Unrelated registrations
  are retired first so current-instance entries get priority.
- Broad pre-arming now attempts the newest bundled Midnight entries first, so any
  finite client registration budget is spent on current content before older data.
- Added automatic protected-registration retry on ADDON_RESTRICTION_STATE_CHANGED.
- /da status and the General status panel now show active registration count, desired
  coverage/missing counts and the current protected registration scope.

0.5.5.11
--------
- Fixed dungeon/Delve protected alerts being lost after zoning or roster refreshes.
  Rebuilds are now deferred while Midnight addon restrictions are active, preserving
  the player/party aura sounds that were pre-armed before entering restricted content.
- Hardened the non-raid readable-aura fallback to track player/party unit tokens
  directly instead of requiring UnitGUID(), so dungeon alerts can still fire when
  GUID access is restricted while aura data remains readable.
- Retains the immediate UNIT_AURA path from 0.5.5.10 and the raid GUID/debounce logic.

0.5.5.10
--------
- Readable aura alerts are now driven immediately by UNIT_AURA instead of waiting
  for the 0.25-second fallback scan.
- Raid false -> true dispellable transitions alert on the first readable positive
  result; positive two-scan confirmation has been removed.
- Raid clear-side confirmation remains only for re-arming, so it cannot delay the
  initial sound notification.
- Reduced the Lua duplicate-sound guard from 0.75 seconds to 0.10 seconds.
- The 0.25-second scanner remains only as a missed-event safety fallback.

0.5.5.9
-------
- Removed COMBAT_LOG_EVENT_UNFILTERED registration and the combat-log Delve fallback.
  Midnight 12.x no longer permits addons to register the unfiltered combat-log event.
- Delve alerts continue to use Blizzard's protected AddAuraSound registrations for
  known Delve debuffs plus the existing allowed aura scanner when aura data is readable.
- No changes to AceGUI profiles, Titan/LDB integration, raid debounce, or dungeon alerts.

0.5.5.8
-------
- Added Delve-specific alert handling. When broad aura enumeration is restricted,
  DispelAlert now listens for debuff applications in the combat log and performs
  an exact spell-ID aura lookup on the affected monitored unit before alerting.
- Exact Delve lookups retry for a short period because the combat-log event can
  arrive before the unit aura provider has exposed the new aura.
- The exact fallback is suppressed only when Blizzard actually accepted a
  protected AddAuraSound registration for that exact unit and spell.
- Added protected Midnight Delve registrations for Devouring Essence (1256358)
  and Void Toxin (1293824).
- Pre-arms protected player/party aura-sound registrations for player, party1,
  party2, party3 and party4 even before an LFG party exists. This allows
  DispelAlert to remain armed when joining a dungeon already in progress and
  arriving after protected registration has become restricted.
- Keeps the generic RAID_PLAYER_DISPELLABLE fallback limited to unit tokens
  that currently exist.
- Replaced the full Blizzard Settings configuration with a standalone AceGUI
  configuration window.
- Added General and Profiles AceGUI tabs using native AceGUI layouts/widgets.
- Updated embedded WoWAce Ace3 libraries for WoW 12.1 compatibility.
- Blizzard Settings -> AddOns -> DispelAlert is now only a launcher page.
- /da options closes Blizzard game/settings menus before opening the standalone
  window.
- Standalone window is movable/resizable and remembers position/size globally.
- Retained the existing DispelAlertAceDB profile database and specialization
  assignments without a new migration.
