EMS-Changelog

GRIP-EMS v1.7.0-Beta

Released April 3, 2026. 145 entries in the author's notes.

Every entry

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

Added

91
Macros, export, import and sharing17

Add context menu shared between outline action bar and detail pane toolbar, supporting flat steps and all 4 structural node types

#

Syntax highlighting for macro commands in step edit boxes (UI/SyntaxHighlight.lua)

#

Action tree compiler for node-to-macrotext compilation (Engine/ActionCompiler.lua)

#

Inline clipboard (hidden EditBox Ctrl+C flow, falls back to ExportFrame on failure)

#

Macro stub body viewer (collapsible section showing BuildStubBody output)

#

Context Tab import origin indicator (imported vs user-created versions visually distinguished)

#

Macro recorder module (Engine/MacroRecorder.lua)

#

Configurable M+/Delve threshold sliders in Settings > Context

Import/Export

#

Raw text import path for plain macro paste (Import/RawImport.lua)

#

Action interval interleaving on import

#

Import conflict Compare option with visual diff

#

Export metadata editor stage (collection name, author, description, URL, talent string embedding with per-field toggles)

#

Freeform macro import warning (auto-detect raw /cast patterns, count display in import preview)

Quality of Life

#

Remote sequence browser for P2P shared sequences (UI/RemoteBrowser.lua)

#

P2P transmission: metadata-only sync, spell cache broadcast, chat links with clickable import, recipient autocomplete, cross-server

#

Corrupt sequence recovery (StaticPopup chain: Delete/Skip/Export Raw)

#

WagoAnalytics deep integration (sequence/import/export/feature events)

#
Saving, naming and editing13

Flat-to-actions migration: one-click conversion of flat step sequences to the action tree model with full undo support

#

Auto-focus name EditBox on structural node creation

Editor Enhancements

#

Undo/redo system (Ctrl+Z / Ctrl+Y) for step editing, drag operations, and structural changes (UI/UndoStack.lua)

#

Popup editor for quick sequence editing from the sequence list (UI/PopupEditor.lua)

#

Side-by-side sequence version comparison viewer (UI/ComparisonFrame.lua)

#

Multi-window popup editor system (frame pool max 4, independent dirty state, cascade offset, sequence sync via SEQUENCE_UPDATED)

#

Per-editor undo stacks in PopupEditor (Ctrl+Z/Y undo/redo, Alt+Up/Down move steps, Up/Down step nav)

#

Metadata description multi-line EditBox

#

Mouse wheel scroll in KeyPress/KeyRelease EditBox fields

Engine Modules

#

Spell picker dropdown with condition builder for step editing (UI/SpellPicker.lua, integrated into step editor)

Context Switching

#

CopyVersion() utility for safe per-version deep copy, replacing whitelist pattern that missed keyPress/keyRelease fields

#

SwitchVersion prompts Save/Discard/Cancel when switching versions with unsaved edits

#

Support/About page in Settings (version, links, system info)

#
Variables and recommendations12

Tab-autocomplete: sequence name fallback in step editor in addition to existing variable autocomplete

#

Dependency visualization in metadata panel (variable/sequence refs, found/missing status, reverse "Embedded by" lookup)

#

Gear change variables with bag and equipment tracking (Data/GearVariables.lua)

#

Variable event dropdown (75 curated events, categorized submenu)

#

Function-type variable evaluation cache (compiled function caching in VariableStore for performance)

#

Tab-autocomplete for \~variable\~ and sequence name insertion in step editor

#

/gems import now handles collection strings (multi-sequence + variables) via Preview path instead of failing (BUG-055)

#

Variable dependency auto-check on import (ResolveImportVariableDeps)

#

Optimal MS advisor (/gems msadvisor, analyzes sequence timing)

#

Locale risk detection: compile-time spell-name flagging with localeRiskFlags in VariableStore

#

Variables Tab locale warning banner (yellow icon for risky variables, suggests C_Spell.GetSpellName alternative)

#

