# RGX-Framework

## [v2.0.0-alpha.2](https://github.com/DonnieDice/RGX-Framework/tree/v2.0.0-alpha.2) (2026-06-29)
[Full Changelog](https://github.com/DonnieDice/RGX-Framework/compare/v1.9.0...v2.0.0-alpha.2) [Previous Releases](https://github.com/DonnieDice/RGX-Framework/releases)

- release: v2.0.0-alpha.2  
- chore: bump Interface to 120007 (WoW Retail 12.0.7)  
- fix: comment out 8 unfinished modules from XML, guard against double NewDatabase  
    - XML: commented out achievement/levelup/quest/honor/delves/housing/tradingpost/prey  
      (files exist but cause LUA\_WARNING load errors on Retail)  
    - core.lua: RGX.Addon ADDON\_LOADED handler now checks if addon.db already exists  
      before calling NewDatabase to avoid overwriting the consumer's own proxy  
      (BLU's Database:Init() creates BLU.db with proper defaults+callbacks;  
      the delayed handler was overwriting it with empty defaults)  
- docs: update all PB2/PetBuddy2 references to BPU/BattlePetUtility  
    - Renamed docs/USAGE-PB2.md  docs/USAGE-BPU.md  
    - Updated all .md references: PetBuddy2  BattlePetUtility, PB2  BPU  
    - Includes ROADMAP, FONTS, DROPDOWNS, MIGRATION, SUPER-SIMPLE, changelogs  
    - Updated README and Home.md cross-references  
- feat: add char + profileIsGlobal support to NewDatabase  
    - NewDatabase now accepts opts.char for per-character defaults  
    - db.char returns per-character table keyed by 'Name - Realm'  
    - opts.profileIsGlobal = true makes db.global return active profile  
    - Updated OpenDB backward-compat wrapper to pass char + profileIsGlobal  
    - Added tests for char storage and profileIsGlobal mode  
    - Updated docs/header comments  
- docs: sync CHANGES.md, ROADMAP.md, changelog for v2.0.0-alpha.1 — mark Profile/DB done  
- fix: proxy metamethod guard — \_\_newindex rawsets internal fields, \_\_index exposes \_guard; ResetProfile works on Default; pass opts.onSwitch; add 4 new DB tests  
- feat: wire database\_test.lua into load order, add /rgx dbtest command  
- fix: MergeDefaults → MergeTable — undefined function caused runtime errors on DB init  
    3 call sites (InitDatabase, FillDefaults, NewDatabase global defaults)  
    called a nonexistent MergeDefaults; renamed to local MergeTable which  
    was already defined. Also includes the full NewDatabase proxy system  
    with recursive serialization, profile CRUD, and metamethod access.  
- fix: minimap API → MM:Create({name, icon}) not CreateButton  
- fix: minimap = true uses default icon, fix extra end block  
- fix: end blocks in Addon() options — missing db check close  
- fix: self → RGX in Addon() — dot notation, no implicit self  
- rebuild: RGX.Addon() — slash at file scope, db deferred  
    - Slash commands registered at file scope (no ADDON\_LOADED needed)  
    - Database and options deferred to ADDON\_LOADED  
    - Lost in git reset, rebuilt from scratch  
- docs: v2.0.0-alpha.1 changelog  
- fix: actually bump timer-slow default — was 0.050 in budget table  
    - The budget table default (line 24) was 0.050  
    - The or 0.250 fallback (line 341) never triggered because 0.050 is not nil  
    - Now 0.250 in both places  
- fix: timer-slow threshold 50ms → 250ms  
    - SharedMedia:QueueScan does real I/O work, 207ms is normal for audio scanning  
    - 50ms flagged every file scan as an error  
    - 250ms threshold catches actual slow operations without false positives  
- bump: v2.0.0-alpha.1 — RGX.Addon() + declarative options + proxy fix  
- Merge branch 'main' into dev  
- docs: add directive — make addon building fast, easy, and fun  
    - Clear mission statement at top of Home.md  
    - Quick Start code example showing a full addon in minutes  
    - Reference addons table showing proven patterns  
    - Every feature must pass: 'does this make addon building easier?'  
- fix: only trigger release workflow on tags, not branch pushes  
