File Details
MidnightSensei-v1.5.5
- R
- Apr 25, 2026
- 232.98 KB
- 177
- 12.0.5
- Retail
File Name
MidnightSensei-v1.5.5.zip
Supported Versions
- 12.0.5
Midnight Sensei v1.5.5 Release Notes
Overview
v1.5.5 replaces all aura-scanning uptime tracking with a cast-event-based approach. Three separate attempts in v1.5.4 to work around Midnight 12.0's API restrictions on aura.spellId all failed — the restriction is a blanket block on the field when addon code is tainted. The cast-based approach uses ABILITY_USED events (fired from UNIT_SPELLCAST_SUCCEEDED) and requires no aura access.
Note on v1.5.4: v1.5.4 was pulled immediately after release. It shipped with a fix that appeared correct but continued to fail due to deeper API restrictions discovered in testing. All changes intended for v1.5.4 were rolled forward into v1.5.5 alongside the proper fix. There was no public v1.5.4 — if you see a gap in version history, that's why.
Root Cause
In Midnight 12.0, GetAuraDataByIndex returns an aura table where aura.spellId is a "secret number value." Any equality comparison (aura.spellId == someId) throws:
attempt to compare field 'spellId' (a secret number value, while execution tainted by 'MidnightSensei')
This fires every UNIT_AURA event during combat (every 0.5s via ticker, plus event-driven). The error was logged 119 times in one short fight. There is no safe way to use aura.spellId for comparisons when tainted — pcall catches the error but the comparison always returns false, making it silently non-functional.
Fix: Cast-Based Uptime Windows
Instead of watching for buff auras, the tracker now listens for the cast spell that applies the buff:
- Each
uptimeBuffentry now declarescastSpellId(single) orcastSpellIds(list of triggers). buffDurationspecifies how long each cast keeps the buff active.- On cast: opens a window (or extends it on refresh — no close/reopen gap).
- A 0.25s expiry-checker ticker closes windows when
buffDurationlapses. - Combat end closes any open window, capping at
currentExpiryif the buff already expired.
This approach has no contact with aura.spellId and is not affected by taint.
Specs Updated
| Spec | Buff | Cast ID | Duration |
|---|---|---|---|
| Protection Warrior | Shield Block | 2565 | 6s |
| Protection Paladin | Shield of the Righteous | 53600 | 4.5s |
| Guardian Druid | Ironfur | 192081 | 7s |
| Vengeance Demon Hunter | Demon Spikes | 203720 | 6s |
| Augmentation Evoker | Ebon Might | 395152 | 10s |
| Fury Warrior | Enrage | 23881 + 184367 | 8s |
Fury Warrior Enrage uses castSpellIds with both Bloodthirst (23881) and Rampage (184367) as triggers — both apply/extend Enrage in current retail.
Verify Report Changes
/ms verify report AURA CHECK section now:
- uptimeBuffs: shows
SEENif the cast spell ID was seen inVerifySeenSpells;FAILif not cast;INFOif nocastSpellIddefined (e.g.infoOnlyArcane Intellect). - procBuffs: shows
FAIL / NOT DETECTED— aura.spellId scanning removed for the same taint reason. Use/ms debug aurasto manually confirm proc aura IDs.