## [v6.3.0-release] - 05/17/2026

### Added

- **GearMatic and RepMatic addon links** added to the About / By section of the General Options tab, directly under the Follow on X row. Each row is a 24x24 icon plus a full-width copyable input field pre-filled with the CurseForge URL (`https://www.curseforge.com/wow/addons/gearmatic` and `https://www.curseforge.com/wow/addons/repmatic`). Click the field, Ctrl+A / Cmd+A, copy, paste into a browser, same as the existing X and Buy Me A Coffee rows. Two new 64x64 TGA textures shipped under `Media/Textures/`: `gearmatic-icon.tga` and `repmatic-icon.tga`.
- **Full locale parity for both new rows.** `options_gearmatic_link`, `options_gearmatic_link_desc`, `options_repmatic_link`, and `options_repmatic_link_desc` translated across all eleven supported locales (`deDE`, `enUS`, `esES`, `esMX`, `frFR`, `itIT`, `koKR`, `ptBR`, `ruRU`, `zhCN`, `zhTW`). No behavior differences between locales; only the on-screen text changes.

Static syntax check (`luac -p`) clean across all touched files before tagging.

## [v6.2.1-release] - 05/15/2026

### Fixed

- **Locale parity for the new "Follow on X" row.** v6.2.0 shipped the X link with English-only inline fallbacks, breaking the full-parity rule the BMAC and Discord rows have followed since v5.5.10. This release adds `options_x_link` and `options_x_link_desc` translations to all eleven locale files: `deDE`, `enUS`, `esES`, `esMX`, `frFR`, `itIT`, `koKR`, `ptBR`, `ruRU`, `zhCN`, `zhTW`. No behavior or UI changes beyond the localized strings; the URL itself (`https://x.com/infiniteloopalc`) is the same everywhere.

Static syntax check (`luac -p`) clean across every locale file before tagging.

## [v6.2.0-release] - 05/15/2026

### Added

- **Follow on X link** added to the Support / By section of the General Options tab. New 24x24 X (formerly Twitter) icon plus a full-width copyable input field pre-filled with `https://x.com/infiniteloopalc`. Mirrors the existing Buy Me A Coffee row: click the field, Ctrl+A / Cmd+A, copy, paste into a browser. No other settings changed; the Discord link, BMAC link, and the Infinite Loop Alchemist profile row above it are untouched.

Static syntax check (`luac -p`) clean before tagging.

## [v6.1.0-release] - 05/10/2026

### Changed

- **TOC Interface line refreshed for every live Classic WoW client** so the addon stops showing as "Out of Date" on launch. The multi-flavor list is now `50503, 40402, 38001, 20505, 11508`, covering MoP Classic 5.5.3, Cataclysm, Wrath / Titan Reforged 3.8.1, TBC Anniversary 2.5.5, and Classic Era 1.15.8.
- **Per-flavor BigWigs packager keys updated to match the new live builds.**
  - `## Interface-Classic: 11508` (unchanged)
  - `## Interface-BCC: 20505` (added; was missing)
  - `## Interface-Wrath: 38001` (was `30403`)
  - `## Interface-Cata: 40402` (added; was missing)
  - `## Interface-Mists: 50503` (added; was missing)
- **Dropped the bogus `## Interface-Titan: 38000` line.** That key isn't recognized by the BigWigs packager (it predates the official Wrath / Titan Reforged build); the `Interface-Wrath` slot is the right place for `38001` going forward.

### Removed
- **Retail / Mainline support dropped this release.** Patch 12.0 ("Midnight") blocks unprivileged addons from registering `COMBAT_LOG_EVENT_UNFILTERED`, which is the entire mechanism CritMatic relies on to record crits. Ace3 maintainer nevcairiel confirmed in WowAce issue #697: *"Blizzard blocked the ability to use the COMBAT_LOG_EVENT_UNFILTERED event."* Without CLEU, every CritMatic feature (highest crit / normal recording, tooltip integration, chat broadcasts, log window, social ping) is non-functional. Shipping a retail-listed addon that can't perform its core function would mislead users, so retail is intentionally untargeted until Blizzard relaxes the restriction. Classic flavors are unaffected.

Static syntax check (`luac -p`) clean across every Lua module before tagging.

## [v6.0.0-release] - 05/09/2026

### Removed (breaking)

- **`Send to /say` toggle and the SAY broadcast path are gone.** /say is muted in instances by Blizzard, and combining it with the combat-end timing window made the broadcast unreliable. Removing the option entirely is cleaner than continuing to ship a half-working channel. Group channels (Party / Raid / Battlegrounds via INSTANCE_CHAT) and Guild remain. Existing `social.canSendCritsToSay = true` saved-vars are now silently ignored.

