Editor no longer fires ADDON_ACTION_BLOCKED when opened during combat. The OnShow hook tried to reset keyboard propagation via SetPropagateKeyboardInput, which is protected during combat lockdown. Guard now skips the call during combat; PLAYER_REGEN_ENABLED still handles the post-combat reset.
GRIP-EMS v2.1.1
Released May 15, 2026. 7 entries in the author's notes.
Every entry
The author's own words, complete. Long sections are sorted into areas by LazyGrip.
Fixed
7Sequences edited during combat no longer vanish on next login. The OOCQueue priority for DEACTIVATE was higher than ACTIVATE, so the sequence-rebuild dance ran ACTIVATE first and DEACTIVATE second on combat-end -- the trailing DEACTIVATE wiped both the new SecureActionButton and the SavedVariables entry that ACTIVATE just wrote. Priorities swapped so DEACTIVATE runs first; the rebuild now lands intact. Also fixes the related "I have to /reload to see my edits take effect" pattern when editing during combat.
Sequence selection no longer spams LUA_WARNING ("attempt to call a nil value") when a sequence holds legacy table-shaped step data. The StepListView row initializer used the or "" fallback for data.text, which only catches nil; truthy non-strings (e.g. tables from pre-v2.0.3 SV corruption that escaped the original hotfix defenses) reached :gmatch and crashed per visible row. Initializer now applies the same type-check defensive pattern already used by the row's display-text and spell-validator branches.
Step row tooltips no longer crash on legacy table-shaped step data. The OnEnter tooltip handler had five more unguarded data.text consumers in the same family as the row initializer fix in d1610b2; the most dangerous one ran a string concatenation on data.text and would have thrown "attempt to concatenate a table value" on hover for the same sequences that triggered the LUA_WARNING burst. All consumers now route through one defensive stepText local at the top of OnEnter.
Tempo Advisor no longer throws "attempt to perform arithmetic on local 'haste' (a secret number value)" on WoW 12.0.5. The GetLiveGCD fallback path (which runs when the GCD spell-cooldown query returns duration 0, common during fast sequence spam) used arithmetic on the haste value returned by GetHaste(). WoW 12.0+ tags player-stat values as secret, and arithmetic on a secret value from addon-tainted execution raises a Lua error. Arithmetic now runs inside a pcall; when the secret-tag blocks the math, GetLiveGCD falls back to the no-haste baseline (1500ms, floor-respecting).
Spell Queue Window Optimizer and the /gems msadvisor slash command no longer throw the same "secret number value" error as TempoAdvisor on WoW 12.0+. Both carried byte-identical haste-scaled GCD fallback formulas; the SQW site was reachable from a periodic ticker so users with SQW Optimizer enabled would have hit the error at sample-interval cadence even without user interaction. Both now pcall the arithmetic with the same 1500ms baseline fallback as the TempoAdvisor fix.
Sequences no longer randomly disappear after some instance transitions. The PLAYER_ENTERING_WORLD handler reran the full bootstrap (sequence restore, macro-stub scan, keybind load) on every fire of that event, including every instance entry. The rebuild dance had a race window where keybinds could end up unbound if the OOCQueue restricted-state flicker did not align with the LoadKeybinds OOC gate. Bootstrap now runs once per addon load (gated on the pre-existing _initialLoadComplete flag); per-instance work like context detection still runs on every fire. Disable+enable still forces a fresh bootstrap.
Grab it
Release notes written by Sataana and reproduced here with his permission.