Separate events-enabled toggle per variable (eventsEnabled field, independent of event string content)

#
Keybinds and the conflict panel8

Spell autocomplete via Tab key with spellbook search dropdown (UI/SpellPicker.lua)

#

Rich spell/item tooltips on step list rows (SetSpellByID, SetItemByID, keybind hint line)

#

Vehicle, skyriding, and pet battle keybind auto-suspension extracted to dedicated modules (Engine/VehicleKeybinds.lua, Engine/PetBattleButtons.lua)

#

28 per-map context keys for arenas (15) and battlegrounds (13) via instanceMapID detection with rated-type priority

#

53 total context keys (up from \~20 in v1.1.6)

#

9 new context keys (25 total): M+ tier detection (Low/Mid/High), PvP rated split (RatedArena/SoloShuffle/RatedBG), Delve tier detection (Low/High), Timewalking raid split

#

DebugWindow closes with ESC key (UISpecialFrames registration)

#

3 locale string wiring fixes (stub preview, empty hint, keybind hint)

Testing

#
Resets and modifiers5

5 structural node types: Action (spell step), Loop (cycle, blue), Pause (bars, yellow), If (conditional, purple), Embed (reference, green) with colored badge icons

#

6 configurable editor colours in Settings > Editor Colours for macro commands, conditionals, variables, comments, reset, numbers

#

Configurable macro reset modifiers (15 individual modifier toggles)

#

Pause conversion (3-mode: Clicks/GCD/MS compiled to empty steps)

#

25 unit tests across 8 categories in Test/TestSuite.lua (stepfunc, compiler, reset, import, export, serialization, variables, engine)

#
Languages3

Gamepad keybind capture (EnableGamePadButton + OnGamePadButtonDown, 32 button display names, ConsolePort addon detection)

Localization

#

10 locale stub files added (deDE, esES, esMX, frFR, itIT, koKR, ptBR, ruRU, zhCN, zhTW) with framework for community translation

#

AceLocale-3.0 localization framework (11 locale files, 591 strings across 65 categories, community translation contribution path)

#
Repair and spell warnings2

MainFrame position restoration validates SavedVariables anchor strings with graceful fallback to CENTER

#

Spell replacement chain normalization: base spell names heal to active talent-replacement names (e.g. Steady Shot to Barbed Shot)

#
WoW Forever and plugins1

Plugin registration API for third-party addon integration (Core/PluginAPI.lua)

#
Combat and the Options pages1

AddOnRestrictionType-aware OOC queue (checks beyond InCombatLockdown for addon-restricted states)

#
Everything else29
Steps Tab Redesign (S30-FEAT-01)#

Outline + Detail Pane pattern: left column shows flat steps and structural node badges, right column opens on node click with breadcrumb drill-down navigation

#

Breadcrumb navigation with truncation at depth 5+ (first segment, ellipsis, last 2 segments)

#

Context-sensitive detail pane with child node list and toolbar -

#

Drag-to-reorder for both outline rows and detail pane children with ghost frame and insertion indicator

#

Compiled preview Copy button strips WoW color codes for clean clipboard text

#

Ghost snap-back animation on drag cancel (lerp interpolation with alpha fade in StepListView)

#

Empty state illustration for sequence list (icon + label + hint when no sequences exist)

#

Scroll-during-drag in step list (auto-scroll near ScrollBox edges)

#

Action bar icon override for Blizzard, ElvUI, and Bartender4 bars with per-step icon updates (Engine/BarIntegration.lua)

#

Execution tracing diagnostics (Engine/ExecutionTracer.lua)

#

MS click rate slider (global + per-character, Settings > General)

#

CVar management panel (auto-fix + status display in Settings)

#

OOC queue priority + deduplication (replaces simple FIFO)

#

Configurable OOC timer delay (Settings > oocDelay, 1-60s, default 7)

#

Hierarchical actions: If/Loop/Embed nesting (ActionCompiler flattens to linear steps, per-type UI renderers in UI/ActionRenderers.lua)