### Changed

- **Social broadcast is now Questie-style: one group channel + optional guild simulcast.** Modeled on Questie's `_QuestieAnnounce.GetChatMessageChannel`. Inside a battleground sends to `INSTANCE_CHAT` (when in a group), in a raid sends `RAID` (or `INSTANCE_CHAT` for LFR), in a party sends `PARTY` (or `INSTANCE_CHAT` for LFG dungeons). `GUILD` is added as an additional simulcast when toggled and you're in a guild. No more "blast to SAY + GUILD + PARTY all at once."

### Versioning

- Going forward CritMatic follows strict semver. The setting removal drives the MAJOR bump from 5.5.11 to 6.0.0. Past releases (5.5.x) stayed in the patch slot regardless of feature additions; that's the historical reason 6.0.0 looks like a big jump from a small change.

## [v5.5.11-release] - 05/09/2026

### Fixed

- **Crit Log size now persists across /reload and relog:** the window's user-resized width/height was being clobbered on every show by a hardcoded `SetSize(300, 153)` in `Modules/CritLog.lua` that ran AFTER `ApplyStatus` had restored the saved dimensions. The save path (the `StopMovingOrSizing` hook) was always working; the read path was just being overwritten one line later. Replaced with `SetSize(sizePos.size_x or 700, sizePos.size_y or 500)` so the saved dimensions survive.
- **Right-click "Open Changelog" menu item on the CritMatic icon now actually opens the changelog:** the menu was calling `Critmatic:ShowChangeLog()` (capital S) but the function is defined as `Critmatic.showChangeLog` (lowercase). The menu item was silently dead. One-character fix in `Modules/CritLog.lua`.

### Changed

- **In-game changelog popup now shows only the latest 3 releases:** the popup (`Modules/ChangeLogPopUp.lua`) previously accumulated every version going back to v0.3.6.2.5 from late 2023, which made the auto-popup-on-upgrade dialog a wall of irrelevant ancient bullets. It now shows v5.5.11, v5.5.10, v5.5.9 only, plus a "For the full version history see CHANGE_LOG.md on GitHub or CurseForge." pointer. `CHANGE_LOG.md` keeps the full history for the CurseForge project page. Going forward each release prepends the new entry and drops the oldest so the popup stays at 3.

### Added

- **`release.sh` packager wrapper now lives in the repo** (was an untracked helper at `/tmp/critmatic-release.sh` which macOS clears on reboot). Sources `.env` and execs the BigWigs packager. `.env` itself stays untracked.

---

## [v5.5.10-release] - 05/08/2026

### Added

- **Buy Me A Coffee link in General settings:** the General tab now has a Support group with the Discord link plus an optional Buy Me A Coffee link, and a By group showing the author. Same copy-only field pattern as the Discord link, completely optional.

### Changed

- **General tab reorganized into Support and By groups:** Discord and Buy Me A Coffee live in the new Support group; the author credit lives in the new By group. The General toggles above are unchanged.
- **Localization parity restored across all 11 locales:** deDE, esES, esMX, frFR, itIT, koKR, ptBR, ruRU, zhCN, zhTW now translate every option string introduced in v5.5.8 / v5.5.9 / v5.5.10 (Send Crits to Say, Lock Crit Log Position, Buy Me A Coffee link, Support / By group headings). All 11 locale files now have 153 keys.

### Fixed

- **Send Crits to Say no longer broadcasts inside instances:** the /say toggle is now gated on `not inInstance`, so dungeon, raid, battleground, and arena groups do not see your /say spam even if the toggle is on. Open-world / city /say is unchanged.
- **`critFormat` / `critHealFormat` defaults switched from `{star}` to `{rt1}`:** these AceDB defaults sat on `{star}` while the live broadcast in `CritMatic.lua` already hardcodes `{rt1}`. The defaults are not currently consumed by the broadcast, so user-visible behavior is unchanged, but the defaults now match the locale-safe convention so any future code path that reads them will not regress non-enUS clients.

### Updated

- **In-game changelog popup refreshed:** the popup that opens on a fresh install / version bump (`Modules/ChangeLogPopUp.lua`) had been stuck at v0.4.3.0 since January and missed every v5.5.x release note. It now lists v5.5.0 through v5.5.10. The release skill (see `~/.claude/skills/critmatic-release/`) is set up so future releases keep both this `CHANGE_LOG.md` and the in-game popup in sync.

---

