Skip to content

Releases: TimothyLuke/GSE-Advanced-Macro-Compiler

3.3.23

21 Jun 23:29
fb1946e

Choose a tag to compare

GSE

3.3.23 (2026-06-20)

Full Changelog Previous Releases

  • Merge pull request #1964 from LarryThiessen/fix-abo-icon-not-clearing
    FIX: ABO icon not clearing until mouseover (#1963)
  • FIX: clear ABO icon immediately on removal (no mouseover needed)
    #1963
    Removing an Action Button Override cleared the GSE watermark but left the
    GSE-painted icon on the button until the next ActionButton update (e.g. a
    mouseover). LoadOverrides reverted the button and removed the watermark but
    never repainted the real action-slot icon.
    LoadOverrides now snapshots the overridden buttons and, after the re-arm pass,
    forces a real-icon repaint on any button that was cleared and not re-armed
    (button:Update() / ActionButton_Update / direct slot-texture fallback; all
    guarded for cross-version safety).
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1975 Normalise Skin variances
  • #1957 move Skyriding to part of tools and diagnostics. its only relevant to people who use keybinds (< 20% of GSE Users)
  • Merge pull request #1959 from LarryThiessen/enhancements-1957-editor
    ENH: Editor toolbar/layout, live tree updates, options ordering
  • #1893 Handle Macros via import strings
  • #1893 Import cleanup
  • Fix #1960 Frames that dont render correctly
  • Merge pull request #1958 from LarryThiessen/fixes-1956-editor-options
    FIX: MacroBlock editor editing bugs + blank Options History panel
  • ENH: Editor toolbar/layout + live tree updates + options ordering
    #1957
    • Editor: swap Pause/If toolbar order; vertically center the Version Name box;
      top-button block creation inserts a sibling immediately after the focused
      block (focusing a Loop/If adds below it, not inside).
    • Tree: new versions appear instantly and deleted versions clear instantly,
      before saving (mirrored into the in-memory Library cache).
    • Options: move Skyriding / Vehicle Keybinds above Tools & Diagnostics.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • FIX: MacroBlock editor live-colour editing bugs + blank Options History panel
    #1956
    • Editor: live syntax-colouring no longer eats the blank row opened with Enter,
      stops backspace at a comma, or throws the caret to the end. The live re-colour
      is now idempotent (repaints only when no visible characters change) and
      debounced, so it can't rewrite in-progress text or fight the caret.
    • Options: the GSE History/About page no longer comes up blank - its content is
      built eagerly instead of only in OnShow (a canvas parent with subcategories
      does not reliably fire OnShow).
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1914 TOC Updates

3.3.22

16 Jun 05:22

Choose a tag to compare

GSE

3.3.22 (2026-06-16)

Full Changelog Previous Releases

  • #1920 Fix Actionbar Overrides in Dominos.
    Note: The user needs to show hidden buttons to set an Actionbar Override via a right click for a Dominos button but once set the button will no longer hide.
  • #1931 Change LAB detection to capability based
  • #1931 change LAB detection to capability based
  • #1914 Add empty statics to public proxy for old plugin compatability
  • #1931 Fix Override regression
  • Fixe #1954 - Mouse Button 4 and 5 mappings
    #1954 FIX: Mouse buttons 4/5 keybinds do nothing in game
  • FIX #1931 ABO combat taint block on Bartender4 State Config bars
    FIX #1931: ABO combat taint block on Bartender4 State Config bars
  • Merge pull request #1952 from LarryThiessen/master
    FIX: ABO works in all forms incl. Prowl on Bartender4 and stock bars
  • #1954 FIX: Mouse buttons 4/5 keybinds do nothing in game
    The keybind capture widget stored mouse buttons 4/5 using the WoW
    frame-script names ("Button4"/"Button5") instead of valid binding names
    ("BUTTON4"/"BUTTON5"). SetBindingClick rejected those keys and returned
    nil, so the bind saved in GSE but never fired in game. Only the middle
    button worked because it had an explicit MiddleButton -> BUTTON3 map.
    • NativeUI: normalize Button4/Button5 to BUTTON4/BUTTON5 on capture,
      matching the existing MiddleButton -> BUTTON3 handling.
    • Events: add normalizeBindKey() applied at both SetBindingClick call
      sites so already-saved btn4/5 binds (incl. modifier combos like
      SHIFT-Button4) are migrated on load and fire without re-binding.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • FIX: #1931 ABO combat taint block on Bartender4 State Config bars
    GSE armed native action-bar overrides by writing the secure attributes
    gse-button/type/clickbutton onto the Blizzard button from insecure Lua,
    which taints those values. The secure BAR_SWAP snippets then read the
    tainted gse-button flag; on a bar that Bartender4 "State Configuration"
    pages (it drives actionpage via a secure state driver), that taint rides
    into Blizzard's ActionButton:UpdatePressAndHoldAction and its protected
    SetAttribute("pressAndHoldAction") is blocked in combat -- the
    "MultiBarBottomLeftButton12 ... SetAttribute" error blamed on Bartender4.
    Fix: a secure snippet must never read an insecurely-written value.
    • Add a secure boolean gate gse-secure, set ONLY from inside the
      SecureHandler (SHBT:Execute) via new secureArmGSEButton /
      secureYieldGSEButton / secureDisarmGSEButton helpers.
    • BAR_SWAP_OAC / BAR_SWAP_ONCLICK and the third-party OnEnter wrap now
      gate on gse-secure instead of the insecure gse-button string.
    • Arm type/clickbutton through the secure handler too; the gse-button
      string stays (set insecurely) but is read only by non-secure icon/
      tooltip/yield hooks, so its taint is inert.
    • LAB bars (BT4Button/ElvUI/NDui/CPB) are untouched -- they use SetState.
      Verified in-game (MoP Classic 5.5, Bartender4 State Config on, override
      on MultiBarBottomLeftButton12, spammed in combat): taintLog 2 shows zero
      GSE-sourced taint and no pressAndHoldAction block; the button still fires
      the sequence normally.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • Merge remote-tracking branch 'upstream/master'
  • FIX: ABO works in all forms incl. Prowl on Bartender4 and stock bars
    • getButtonEffectiveSlot: read the resolved .action field so the yield check
      evaluates the bonus-bar slot the button actually fires (Cat/Prowl/Bear), not
      base slot 1 -- stops the Single-Button Assistant on slot 1 from hijacking the
      override.
    • ActionBarSlotHasForeignAction: keep the override only for confirmed GSE
      sequence macros; yield to any other macro/spell/item on the slot.
    • LAB bars (BT4/ElvUI/NDui/CPB): register the override on every LAB state so the
      bar's stance/form paging (Prowl = its own state) can't strand it.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • Merge pull request #1949 from LarryThiessen/fixes-batch-1935-1948
    Tracker / skin / debugger / options fixes & enhancements (#1935-#1948)
  • #1951 Only perform LINT tests on Pull Requests and dont include debug code in production builds
  • #1948 FIX: Actionbar Overrides icon missing
    Statics.Icons.Button pointed at a misspelled path (actionoride.png) with no asset; add the actionoverride.png asset and correct the path.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1947 FIX: Settings dropdowns render behind the options panel
    Stop forcing SettingsPanel to FULLSCREEN_DIALOG strata; rely on the stock Settings.OpenToCategory to open and layer the panel so its dropdown popouts appear in front. Remove the dead BringSettingsPanelForward helper.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1946 FIX: Pause-toggle reload prompts did nothing
    Shift/Alt/Ctrl pause toggles called the retired StaticPopup_Show(GSE_ConfirmReloadUIDialog) which is no longer registered; switch to the migrated GSE.GUICall(GUIConfirmReloadUI).
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1945 EHN: Skin swap prompts reload and defers all changes until reload
    Selecting a skin only saves the choice and prompts a reload; nothing swaps live, so the whole skin changes together on reload. Declining keeps the session on the current skin.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1944 FIX: Remove obsolete tracker icon options
    Remove the Single Icon checkbox and Preview Icon Count slider from Tools & Diagnostic; the tracker is locked to a single icon.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1943 EHN: GSE windows follow the active global font (skin-aware)
    GSE text adopts the active font by skin mode: Native = stock Blizzard default (forced even when ElvUI/EUI replaced the globals), Modern = STANDARD_TEXT_FONT, Addon = ElvUI normFont / EllesmereUI font. Face-only (size/flags preserved), applied across all GSE windows, the tree, debugger rows and the tracker.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1942 EHN: Remove class-colour outline on Native-skin windows
    Remove the 4-side class-colour band around Native-skin windows; the accent still applies to button/checkbox text and the slim scrollbar. Modern borders unaffected.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1941 EHN: Live-resize throttling (Editor + Debugger)
    Throttled ~50fps OnUpdate resize pump with a whole-pixel coalesce and a settle on mouse-up, on the Editor and the Debugger main and side windows.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1940 EHN: ElvUI skin parity
    Add GSE.Skin.HostAccentColor and union the external-provider gating so GSE widgets (scrollbar, close button, dropdown chrome/list/chevron, icons) fully skin under ElvUI/EllesmereUI.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1939 EHN: Dropdown max-visible cap
    Cap visible rows (default 20) so a long uncapped list scrolls in a bounded popup instead of growing off-screen; explicit SetMaxVisibleItems still wins.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1938 EHN: Debugger chrome, side-window strata and re-snap
    Side windows ride with the main window's strata, re-snap to the main on drag, the stray side close button is removed, and GSE.RefreshDebuggerSkin repaints on a live skin change.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1937 FIX: Import window transparent under Modern skin
    Mix in BackdropTemplateMixin and paint a GSEImportBodyFill texture so the import window renders solid under the modern skin.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1936 EHN: Tracker font follows the active skin
    Tracker text uses GameFontHighlightSmall + a subtle drop shadow from the live font global instead of GameTooltipText + heavy OUTLINE, so it adopts skin fonts.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1935 EHN: Player Status tracker line
    Toggleable Combat/No-Combat status line in the tracker text panel (default on) with an Options checkbox. Initialises safely from saved vars on fresh install and upgrade.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

3.3.21

13 Jun 01:15

Choose a tag to compare

GSE

3.3.21 (2026-06-13)

Full Changelog Previous Releases

  • #1930 Fix localisation strings
  • #1930 Fix missing Localisation string
  • Merge pull request #1933 - #1930 Skin selection dropdown (Native/Modern/addon)
    #1930 Skin selection dropdown (Native/Modern/addon) + relocate GUI helpers to GSE_Utils
  • #1930 Skin selection dropdown (Native/Modern/addon) + relocate GUI helpers to GSE_Utils
    Replaces the two mutually-exclusive Native/Modern skin checkboxes in the options
    panel with a single Skin dropdown offering Native, Modern, and a dynamic
    addon-specific entry (labelled "ElvUI" or "EllesmereUI", shown only when that
    addon is installed).
    • New saved variable GSEOptions.SkinMode ("NATIVE"/"MODERN"/"ADDON"; unset =
      AUTO). AUTO uses the installed addon skin when present, otherwise Native; an
      explicit choice is always honoured. Migrates the old boolean
      GSEOptions.UseModernSkin (true -> "MODERN", otherwise AUTO) and keeps it in
      sync for downgrade safety.
    • Provider selection in GSE_GUI/Skin.lua now honours the mode: ElvUI/EllesmereUI
      only drives GSE's look when the effective mode is "ADDON", so choosing Native
      or Modern is respected even with one installed (previously the external
      provider always won).
    • Moves the front-end-only helpers (skin accessors, UI-scale subsystem,
      frame-positioning math) out of core GSE/API/InitialOptions.lua into a new
      GSE_Utils/Appearance.lua. The macro engine never calls them; GSE_Utils is the
      lowest shared front-end dependency (GSE_Options and GSE_GUI both depend on it),
      so they stay available without forcing the LoadOnDemand GSE_GUI to load. Core
      keeps only the saved-variable defaults + migration.
      No change to the macro engine. luacheck (std=lua51) / busted unaffected: no spec
      or core file references the moved functions.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • #1914 Fix random spell flash
  • #1928 post mnerge update
  • Merge remote-tracking branch 'refs/remotes/origin/master'
  • #1928 Fix loading of large sequences into the editor
  • #1920 SKyriding Keybinds
  • #1925 Guard retail api reference and fall back to classic one when not available
  • Merge branch 'master' of https://github.com/TimothyLuke/GSE-Advanced-Macro-Compiler
  • #1927 NativeUI: rewire reparented slim-scrollbar OnValueChanged
    anchorModernSlimScrollBar reparents the stock UIPanelScrollFrameTemplate
    scrollbar off its ScrollFrame onto a BackdropTemplate Frame so it can
    render outside the ScrollFrame's SetClipsChildren(true) clip region.
    After the reparent, Blizzard's UIPanelScrollBar_OnValueChanged still
    ran self:GetParent():SetVerticalScroll(value) — but GetParent() was now
    the BackdropTemplate frame, which has no SetVerticalScroll. Every
    scroll tick threw "attempt to call a nil value" out of
    SecureScrollTemplates.lua:24.
    Notes was the visible crash because the editor's pixel-scroll path
    swaps OnValueChanged after reparenting; the Notes box (and the
    Debugger output pane) kept the stock handler. Capture the original
    ScrollFrame before SetParent and re-point OnValueChanged at it.
    Additive: guarded by GetParent().SetVerticalScroll existence so a
    non-ScrollFrame parent silently skips; callers that install their own
    handler still win on top; unskinned setups never enter the branch.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • #1914 Fix EllesmereUI Disabled backgrounds
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • #1924 variable editor: re-evaluate the preview with arguments
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • #1924 adjust variable scoping to ensure they are loaded correctly
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • #1914 Minor editor quirks
  • #1923 Fix Alt+Rightclick to lock tracker position
  • #1897 CHange popup text to match current function.
  • #1914 Editor fixes and disable dev mode for non devs
  • #1920 fix toggling sequence names
  • #1920 Toggle Sequence Name display for Overrides in options
  • #1920 remove dependency on state of CVar ActionButtonUseKeyDown

3.3.20

09 Jun 05:07

Choose a tag to compare

GSE

3.3.20 (2026-06-05)

Full Changelog Previous Releases

  • #1914 Add GSE_Companion to the source list
  • #1914 EllesmereUI Icon Provider Update
  • #1914 Fix Skyriding keybinds
  • #1914 Expose legacy GSE proxy with RegisterAddon/GetSequenceNamesFromLibrary/isEmpty
    External sequence-pack plugins (not under our control) still parse with
    local GSE = GSE and call GSE.RegisterAddon / GSE.GetSequenceNamesFromLibrary
    to register their bundled sequences. After the privacy refactor those
    plugins would clear their own if GSE == nil then return end guard and
    crash on the first internal helper (GSE.isEmpty).
    Expose a sealed proxy at _G.GSE carrying ONLY the registration handshake
    surface — the two methods plus the isEmpty nil-guard the registration
    path itself uses. Everything else on the private namespace (L, Static,
    Library, AceEvent mixins, internal helpers …) is deliberately absent.
    __newindex silently drops writes so a stray GSE.foo = bar in a plugin
    can't clobber our exposed methods or graft state onto the proxy.
    __metatable = false locks the metatable so it can't be re-tabled either.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • #1914 GSE Pause editor corrections
  • #1914 Gte depending on version greater than 11
  • #1914 Fix Patron update in build
  • #1914 Packaging update
  • #1914 Pass texture (not Button) to ElvUI Skin.Icon
    NativeUI.createIcon was handing the surrounding Button to
    GSE.Skin.Icon, but ElvUI's S:HandleIcon calls icon:SetTexCoord
    internally — that method only exists on Textures, so the
    Button-typed argument errored with "attempt to call a nil
    value" the moment a player /reloaded with the GSE menu
    auto-restore path engaged and ElvUI enabled. Pass widget.image
    (the texture created two lines above) instead so HandleIcon
    operates on the right object and ElvUI's icon coords actually
    apply to the icon image.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • #1914 Solve memory leak
  • #1914 TOC Updates for 12.0.07
  • #1914 More Keybind and skyriding fixes
  • #1914 Internal Tracker.
  • #1914 Scroll Speed Fix, help-spell casting variants
  • #1918 FIx sorting DebugWindow and only showing spell assist column when on a client that has that.
  • #1918 #1914 Icon Flicker, Macro Count, and ABO Highlight
  • #1918 Removal of CTRL+Z, Fix Arrow Keys, Fix MultiEditor launch and fix Toolbar toggling.
  • #1914 Remove AceConsole Reference
  • #1914 Restore Skyriding Keybinds
  • #1914 Fix Clearing Keybinds wiping all of GSE_C
  • #1914 Update menu graphic
  • #1914 EllesmereUI Look and Feel
  • #1914 More code cleanup
  • #1914 Post luacheck build errors
  • Merge pull request #1916 from TimothyLuke/dependabot/npm_and_yarn/ws-8.21.0
    Bump ws from 8.18.3 to 8.21.0
  • #1914 code cleanup
  • #1914 Luacheck
  • #1914 Luacheck update
  • #1914 Second Cut removing AceGUI Dependency
  • Bump ws from 8.18.3 to 8.21.0
    Bumps ws from 8.18.3 to 8.21.0.
    updated-dependencies:
    • dependency-name: ws
      dependency-version: 8.21.0
      dependency-type: indirect
      ...
      Signed-off-by: dependabot[bot] support@github.com
  • patron publish: point embed at GSE_Menu_Logo.png (the wide finish)
    The Discord build notification was still resolving to GSE_Logo_Dark_512.png
    — that's the square crop now used for the in-game app icon + the
    Companion app icon — instead of the wide menu finish. The thumbnail
    slot in a Discord embed reads better with the wide artwork; same for
    the bot avatar circle (the wider crop centres the wrench head + GSE
    letters away from the round crop edge).
    GitHub raw URL pattern unchanged so Discord's media proxy stays happy.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • logo: refresh menu + dark icons to the new finishes
    GSE_Menu_Logo gets the wide wrench framing (image #10) at 250×250 —
    fills the top-bar slot in the in-game menu without cropping. The
    dark icon (GSE_Logo_Dark_512.png used by the welcome screen, LDB
    minimap, editor min-widget, import-dialog header, and tracker
    identity check) gets the square crop (image #12) at 512×512 — the
    wrench now wraps the GSE letters fully so the icon reads at small
    sizes too. No code paths changed; same filenames, same load
    sites.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Update Icon
  • #1915 Allow a modifier to be set to pause a sequence
  • patreon publish: use direct PNG URL for embed thumbnail
    The previous gse.tools URL 302-redirected to a signed S3 url, which
    Discord's media proxy didn't render as an embed thumbnail (though it
    accepted it for the webhook avatar). Switch to the GitHub raw URL of
    the committed PNG — direct image/png response, no redirects — same
    shape forgecdn used for the original logo. Rolls back the attachment
    plumbing; setThumbnail(url) is the right tool, the URL was wrong.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • patreon publish: attach logo file so the embed thumbnail renders
    The previous attempt set the embed thumbnail to a gse.tools URL that
    302-redirects to a signed S3 URL. Discord's media proxy accepts the
    redirect for the webhook avatar (visible bot pic = new wrench, ✓) but
    refuses it for embed thumbnails (right-side thumbnail = missing).
    Author icon was ambiguous.
    Switch the embed author icon + thumbnail to attachment://gse-logo.png
    and attach GSE_GUI/Assets/GSE_Logo_Dark_512.png alongside the zip.
    Discord renders attached images directly with no proxy fetch, so the
    thumbnail comes back. Bot avatarURL keeps the gse.tools URL since the
    webhook avatar fetch works fine through that path.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • patreon publish: new GSE wrench logo in Discord embed + bot avatar
    Swap the embed author iconURL + thumbnail away from the stale forgecdn
    gse2-logo-dark-2x.png onto a single LOGO_URL constant pointing at the
    new wrench logo hosted via Qik file storage at gse.tools (file id
    6a17c04d699ec384f2773a97). Same id serves the website's header/hero,
    so future re-brands swap the file behind the id and propagate across
    both surfaces.
    Also override the webhook send with username + avatarURL so the bot's
    own profile picture matches the embed, instead of inheriting whatever
    avatar the webhook was originally created with in the Discord server
    settings (still the old hex logo there).
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • logo: new GSE wrench logo across in-game surfaces
    Replaces the old GSE2 wordmark with the new GSE wrench logo wherever
    the addon shows its brand at runtime: the welcome screen background,
    the LDB minimap icon, the editor min-widget icon, the import-dialog
    header, and the tracker-button identity check.
    GSE_Logo_Dark_512.blp → GSE_Logo_Dark_512.png. WoW reads PNG fine
    from addon assets, so swapping the file extension + updating the
    Statics path in GSE/API/Statics.lua is sufficient. Deleted the old
    BLP so the TOC IconTexture base-name lookup picks the new PNG
    unambiguously. GSE_Menu_Logo.png overwritten at the same 250×250
    the runtime already expected.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • publish: surface server-side cleanup summary
    The /publish/mod endpoint now applies the retention rule (latest release
    • previous release + alphas on top of latest) on every publish — see the
      GSE-Tools-API commit. Print the cleanup summary line including the
      latest/previous baseVersion the server picked, so CI logs show what was
      archived.
      Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • #1913 gate sequecne recompilation behind checking for isEncounter

3.3.19

21 May 05:19

Choose a tag to compare

GSE

3.3.19 (2026-05-21)

Full Changelog Previous Releases

  • #1912 Luacheck bindings for EllesmereUI
  • #1912 Release actionbar button when flight bar enabled in EllesmereUI
  • #1890 Mac file encoding
  • #1912 Actionbar Override support for EllesmereUI
  • #1890 Translation fixes
  • #1890 Change disabled buttons

3.3.18

18 May 09:46

Choose a tag to compare

GSE

3.3.18 (2026-05-18)

Full Changelog Previous Releases

  • #1890 Update import script
  • #1890 Change metadata test to match current expansion

3.3.17

17 May 01:31

Choose a tag to compare

GSE

3.3.17 (2026-05-16)

Full Changelog Previous Releases

  • #1893 update build script
  • #1890 Statics: register specId 1480 (DH Devourer/Aldrachi) in SpecIDClassList
  • #1890 Colour code corrections — don't rewrite MacroBlock text mid-typing
    The previous patch's macroEditBox OnTextChanged handler called
    sel:SetText(value) to rewrite the visible text when decoded value
    differed from raw input. AceGUI fires OnTextSet after SetText, which
    resets the caret to position 0 and strips editor colour markup —
    producing a visible cursor-jump and lost colouring whenever the user
    typed into a MacroBlock.
    Drop the sel:SetText branch. The handler still decodes value and
    stores the clean form via StoreMacroEditorText(value); we just no
    longer overwrite the live edit box while the user is interacting
    with it. The same change applies to GSE_QoL's CreateSpellEditBox
    override since it mirrors the base GUI implementation.
    Patch from external contributor (Larry, 2026-05-10).
  • #1890 Colour code corrections — UI editor decode/disable-coloring wiring
    Editor.lua:
    - GetCompiledMacroBodyLength — decode before measuring length.
    - Raw editor compile/cancel — decode input before loadstring; disable
    IndentationLib on widget release/cancel so stale colouring doesn't leak.
    - Per-action save (cfg.sourceBox) — StoreMacroEditorText for macro fields,
    DecodeEditorText for everything else.
    - Raw-edit button — sanitize sequence version before opening raw editor.
    - Macro action render — repair leaked markup on action.macro before display,
    decode spelltext for non-macro types, decode in OnTextChanged callbacks.
    - macroEditBox — DisableMultilineEditorColoring on creation/release; decode
    text on change with a recursion guard before storing via StoreMacroEditorText.
    Editor_Actions.lua:
    - Wrap each spellEditBox:GetText() with DecodeEditorText (or
    StoreMacroEditorText for macro radio).
    - Compiled-side-panel + visible-char count both decoded.
    Editor_Macro.lua:
    - Macro template / compiled-template / OnTextChanged paths decode through
    DecodeMacroEditorText / StoreMacroEditorText.
    - Manual macro display SetText decoded.
    Editor_Variable.lua:
    - OnRelease callback disables IndentationLib on the value editor.
    MacroCompare.lua:
    - DisableCompareColoring on close, action button, and OnRelease for both
    diff columns.
    MacroPreview.lua:
    - DisablePreviewColoring on PreviewLabel OnRelease.
    QoL.lua (GameMode > 10 retail-spell editor):
    - Mirrors Editor.lua's macroEditBox pattern: repair-on-display, decode
    OnTextChanged with recursion guard, DisableMultilineEditorColoring on
    create/release, count + side-panel through decode helpers.
  • #1890 Colour code corrections — sanitize on storage and import paths
    Storage.lua:
    - migrateSequenceVersions / ReplaceSequence — call SanitizeSequenceEditorMarkup
    so previously-stored sequences with leaked markup get cleaned on next save.
    - buildAction / CompileMacroText — decode macro text before slash-command
    detection so a leaked colour prefix doesn't hide the leading "/".
    Utils.lua:
    - OOCAddSequenceToCollection / OOCPerformMergeAction — sanitize before storing.
    - processWAGOImport — scrub the imported tree.
    - ImportSerialisedSequence — scrub COLLECTION payloads (with defensive
    or {} on Sequences/Variables/Macros), MACRO, and VARIABLE imports.
    - Adds local helpers scrubImportedEditorMarkup / scrubCollectionPayload that
    recurse using the new GSE.Decode* helpers (with inline fallback if absent).
  • #1890 Colour code corrections — add editor-markup decode helpers
    Adds shared helpers used across the editor, storage, and import paths to
    strip leaked WoW colour markup (|cff…|r and || escape pairs) without
    losing the translator-coloured display text:
    GSE.DecodeEditorText — strip colour markup from any string
    GSE.DecodeMacroEditorText — same + repair |cmd → /cmd at line starts
    GSE.StoreMacroEditorText — decode + recompile-then-decode for storage
    GSE.SanitizeSequenceEditorMarkup — recursive walker over sequence tables
    This commit lands the helpers only; storage/import/UI call-sites follow.
  • #1890 Hide the macro compilation unless the cokmpile template window is open
  • #1893 manage import queue

3.3.16

07 May 23:56

Choose a tag to compare

GSE

3.3.16 (2026-05-07)

Full Changelog Previous Releases

  • #1890 more editor and icon related fixes
  • LastUpdated: UTC via GetServerTime + macro tracking + clear PlatformID on rename
    Holistic fix for the cross-account multi-write bouncing class. When one
    Companion installation has the same sequence/macro/variable on two WoW
    accounts and is syncing both, each /reload writes its own slightly-
    different copy of the record and the server alternates between them,
    firing a Discord toast on every flip (observed at ~9 toasts in 4 min
    for one author 2026-05-08).
    Resolution: server side picks the newer-stamped copy. That requires
    the addon stamp every record with a comparable timestamp.
    Changes:
    * GSE/API/StringFunctions.lua: GSE.GetTimestamp() now returns UTC via
    date('!%Y%m%d%H%M%S', GetServerTime()). Was client-local time which
    made cross-timezone comparison nonsensical.
    * GSE/API/Storage.lua: UpdateMacro stamps node.LastUpdated. Macros
    previously never tracked LastUpdated at all. Plus new function
    GSE.BackfillLastUpdated -- idempotent, gated by a SavedVariables
    flag, walks GSE.Library / GSEVariables / GSEMacros and stamps any
    pre-existing record missing the field.
    * GSE/API/Events.lua: PLAYER_ENTERING_WORLD calls
    GSE.BackfillLastUpdated so legacy records light up on first login
    after the user updates the addon.
    * GSE_GUI/Editor.lua: sequence rename (newname-flag path) clears
    sequence.MetaData.PlatformID and the GSEPlatformIDs sidecar entry
    under the original origin key. Prevents the v4-renamed-to-v5 case
    where both sequences inherit the same server _id and bounce.
    * GSE_GUI/Editor_Variable.lua: variable rename (OnTextChanged
    callback) clears GSEVariablePlatformIDs[oldName].
    * GSE_GUI/Editor_Macro.lua: macro rename (OnEnterPressed callback)
    clears GSEMacroPlatformIDs[oldName].
    Pairs with:
    * gse-api commit 9afbc3b -- server-side enrich.js stamps LastUpdated
    when the incoming payload doesn't carry one.
    * GSE-Companion commit 667ea56 -- preserves top-level LastUpdated on
    upload (was being silently stripped during rawData rebuild).
  • #1908 Fix multiclick button settings
  • #1893 sync updates
  • #1893 More Sync checks
  • #1890 Fix Patreon icon selector

3.3.15

27 Apr 02:31

Choose a tag to compare

GSE

3.3.15 (2026-04-27)

Full Changelog Previous Releases

3.3.14

25 Apr 07:29

Choose a tag to compare

GSE

3.3.14 (2026-04-25)

Full Changelog Previous Releases