#

Battleground Blitz detection via C_PvP.IsSoloRBG() with fallback chain (BattlegroundBlitz > RatedBG > PVP)

#

/gems mapinfo diagnostic command for live context detection

#

Select All/Clear All buttons per context group header

#

Visual fallback chain indicator (color-coded resolution path)

#

SequenceList "Compare with..." context submenu

#

Icon suggestion utility (SuggestSequenceIcon auto-detects from spell content)

#

Floating menu bar with movable shortcut icons (UI/FloatingMenu.lua)

#

Spell cache diagnostic viewer (UI/SpellCacheViewer.lua)

#

ContextTab group collapsed/expanded state persists across sessions

#

Clear Overrides confirmation dialog in SpellCacheViewer

#

LibQTip-2.0 tooltip library added

#

Developer utilities: /gems compress, /gems decompress

#

Click rate diagnostics (/gems status shows clickRate metrics)

#

Fixed

20
Saving, naming and editing9

UndoStack \_suppressUndo permanently stuck true on callback error, disabling undo for the rest of the session (NEW-HIGH-02)

#

SpellCache spell-name overrides had no effect due to wrong AceDB path (read GRIPEMS.db instead of GRIPEMS.Settings.db) (NEW-MED-02)

#

Cross-realm chat links fell through to remote request path due to missing Ambiguate normalization on player name (HIGH-01)

#

SwitchVersion silently discarded unsaved step edits (HIGH-04)

#

TrackerHUD GetActiveVersion nil crash on corrupt version data (MED-40)

#

TrackerHUD name truncation off-by-one: displayed 9 chars instead of max 8 (MED-24)

#

UndoStack Push accepted nil or non-function callbacks, causing delayed crash on Undo/Redo instead of immediate caller error (HIGH-11)

#

UpdateEditArea SH hook race: programmatic SetText triggered SyntaxHighlight colorization, corrupting step data (S29-BUG-05)

#

ShowRenameDialog whitelist missed keyPress/keyRelease fields on version deep-copy

#
Macros, export, import and sharing2

P2P metadata sync non-functional: SendSequenceMeta and CMD_META handler accessed fields on wrapper table instead of wrapper.data, always sending updatedAt=0 and help="" (NEW-HIGH-01)

#

MacroManager DeleteStub substring match could delete wrong macro stub when one sequence name was a prefix of another (HIGH-03)

#
Variables and recommendations2

HandleDiag and HandleMSAdvisor used invalid setting keys, always returning 250ms default click rate (NEW-MED-01)

#

MainFrame RestorePosition crashed on corrupt SavedVariables anchor string (HIGH-05)

#
Repair and spell warnings1

SpellValidator load-time constant could crash if TOC load order ever changed (NEW-HIGH-03)

#
Keybinds and the conflict panel1

SettingsPanel early D binding could crash on TOC reorder (NEW-MED-03)

#
Everything else5

SpellCacheViewer Clear Overrides also targeted wrong db path, making the button non-functional (HIGH-14)

#

StepFunctions modulo-by-zero on empty sequences: Sequential returned NaN, Random errored (MED-38)

#

Autocomplete color code corruption from SyntaxHighlight focus hooks splicing colorized text into plain-text cursor positions (S30-BUG-01)

#

Flat sequences forced into tree mode after /reload due to unconditional auto-migration in Engine:LoadSequences (S30-BUG-02)

#

Removed Test/TestSuite.lua from TOC load list (file excluded from packages via .pkgmeta, caused load warnings for installed users)

#

Changed

22
Saving, naming and editing5

MoveStep undo closures inlined (direct table swap)

#

EDITOR_HEADER_HEIGHT reduced from 220 to 200 (dark EditBox contrast fix)

#

PopupEditor callbacks unregistered on release instead of dispatching to idle instances (MED-37)

#

SequenceEditor callbacks skip refresh when editor panel is hidden (MED-14)

#

nameTooltipFrame dead overlay removed, tooltip moved directly to nameEditBox (NEW-LOW-01)

