Releases: RGXMods/RGX-Framework
Releases · RGXMods/RGX-Framework
Release list
v2.7.4
Changes
Current Release
v2.7.4 - 2026-08-23
- Standardized framework chat output as
{icon} - [RGX] {message}through
RGX:CreateChatPrefix(). - Added a persistent global login-message gate with
/rgx login on|off|status
and theIsLoginMessagesEnabled,SetLoginMessagesEnabled, and
LoginMessageAPIs. - Routed declarative
welcomeoutput through the login gate and reduced
framework startup output to one gated, metadata-derived line. - Added Lua 5.1 runtime coverage for persistence, command confirmations,
declarative welcome behavior, prefix formatting, and startup deduplication.
Recent Releases
v2.7.3 - 2026-08-22
- Fixed
ADDON_ACTION_FORBIDDENfrom the v2.7.2 event-lifecycle flush: deferred
native registrations now run only from an anonymous next-frame driver, never
while unwinding an event dispatch, timer dispatch, combat, or pet battle. - Registration success is verified with
IsEventRegistered; unsupported or
repeatedly rejected events are dropped after a bounded attempt cap instead of
retrying forever. The 2.7.2 deferral guarantee is preserved one frame later. - Retail no longer registers
COMBAT_LOG_EVENT_UNFILTERED: new flavor-gated
combatLogEventcapability,RGXCombatskips CLEU on Retail 12.x, and
RGXCombat:HasCombatLogEvents()exposes the degraded surface. - Event-lifecycle runtime coverage extended from 35 to 66 checks.
- Published assets are
RGX-Framework-v2.7.3.zipandrelease.json; the addon
archive contains 100 runtime files and all six flavor TOCs.
v2.7.2 - 2026-08-22
- Fixed deferred WoW frame-event registrations created during framework event
dispatch. Consumer events registered fromPLAYER_LOGIN,
PLAYER_ENTERING_WORLD, or another handler now become native frame events
immediately after the outermost safe dispatch returns. - Extended the same lifecycle guarantee to registrations created inside RGX
timer callbacks, closing the second path that could strand callbacks in
pendingFrameEvents. - Made unit-event unregistration clean up pending and native frame state
symmetrically while preserving a shared registration when regular handlers
still exist for the same event. - Added 35 Lua 5.1 event-lifecycle checks covering login bootstrap, nested
dispatch, unit events, timers, combat deferral, shared handlers, and
removal-before-flush. Existing 166 timer and 86 restricted-aura checks remain
green. - Published assets are
RGX-Framework-v2.7.2.zipandrelease.json; the addon
archive contains 100 runtime files and all six flavor TOCs.
v2.7.0 - 2026-08-15
- Added declarative named repeating timers with deterministic ordering,
lifecycle binding, metadata, self-cancellation, and failure isolation. - Hardened RGXAuras into an accessible-only restricted-value boundary and added
the corresponding Lua 5.1 runtime and source-conformance coverage.
v2.6.2 - 2026-08-14
- Synchronized distribution documentation and hardened release/package
validation across the six supported WoW flavors.
v2.6.1 - 2026-08-13
- Restored the single-product framework distribution boundary and aligned
deterministic package verification.
v2.6.0 - 2026-08-13
- Added capability-gated support and verified TOCs for Retail, Classic Era,
TBC, Wrath/Titan, Cataclysm, and Mists Classic.
v2.5.1 - 2026-08-12
- Added the cross-version compatibility layer, hardened aura payload access,
and shipped accumulated UI and pet-battle fixes.
Historical Release Notes
Full per-version notes remain in docs/changelogs/, including releases from v1.x through v2.5.0.
v2.7.3
Changes
Current Release
v2.7.3 - 2026-08-22
- Fixed
ADDON_ACTION_FORBIDDENfrom the v2.7.2 event-lifecycle flush: deferred
native registrations now run only from an anonymous next-frame driver, never
while unwinding an event dispatch, timer dispatch, combat, or pet battle. - Registration success is verified with
IsEventRegistered; unsupported or
repeatedly rejected events are dropped after a bounded attempt cap instead of
retrying forever. The 2.7.2 deferral guarantee is preserved one frame later. - Retail no longer registers
COMBAT_LOG_EVENT_UNFILTERED: new flavor-gated
combatLogEventcapability,RGXCombatskips CLEU on Retail 12.x, and
RGXCombat:HasCombatLogEvents()exposes the degraded surface. - Event-lifecycle runtime coverage extended from 35 to 66 checks.
- Published assets are
RGX-Framework-v2.7.3.zipandrelease.json; the addon
archive contains 100 runtime files and all six flavor TOCs.
Recent Releases
v2.7.2 - 2026-08-22
- Fixed deferred WoW frame-event registrations created during framework event
dispatch. Consumer events registered fromPLAYER_LOGIN,
PLAYER_ENTERING_WORLD, or another handler now become native frame events
immediately after the outermost safe dispatch returns. - Extended the same lifecycle guarantee to registrations created inside RGX
timer callbacks, closing the second path that could strand callbacks in
pendingFrameEvents. - Made unit-event unregistration clean up pending and native frame state
symmetrically while preserving a shared registration when regular handlers
still exist for the same event. - Added 35 Lua 5.1 event-lifecycle checks covering login bootstrap, nested
dispatch, unit events, timers, combat deferral, shared handlers, and
removal-before-flush. Existing 166 timer and 86 restricted-aura checks remain
green. - Published assets are
RGX-Framework-v2.7.2.zipandrelease.json; the addon
archive contains 100 runtime files and all six flavor TOCs.
v2.7.0 - 2026-08-15
- Added declarative named repeating timers with deterministic ordering,
lifecycle binding, metadata, self-cancellation, and failure isolation. - Hardened RGXAuras into an accessible-only restricted-value boundary and added
the corresponding Lua 5.1 runtime and source-conformance coverage.
v2.6.2 - 2026-08-14
- Synchronized distribution documentation and hardened release/package
validation across the six supported WoW flavors.
v2.6.1 - 2026-08-13
- Restored the single-product framework distribution boundary and aligned
deterministic package verification.
v2.6.0 - 2026-08-13
- Added capability-gated support and verified TOCs for Retail, Classic Era,
TBC, Wrath/Titan, Cataclysm, and Mists Classic.
v2.5.1 - 2026-08-12
- Added the cross-version compatibility layer, hardened aura payload access,
and shipped accumulated UI and pet-battle fixes.
Historical Release Notes
Full per-version notes remain in docs/changelogs/, including releases from v1.x through v2.5.0.
v2.7.2
Changes
Current Release
v2.7.2 - 2026-08-22
- Fixed deferred WoW frame-event registrations created during framework event
dispatch. Consumer events registered fromPLAYER_LOGIN,
PLAYER_ENTERING_WORLD, or another handler now become native frame events
immediately after the outermost safe dispatch returns. - Extended the same lifecycle guarantee to registrations created inside RGX
timer callbacks, closing the second path that could strand callbacks in
pendingFrameEvents. - Made unit-event unregistration clean up pending and native frame state
symmetrically while preserving a shared registration when regular handlers
still exist for the same event. - Added 35 Lua 5.1 event-lifecycle checks covering login bootstrap, nested
dispatch, unit events, timers, combat deferral, shared handlers, and
removal-before-flush. Existing 166 timer and 86 restricted-aura checks remain
green. - Published assets are
RGX-Framework-v2.7.2.zipandrelease.json; the addon
archive contains 100 runtime files and all six flavor TOCs.
Recent Releases
v2.7.0 - 2026-08-15
- Added declarative named repeating timers with deterministic ordering,
lifecycle binding, metadata, self-cancellation, and failure isolation. - Hardened RGXAuras into an accessible-only restricted-value boundary and added
the corresponding Lua 5.1 runtime and source-conformance coverage.
v2.6.2 - 2026-08-14
- Synchronized distribution documentation and hardened release/package
validation across the six supported WoW flavors.
v2.6.1 - 2026-08-13
- Restored the single-product framework distribution boundary and aligned
deterministic package verification.
v2.6.0 - 2026-08-13
- Added capability-gated support and verified TOCs for Retail, Classic Era,
TBC, Wrath/Titan, Cataclysm, and Mists Classic.
v2.5.1 - 2026-08-12
- Added the cross-version compatibility layer, hardened aura payload access,
and shipped accumulated UI and pet-battle fixes.
Historical Release Notes
Full per-version notes remain in docs/changelogs/, including releases from v1.x through v2.5.0.
v2.7.0
Changes
Current Release
v2.7.0 - 2026-08-15
- Implements
every = { name = { seconds, handler } }as a complete declarative
vertical slice. Declarativeonremains Tier 4. - Timer declarations are fully validated before addon resources register, bind
after database/options/minimap setup, and callhandler(addon, timer). - Named timers dispatch deterministically by name within one declaration, carry
owner/name metadata and stableAddonName:every:namediagnostic labels, and
remain failure-isolated with self-cancellation support. - Added 166 timer and 86 restricted-aura Lua 5.1 behavior checks plus schema
vectors and source-conformance coverage. Declarativeonremains Tier 4. - Hardened RGXAuras into an accessible-only boundary: denied event payloads,
AuraData, and instance IDs are never indexed, cached, formatted, or forwarded;
watched caches invalidate without synthesizing removals. - Hardened the source audit against protected/stored raw aura API references and
parse failures; RGX-Hello records exact restricted and recovery counter phases. - Published assets are
RGX-Framework-v2.7.0.zipandrelease.json;
the addon archive contains 100 runtime files and all six flavor TOCs.
v2.6.2 - 2026-08-14
- Synchronized the README, canonical docs, addon-service description source,
release metadata, and all 29 generated Wiki pages with the runtime-only
six-flavor distribution. - Added CI checks that keep versioned public surfaces, flavor metadata, package
inventory, Wiki mappings, and the real RGX-Hello declarative contract aligned. - Hardened tag publishing with an inspected BigWigs preflight archive, exact
asset validation, release metadata validation, and same-run SHA verification. - Corrected the documented restricted-aura boundary:
pcallisolates errors but
does not prevent taint. This release does not claim a runtime aura-safety fix. - Published assets are exactly
RGX-Framework-v2.6.2.zipandrelease.json;
the addon archive contains 100 runtime files and all six flavor TOCs.
v2.6.1 - 2026-08-13
- Removed the mistaken secondary product concept. RGX-Framework releases only
the addon framework; future public MCP/API/editor tooling belongs to Studio. - Deterministic runtime verification now includes all six flavor TOCs.
- Corrected premature documentation claims: declarative
onandeveryremain
frozen future contract forms until their runtime implementation lands. - Published assets are exactly
RGX-Framework-v2.6.1.zipandrelease.json;
the inspected addon archive contains 100 runtime files and all six flavor TOCs.
v2.6.0 - 2026-08-13
- Added capability-gated support and verified TOCs for Retail, Classic Era,
TBC, Wrath/Titan, Cataclysm, and Mists Classic.
v2.5.1 - 2026-08-12
- Added the cross-version compatibility layer later used by the six-flavor
release, hardened aura update payload access, and added pet-battle queries. - Shipped accumulated dropdown, font, color-picker, and options-panel fixes.
v2.5.0 - 2026-07-04
- Fixed: declarative
minimapbuttons forgot their dragged position.RGX.Addoncreated the button without passingstorage, so the angle never persisted; creation now happens afteraddon.dbexists and persists there by default. The bare form also assumes a left-click that opens your options panel, and a new advanced table form passes through the full minimap opts (tooltip,defaultAngle,onRightClick, ...). - Fixed: declarative
dropdowncontrols saved but never visually restored their selection —value = addon.db[key]was not passed, the exact save-without-restore bug class the framework exists to kill. - New
{ color = "dbKey" }control — the DSL now reachesUI:CreateColorPicker; default color assumed from the db defaults. slashadvanced form —slash = { "cmd", handler = function(addon, msg) ... end }overrides the assumed open-the-panel handler.- Auto-derived SavedVariables names now strip non-identifier characters (
"RGX-Hello"→RGXHelloDB), matching whatrgx_generate_addonemits. Hyphenated-name addons relying on the old raw concatenation should setdbNameexplicitly (RGX-Hello always has). - Progressive-disclosure principle and the BLU-proven layout model (panel → tabs → multi-page tabs → 1–2 column cards → widgets) encoded in
CLAUDE.md,docs/DECLARATIVE-API.md, and the schema;docs/ACE3-ANALYSIS.mdgained a verified current-state parity map against Ace3.
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.- Historical v2.4.0 behavior:
tools/rgx-mcp/was intentionally added to the packaged addon ZIP. This was later reversed; as of v2.6.1 it is a temporary source-only CI fixture and never ships to players.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- **r...
v2.6.2
Changes
Current Release
v2.6.2 - 2026-08-14
- Synchronized the README, canonical docs, addon-service description source,
release metadata, and all 29 generated Wiki pages with the runtime-only
six-flavor distribution. - Added CI checks that keep versioned public surfaces, flavor metadata, package
inventory, Wiki mappings, and the real RGX-Hello declarative contract aligned. - Hardened tag publishing with an inspected BigWigs preflight archive, exact
asset validation, release metadata validation, and same-run SHA verification. - Corrected the documented restricted-aura boundary:
pcallisolates errors but
does not prevent taint. This release does not claim a runtime aura-safety fix. - Published assets are exactly
RGX-Framework-v2.6.2.zipandrelease.json;
the addon archive contains 100 runtime files and all six flavor TOCs.
v2.6.1 - 2026-08-13
- Removed the mistaken secondary product concept. RGX-Framework releases only
the addon framework; future public MCP/API/editor tooling belongs to Studio. - Deterministic runtime verification now includes all six flavor TOCs.
- Corrected premature documentation claims: declarative
onandeveryremain
frozen future contract forms until their runtime implementation lands. - Published assets are exactly
RGX-Framework-v2.6.1.zipandrelease.json;
the inspected addon archive contains 100 runtime files and all six flavor TOCs.
v2.6.0 - 2026-08-13
- Added capability-gated support and verified TOCs for Retail, Classic Era,
TBC, Wrath/Titan, Cataclysm, and Mists Classic.
v2.5.1 - 2026-08-12
- Added the cross-version compatibility layer later used by the six-flavor
release, hardened aura update payload access, and added pet-battle queries. - Shipped accumulated dropdown, font, color-picker, and options-panel fixes.
v2.5.0 - 2026-07-04
- Fixed: declarative
minimapbuttons forgot their dragged position.RGX.Addoncreated the button without passingstorage, so the angle never persisted; creation now happens afteraddon.dbexists and persists there by default. The bare form also assumes a left-click that opens your options panel, and a new advanced table form passes through the full minimap opts (tooltip,defaultAngle,onRightClick, ...). - Fixed: declarative
dropdowncontrols saved but never visually restored their selection —value = addon.db[key]was not passed, the exact save-without-restore bug class the framework exists to kill. - New
{ color = "dbKey" }control — the DSL now reachesUI:CreateColorPicker; default color assumed from the db defaults. slashadvanced form —slash = { "cmd", handler = function(addon, msg) ... end }overrides the assumed open-the-panel handler.- Auto-derived SavedVariables names now strip non-identifier characters (
"RGX-Hello"→RGXHelloDB), matching whatrgx_generate_addonemits. Hyphenated-name addons relying on the old raw concatenation should setdbNameexplicitly (RGX-Hello always has). - Progressive-disclosure principle and the BLU-proven layout model (panel → tabs → multi-page tabs → 1–2 column cards → widgets) encoded in
CLAUDE.md,docs/DECLARATIVE-API.md, and the schema;docs/ACE3-ANALYSIS.mdgained a verified current-state parity map against Ace3.
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.- Historical v2.4.0 behavior:
tools/rgx-mcp/was intentionally added to the packaged addon ZIP. This was later reversed; as of v2.6.1 it is a temporary source-only CI fixture and never ships to players.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- rgx-mcp ships in-tree at
tools/rgx-mcp/— read-only MCP server (validate/audit/generate against the Simplicity Contract). It was intended to be excluded from the player ZIP, but the v2.2.0 package leakedtools/,docs/, andschemas/; v2.2.1 corrected the packager rules. Registered in.mcp.jsonfor source checkouts. - CI: Discord notifications fixed — the notify step now fails loudly on webhook rejection instead of silently succeeding (
curlwithout--failtreated 4xx as success); avatar URL corrected; empty-secret guard added. - Repaired double-encoded UTF-8 (mojibake) across 11 documentation files; deleted
docs/USAGE-BPU.mdin favor of the Tier 2 work item it described. - New module: RGXAuras — player spell-ID fast paths, best-effort unrestricted-unit scans, and incremental
UNIT_AURAwatching. Later restricted-value audits clarified that arbitraryauraDatais not a general secrecy boundary andpcalldoes not prevent taint; see the current Auras documentation. RGXAddonglobal entry point — line 1 of a consumer addon is the addon:RGXAddon "MyAddon" { ... }(curried form supported). WrapsRGX.Addon; thelocal RGX = assert(...)form is the documented escape hatch, not the front door. The current human contract is `docs/DECLA...
v2.6.1
Changes
Current Development Release
v2.6.1 - 2026-08-13
- Removed the mistaken secondary product concept. RGX-Framework releases only
the addon framework; future public MCP/API/editor tooling belongs to Studio. - Deterministic runtime verification now includes all six flavor TOCs.
- Corrected premature documentation claims: declarative
onandeveryremain
frozen future contract forms until their runtime implementation lands.
v2.6.0 - 2026-08-13
- Added capability-gated support and verified TOCs for Retail, Classic Era,
TBC, Wrath/Titan, Cataclysm, and Mists Classic.
v2.5.0 - 2026-07-04
- Fixed: declarative
minimapbuttons forgot their dragged position.RGX.Addoncreated the button without passingstorage, so the angle never persisted; creation now happens afteraddon.dbexists and persists there by default. The bare form also assumes a left-click that opens your options panel, and a new advanced table form passes through the full minimap opts (tooltip,defaultAngle,onRightClick, ...). - Fixed: declarative
dropdowncontrols saved but never visually restored their selection —value = addon.db[key]was not passed, the exact save-without-restore bug class the framework exists to kill. - New
{ color = "dbKey" }control — the DSL now reachesUI:CreateColorPicker; default color assumed from the db defaults. slashadvanced form —slash = { "cmd", handler = function(addon, msg) ... end }overrides the assumed open-the-panel handler.- Auto-derived SavedVariables names now strip non-identifier characters (
"RGX-Hello"→RGXHelloDB), matching whatrgx_generate_addonemits. Hyphenated-name addons relying on the old raw concatenation should setdbNameexplicitly (RGX-Hello always has). - Progressive-disclosure principle and the BLU-proven layout model (panel → tabs → multi-page tabs → 1–2 column cards → widgets) encoded in
CLAUDE.md,docs/DECLARATIVE-API.md, and the schema;docs/ACE3-ANALYSIS.mdgained a verified current-state parity map against Ace3.
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.tools/rgx-mcp/now ships inside the packaged addon zip (previously excluded). Addon authors who install RGX-Framework and want to build on it should already have the framework's MCP server on hand instead of needing a separate download.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- rgx-mcp ships in-tree at
tools/rgx-mcp/— read-only MCP server (validate/audit/generate against the Simplicity Contract), excluded from the player zip; anyone with the checkout has the tool. Registered in.mcp.json. - CI: Discord notifications fixed — the notify step now fails loudly on webhook rejection instead of silently succeeding (
curlwithout--failtreated 4xx as success); avatar URL corrected; empty-secret guard added. - Repaired double-encoded UTF-8 (mojibake) across 11 documentation files; deleted
docs/USAGE-BPU.mdin favor of the Tier 2 work item it described. - New module: RGXAuras — taint-safe aura scanning and watching (
HasPlayerAura/GetPlayerAurafast path,HasAura/GetAura/IterateAurasfor any unit,WatchUnitincrementalUNIT_AURAcache withOnApplied/OnRemoved/OnUpdatedcallbacks). Designed around Midnight's secret-aura restrictions: every potentially-secret field comparison stays behind an internal pcall boundary, so restricted units yield nil/false instead of taint. Generalizes BPU'sPlayerHasAuraSpellIDpattern; first rgx-mod trigger primitive. RGXAddonglobal entry point — line 1 of a consumer addon is the addon:RGXAddon "MyAddon" { ... }(curried form supported). WrapsRGX.Addon; per the frozen Simplicity Contract (docs/DECLARATIVE-DSL.md,dslbranch), thelocal RGX = assert(...)form is now the documented escape hatch, not the front door.- Declarative API contract shipped —
schemas/rgx-addon.schema.json(machine-checkable shape of theRGXAddonopts table; keys annotatedx-rgx-ships: today|tier4, trigger vocabulary + control grammar encoded) anddocs/DECLARATIVE-API.md(human reference for the shipped surface, verified againstcore/core.lua). This is Tier 5 #14 and the contract the externalrgx-mcptool validates against. Schema excluded from the packaged zip. RGXSharedMedianow fires the internal messageRGX_SHAREDMEDIA_UPDATEDafter every scan so consumers can re-import bridge entries and refresh media pickers.- Added
SM:ExcludeFolder(addonFolderName)— consumers that manage their own media can exclude their AddOn folder from the generic scan so their paths are not re-bridged as duplicates. The framework's own folder is excluded by default. - Packaging fixes: added missing
LICENSE.txt(TOC already declaredX-License: MIT);.pkgmetanow excludes agent/tool files (CLAUDE.md,Home.md,.agents/,.claude/,graphify-out/) from the zip, uses the validmanual-changelogkey pointing atdocs/CHANGES.md, and drops stale font-download instructions (fonts are committed undermedia/fonts/)...
v2.6.0
Changes
Current Development Release
v2.5.0 - 2026-07-04
- Fixed: declarative
minimapbuttons forgot their dragged position.RGX.Addoncreated the button without passingstorage, so the angle never persisted; creation now happens afteraddon.dbexists and persists there by default. The bare form also assumes a left-click that opens your options panel, and a new advanced table form passes through the full minimap opts (tooltip,defaultAngle,onRightClick, ...). - Fixed: declarative
dropdowncontrols saved but never visually restored their selection —value = addon.db[key]was not passed, the exact save-without-restore bug class the framework exists to kill. - New
{ color = "dbKey" }control — the DSL now reachesUI:CreateColorPicker; default color assumed from the db defaults. slashadvanced form —slash = { "cmd", handler = function(addon, msg) ... end }overrides the assumed open-the-panel handler.- Auto-derived SavedVariables names now strip non-identifier characters (
"RGX-Hello"→RGXHelloDB), matching whatrgx_generate_addonemits. Hyphenated-name addons relying on the old raw concatenation should setdbNameexplicitly (RGX-Hello always has). - Progressive-disclosure principle and the BLU-proven layout model (panel → tabs → multi-page tabs → 1–2 column cards → widgets) encoded in
CLAUDE.md,docs/DECLARATIVE-API.md, and the schema;docs/ACE3-ANALYSIS.mdgained a verified current-state parity map against Ace3.
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.tools/rgx-mcp/now ships inside the packaged addon zip (previously excluded). Addon authors who install RGX-Framework and want to build on it should already have the framework's MCP server on hand instead of needing a separate download.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- rgx-mcp ships in-tree at
tools/rgx-mcp/— read-only MCP server (validate/audit/generate against the Simplicity Contract), excluded from the player zip; anyone with the checkout has the tool. Registered in.mcp.json. - CI: Discord notifications fixed — the notify step now fails loudly on webhook rejection instead of silently succeeding (
curlwithout--failtreated 4xx as success); avatar URL corrected; empty-secret guard added. - Repaired double-encoded UTF-8 (mojibake) across 11 documentation files; deleted
docs/USAGE-BPU.mdin favor of the Tier 2 work item it described. - New module: RGXAuras — taint-safe aura scanning and watching (
HasPlayerAura/GetPlayerAurafast path,HasAura/GetAura/IterateAurasfor any unit,WatchUnitincrementalUNIT_AURAcache withOnApplied/OnRemoved/OnUpdatedcallbacks). Designed around Midnight's secret-aura restrictions: every potentially-secret field comparison stays behind an internal pcall boundary, so restricted units yield nil/false instead of taint. Generalizes BPU'sPlayerHasAuraSpellIDpattern; first rgx-mod trigger primitive. RGXAddonglobal entry point — line 1 of a consumer addon is the addon:RGXAddon "MyAddon" { ... }(curried form supported). WrapsRGX.Addon; per the frozen Simplicity Contract (docs/DECLARATIVE-DSL.md,dslbranch), thelocal RGX = assert(...)form is now the documented escape hatch, not the front door.- Declarative API contract shipped —
schemas/rgx-addon.schema.json(machine-checkable shape of theRGXAddonopts table; keys annotatedx-rgx-ships: today|tier4, trigger vocabulary + control grammar encoded) anddocs/DECLARATIVE-API.md(human reference for the shipped surface, verified againstcore/core.lua). This is Tier 5 #14 and the contract the externalrgx-mcptool validates against. Schema excluded from the packaged zip. RGXSharedMedianow fires the internal messageRGX_SHAREDMEDIA_UPDATEDafter every scan so consumers can re-import bridge entries and refresh media pickers.- Added
SM:ExcludeFolder(addonFolderName)— consumers that manage their own media can exclude their AddOn folder from the generic scan so their paths are not re-bridged as duplicates. The framework's own folder is excluded by default. - Packaging fixes: added missing
LICENSE.txt(TOC already declaredX-License: MIT);.pkgmetanow excludes agent/tool files (CLAUDE.md,Home.md,.agents/,.claude/,graphify-out/) from the zip, uses the validmanual-changelogkey pointing atdocs/CHANGES.md, and drops stale font-download instructions (fonts are committed undermedia/fonts/). - Removed dead
KittyGetSoundPacks/KittyRegisterSoundPackscan and hook fromRGXSharedMedia— these globals never existed in any real addon; the generic addon-global scan already covers third-party sound packs. - Enforced the framework's own "no
C_Timer" rule:RGXDelves:QueueLivesRefreshandRGXHonor:QueueChecknow useRGX:Afterso deferred work is budgeted and diagnosable by the framework timer driver. - Documented the design thesis in
CLAUDE.md: the framework prevents taint and deprecated-API bugs by construction. Verified by audit that the framework (and consumers BLU, BPU) use onlyhooksecurefunc, no protected-function calls, with correct combat-lockdown handling.
[v2.1.0](https://git...
v2.5.1
Changes
Current Development Release
v2.5.0 - 2026-07-04
- Fixed: declarative
minimapbuttons forgot their dragged position.RGX.Addoncreated the button without passingstorage, so the angle never persisted; creation now happens afteraddon.dbexists and persists there by default. The bare form also assumes a left-click that opens your options panel, and a new advanced table form passes through the full minimap opts (tooltip,defaultAngle,onRightClick, ...). - Fixed: declarative
dropdowncontrols saved but never visually restored their selection —value = addon.db[key]was not passed, the exact save-without-restore bug class the framework exists to kill. - New
{ color = "dbKey" }control — the DSL now reachesUI:CreateColorPicker; default color assumed from the db defaults. slashadvanced form —slash = { "cmd", handler = function(addon, msg) ... end }overrides the assumed open-the-panel handler.- Auto-derived SavedVariables names now strip non-identifier characters (
"RGX-Hello"→RGXHelloDB), matching whatrgx_generate_addonemits. Hyphenated-name addons relying on the old raw concatenation should setdbNameexplicitly (RGX-Hello always has). - Progressive-disclosure principle and the BLU-proven layout model (panel → tabs → multi-page tabs → 1–2 column cards → widgets) encoded in
CLAUDE.md,docs/DECLARATIVE-API.md, and the schema;docs/ACE3-ANALYSIS.mdgained a verified current-state parity map against Ace3.
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.tools/rgx-mcp/now ships inside the packaged addon zip (previously excluded). Addon authors who install RGX-Framework and want to build on it should already have the framework's MCP server on hand instead of needing a separate download.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- rgx-mcp ships in-tree at
tools/rgx-mcp/— read-only MCP server (validate/audit/generate against the Simplicity Contract), excluded from the player zip; anyone with the checkout has the tool. Registered in.mcp.json. - CI: Discord notifications fixed — the notify step now fails loudly on webhook rejection instead of silently succeeding (
curlwithout--failtreated 4xx as success); avatar URL corrected; empty-secret guard added. - Repaired double-encoded UTF-8 (mojibake) across 11 documentation files; deleted
docs/USAGE-BPU.mdin favor of the Tier 2 work item it described. - New module: RGXAuras — taint-safe aura scanning and watching (
HasPlayerAura/GetPlayerAurafast path,HasAura/GetAura/IterateAurasfor any unit,WatchUnitincrementalUNIT_AURAcache withOnApplied/OnRemoved/OnUpdatedcallbacks). Designed around Midnight's secret-aura restrictions: every potentially-secret field comparison stays behind an internal pcall boundary, so restricted units yield nil/false instead of taint. Generalizes BPU'sPlayerHasAuraSpellIDpattern; first rgx-mod trigger primitive. RGXAddonglobal entry point — line 1 of a consumer addon is the addon:RGXAddon "MyAddon" { ... }(curried form supported). WrapsRGX.Addon; per the frozen Simplicity Contract (docs/DECLARATIVE-DSL.md,dslbranch), thelocal RGX = assert(...)form is now the documented escape hatch, not the front door.- Declarative API contract shipped —
schemas/rgx-addon.schema.json(machine-checkable shape of theRGXAddonopts table; keys annotatedx-rgx-ships: today|tier4, trigger vocabulary + control grammar encoded) anddocs/DECLARATIVE-API.md(human reference for the shipped surface, verified againstcore/core.lua). This is Tier 5 #14 and the contract the externalrgx-mcptool validates against. Schema excluded from the packaged zip. RGXSharedMedianow fires the internal messageRGX_SHAREDMEDIA_UPDATEDafter every scan so consumers can re-import bridge entries and refresh media pickers.- Added
SM:ExcludeFolder(addonFolderName)— consumers that manage their own media can exclude their AddOn folder from the generic scan so their paths are not re-bridged as duplicates. The framework's own folder is excluded by default. - Packaging fixes: added missing
LICENSE.txt(TOC already declaredX-License: MIT);.pkgmetanow excludes agent/tool files (CLAUDE.md,Home.md,.agents/,.claude/,graphify-out/) from the zip, uses the validmanual-changelogkey pointing atdocs/CHANGES.md, and drops stale font-download instructions (fonts are committed undermedia/fonts/). - Removed dead
KittyGetSoundPacks/KittyRegisterSoundPackscan and hook fromRGXSharedMedia— these globals never existed in any real addon; the generic addon-global scan already covers third-party sound packs. - Enforced the framework's own "no
C_Timer" rule:RGXDelves:QueueLivesRefreshandRGXHonor:QueueChecknow useRGX:Afterso deferred work is budgeted and diagnosable by the framework timer driver. - Documented the design thesis in
CLAUDE.md: the framework prevents taint and deprecated-API bugs by construction. Verified by audit that the framework (and consumers BLU, BPU) use onlyhooksecurefunc, no protected-function calls, with correct combat-lockdown handling.
[v2.1.0](https://git...
v2.5.0
Changes
Current Development Release
v2.5.0 - 2026-07-04
- Fixed: declarative
minimapbuttons forgot their dragged position.RGX.Addoncreated the button without passingstorage, so the angle never persisted; creation now happens afteraddon.dbexists and persists there by default. The bare form also assumes a left-click that opens your options panel, and a new advanced table form passes through the full minimap opts (tooltip,defaultAngle,onRightClick, ...). - Fixed: declarative
dropdowncontrols saved but never visually restored their selection —value = addon.db[key]was not passed, the exact save-without-restore bug class the framework exists to kill. - New
{ color = "dbKey" }control — the DSL now reachesUI:CreateColorPicker; default color assumed from the db defaults. slashadvanced form —slash = { "cmd", handler = function(addon, msg) ... end }overrides the assumed open-the-panel handler.- Auto-derived SavedVariables names now strip non-identifier characters (
"RGX-Hello"→RGXHelloDB), matching whatrgx_generate_addonemits. Hyphenated-name addons relying on the old raw concatenation should setdbNameexplicitly (RGX-Hello always has). - Progressive-disclosure principle and the BLU-proven layout model (panel → tabs → multi-page tabs → 1–2 column cards → widgets) encoded in
CLAUDE.md,docs/DECLARATIVE-API.md, and the schema;docs/ACE3-ANALYSIS.mdgained a verified current-state parity map against Ace3.
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.tools/rgx-mcp/now ships inside the packaged addon zip (previously excluded). Addon authors who install RGX-Framework and want to build on it should already have the framework's MCP server on hand instead of needing a separate download.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- rgx-mcp ships in-tree at
tools/rgx-mcp/— read-only MCP server (validate/audit/generate against the Simplicity Contract), excluded from the player zip; anyone with the checkout has the tool. Registered in.mcp.json. - CI: Discord notifications fixed — the notify step now fails loudly on webhook rejection instead of silently succeeding (
curlwithout--failtreated 4xx as success); avatar URL corrected; empty-secret guard added. - Repaired double-encoded UTF-8 (mojibake) across 11 documentation files; deleted
docs/USAGE-BPU.mdin favor of the Tier 2 work item it described. - New module: RGXAuras — taint-safe aura scanning and watching (
HasPlayerAura/GetPlayerAurafast path,HasAura/GetAura/IterateAurasfor any unit,WatchUnitincrementalUNIT_AURAcache withOnApplied/OnRemoved/OnUpdatedcallbacks). Designed around Midnight's secret-aura restrictions: every potentially-secret field comparison stays behind an internal pcall boundary, so restricted units yield nil/false instead of taint. Generalizes BPU'sPlayerHasAuraSpellIDpattern; first rgx-mod trigger primitive. RGXAddonglobal entry point — line 1 of a consumer addon is the addon:RGXAddon "MyAddon" { ... }(curried form supported). WrapsRGX.Addon; per the frozen Simplicity Contract (docs/DECLARATIVE-DSL.md,dslbranch), thelocal RGX = assert(...)form is now the documented escape hatch, not the front door.- Declarative API contract shipped —
schemas/rgx-addon.schema.json(machine-checkable shape of theRGXAddonopts table; keys annotatedx-rgx-ships: today|tier4, trigger vocabulary + control grammar encoded) anddocs/DECLARATIVE-API.md(human reference for the shipped surface, verified againstcore/core.lua). This is Tier 5 #14 and the contract the externalrgx-mcptool validates against. Schema excluded from the packaged zip. RGXSharedMedianow fires the internal messageRGX_SHAREDMEDIA_UPDATEDafter every scan so consumers can re-import bridge entries and refresh media pickers.- Added
SM:ExcludeFolder(addonFolderName)— consumers that manage their own media can exclude their AddOn folder from the generic scan so their paths are not re-bridged as duplicates. The framework's own folder is excluded by default. - Packaging fixes: added missing
LICENSE.txt(TOC already declaredX-License: MIT);.pkgmetanow excludes agent/tool files (CLAUDE.md,Home.md,.agents/,.claude/,graphify-out/) from the zip, uses the validmanual-changelogkey pointing atdocs/CHANGES.md, and drops stale font-download instructions (fonts are committed undermedia/fonts/). - Removed dead
KittyGetSoundPacks/KittyRegisterSoundPackscan and hook fromRGXSharedMedia— these globals never existed in any real addon; the generic addon-global scan already covers third-party sound packs. - Enforced the framework's own "no
C_Timer" rule:RGXDelves:QueueLivesRefreshandRGXHonor:QueueChecknow useRGX:Afterso deferred work is budgeted and diagnosable by the framework timer driver. - Documented the design thesis in
CLAUDE.md: the framework prevents taint and deprecated-API bugs by construction. Verified by audit that the framework (and consumers BLU, BPU) use onlyhooksecurefunc, no protected-function calls, with correct combat-lockdown handling.
[v2.1.0](https://git...
v2.4.1
Changes
Current Development Release
v2.4.1 - 2026-07-03
- Fixed: declarative slider
suffixwas silently dropped.{ slider = "volume", suffix = "%" }in anRGXAddonoptions table validated fine and ran with no error, but the options-table-to-UI mapper only forwardedkey/label/min/max/steptoUI:CreateSlider—suffixnever reached it, so no addon using it (including RGX-Hello's own Volume slider) ever actually showed the suffix. Found by runningtools/rgx-mcpend-to-end against RGX-Hello's real, shipped opts table instead of a synthetic fixture. schemas/rgx-addon.schema.jsonnow allowssuffixonsliderControl(it was rejecting the same shipped, working key the schema itself hadn't caught up to).rgx_generate_addongained adbNameoverride andlabel/suffixpassthrough on generated sliders. Without an override it was emittingRGX-HelloDB(hyphen intact) as the SavedVariables hint for a name like "RGX-Hello", which doesn't match what any hyphenated addon should actually ship — it now strips non-identifier characters for the default and lets callers override explicitly.- New
tools/rgx-mcp/test/test-rgx-hello.mjs— drives the real server over the real MCP client SDK and points it at the actual RGX-Hello repo (generate/validate/audit), so future changes to the schema, the mapper, or the generator get checked against a real addon, not just synthetic input.
v2.4.0 - 2026-07-03
- RGXColorPicker redesigned with a modern circular control vocabulary (ring-and-fill drag handles on the SV box and hue bar, circular swatches and preview, hover feedback on presets, primary-themed focus states on the hex/RGB inputs) built on
RGXDesigntokens instead of hardcoded colors, replacing the borrowed Blizzard minimize-button icon that was standing in for a cursor. UI:CreateLabelfixed to actually wrap long text. FontStrings with no explicit width auto-size to a single line and silently overflow their parent frame's edge instead of breaking — every multi-sentence label (e.g. the visual test harness's "What to test" hints) rendered past its panel.CreateLabelnow accepts an opt-inoptions.widththat enablesSetWordWrapand justification; short labels are unaffected.tools/rgx-visual-test/moved to theRGX-Hellorepo, merged into that addon rather than shipped as a separate in-tree dev tool — RGX-Hello is now both the minimal reference addon and the visual QA harness.tools/rgx-mcp/now ships inside the packaged addon zip (previously excluded). Addon authors who install RGX-Framework and want to build on it should already have the framework's MCP server on hand instead of needing a separate download.
v2.3.0 - 2026-07-03
- New module: RGXTooltip — tooltip composition (
Show/Attach) replacing theSetOwner → ClearLines → AddLine × N → Showboilerplate found across 71 GameTooltip call sites in BattlePetUtility alone, plus a safe wrapper (HookNative) over Blizzard'sTooltipDataProcessorfor augmenting native item/spell/unit/aura/pet/mount/macro tooltips. Blizzard does not pcall-wrapTooltipDataProcessordispatch, soHookNativepcall-guards every registered callback — one addon's tooltip hook can no longer break tooltip rendering for every other addon. - RGXColorPicker actually renders now.
Show()silently failed since the module was introduced — six frames called:SetBackdrop()without the requiredBackdropTemplatemixin, throwing partway through construction so the frame was never cached. With that fixed, two more stub features were exposed: the hue bar never had a rainbow (a hardcoded flat red — the original code's own comment admitted it was left unfinished), and the saturation/value box never had a saturation axis (only value/brightness worked). Both replaced with real gradients (a 6-segment hue rainbow, and a reactive white→hueSetGradientfor saturation). - New dev tool:
tools/rgx-visual-test/— an in-tree QA harness for manually testing RGX's UI controls in-game (/rgxvisualfull panel,/rgxcolorpicker only). Not player-facing, excluded from the packaged zip. - Documented the in-tree
tools/rgx-mcp/MCP server and the Declarative API in README.md and description.html (shipped in v2.2.0, previously undocumented in either entry point).
v2.2.1 - 2026-07-02
- Packaging hotfix: the v2.2.0 zip leaked
docs/,schemas/, andtools/— the packager's ignore matcher silently fails on directory entries with trailing slashes. Entries normalized; the zip now contains only the runtime (TOC, XML, core, modules, media, LICENSE).
v2.2.0 - 2026-07-02
- rgx-mcp ships in-tree at
tools/rgx-mcp/— read-only MCP server (validate/audit/generate against the Simplicity Contract), excluded from the player zip; anyone with the checkout has the tool. Registered in.mcp.json. - CI: Discord notifications fixed — the notify step now fails loudly on webhook rejection instead of silently succeeding (
curlwithout--failtreated 4xx as success); avatar URL corrected; empty-secret guard added. - Repaired double-encoded UTF-8 (mojibake) across 11 documentation files; deleted
docs/USAGE-BPU.mdin favor of the Tier 2 work item it described. - New module: RGXAuras — taint-safe aura scanning and watching (
HasPlayerAura/GetPlayerAurafast path,HasAura/GetAura/IterateAurasfor any unit,WatchUnitincrementalUNIT_AURAcache withOnApplied/OnRemoved/OnUpdatedcallbacks). Designed around Midnight's secret-aura restrictions: every potentially-secret field comparison stays behind an internal pcall boundary, so restricted units yield nil/false instead of taint. Generalizes BPU'sPlayerHasAuraSpellIDpattern; first rgx-mod trigger primitive. RGXAddonglobal entry point — line 1 of a consumer addon is the addon:RGXAddon "MyAddon" { ... }(curried form supported). WrapsRGX.Addon; per the frozen Simplicity Contract (docs/DECLARATIVE-DSL.md,dslbranch), thelocal RGX = assert(...)form is now the documented escape hatch, not the front door.- Declarative API contract shipped —
schemas/rgx-addon.schema.json(machine-checkable shape of theRGXAddonopts table; keys annotatedx-rgx-ships: today|tier4, trigger vocabulary + control grammar encoded) anddocs/DECLARATIVE-API.md(human reference for the shipped surface, verified againstcore/core.lua). This is Tier 5 #14 and the contract the externalrgx-mcptool validates against. Schema excluded from the packaged zip. RGXSharedMedianow fires the internal messageRGX_SHAREDMEDIA_UPDATEDafter every scan so consumers can re-import bridge entries and refresh media pickers.- Added
SM:ExcludeFolder(addonFolderName)— consumers that manage their own media can exclude their AddOn folder from the generic scan so their paths are not re-bridged as duplicates. The framework's own folder is excluded by default. - Packaging fixes: added missing
LICENSE.txt(TOC already declaredX-License: MIT);.pkgmetanow excludes agent/tool files (CLAUDE.md,Home.md,.agents/,.claude/,graphify-out/) from the zip, uses the validmanual-changelogkey pointing atdocs/CHANGES.md, and drops stale font-download instructions (fonts are committed undermedia/fonts/). - Removed dead
KittyGetSoundPacks/KittyRegisterSoundPackscan and hook fromRGXSharedMedia— these globals never existed in any real addon; the generic addon-global scan already covers third-party sound packs. - Enforced the framework's own "no
C_Timer" rule:RGXDelves:QueueLivesRefreshandRGXHonor:QueueChecknow useRGX:Afterso deferred work is budgeted and diagnosable by the framework timer driver. - Documented the design thesis in
CLAUDE.md: the framework prevents taint and deprecated-API bugs by construction. Verified by audit that the framework (and consumers BLU, BPU) use onlyhooksecurefunc, no protected-function calls, with correct combat-lockdown handling.
v2.1.0 - 2026-06-30
- Enabled RGXCombat — combat enter/leave/kill/crit/low-health/execute/encounter callbacks now active for all consumers.
- Enabled 8 event callback modules that were dormant since v1.8.0: Achievement, LevelUp, Quest, Honor, Delves, Housing, TradingPost, Prey.
- All modules are now active in the XML loader. No dormant code remains in-tree.
TryInit("RGXCombat")wired into initialization.lua between RGXSharedMedia and RGXPetBattles.- Removed stale comment in initialization.lua that described RGXCombat as blocked during load screen (its Init() already defers via PLAYER_REGEN_ENABLED).
Full notes:
Production Releases
v2.0.0 - 2026-06-30
- Stable RGX 2.0 framework release for retail 12.0.7.
- Promotes the RGX.Addon, NewDatabase, event, timer, and runtime integration work out of alpha.
- Keeps unfinished callback modules out of the XML loader for a clean live load.
- Includes combat-safe event/runtime hardening and SharedMedia scan coalescing from the alpha cycle.
Full notes:
v2.0.0-alpha.2 - 2026-06-28
- SharedMedia startup scan now coalesces light/full rescans ins...