EMS-Changelog

GRIP-EMS v2.0.0

Released May 2, 2026. 25 entries in the author's notes.

Every entry

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

Accessibility (Phase 1-4 summary)

9
Saving, naming and editing3

EMS aims to be usable for players who rely on screen readers, play one-handed, play with tremor, play with low vision, are Deaf or hard of hearing, or avoid motion in the UI. The full feature list, compatibility matrix, and structural-limit notes live in ACCESSIBILITY.md; this section names the v2.0.0 work groupings.

#

High-contrast focus ring on every focusable widget, with a per-element theming editor, a font switch via LibSharedMedia (Atkinson Hyperlegible bundled), and an editor scale slider 0.8x to 2.0x.

#

Large-target density mode (WCAG 2.5.5 AAA) grows click areas to 44 by 44 pixels without changing visual size; sequence-editor tabs, row checkboxes, the help button, and the icon-picker close button all participate.

#
Resets and modifiers2

Three palette presets (Default, HighContrast, DeuteranopiaSafe) plus an 8-type colorblind matrix with a 0-100% strength slider; flicker-safe palette setting damps alpha-animation deltas below the WCAG 2.3.1 threshold.

#

One-click Accessibility preset toggles speech, reduce-motion, the High-Contrast palette, editor scale 1.25x, large-target density, the cursor overlay, and Simplified Mode together; toggling off restores prior state.

#
Macros, export, import and sharing1

Keyboard-first navigation across every non-EditBox widget via FocusManager + AceConfigFocusShim, spell/item/macro/slash pickers (14 filter modes), a cursor enhancement overlay, and Simplified Mode for switch input, eye trackers, sip-and-puff, and head tracking.

#
Languages1

Plain-language tooltips and validation messages, an opt-in first-run tutorial, help popovers on every editor section, and a sequence-metadata field for sequence authors to embed guidance that travels with the export.

#
Everything else2

Spoken step announcements via Blizzard text-to-speech, a chat-frame emitter for external screen-reader bridges, and a peer visual-flash complement so Deaf and hard-of-hearing players see the same cues.

#

ACCESSIBILITY.md at the repo root with the feature list, compatibility matrix (BlindSlash, ConsolePort, DialogueUI, Leatrix Plus, ElvUI, WeakAuras, Atkinson Hyperlegible), theming-taxonomy notes, and structural-limit notes for capabilities the WoW addon API does not expose. README, CurseForge, Wago, and WoWInterface listings carry a pointer. The in-addon Accessibility subpanel gains an "Accessibility Guide" subgroup at the top.

#

CVar Health (Phase G summary)

8

212 game variables across 13 sections with health scoring (good / warn / bad), per-section roll-up, and a top-level health badge.

#

4 auto-switching profiles (Performance, Quality, Streaming, Custom) with What Changed login detection and per-CVar Pin so user-locked entries survive profile switches.

#

Onboarding modal on first cvarHealth open explains scoring, profiles, and the Pin model in plain language; tracked behind GEMS_CVAR_ONBOARDING_BODY.

#

ReloadGate cross-cuts every settings change that needs a /reload to fully apply: minimap pip + sidebar pip light up while changes are pending, single popup on settings-panel close offers Reload Now or Later, suppression resets per cycle.

#

Palette routing across the entire cvarHealth surface plus the ReloadGate pips: 13 new tokens to UI.Colors (scoreGood/Warn/Bad, cvarMatch, cvarMismatchCritical/Polish, cvarUnrecommended, cvarSqwManaged, cvarAdvisoryGood/Warn/Bad, reloadGateMinimap, reloadGateSidebar) plus the cvarChangesDetected micro-token; UI:ColorCode helper replaces every hard-coded chat-color literal.

#

Speech:Announce coverage across all activation paths (Fix, Set, Undo, Pin, Auto-fix), the onboarding popup, the reset-to-defaults popup, the export and import popups, and the toggle state-change handlers in the Accessibility subpanel; centralized cvarRowAnnounce helper coalesces ~1100 widget activations.

#

Numbered-key + skip-to-issues navigation in the cvarHealth subpanel via AceConfigFocusShim: keys 1-9 jump to section anchors, PageUp/PageDown cycle sections, Alt+N / Alt+Shift+N cycle the issue list.

#

ReloadGate sidebar pip wired into the active focus context: Focus:RegisterRegion at pip creation; pin on rising edge / unpin on falling edge; survives shim rewalks via R:_PinIntoFocusContext helper called from the cvarHealth onRewalk callback.

#

Editor + Engine

3

Editor auto-icon detection and import-preview fingerprint no longer crash on table-shaped sequence steps. Step-to-string coercion lifted into SC:StepToString and reused by SequenceList, SequenceEditor, and ImportPreview. Reported by Pershizzle.

#

SC:ParseSpellFromMacrotext now delegates input coercion to SC:StepToString, removing the duplicate string/table/array handling logic. Behavior unchanged for all input shapes.

#

Settings panel right-side detail pane no longer gets clipped on profile-list cascade: the cascade resize now runs on a deferred frame so AceConfigDialog gets its own width pass before the panel asks for the post-cascade dimensions.

#

Internal

5

AceConfigFocusShim landed: ~760-line bridge from AceConfigDialog subpanels into GRIPEMS.Focus so Blizzard SettingsCanvas pages get TAB cycle + ENTER activation. Opt-in per group via Shim:Enable. v2.0.0 surfaces enabled: accessibility (S19), cvarHealth (S20).

#

Locale framework: 22 new ACCESS_ANNOUNCE_* keys and 1 GEMS_CVAR_PROFILE_MANAGE_DESC key across 11 locales (242 string additions, English placeholder under REVALIDATE for non-enUS locales). enUS authoritative count moved 1777 -> 1778; mirror coverage stays at 85.8%.

#

Linter wiring stable: alllint pipeline runs luacheck, selene, markdownlint, jsonlint, and stylua --check in one pass; all shipped Lua / JSON code is at zero warnings; markdownlint baseline preserved in gitignored dev files.

#

Hard-link gate enforced on every commit via .pre-commit-config.yaml -> python Tools/cowork_util.py hardlinks; canonical Tools/ at Hub/GRIP/Tools/ with hard-links into each project's Tools/.

#

AVAV (post-Code verification) now mandates re-running alllint locally and comparing against Code's claims rather than trusting narrative numbers; tracked under TOOLING-AVAV-LINT-RERUN after a fabricated-numbers incident on 2026-05-02 G.8c.1.1.

#

Grab it

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