#
Variables and recommendations2

Branding: legacy import modules renamed to LegacyImport.lua and LegacyMigrate.lua. Module tables, aliases, functions, parameters, variables, and locale keys updated. Functional wire format references preserved

#

GearVariables event frame reused on /reload instead of orphaned (NEW-LOW-02)

#
Repair and spell warnings2

Deprecated split-pane UI code removed: RefreshTreeMode, stale Hide() calls, \_ensureSplitPaneElements

#

SpellValidator validation counting deduplicated into AccumulateCounts helper (NEW-MED-06)

#
Macros, export, import and sharing2

MacrosTab overflow FontString uses create-once/reuse pattern instead of leaking a new FontString per refresh (NEW-LOW-03)

#

Export version prep deduplicated into shared PrepareExportVersions helper (NEW-MED-11)

#
Combat and the Options pages1

OOCQueue now checks AddOnRestrictionType beyond InCombatLockdown

#
Keybinds and the conflict panel1

Duplicate locale key consolidated to GEMS_SEND_NO_SEQ (NEW-LOW-06)

#
Everything else9

C_TooltipInfo API migration (GetItemByID/GetSpellByID with fallback)

#

Dead DRAG_SCROLL_SPEED constant replaced with DRAG_SCROLL_INCREMENT

#

Preview icon strip edge fade textures on both sides (layout fix)

#

ComparisonFrame OnUpdate skips when frame is hidden (NEW-MED-04)

#

ReclaimFrame clears 12 scripts on recycle instead of 8, adding OnEnter, OnLeave, OnClick, and OnTextChanged (MED-20)

#

KeyPress/KeyRelease tooltip descriptions clarified with per-step fit behavior explanation (MED-UX)

#

5 tooltip strings standardized for tone and accuracy (S28-39)

#

README slash commands updated to 26 entries (S28-37)

#

.pkgmeta now excludes Test/, Prompts/, and internal dev folders from user packages (NEW-MED-07)

#

Internal

12
Saving, naming and editing3

Selene pinned to v0.30.1 in lint.yml with fail-fast download (CI-MED)

#

ActionRenderers.lua retained for future extraction (sole caller RefreshTreeMode deleted in S30 Phase 3)

#

UndoStack module for per-instance undo/redo

#
WoW Forever and plugins1

New files: UI/ComparisonFrame.lua, UI/PopupEditor.lua, UI/SyntaxHighlight.lua, Core/PluginAPI.lua, Engine/MacroRecorder.lua, UI/RemoteBrowser.lua, Engine/ActionCompiler.lua, UI/ActionRenderers.lua, Engine/VehicleKeybinds.lua, Engine/PetBattleButtons.lua, Engine/BarIntegration.lua, UI/SpellPicker.lua, UI/FloatingMenu.lua, UI/SpellCacheViewer.lua, Import/RawImport.lua, Data/GearVariables.lua, Engine/ExecutionTracer.lua, Test/TestSuite.lua, UI/UndoStack.lua, 11 Locale/\*.lua files

#
Macros, export, import and sharing1

BuildSeqDataFromGRIP1 shared helper eliminates import path drift

#
Everything else7

S28 Full Code Audit: 38 findings resolved across 4 tiers (see Backlog.md for itemized list with completion dates and evidence)

#

stylua reformat on 38 files (120 col, 4-space indent, Unix LF)

#

.luacheckrc redefined warnings re-enabled with targeted 432/self suppression and 5 inline exceptions (NEW-MED-10)

#

wow.toml: 6 missing globals added (gsub, gmatch, getfenv, setfenv, rawlen, GetSpecializationInfoByID) (NEW-MED-08)

#

luacheck 0 warnings / 0 errors across 65 shipped files

#

Phantom method check: SLV 53 methods, SE 42 methods -- all clean

#

28 sessions of parity work across 9 tiers (24 DONE, 4 PARTIAL, 0 DEFERRED)

#

Grab it

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