## [v5.5.9-release] - 05/08/2026

### Added

- **Lock Crit Log Position toggle (General tab):** new option to lock the window so a normal click+drag is ignored. Hover the toggle for a tooltip explaining the override: when locked, hold Ctrl while dragging to move the window. Default off, so existing setups keep working unchanged.
- **Full-width drag handle:** the entire top strip of the Crit Log window is now a drag handle, not just the small text label. Click and drag anywhere along the header, the side borders, or the gold-ringed CritMatic icon to move the window.

### Changed

- **Tighter Crit Log row spacing:** each spell row now sizes to its own content (count of visible stat lines) instead of a fixed 60 px. Damage-only and heal-only spells take roughly half the vertical space, hybrid spells with all four stat lines keep the room they need. Net effect is a much denser list.

### Fixed

- **Right-click menu / tooltip on the gold-ringed icon:** with the new full-width drag handle the title strip overlapped the icon and intercepted some of its mouse events. The icon is now explicitly raised above the title-bar handle so right-click (Open Settings, Open Changelog, Lock / Unlock, Reset Position, Hide) and the hover tooltip work again.

---

## [v5.5.8-release] - 05/07/2026

### Added

- **Track Crits Only option (General settings):** opt-in toggle that records only critical hits and critical heals. Skips normal hits, normal heals, DoT/HoT ticks, and bandage ticks setting new highest values. Off by default.
- **Full localization for every CurseForge-supported client:** every locale file (`deDE`, `esES`, `esMX`, `itIT`, `koKR`, `ptBR`, `ruRU`, `zhCN`, `zhTW`) now ships a complete translation of all options and messages. Previously only `enUS` and `frFR` had real translations and the other 9 were stubs that fell back to English. `frFR` was also brought up to parity with the new options strings.

### Fixed

- **Battleground opt-out was bypassed:** disabling `Send Crits to Battlegrounds` had no effect because `IsPartyLFG()` is true inside BGs and the next branch sent the message anyway. Each chat target now picks one channel and respects exactly one opt-out, no fallthrough.
- **Raid opt-out fell through to PARTY:** disabling `Send Crits to Raid` while in raid silently tried to send to PARTY chat (which goes nowhere when in a raid). Same restructure fixes this.
- **Locale-safe chat broadcast:** the social broadcast prefix changed from `{star}` (which only renders the gold star on enUS clients) to `{rt1}`, so the icon now shows correctly on every locale.
- **Possible nil error in tooltip code:** `castTime > 0` could throw "attempt to compare nil with number" when `GetSpellInfo` returned nil castTime on certain Retail 11.x spells. Guarded with a nil check.
- **Tooltip hooks now guarded:** `hooksecurefunc(GameTooltip, "SetSpellBookItem", ...)` could error at load on Retail 11.x where the method may not exist. Both `SetAction` and `SetSpellBookItem` hooks now check for the method before installing.
- **Version broadcast misuse:** `BroadcastVersion` could call `SendCommMessage` with channel `PARTY` while not in a group at all (only guild was checked). Now gated on `IsInGroup()`.
- **GROUP_ROSTER_UPDATE comm spam:** roster events fire frequently in any group activity; each fire used to broadcast immediately. Now coalesced to one broadcast per 5 seconds.
- **Self-cast heals not tracked:** `destGUID ~= UnitGUID("player")` filtered out every self-target event, so paladin/druid/priest self-heal crits never updated highest values. Self-heals are now recorded; self-damage stays excluded.
- **Broken string fallback in version comparison:** lexical compare of version strings (`"0.5.10.0" > "0.5.9.0"`) returned wrong answers. Removed the dead fallback path; `compareVersions` is the single source of truth.
- **`compareVersions` was a global:** moved inside `OnInitialize` as a `local function` and reordered before its first use.
- **`/cmhelp` lines used bare `print`:** the first line used `self:Print` (with `[CritMatic]` prefix) and the rest used `print` (no prefix). All lines now use `self:Print` for consistent formatting.
- **Packager bundled dev-only files into the upload:** the BigWigs packager looks for `.pkgmeta` (no extension) or `pkgmeta.yaml` (no leading dot), not `.pkgmeta.yaml`. Renamed and added an `ignore:` block, so the addon ships only the user-facing files. Zip dropped from 2.3 MB to 1.3 MB.

---

## [v5.5.7-release] - 04/22/2026

### Fixed

