# YippYapp Helper - Changelog

## v2.6.0 — Tonight's Plan + L'ura revived (2026-04-19)

### L'ura Memory-Game Helper — back, and this time it survives combat

- **Root cause of the v2.0.x failure identified.** Midnight's encounter
  system wraps `CHAT_MSG_RAID` / `CHAT_MSG_RAID_LEADER` payloads as
  "secret string values" — any index op (`msg:match`, `msg:sub`,
  `msg:find`, `msg:lower`) trips taint and crashes the handler with
  `"attempt to index local 'msg' (a secret string value tainted by
  'YippYappHelper')"`. The v2.0.x code did `msg:match("YYL[1-5]")`,
  which is exactly the forbidden op.
- **Protocol rebuilt to NSRT's shape (with our symbols).** Macros
  broadcast a short code (`circle` / `diamond` / `t` / `triangle` /
  `x`) via `/raid`; the receiver bakes the texture-path prefix into
  its `SetFormattedText("|T<prefix>%s<suffix>|t", msg)` format
  string, so `msg` flows through without ever being indexed or
  concatenated. No taint. Uses our bundled symbol TGAs inside the
  addon folder — no `Interface\ICONS\` file-install hack like the
  NSRT+LuraMemoryFiles combo needs.
- **Raid-leader-only listener.** Only `CHAT_MSG_RAID_LEADER` drives
  the pentagon — regular raid chatter can't trigger a false render.
- **Encounter-scoped by default.** Listener is armed only during
  L'ura's memory-game windows (heroic: 10 / 80 / 150 s, mythic:
  33 / 95 / 157 s + phase-4 re-arms). Checkbox flips to "always
  listen" as a fallback for cross-realm / `/reload`-mid-pull cases.
- **Full UI in Raid Tools → L'ura tab.** Enable toggle, scope
  toggle, Preview / Simulate / Clear buttons, Unlock / Lock mover,
  `Create / refresh macros` button, reference table (slot number,
  symbol, name, macro name), and a `/say` debug mode for solo
  end-to-end testing without a raid group.
- **Macro generator.** Creates 5 macros named `YY_Lura_1..5` with
  body `/raid <code>` and a shared numeric icon FileDataID (not an
  addon path — those render transparently on macro slots). Deletes
  stale old-schema macros (`YY_1..5`, previous `YY_Lura_*`) before
  creating new ones so a broken prior save can't land on your bar.
- **Chat payload shrunk** from the full path
  `Interface\AddOns\YippYappHelper\Media\Textures\symbol_<name>`
  (~60 chars) to just the short code. The prefix lives in the
  receiver's format-string literal.

### Ready Check dismissal + hover-to-pause

- **Three-shape dismissal.** Combat start (`PLAYER_REGEN_DISABLED`)
  snap-closes with no fade — the fight is live and the panel is in
  the way. Raid pull countdown fires the fade immediately. Normal
  finish / everyone-answered paths linger 3 s before fading so the
  final status stays readable.
- **Hover-to-pause, both directions.** If the cursor is over the
  window when a fade is about to start, the fade is held. If the
  user moves the cursor back into an already-fading window, the
  fade stops and alpha restores to 1. The instant the cursor
  leaves the window, the fade plays. Combat snap always wins —
  hover does not pause a combat-start dismiss.
- **Ticker-based hover detection.** Frame `OnLeave` fires when the
  cursor moves onto a child row, even though `IsMouseOver()` still
  reports true for the parent — unreliable signal. A 100 ms ticker
  polls `IsMouseOver()` and self-cancels once neither a pending
  fade nor an active fade remains.
- **Position persistence fix.** `OnDragStop` was computing the
  anchor via `GetLeft/GetTop - UIParent:GetLeft/GetTop` — brittle
  math that could flip signs or diverge under differing effective
  scales. Rewritten to use `frame:GetPoint()` directly and save
  `point / relativePoint / x / y`; show path restores with the
  matching `SetPoint`. Legacy `anchorLeft / anchorTop` still read
  as fallback.
- **"X missing" summary removed.** The counter conflated offline
  members with players missing buffs — in a small test group you'd
  see `1/2 ready · 1 missing` where the "missing" was just the
  offline teammate. Per-row icons already show exactly which buffs
  / food / flask / durability are missing. Summary now just reads
  `X/Y ready`.

### Raid Tools UI

- **L'ura tab** lives next to Overview with its own purple accent.
- Header row shifted so the Overview / Release Block / Scan Addons
  buttons no longer slice the inner-panel border.

### Loot Browser bug fixes

- **Stale-texture pool bug fixed.** Icon pool entries cleared their
  `itemID` / `itemLink` on release but not the texture itself. When
  the pool handed a slot back out and the next row didn't explicitly
  set a texture, the old item's icon stayed visible — rendered with
  no tooltip and a dark-gray "unknown difficulty" border, which
  looked like an errant bag-slot icon. `ReleaseAll` now calls
  `SetTexture(nil)` on every pooled icon.
- **Filtered Encounter Journal rows with no itemID.** The EJ
  occasionally returns a loot entry that has a name and an icon but
  no itemID — unlinkable, untooltippable. Those entries now get
  dropped at scan time instead of rendering as a no-tooltip blank.

### New features

- **Tonight's Plan** — replaces the static Farm Guide on the home
  dashboard with a live activity planner. Shows vault progress as three
  dot-strips (M+, Raid, Delves) and up to three prioritized actions with
  inline progress bars — "1 more M+ run » unlocks vault slot 2",
  "2 raid bosses » unlocks raid slot 2", "40 Hero crests left this
  week". Driven by a new `Features/Planner/PlannerData.lua` module that
  reads `C_WeeklyRewards.GetActivities` and the profile's precious-crest
  list. Auto-refreshes on currency / inventory update bursts.

- **Utility Advisor description rewrite** — the dense per-dungeon prose
  paragraph is now bulleted per mechanic, with color-coded response
  keywords (interrupt = yellow, purge / dispel = cyan, enrage = red,
  curse = violet, poison = green, bleed = dark red, stun = gold,
  fear = violet, slow/snare = sky, grip = tan, incap = pink) and
  bolded ability names (two-word Title Case auto-detected). The "lead"
  one-liner still sits above the bullets as an intro.

### ReadyCheck rewrite (30-man perf pass)

- **Persistent rows** — removed the Acquire/Release pool churn; row
  frames are created once and reused in-place. Icons anchored at
  creation (previously 300 ClearAllPoints+SetPoint calls per render
  at 30 raiders). Header labels / column dividers anchored once at
  load instead of every render.
- **Per-unit aura cache** — `ScanUnitAuras` results cached per unit
  token, invalidated by `UNIT_AURA(arg1)` or `GROUP_ROSTER_UPDATE` or
  the start of a new `READY_CHECK` session. A UNIT_AURA for one unit
  now triggers a scan for that one unit; the other 29 hit the cache.
- **Pulse animation no longer thrashes** — `_pulsing` flag avoids
  the unconditional `Stop()` + `Play()` that restarted the eating
  animation every render.
- **Dismiss window on time** — removed the 3s post-finish delay and
  shortened the fade to ~1.5s, so the window visibly fades away
  "right as the 30 seconds end" instead of lingering with a tail.
- **Pull-timer dismiss** — registered `START_TIMER`; when a player
  countdown (`/cd`, `/countdown`, or BigWigs/DBM option to use the
  native countdown) starts, the window fades immediately.
- **Cross-realm name keys** — `readyStatus` now uses
  `Ambiguate(name, "short")` consistently at all read/write sites;
  previously mixed raw `UnitName` with short-ambiguated keys, causing
  the initiator's seed to be missed on cross-realm players.
- **OnHide unregister** — manual × close now stops UNIT_AURA tracking
  too; previously only the finish paths did.

### Interrupt Tracker

- Bars no longer dim when on cooldown. The draining StatusBar was
  already the cooldown signal — the extra 0.5/0.85 alpha just made
  the bar harder to read.
- Input values from SavedVariables are now type-validated and clamped
  to sane ranges (`barWidth` 40–600, `posY` –8000 to 8000, etc.), so
  a corrupted SV can't produce a 0-width bar or an off-screen frame.

### Settings

- **Quick Access sidebar tile** — the YippYapp macro drag icon is
  pinned to the bottom of the settings tab column, always visible
  regardless of which tab is open. "Drag to your bar, or type /yh"
  hint inline.
- **Slash commands reference** — new "Slash commands" section at the
  bottom of the General tab listing /yh, /keys, /yyhrc, /yyhopts,
  /yyhinterrupts, /yh toes off, /yh toes mover.

### Fun

- **Toes of the Harbinger** — Xal'atath's feet now hover at the top of
  your screen. Yes, the feet. Just the feet. No, we will not be
  answering questions. Drag them somewhere, rotate them upside-down,
  flip them, resize them until they are an ominous 2× or a tasteful
  0.5×. Saved across sessions, which is either charming or concerning
  depending on your relationship with cosmic horror. Turn them off in
  Settings → General → Fun when your raid group starts asking things,
  or type `/yh toes off` and pretend you never saw them. Inspired by
  Sakreble's [Xaltoes](https://www.curseforge.com/) addon, which itself
  is a structured version of a ModelScene one-liner by @Herotherogue
  on X.

### Safety & perf

- `ReleaseBlocker`'s mover overlay re-parented to `UIParent` (was
  parented to the DEATH StaticPopup's release button); insecure +
  mouse-enabled children on a frame whose OnClick runs protected
  code is a taint path. OnUpdate also throttled to 20Hz so holding
  CTRL for the override doesn't burn per-frame CPU during combat.
- `RaidInspect` GUID scan replaced with a GUID→unit map rebuilt on
  `GROUP_ROSTER_UPDATE` / `PLAYER_ENTERING_WORLD`. Fallback refresh
  on stale lookup. Previously O(n) scan per `INSPECT_READY` of up
  to 30 units.
- `MythicPlusData` guild-keystone reply uses a 15s cooldown
  (`lastGuildKSReplyAt`) so a burst of KSQ requests after a Tuesday
  reset doesn't schedule 100+ independent `C_Timer.After` reply
  timers.
- `PVETab` defers `PanelTemplates_DeselectTab` via `C_Timer.After(0, …)`
  so it never runs inline with Blizzard's click dispatch.
- `Core/Core.lua :SendItemToUpgrade` has an explicit
  `InCombatLockdown()` guard now (the right-click path into it was
  bypassing the caller's guard).
- `Welcome` `UISpecialFrames` insert is idempotent — fast Show/Hide/Show
  sequences no longer stack duplicate entries.
- Consolidated `CONSUMABLE_SPELL_IDS` (food / flask / bronze) into
  `Core/Data.lua` — RaidUI used to carry stale Dragonflight flask IDs
  that no longer matched Midnight S1 consumables.
- Dashboard crest-refresh builds a single `track → crestData` map
  per tick instead of nested scans (O(n²) → O(n)).
- `ScheduleRefresh` in the gear panel coalesces rapid clicks via a
  pending flag.
- Removed duplicate `ns.CREST_COST_PER_UPGRADE` constant (was dead
  code; `ns.BASE_CREST_COST` in Recommend.lua is the sole source).
- `CompletionPopup` party class lookup uses party-unit tokens instead
  of bare names — fixes missing class colors for cross-realm / out-of-
  range cached keystone senders.

## v2.5.0 - Midnight-ready (2026-04-15)

### New features

- **Interrupt Tracker (BETA)** — party-wide interrupt cooldown bars.
  - Per-member bars with class-colored fill, class-colored border option,
    icon, name, and countdown/elapsed timer.
  - Tracks the player's own casts directly; attributes party interrupts
    via a time-correlation model (ExwindTools-style) that sidesteps
    Midnight's secret-value wrapping on friendly spellIDs.
  - Fully configurable: bar/icon mode, texture, dimensions, orientation,
    grow direction, anchor, multi-context visibility filters, backdrop,
    and drag-to-move with an unlock overlay.
  - Slash commands: `/yyhintlog` debug log, `/yyhintdebug` class rotation.

- **Mythic+ completion popup (BETA)** — small window on
  `CHALLENGE_MODE_COMPLETED` showing your new M+ rating, the party's new
  keystones in Mythic+ page styling, and a button that navigates the
  app frame to the M+ page. Row click casts the teleport directly via
  `InsecureActionButtonTemplate` (BigWigs-style) so it works even when
  the popup was opened from a tainted click path.

- **Utility advisor (BETA)** — on entering a Mythic+ (or Mythic) dungeon,
  shows a small window with per-class recommended utility spells for
  that dungeon plus a short description. Spell icons hover to full
  Blizzard tooltips. Gold border marks talent-dependent picks.
  Show-once guard so it doesn't spam on reloads or re-entries.

- **Raid Addon Scanner** — button in the Raid Tools header that pings
  the party/raid via addon-comm and shows a modal listing who has
  YippYappHelper installed vs not.

### Settings overhaul

- Removed the Blizzard AddOn Options integration. All settings now live
  in the addon's own Settings page (accessible via the gear button,
  `/yyhopts`, `/yyhsettings`, or `/yyhinterrupts`).
- Top-level tabs (General / Interrupt Tracker) with vertical sub-nav
  inside Interrupt Tracker for its many sections.
- Feature-row widget with inline "Preview" buttons so you can test what
  a popup looks like before enabling it in live play.
- "Show in" visibility is now a multi-select (any of: Always / In a
  group / Dungeons & raids / Mythic+ / Raid / PvP).

### Mythic+ page

- Views are now **strictly party-scoped** (5-man) regardless of whether
  you're in a raid — no more raid-member keystones polluting the grid.
- Tabs restyled to underline tabs matching the Loot Browser.
- `/yyhmplustest` slash command injects 5 fake teammates with synthetic
  keystones and scores so you can preview the full group layout solo.
- Dungeon-tile tooltips now use an O(1) mapID-indexed lookup instead of
  rescanning the keystone list per hover.

### Raid Tools

- **L'ura Runes feature removed.** Midnight locks down chat text,
  addon-comm, raid markers, and custom channels during raid encounters
  — there is no unprivileged signaling primitive left that works cross-
  realm in a raid instance.
- Ready Check performance: single-pass aura scanner (replaces 8 separate
  FindAura calls per member — ~8x fewer `GetAuraDataByIndex` calls at
  30-man), UNIT_AURA debounced to 0.5s, READY_CHECK_CONFIRM throttled
  through `QueueRefresh`, CHAT_MSG_ADDON durability updates coalesced.
- Durability broadcast staggered 0–1.5s to avoid CHAT_MSG_ADDON flood
  on ready-check in full raids.
- Durability name-key mismatch fixed (cross-realm raiders no longer
  show as "not applicable").
- Early-finish detection: window fades as soon as everyone answers,
  rather than waiting the full 30s timer.
- "Hearty" and "Well Fed" prefix patterns added to food detection.
- ReadyCheck hide delay reduced 8s → 3s after everyone answers.
- `Respond()` now fires `ConfirmReadyCheck` before any UI state touches,
  plus optimistic local status update so the row flips instantly.

### UI consistency

- AppFrame uses a darker, flatter background (0.03 on black at 0.92
  alpha) with a 1px black border.
- Every page (Gear, Raid, Progression, Loot, Consumables, M+, Teleports,
  Settings, Home) gets the same inner bordered panel — unified look.
- Settings window lives inside the AppFrame as a page; Home-dashboard
  and AppFrame header both have a "Settings" button that routes there.
- Loot Browser and Consumables headers in app-mode dropped their card
  border in favor of a single 1px bottom divider under the filter row.
- All the in-addon widgets (checkbox, slider, dropdown, tab) rebuilt
  to match the addon's dark palette — no more WoW default styling.

### Performance

- Interrupt slot OnUpdate throttled to 20 Hz and caches settings-
  derived flags on the slot.
- Interrupt events short-circuit when the feature is disabled.
- Ready Check aura scanner batches 8+ independent aura iterations into
  a single pass per member per render.
- Mythic+ RefreshMythicPlus pre-builds `membersByName` and
  `keystonesByMapID` lookups to avoid inner-loop rescans.
- Loot Browser tooltipHiddenCache is now bounded (2048-entry cap with
  wipe-on-fill).
- AppFrame uses `UISpecialFrames` only out of combat to avoid the
  `ADDON_ACTION_BLOCKED` taint we hit at combat end.

### Bug fixes

- Interrupt bar no longer snaps back when dragging to a new position
  (atomic write + manual `applyPosition` instead of listener cascade).
- Interrupt bar no longer jumps out from under the cursor when
  GROUP_ROSTER_UPDATE fires mid-drag.
- Active interrupt cooldowns now survive a rebuild — reattaching state
  from `ns.Interrupts.state` to freshly-created slots so GROUP_ROSTER
  doesn't visually reset ongoing bars.
- Interrupt attribution flash no longer hides the slot (was passing
  `showWhenDone=false` to `UIFrameFlash`).
- Loot Browser filter row shifted down in app mode to clear the inner
  panel top edge.
- Consumables header matches Loot Browser styling in app mode.
- Teleports / Progression / M+ page layouts nudged to fit the new
  inner panel without gaps or overlaps.
- All the tainted-value handlers we had to add while chasing the
  Midnight secret-value system are removed now that we've landed on
  ExwindTools' taint-free attribution model.

---

## v2.0.1 - Polish pass (2026-04-14)

### L'ura Runes
- Macros renamed from `O D G T X` to `YY_1` - `YY_5` with a blank question-mark icon. Raid leader copies the bundled symbol TGAs into `Interface\ICONS\`, restarts WoW, then manually picks each symbol from the macro icon browser's Items tab.
- Tab fully redesigned into two full-width sections (Settings & Simulation, Raid Leader Macros) with a side-by-side reference table showing each macro number, its symbol icon, and the filename.
- Macro listener now only responds to `CHAT_MSG_RAID_LEADER`, not `CHAT_MSG_RAID` - so only raid leaders / assists can drive the pentagon display.
- Removed the per-slot icon picker; bundled symbol TGAs are the only display textures.
- Description now correctly states runes fill the pentagon right-to-left in press order.

### Ready Check
- Response tracking rewritten to capture `READY_CHECK_CONFIRM` arguments directly into an internal status map (MRT-style) instead of polling `GetReadyCheckStatus`, which could be stale for a tick after the event fired.
- Blizzard's own ready-check popup is now dismissed reliably (multi-tick safety sweep).
- Footer collapses after you respond so the window shrinks up to the bottom of the roster.

### UI polish
- Main app window close button restyled to match the Ready Check / Settings header buttons.
- Buy Me a Coffee icon moved to the home dashboard bottom-right with "if you want to support" label.
- Welcome / What's New window: Unicode em-dashes and arrows replaced with ASCII (no more square glyphs on certain fonts), and bullet wrapping estimator now strips color codes so long bullets stop overlapping.
- L'ura tab reference header reworded from "Reference" to "Pick this icon for each macro:" with explicit Items-tab instruction in the guide.

### Other
- `/keys` / `/yhkeys` slash command opens the Mythic+ page directly.
- Settings panel two-way sync: toggling the in-raid-frame Release Blocker button now updates the settings checkbox immediately.
- Guild keystone cache: 1-week TTL so stale entries from players who no longer have keys age out on their own.
- Loot Browser cache no longer invalidates while the panel is closed - keeps re-opens instant.
- Deleted orphaned `GetTrinketMythInfo` / `GetTrinketMaxIlvl` helpers left over after Trinket Rankings was retired.

## v2.0.0 - Raid companion rewrite (2026-04-13)

### New features
- **L'ura Memory-Game Helper** - live rune pentagon display, macro generator (`O D G T X`), per-slot icon picker, bundled rune symbol textures, and built-in simulation for dry-runs. Works in both Heroic and Mythic with press-order rendering.
- **Ready Check Window** - opens automatically on any ready check. Shows food, flask, vantus rune, Int/AP/Vers/Stam/Haste/Move, and durability % for every raider. Collapse/expand toggle, countdown timer, Ready/Not-Ready buttons, and live refresh as buffs change mid-check.
- **Settings Panel** - full entry in Blizzard's standard Options UI. Toggle Release Blocker, Ready Check, L'ura Runes, and the minimap button. `/yhopts` opens it directly.
- **Keys tab on the group-finder window** - opens the Mythic+ page without closing the current LFG panel.

### Major improvements
- Loot Browser: class dropdown (inspect any class), horizontal-scroll icon rows, housing decor + recipe filter, mount border distinction, and login prewarm so re-opens feel instant.
- Mythic+ Guild Keystones: auto-request on login, manual Refresh button that sits cleanly next to the Vault row.
- Raid Split Balance: added melee vs ranged DPS counts for each split.
- Dashboard panels restyled with accent underlines and consistent typography. Upgrade Summary rewritten into readable "Slot - Action (reason)" lines.
- Release Blocker simplified to work in any raid zone with guild-majority detection.
- New `YippYappHelper` logo used for the minimap button and in-app header.
- Full folder reorganization: `Core/`, `Features/`, `Integrations/`, `Media/`.

### Retired
- Trinket Rankings (too expensive to keep accurate via sim).
- Raid Tools - Tier Tracker tab.
- Raid Tools - Performance tab.

## v1.4.0 — Mythic+, Teleports & More (2026-03-30)

### Mythic+ Helper (new)
- Dungeon overview with clickable teleport icons showing your best key level and score
- Group ratings grid with color-coded per-dungeon scores for all party members
- Group keystones section with dungeon icons and class colors
- Great Vault tracker with Blizzard-native tooltips — click slots to open vault
- Rating goals (2000/2500/3000) with progress bars and focus dungeons
- Guild tab for viewing guild members' keystones (shared via addon comms)
- Home/Guild tab navigation
- Accessible from dashboard, app nav, and `/yh mplus`

### Dungeon Teleports (new)
- All Hero's Path dungeon teleports from MoP through Midnight
- Organized by expansion with clickable secure buttons
- Greyed-out icons for teleports not yet unlocked
- Accessible from dashboard, app nav

### Release Spirit Blocker (new)
- Hides the Release Spirit button in current expansion guild raids
- Hold CTRL for 1 second to override — progress bar shows hold time
- Does not interfere with combat resurrections
- Toggle with `/yh release` (enabled by default)

### Loot Browser
- Instance-aware filtering: detects current dungeon/raid and shows only that instance's loot
- Slot tabs grey out when no items match the instance + stat filter combo
- Auto-enables instance filter when entering a dungeon

### Dashboard
- Upgrade summary and farm guide now auto-refresh on gear/crest changes
- Top 3 actionable recommendations sorted by priority

### Trinket Rankings
- Fixed Hunter Beast Mastery spec key mismatch in "Your Spec" mode
- Fixed Rogue Assassination mapped to Outlaw rankings
- Added missing AOE trinket rankings for all Demon Hunter specs

### Raid Tools
- Fixed swap suggestions reusing the same player as swap partner across multiple triggers

### UI
- All frames use dynamic sizing based on screen resolution
- Responsive dungeon icons scale to fit available width
- Font sizes scale proportionally at different UI scales

## v1.3.6 — What's New Screen (2026-03-26)
- Updated What's New popup to show v1.3 and v1.3.5 highlights
- Removed features list from welcome screen, now shows only what's new

## v1.3.5 — Polish & Fixes (2026-03-26)

### Consumables
- Shift-click items to link in chat or search the Auction House

### Bug Fixes
- Fixed sub-panels (Gear, Raid Tools, Loot Browser, Consumables) being independently draggable when embedded in the app shell
- Fixed consumables icon pool contamination causing greyed-out icons
- Added nil-safety to consumables object pool functions

## v1.3.0 — Consumables Guide, Loot Browser & More (2026-03-26)

### Consumables Guide (new)
- Full enchant, gem, and consumable recommendations for every class and spec (all 40 specs)
- Three-tab layout: Enchants, Gems, Consumables — each with item icons, quality-colored links, and tooltips on hover
- Class dropdown and spec buttons to browse any spec's recommendations (defaults to your class/spec)
- Guide text below each tab with detailed reasoning (flask choices, potion tradeoffs, weapon buff notes, food comparisons)
- Alternative items shown inline with "or" label (e.g. flask alternatives)
- Accessible from dashboard, app nav bar, and integrated as full page in the app shell

### Loot Browser (new)
- Browse all dungeon, raid, and world boss loot by slot
- EJ-based scanning with spec and secondary stat filtering (Crit/Haste/Mastery/Vers)
- Two-row slot tabs: armor on top, accessories + weapons on bottom
- Difficulty columns (Normal/Heroic/Mythic for dungeons, LFR/N/H/M for raids)
- Item icons with difficulty-colored borders, tooltips on hover, shift-click to link
- Trinket tier badges (S/A/B) cross-referenced from SimC rankings
- Spec dropdown to browse loot for any spec
- Remembers selected slot across open/close (defaults to Head)
- Accessible from dashboard, app nav bar, and `/yh loot`

### Raid Tools
- Group display reordered: top row shows groups 1, 3, 5 and bottom row shows 2, 4, 6 for split visualization
- DK Grip distribution: suggests splitting Death Knights across raid splits for Mass Grip coverage
- Healer stacking fix: only suggests swaps when source split has 3+ healers (5-healer raids handled correctly)

### Profile System Simplified
- 6 profiles → 3: **Normal** (Casual/Delves/M+ up to 8), **Heroic** (Heroic Raid/M+ 10), **Mythic** (Mythic Raid/M+ 10+)
- Old profile IDs auto-migrate (heroic_raider → heroic, mplus_high → heroic, etc.)
- Each profile defines farmable track for smarter recommendations

### Recommendation Engine Improvements
- **SAVE_FOR_DROP**: "Hero drops from M+6-10 / Heroic raid — save Champion crests, wait for replacement"
  - Only triggers for low-rank items (1-3/6) with precious crests
  - Shows source hint (M+ key range + raid tier)
- **CREST_CAPPED**: "Need 20 Champion — capped until next reset"
  - Detects both weekly caps (Hero/Myth) and season cumulative caps
- Myth 2/6+ always recommended for upgrade (top track, nothing replaces it)
- Myth 1/6 still suggests using Hero crests for free promotion via overlap

### Trinket Rankings Refreshed
- Fresh SimC data: 60,000 iterations, 30 specs (ST + AOE), latest nightly profiles
- New spec: Rogue Assassination
- Item level shown on all trinket rows (Myth 6/6 = 289)
- Tooltips now show Myth 6/6 stats; shift-click links the Myth 6/6 version
- Removed legacy trinkets not in current loot pool

### UI Polish
- Unified underline tab style across all panels (Raid Tools, Consumables, Loot Browser)
- Dashboard app nav buttons in a 3x2 grid instead of single row
- Magisters' Terrace trinket sources corrected

## v1.2.0 — Raid Tools, Data Overhaul & Polish (2026-03-25)

### Recommendation System Reworked
- Crests can only be spent on their own track — addon no longer suggests "hold crests for higher track gear"
- Items now show explicit upgrade priority: "Upgrade 1st of 5 Champion", "Upgrade 2nd", etc.
- Priority based on slot value (weapons/chest/legs first, neck/wrist last)
- Crest scarcity calculated from total season budget (current + still earnable), not just inventory
- Overlap zone fix: "Use cheaper crests" only shows at rank 1 (not rank 2 where free ranks are already used)
- Profile changes instantly refresh all recommendations on the dashboard

### Raid Tools — Performance Tab (new)
- DPS rankings from Blizzard's built-in Damage Meter API (C_DamageMeter)
- Average DPS per player per split (A vs B) with imbalance detection
- Avoidable damage taken leaderboard
- Death count tracker
- Interrupt count tracker
- Uses current combat segment, falls back to overall

### Raid Tools — Overview Improvements
- Two-column layout: groups + swaps on left, composition + consumables on right
- Consumable checker: flask, food, augment rune status per player (spell ID based, taint-safe)
- Missing players listed by name next to each consumable type
- Raid buff list: one per line, cleaner layout
- Composition shown in large font with role breakdown
- Swap suggestions now show player names in bordered badges with class-colored borders
- "Swap All" button executes all suggested swaps via SwapRaidSubgroup API (raid leader/assistant only, out of combat)
- Debuff class distribution: suggests spreading Monk (Mystic Touch) and DH (Chaos Brand) across splits
- PI targets need same split (not same group) — corrected from 40yd range
- Player count balance: suggests moving healer if it fixes both size and healer imbalance
- Auto-refreshes on GROUP_ROSTER_UPDATE (instant update when players are moved)
- Group display always reserves 2 rows (no layout shift with fewer than 4 groups)

### Season 1 Data Updated
- Gear tracks: Champion 249/252/255, Hero 262/265/268, Myth 275/278/281 (ranks 2-4 corrected)
- Champion free ranks from Veteran: 2 (was 1)
- M+ crests: Heroic=Adventurer, M0=Champion, +2-3=Champion, +4-8=Hero, +9-12=Myth
- Raid: per-boss crest amounts, Void 6 bonus crest (20 base + 10 next tier), per-wing detail view
- Raid progression: clickable wing buttons (All / Voidspire / Dreamrift / Quel'Danas) with boss-by-boss detail
- Delves: Tiers 1-4 give Adventurer crests, Tier 10=Champion, Tier 11=Gilded Stash (10 Hero + 5 Myth)
- Delve cards grouped by crest type: Tier 1-4, 5-6, 7-10, 11
- Trovehunter's Bounty Map data added (tiers 4-11)
- Prey: Normal=Adventurer, Hard=Veteran, Nightmare=Champion
- Crafting: added Veteran tier, Spark of Radiance (no crests) tier
- M+ cards show ilvl ranges with track names (e.g. "259 - 263 Hero")
- M+ grouped as +2-5, +6-8, +9, +10-12

### Profile System
- Clickable dropdown on dashboard to switch profiles
- Profile change refreshes dashboard, gear recommendations, and suggestions instantly
- Hero crests now precious for Mythic Raider and M+ High profiles (weekly cap makes them limited)
- "What's New" window shows on version update with profile selector built in

### Trinket Panel — ChonkyCharacterSheet Support
- Trinket tab and panel now anchor to the actual visual right edge of the character frame
- Detects ChonkyCharacterSheet and anchors to CharacterFrameBg instead of CharacterFrame
- Panel inherits CharacterFrame scale when Chonky is active
- OnSizeChanged hook re-anchors on dynamic resize
- "All Specs" button collapses sidebar then opens app (no more panel stealing)

### Minimap Button — LibDBIcon
- Replaced custom minimap button with LibDBIcon-1.0
- Works correctly with ElvUI square minimap, SexyMap, and other minimap addons
- Draggable, position saved automatically by the library
- Embedded libraries: LibStub, CallbackHandler-1.0, LibDataBroker-1.1, LibDBIcon-1.0

### Visual Polish (inspired by Plumber addon)
- DisableSharpening on all frame borders for smooth edges at any UI scale
- ADD blend mode highlights on hover (subtle glow instead of flat color change)
- Text shadows on all headers and titles for depth
- Consistent color hierarchy: primary (0.92), secondary (0.55), tertiary (0.35)
- All frames adapt to screen resolution (dynamic sizing via GetAppFrameSize)
- All popups clamped to screen (trinket detail, PI picker, profile dropdown)
- Frame z-ordering fixed: sub-panels normalized when inside app, no addon interleaving

### What's New Window
- Welcome screen now doubles as a "What's New" popup on version updates
- Shows "Welcome to YippYapp Helper" on first install, "What's New" on updates
- Features list + version-specific highlights
- Profile selector built in for immediate setup
- "Got it" saves the version — only shows again on next update
- `/yh whatsnew` to re-show

### Bug Fixes
- Frost DK and Devourer DH spec keys corrected for trinket rankings
- TIER_QUALITY defined before use (trinket detail popup quality borders)
- Swap badge frames and PI picker rows now pooled (memory leak fix)
- Tier tracker rows pooled (memory leak fix)
- Tainted aura name strings handled via spell ID lookup + pcall fallback
- Dashboard.lua removed call to nonexistent RefreshRaidTrinketDisplay
- quickBtnText dead references removed

---

## v1.1.0 — Midnight Season 1 Overhaul (2026-03-23)

### Unified App Window
- Replaced the old popup dashboard with a single unified app frame
- All features accessible from one window with back-button navigation
- Home page dashboard with character info, crest overview, upgrade summary, farm guide, and navigation buttons

### Gear Upgrades (redesigned in-app)
- Equipment panel scaled up for readability
- Info panel widened with 2-column crest display
- Suggestions redesigned as card-style rows
- New recommendation: "Use cheaper crests" for overlap zones

### Trinket Rankings (redesigned in-app)
- 3-column layout: S-Tier, A-Tier, B-Tier side by side
- Class/spec browser with ST/AOE toggle
- Fixed persistent "Loading..." issue
- Trinket data updated with latest SimC nightly

### Raid Tools (redesigned)
- Overview tab with composition, buffs, splits, PI assignments
- Tier Tracker tab (scan-on-demand)

### Progression Dashboard (redesigned)
- Card-based single-page layout
- M+ breakpoints, Raid by difficulty, Delve breakpoints, Prey, Crafting
- Crest Sources side panel

### Welcome Screen
- Draggable macro icon for action bar
- Macro auto-created on login

### Quality of Life
- Minimap button opens the unified app
- `/yh welcome` to reset welcome screen
