EMS-Changelog

GRIP-EMS v1.9.5

Released April 18, 2026. 7 entries in the author's notes.

Every entry

The author's own words, complete. Long sections are sorted into areas by LazyGrip.

Performance

4

UNIT_SPELL_HASTE handlers in TempoAdvisor and SQWOptimizer now check the unit arg and skip anything that isn't the player. The event fires for nearby pets and party members too, so this cuts 40+ idle AnalyzeSequence passes per minute down to zero.

#

SpellCache keeps per-collection dirty flags (spells, items, toys, mounts, companions). A zone change that didn't mutate anything is now a scan no-op. Pure-reload boots still rebuild everything from scratch; per-event routing only touches the collection that changed.

#

ComparisonFrame scroll sync moved off OnUpdate polling onto the ScrollBox OnScroll callback. No more per-frame cost when the compare window is open.

#

Debug buffering skips string.format when nobody is watching. GRIPEMS:Debug now takes varargs; the formatter only runs when the debug setting is on or the DebugWindow is visible. Roughly 30 hot-path call sites in Engine, TempoAdvisor, Transmission, and SQWOptimizer switched over.

#

Fixed

1

TempoAdvisor recommendations stayed stuck after a /reload because StoreRecommendation was saving GetTime() into SavedVariables. GetTime() resets on every reload, so the freshness check read a huge negative delta and treated old cached data as permanently fresh. Freshness now lives on a module-local table that rebuilds each session; the timestamp field is gone from the SV payload.

#

Internal

2

New /gems perftest diagnostic with three sub- modes. events N wraps the top five OnEvent handlers for N seconds and prints fires/total/ peak ms per frame. scan forces every spell cache collection dirty and times each sub- builder. reanalyze re-runs OnSequenceActivated for every saved sequence. /gems memory now works as an alias for /gems memcheck.

#

Core.lua carries a SavedVariables schema comment block documenting which fields are session-local and must never hold GetTime() values. Prevents the same foot-gun landing again on the next module that touches SVs.

#

Grab it

Release notes written by Sataana and reproduced here with his permission.