- **CritMatic icon rendering behind the Crit Log window:** the three icon textures (black circle, CritMatic icon, gold ring) had `SetParent(UIParent)` calls — a workaround from the old `BACKGROUND`-strata days that lifted the textures above the window. With the window now at `MEDIUM` strata, those reparented textures ended up at UIParent's lower frame level and got covered by the window. Removed the reparenting so the textures inherit `critmatic_icon_frame`'s strata/level (child of the main frame) and render above it normally.

---

## [v5.5.6-release] - 04/22/2026

### Fixed

- **Right-click menu rendered behind the Crit Log window (retail 11.0):** v5.5.5 left the widget at `FULLSCREEN_DIALOG` strata (set by the AceGUI constructor), but `MenuUtil.CreateContextMenu` creates menus at `DIALOG`, so the menu was stacking underneath the window. Lowered the widget to `MEDIUM` strata (standard addon default) so context menus, tooltips, and popups render above it.
- **Inner scroll area not following the outer frame on resize:** the ScrollFrame was hardcoded to `SetSize(250, 120)` and anchored only TOPLEFT, so resizing the window left the spell list stuck at a fixed size. The scroll container is now anchored to both TOPLEFT and BOTTOMRIGHT (with room for the sizer and scrollbar), and the scroll child width tracks the container via `OnSizeChanged`. Spell rows now anchor TOPLEFT + TOPRIGHT, so they span the full available width at any frame size.

---

## [v5.5.5-release] - 04/22/2026

### Fixed

