## v2.0.0-alpha.1

### RGX.Addon() â€” One Call Addon Factory
- `RGX.Addon("Name", { db, slash, minimap, brand, welcome, options, onInit })`
- Auto-creates database (NewDatabase), slash commands, minimap button
- Declarative options panel: `{ toggle = "key" }`, `{ slider = "key", min, max }`, `{ dropdown = "key", items }`, `{ button = "Label", action = fn }`, `{ section = "Title" }`
- All controls auto-bound to `addon.db` via proxy `__newindex`
- Brand color: `brand = "05dffa"` â†’ `[MYADDON]` chat prefix

### Proxy Metamethod Guard (June 11)
- `__newindex` now uses `rawset` for internal fields (`_guard`, `_raw`, `_defaults`, `_callbacks`, `_onSwitch`) â€” prevents writing framework metadata into profile SavedVars
- `__index` now uses `rawget` for `_guard` (was missing from the list) â€” prevents re-entrancy guard from leaking as a profile read
- `RGX.Addon()` now passes `opts.onSwitch` through to `NewDatabase`

### Database Test Harness
- Added `database_test.lua` with 14 assertions covering: NewDatabase creation, GetProfile, GetActiveProfile, ResetProfile on Default profile, internal field leak check, GetPath/SetPath path accessors
- Wired into load order with `/rgx dbtest` slash command

### Fixes
- `MergeDefaults` â†’ `MergeTable` â€” 3 call sites were calling an undefined function (runtime crash on DB init)
- Timer-slow threshold: 50ms â†’ 250ms (SharedMedia:QueueScan ~207ms is normal I/O)
- `safeRegisterFrameEvent` uses `pcall(function() ... end)` wrapper for combat safety