- **Crit Log window not movable/resizable on retail 11.0 (#22 follow-up):** the frame was forced to the `BACKGROUND` strata and then `:Lower()`-ed at the end of setup, which put it behind Blizzard's default UI. Overlapping default frames intercepted mouse input, so `RegisterForDrag` and the corner/edge sizers never received clicks. Removed the override; the widget now stays at the strata the Constructor set and drag + resize work again.

---

## [v5.5.4-release] - 04/17/2026

### Fixed

- **Retail 11.0 context menus and hover (#22):** right-click context menus on spell rows and the CritMatic icon no longer error with `EasyMenu (a nil value)`; they now use `MenuUtil.CreateContextMenu` on retail with an `EasyMenu` fallback for Classic/TBC/Wrath. Spell-row hover highlight no longer errors with `SetBackdrop (a nil value)` — the row frame now uses `BackdropTemplate`.
- **Open Settings menu item:** switched to `Settings.OpenToCategory` with an `InterfaceOptionsFrame_OpenToCategory` fallback so the menu entry works on retail 11.0+.

---

## [v5.5.3-release] - 04/13/2026

### Fixed

- **frFR typo:** corrected `valeures` → `valeurs` in the Change Log font reset description (confirmed by @Surfingnet on #21).

---

## [v5.5.2-release] - 04/13/2026

### Added

- **French (frFR) localization** contributed by @Surfingnet (#21) — full translation of all 134 strings, including the v5.5.0 additions (ignored spells panel, right-click context menus).

---

## [v5.5.1-release] - 04/13/2026

### Fixed

- **Login crash on Crit Log creation (#20):** removed stray `RegisterForClicks` calls on non-Button frames introduced in v5.5.0. Right-click context menus on spell rows and the CritMatic icon continue to work via `OnMouseUp` as before.

---

## [v5.5.0-release] - 04/12/2026

### Added

- **Spell icons in alert notifications:** the "New Crit!" popup now shows the spell icon with a matching bounce animation.
- **Resizable Crit Log:** drag the corner/edge to resize the Crit Log widget.
- **Right-click context menus:** right-click any spell in the Crit Log to Ignore it or Delete its data. Right-click the CritMatic icon for quick access to Settings, Lock/Unlock, Reset Position, and Hide.
- **Ignored Spells settings panel:** manage ignored spells from `/cm` options instead of slash commands — select from a dropdown, remove individual spells, or clear all.
- **Hover highlights:** spell entries in the Crit Log highlight on mouseover.

### Improved

- **Tooltip performance:** per-spell max values are now cached instead of rescanning all data on every tooltip hover.
- **Spell icon accuracy:** icons are stored at record time, fixing wrong-icon display for spells with shared names across ranks.

---

## [v5.4.1-release] - 04/12/2026

### Added

- **Crit Log toggle in options panel:** You can now show/hide the live Crit Log widget from `/cm` General Settings instead of needing the `/cmcritlog` slash command.

---

## [v5.4.0-release] - 04/12/2026

### Changed

- **License changed to All Rights Reserved.** CritMatic is now proprietary software. No part of this addon may be copied, modified, or redistributed without express written permission from the copyright holder.
- Updated README with current feature list, macro tooltip support, and license notice.

---

## [v0.5.3.2-release] - 04/11/2026

### Fixed

- **Macro tooltips (issue #19):** CritMatic's crit/hit lines now appear on action-bar macros that cast a tracked spell. The tooltip hook previously bailed out whenever `GetActionInfo` returned `"macro"` instead of `"spell"`; it now resolves the macro to its current spell via `GetMacroSpell(slot)` and proceeds normally. Cast-sequence and conditional macros (`/cast [mod:shift] X; Y`) reflect whichever spell would fire next. Thanks @Alessandro-Barbieri.

---

## [v0.5.3.1-release] - 04/10/2026

### Fixed

- Interface directive now uses comma-separated multi-version format (`110207, 38000, 20505, 11508`) so the BigWigs packager correctly tags the CurseForge release with all four game flavors (Retail, Titan Reforged, TBC, Classic Era). The v0.5.3.0 upload was only tagged as 11.2.7 because the space-separated form tripped the packager's parser.

---

## [v0.5.3.0-release] - 04/10/2026

### Fixed

- **Tooltip overflow with StatWeightsClassic (issue #17):** CritMatic's crit/hit lines no longer render outside the spell tooltip frame when used alongside other tooltip addons. `Show()` is now called exactly once per render, and only when CritMatic actually added lines.
- **Silent data loss for large crits:** raised `MAX_HIT` ceiling from 40000 to 1e9 so Wrath/Retail endgame crits are recorded instead of silently dropped.
- **Operator-precedence bug in combat log handler:** player-sourced events were bypassing the `destGUID`, `eventType`, and `amount > 0` filters due to missing parentheses around the `or` clause.
- **Nil crashes in combat log handler:** added guards for `baseSpellName`, `destGUID`, and `amount` to prevent errors on unusual event shapes.
- **`RANGE_DAMAGE` events** are now properly tracked (were in the outer filter but had no extraction branch).
- **Reset buttons in options panels** no longer pollute the shared defaults table by reference. All `Reset*ToDefault` functions now use `CopyTable` against `Critmatic.db.defaults`.

### Changed

- Optimized ignored-spells/targets filtering from O(N) per combat event to O(1) hash lookups.
- Added compatibility shims for `C_Spell.GetSpellCooldown` and `GetSpellBookItemInfo` (Retail 11.x).
- Unregistered `PLAYER_LOGIN` and `GROUP_JOINED` events (registered but never handled).
- Raw-source installs now load cleanly on Classic Era, TBC, and Wrath/Titan clients without the "out of date" warning (main `## Interface:` directive now lists 110207 38000 20505 11508). Thanks @Alessandro-Barbieri (#18).

### Removed

- Dead function `IsSpellInSpellbook` (zero callers).
- Dead DB field `dataCleared`.

---

## [v0.5.2.1-release] - 04/09/2026

### Fixed

- Split Wrath Classic (30403) and Titan Reforged (38000) into separate TOC interface directives so the BigWigs packager can build both flavors

---

## [v0.5.2.0-release] - 04/09/2026

### Added

- X/Y percentage sliders for alert text position (configurable in Alert settings, with Reset and Test buttons)

---

## [v0.5.1.0-release] - 01/17/2026

### Fixed
- update interface versions to current (Classic Era 11508, Wrath 38000)

---

## [v0.5.0.0-release] - 01/16/2026

### Added

- missing localization line

### Fixed

- TBC fix's
- invalid Interface-Wrath version (38000 -> 30403)

### Changed

- Wrath titan version to 38000

---

## [v0.4.3.0-release] - 01/14/2026

### Updated:

- **Updated the in-game changelog popup to show recent release notes.**

---

## [v0.4.2.9-release] - 01/12/2026

### Fixed:

- **Fixed tooltip conflict with StatWeightsClassic** - Removed redundant tooltip Show() call that caused CritMatic tooltip info to disappear when used alongside StatWeightsClassic addon.

- **Fixed WoW 11.0 compatibility** - Removed deprecated InterfaceOptionsList_DisplayPanel hook that was causing errors in modern WoW clients.

---

## [v0.4.2.8-release] - 12/25/2023


## [v0.4.2.7.5-release] - 12/25/2023

## [v0.4.2.7.4-release] - 12/16/2023

## [v0.4.2.7.1-release] - 12/10/2023

## [v0.4.2.7-release] - 12/6/2023

### Added:

- **Added options for maxMessages, startDelay, and fadeTime settings also a way to reset them.**

## [v0.4.2.5-release] - 12/6/2023

### Added:

- **Added alert notification preview feature in options under Alert**

- **Chat customization is coming next.**
