# GuildHelper v3 Changelog

## v3.4.31
### Mythic+
- Added a movable Mythic+ run overlay that appears during active keys, showing the dungeon and key level, text affix names, remaining timer, +2/+3 deadline countdowns, enemy forces progress, objective/boss progress, deaths, and the next incomplete objective. Use `/gh3 mplushud on`, `/gh3 mplushud off`, `/gh3 mplushud reset`, `/gh3 mplushud lock`, or `/gh3 mplushud unlock` to control it.
- Added a Mythic+ completion summary window showing whether the run was timed and by how many upgrades, run time, deaths, party score changes when Blizzard exposes them, tracked gear drops, and the player's new key. Use `/gh3 mplussummary` to reopen the latest completed-run summary.

## v3.4.30
### Mythic+
- Mythic+ portal unlocks now respect Warband progress for local toons. If any of your saved characters has unlocked a dungeon teleport, GH3 treats that portal as unlocked across your My Toons views and portal-goal planning while keeping each toon’s score and best-run rows separate.
- Fixed stale Mythic+ best-run rows showing another toon's season history in Party Planning and portal tooltips. Live current-character capture now prefers the character-specific Mythic+ rating summary and clears saved dungeon rows that are not returned for the logged-in toon, while Party Planning also runs the throttled live repair pass.
- Fixed a Mythic+ startup capture error where current-character rating summary runs could call timing helpers before they were initialized.
- Fixed the Party Planning portal rail going blank when Blizzard's live season dungeon catalog or selected-toon context is not ready. The rail now falls back to the live player and visible party-key dungeons so stored rows, current keys, selected targets, and party keys can still render portal tiles.
- Fixed the portal list still rendering empty when Blizzard returns no live Mythic+ map table at all. GH3 now seeds the current-season dungeon catalog from its mapped portal IDs and can use mapped spell names for labels even when a portal is not learned yet.
- Fixed Party Planning portal badges rendering behind the portal rail panel. Portal tile frame levels now follow the rail content frame instead of using a low hard-coded layer.
- Mythic+ portal clicks now announce confirmed teleport casts to instance, raid, or party chat with the destination dungeon so group members can catch wrong-port mistakes.

### BIS
- Fixed another protected Retail loot-chat payload path where secret strings could still reach BIS text trimming and error during string cleanup.

## v3.4.28

### UI
- Fixed the main GH3 window drawing behind action buttons on smaller screens. The main frame now uses a higher frame strata, is marked top-level, and raises itself when opened so Blizzard action bars cannot cover the bottom of the addon UI.

### BIS
- Fixed the BIS Gear Table row layout so labels like `Main Hand` and `Off Hand` no longer wrap into adjacent rows. Shared GH3 table cells now stay single-line by default for fixed-height rows, and the BIS slot column was widened slightly while keeping the table inside the existing panel width.
- Fixed a `attempt to perform arithmetic on local 'numericValue' (a secret number value)` Lua error in the stat snapshot builder (`GetLiveStatSnapshot`/`GetStatGoalSummary`). `safeCallNumber` was returning `tonumber(result)` directly from Blizzard stat APIs (`GetCombatRating`, `GetHaste`, `GetCritChance`, etc.), which preserves the secret number's taint protection. Any subsequent arithmetic in `roundStatValue` (`numericValue * 100`) then failed when GH3 execution was tainted. The fix routes the result through `pcall(tostring, result)` → `tonumber(str)` to strip the taint before returning, matching the pattern used for secret string values.
- Fixed a `attempt to perform string conversion on a secret string value` Lua error in the loot message handler: `trimString` was assigning tainted loot-chat payloads directly to a local variable when `type()` reported `"string"`, then failing on the first `string.gsub` call. All values now go through the same `pcall(tostring, ...)` guard regardless of their reported type.

### Maintenance
- Fixed old public-note notifications popping up repeatedly after roster sync. Roster journal/repair sync could force an older peer copy of a member record over the local live roster value, so the next live roster scan would rediscover the same public-note change and print it again. GH3 now tracks when a public note was captured from the live guild roster, preserves newer live note values against stale synced records, and treats the first post-fix live correction for untimestamped records as baseline repair instead of a notification-worthy change.

### GratsU
- Stopped welcome messages from building up while you are inside instances. GratsU now invalidates pending welcome timers when instance suspension starts and treats the first roster pass after leaving as a fresh baseline, so login changes that happened during the run do not flush as stale guild-chat welcomes afterward.


- Reduced choppiness while the GH3 Mythic+ UI is open. Party Planning now reuses one short-lived party snapshot while building the summary, key table, planner guide, and breakdown matrix instead of repeatedly requesting party key data and item-level inspection during the same render, lightweight live Mythic+ refresh checks are throttled instead of hitting Blizzard APIs on every redraw, and background refreshes are rate-limited so addon-message chatter cannot rebuild the visible frame several times per second while idle.
- Reduced idle Mythic+ redraw churn from party key traffic. Repeated LibKeystone/OpenRaid messages that contain the same key and score no longer mark the UI dirty, and incoming key requests that only make GH3 send a response no longer trigger a visible Mythic+ refresh.
- Reduced Mythic+ render cost while the addon window is open but idle. The Mythic+ view now computes data for only the active tab instead of building My Toons, Season, Leaderboard, Party Planning, party goals, and recommendation tables before deciding which tab is visible, and passive background redraws are capped more aggressively while direct clicks still refresh immediately.
- Reduced more idle CPU from the open GH3 window. View rebuild cleanup now recursively unregisters detached child-frame events, Mythic+ portal buttons only listen to spellcast events when the portal is actually castable, passive Mythic+ bag/equipment updates use the coalesced background redraw path, and addon-message handling now routes by prefix instead of asking every feature handler to inspect every incoming message.
- Fixed the remaining high idle CPU source exposed by `/gh3 perf`: Blizzard can fire `MYTHIC_PLUS_CURRENT_AFFIX_UPDATE` thousands of times while the client is otherwise idle. GH3 now treats that event as a debounced readiness signal, temporarily unregisters/re-arms the stormy event during the cooldown window, and performs at most one forced Mythic+ recapture instead of calling the M+ capture path on every event.
- Fixed Party Planning Shift-click guild invites. Shift-clicking a Party Summary row now attempts the invite with that member's full normalized name and prints the actual result or rejection reason, instead of silently doing nothing when the old eligibility check or short-name invite path failed.
- Party Planning table headers now stay locked above their scrollable rows. Party Summary and Member Breakdown keep their column labels visible while you scroll through party keys or dungeon gain rows.
- Party Planning now keeps party keystones and saved best-run details visible while adding gain context underneath. Clicking a party member's keystone still loads that dungeon and level into the planner; that row now keeps the held key on the first line and shows projected score gain for the selected key on the second line. Member Breakdown Party Gains also keeps the saved best key on the first line and shows current score plus projected gain underneath, instead of replacing the key details with a single compact gain value.
- Mythic+ season bests are stored per toon, and live current-character recapture can now repair stale per-dungeon rows instead of only merging higher values. If an alt had inherited or retained another toon's timed runs, logging into that alt after M+ data is ready can replace the stale row values and clear obsolete current-season dungeon records. Party Planning stored-profile reads also tolerate a single realm-key mismatch for grouped players, which helps synced GH3 dungeon details show up when the party member's live full-name realm differs from the saved Mythics profile key.
- Fixed a UI regression where menu clicks could feel ignored and require several attempts after the M+ season-data readiness fix. Repeated `MYTHIC_PLUS_CURRENT_AFFIX_UPDATE` events were marking the main frame for refresh even when no M+ data changed, causing GH3 to rebuild the navigation while the player was interacting with it. The affix handler now refreshes the visible UI only when the forced M+ recapture actually changes stored data.
- Fixed a bug where guild members with GH3 installed could sync a non-zero overall M+ score but show all-zero dungeon columns in the Season view. Root cause: at addon startup, `C_MythicPlus.GetSeasonBestForMap` and `C_ChallengeMode.GetMapTable` return empty results because Blizzard hasn't finished loading M+ season data into the client yet. The overall score (captured via `GetCurrentMythicRating`) succeeds because it is immediately available. GH3 now also listens for `MYTHIC_PLUS_CURRENT_AFFIX_UPDATE`, which Blizzard fires when M+ season data is fully loaded, and triggers a forced per-dungeon re-capture at that point.
- Fixed portal buttons on the Party Planning tab not working. Three issues were resolved: (1) `isPortalUnlockedForRecord` was short-circuiting to `false` when `IsSpellKnown` reported the portal spell as not learned, bypassing stored completion data and the portal threshold check entirely; (2) `getMappedPortalSpellInfo` now also checks `IsPlayerSpell` as a fallback since TWW M+ teleport spells may not register with `IsSpellKnown`; (3) `getKnownPortalSpellbookEntries` now uses the modern `C_SpellBook` API (TWW 11.0+) as the primary path and falls back to the deprecated `GetNumSpellTabs`/`GetSpellTabInfo` path only when the new API is unavailable.

## v3.4.21

### Mythic+
- Toon names in the My Toons sidebar list and Season pane toon dropdown now render in class color, matching the existing class coloring already present in Party Summary, Member Breakdown, and the leaderboard.
- Fixed a bug where live party member class colors were always missing from Party Summary and Member Breakdown: `UnitClass` returns `localizedClass, classFile, classID` in that order, and the previous code used `select(3, ...)` which retrieved the numeric class ID instead of the class file token needed for `RAID_CLASS_COLORS` lookup.
- The Mythic+ Party Planning tab now makes party keys more actionable: Party Summary rows show role, item level, keystone, and state together, normal click loads that member's key into the planner and focuses them for analysis, and Shift-click on eligible unguilded party members can send a guild invite directly from the table.
- Party Planning goal analysis was expanded around the selected carry target, with Party Gains, Score Goal, and Portal Goal views using the current party's held keys to recommend the best run while avoiding suggestions that sit too far above the tracked party item-level comfort cap.

### Maintenance
- Public note changes logged in the audit now also print a local purple notification in the chat frame, so GH3 users can spot note updates at a glance without opening the Maintenance pane.

### DataSync
- Reorganized the DataSync pane controls into two purpose-grouped rows: sync action buttons (Sync Roster, Sync Toons+Mythics, Sync Board, Sync Groups, Sync Federation, Sync All) on the first row, and peer management controls (Refresh Peers, peer dropdown, Probe Peer, Clear Conflicts) on the second row. Shortened the peer discovery label from the long descriptive sentence to a concise "Peer:" label to reduce visual crowding.

## v3.4.19
### BIS
- BIS loot handling now preserves protected Retail loot-chat payloads instead of forcing an early string conversion, which fixes the `attempt to perform string conversion on a secret string value` Lua error that could fire from `CHAT_MSG_LOOT` while GH3 was tainted.

## v3.4.18
### BIS
- Clicking the BIS navigation button now resets the pane back to your current toon, so you can jump back to yourself without manually reselecting your character after browsing another toon.
- BIS share JSON import no longer builds the full Encounter Journal index during import, which avoids the `script ran too long` failure that could occur on larger shared BIS payloads.

### Mythic+
- Party Planning and the Mythic+ leaderboard now color toon names by class, making party and leaderboard scans faster.

### Groups
- Group signup rows now color toon names by class more reliably, including signups resolved from My Toons or stored signup snapshots instead of only live guild-roster records.

## v3.4.17
### BIS
- Added a BIS Share JSON export for the selected toon and spec, including class/spec metadata, stat goals, and detailed item rows so guild websites and other GH3 players can round-trip the same payload back through Import.
- The BIS pane now replaces the old Export action with Share and adds Import support for both the new GH3 BIS JSON payload and the existing spreadsheet-style CSV row format.

## v3.4.16
### Mythic+
- Best-run Mythic+ labels now preserve live `++` and `+++` upgrade tiers from Blizzard completion data and reconstruct them from season timing data during refreshes, so My Toons and Party Planning no longer collapse timed runs back to a plain single `+`.

## v3.4.15
### BIS
- Loot Helper now normalizes Retail loot-chat payloads without indexing Blizzard's protected secret-string values, which fixes the `attempt to index local 'text' (a secret string value...)` Lua error that could fire from `CHAT_MSG_LOOT` while GH3 was tainted.

## v3.4.14
### Maintenance
- Recruiter invite session stats now count Invite Next and secure batch sends as soon as the invite action fires, so invited totals no longer depend on Blizzard echoing every per-player confirmation message.
- Recruiter pending-invite tracking now stays alive for batch sends even when some confirmation messages are missed, which lets joined counts continue to advance from later guild-roster updates instead of stalling at zero.

## v3.4.13
### Maintenance
- Recruiter whisper-only sends now honor the same repeat-contact cooldown as normal guild invites, so whisper mode can no longer bypass recent-contact suppression.
- Recruiter invite queue actions now refresh live cooldown suppression before selection and send time, which prevents stale scan rows from retrying recently contacted players.

## v3.4.12
### Maintenance
- Added Whisper-only mode to Invites/Recruitment

## v3.4.11

### Maintenance And Stability
- Audit departure records now backfill guild join dates from guild news, so leave and kick history can still show accurate guild tenure even when the member was not cached from a live roster pass.
- Audit logging now suppresses duplicate roster-fallback leave and kick entries when a recent system-message departure already exists, while still enriching the earlier system event with tenure details when available.
- Recruiter invite-result parsing now normalizes player names from Blizzard system messages more defensively, which hardens batch invite tracking against secret-string formatted message edge cases.
- Raid Bingo now freezes the leader-set prize pool into the active session state, so payouts stay consistent for the whole session and local prize-pool edits cannot change an in-progress game.

## v3.4.10

### Performance And Stability
- Non-essential GH3 processing now suspends while you are inside instances, so guild, recruiter, sync, Groups, GratsU, Raid Bingo, and other background maintenance work stay idle until you leave while Mythic+ and BIS continue running.
- Sync transport now pauses in instances and resumes after you leave, which reduces status and snapshot chatter during dungeon and raid play.
- Guild roster updates no longer rerun guild-news join-date refresh work on every normal roster burst, which reduces hitching in busy guild and city refresh windows.
- Mythic+ portal cooldown badges now refresh automatically after challenge completion, so timed-run cooldown resets do not require reopening the Mythic+ view.
- Active Mythic+ runs now skip bag-update-driven Mythic+ refresh work and defer BIS inventory scans until later, which reduces short pauses when enemies die and loot lands mid-run.
- BIS loot handling now reuses short-lived tradability results and bounds its track-info cache, which reduces repeated tooltip scans and memory growth during loot bursts.
- BIS-only loot processing no longer runs all-tradeable tradability checks for unrelated party loot or peer-offer traffic, which reduces party-size CPU spikes when enemies die.
- BIS-only peer-offer traffic now stays limited to instance content, which reduces open-world party kill spikes when nearby random creatures die and loot messages fire.
- BIS loot chat now keeps BIS-only open-world processing focused on self-loot, drops gold and other non-item loot lines before they enter the worker queue, keeps group-loot candidate caches until the roster actually changes, and avoids front-of-queue table shifting, which reduces kill-time CPU spikes during bursty party loot.
- Guild roster burst handling now waits slightly longer between heavy passes, reuses existing offline last-seen data for already-offline members instead of requerying Blizzard every burst, and skips recruiter roster follow-up when recruiter has no active work, which reduces zone-change and crowded-area hitches tied to roster churn.
- GratsU guild-roster welcome tracking now skips full delayed roster scans when welcome processing is off and throttles passive roster sweeps when it is on, which reduces another delayed post-roster hitch source around crowded-area and roster-burst gameplay.
- Audit officer-note tracking now avoids hashing every rostered member note on every guild-roster burst and only computes change fingerprints when an officer note actually differs, which reduces another new-feature cost inside large-guild roster processing.
- Recruiter's one-second scan watchdog now shuts itself down when recruiter is idle instead of ticking forever after a past scan, which removes another delayed background wake-up path.
- Added a lightweight `/gh3 perf` profiler so GH3 can capture slow events, delayed callbacks, roster passes, loot handling, and sync pumps directly in-game instead of relying on guesswork while tracking remaining CPU spikes.
- The built-in profiler now breaks guild-roster capture into internal member-pass, missing-pass, and accumulated hotspot timings, and the missing-member sweep no longer keeps churning already-left records on every burst, which makes the remaining roster hitch easier to isolate while trimming extra old-record work.
- Combat resume no longer forces a synchronous guild-roster capture or replays GratsU's login-time roster request path, which removes the duplicate post-combat roster spikes that were showing up in the new GH3 profiler.
- Guild roster capture now skips record-signature hashing for unchanged members, avoids local-toon officer-note join-date work for the full guild, removes a duplicate live-player refresh inside the same pass, and reuses one capture timestamp across the pass, which reduces the main `roster:capture-guild-roster` spike in large-guild refreshes.
- GratsU light resumes now restart presence and recheck welcome-tracking roster state after suspends so guild login welcomes keep firing, and officer-note audit tracking now short-circuits unchanged notes before rebuilding audit state, which cuts the `roster:capture-officer-meta` hotspot further.
- Officer-note audit tracking now also avoids re-normalizing the full maintenance settings payload for every guild member row and skips the maintenance call entirely when the raw officer note is unchanged, while `CHAT_MSG_ADDON` timing now breaks out GratsU, BIS, Mythics, recruiter, Raid Bingo, and transport handlers so future addon-message spikes can be pinned to one subsystem directly.
- Sync status responses now reuse a short-lived cached local status payload instead of rebuilding full table status checksums for every incoming status ping, `STATUS_REQ` no longer forces a live Mythic refresh inline, and transport profiling now exposes that status-response branch directly so addon-message spikes can be verified against the sync response path.
- GratsU roster welcome tracking now seeds already-offline members during first roster initialization and requests a fresh guild-roster snapshot on light resume, which restores welcome eligibility for offline-to-online guild logins after startup and suspended periods.
- Sync status caching now reuses very recent local status snapshots across short-lived table churn, roster record signatures are cached for status checksums, and `STATUS_REQ` avoids an extra full-envelope encode on fit checks, which reduces the remaining `transport:status-req` hitch during sync pings after roster activity.
- GratsU now normalizes coordinated peer names before picking a designated sender and treats guildmates first seen online after the startup snapshot as welcome-eligible, which restores missed welcome sends for members like beta when the initial roster snapshot was incomplete.
- Local sync-status payloads are now warmed proactively after roster work and before outgoing guild-status probes, while `STATUS_REQ` profiling now splits payload-build versus send time, which should move the remaining expensive status build out of the `CHAT_MSG_ADDON` hot path and make any leftover sync hitch source explicit.
- GratsU welcome sends now accept AFK or DND logins, broadcast successful welcome sends to peers, and use deterministic staggered fallback turns across active officer or GM clients, which prevents one stale designated sender from suppressing a guild login welcome entirely.
- Groups same-day reminder online-state rebuilds now track only members who are actually signed up for reminder-eligible runs instead of rescanning the full stored roster on every guild-roster update, which reduces the remaining `groups:handle-guild-roster-update` share of the normal roster pass.
- Guild roster capture now caches normalized member-name splits across repeated roster passes and reuses already-parsed numeric roster fields inside the hot loop, which trims another small slice from the remaining `roster:capture-member-pass` cost when the same guild roster keeps refreshing.
- Groups now caches the set of members who are eligible for same-day reminders until group data or the day changes, and guild-roster missing-pass tracking now iterates a cached current-guild member set after the first pass instead of rescanning the whole stored roster every burst, which reduces the remaining normal guild-roster update variance.
- Roster-sync diagnostics now preserve the actual cancel reason, mark stale last-sync summaries clearly, and distinguish suspend-driven sync cancellation from manual cancellation, while inbound sync task profiling now records per-operation `sync:task-*` scopes so an occasional slow task tick can be tied to the specific manifest, roster-journal, record, or snapshot work that ran.
- Active sync-session rows now show when GH3 is still waiting on the peer's first reply instead of displaying a misleading bare `active 0/0`, and no-reply outgoing sync requests now fail faster instead of sitting idle for several minutes.
- Peer presence updates now preserve the last known addon version, sync version, and capability data instead of wiping peers back to `GH3 0 | sync 0` after normal sync traffic, and the sync-session table now only shows truly active rows instead of retaining recently completed entries in the active list.
- Manual sync actions now distinguish tables that actually started from tables that were already matched, so `Sync All` and the per-table sync buttons explain when nothing else needed syncing instead of looking like they hung after the first active table.
- Guild-roster capture now avoids the expensive `pcall(debugprofilestop)` fast-path penalty inside the roster profiler helpers, only measures the per-member sub-breakdown when profiling is actually enabled, and uses a cheaper cached name-normalization path during guild-roster member passes, which should cut the remaining city-flying `roster:capture-member-pass` hitch further.
- Non-roster sync manifests now reuse cached local record signatures instead of rehashing unchanged Mythics, My Toons, Groups, and Board records on every manifest reply, and the Mythics pane now coalesces addon-message-driven redraws instead of forcing a full rerender for every party sync message while a group is forming.
- Mythic+ carry and portal-goal views now use the same best-run formatter as the season overview, so stored `++` and `+++` timed runs no longer collapse back to a plain single-`+` level label in those tabs.
- BIS drop-review queueing now throttles heavy prune and merge work during loot bursts, which reduces repeated micro-hitches when several enemies die close together.
- BIS group roster updates now avoid unnecessary drop-review row sorting when only group-presence checks are needed, which reduces extra work in parties and raids.


## v3.4.4

### Maintenance
- GH3 Helper Kick now includes a guild-member search picker so officers can queue a specific toon directly from the popup instead of waiting for the inactivity list alone.
- Kick search can optionally queue the selected toon's linked alts, and those manual search rows now clear on Apply, Run Scan, close, or reopen so accidental additions do not linger in the helper queue.
- GH3 Helper Kick Scope and Promote From, To, and Tenure controls now use the shared GH3 menu-button dropdown style for more consistent officer workflow controls.
- Maintenance now includes an Audit Logs tab with local guild history for joins, leaves, kicks, rank changes, public-note changes, and officer-note changes, plus per-event logging toggles, a color-settings popup for per-event text colors, max-row limits, and history-day retention controls.
- Audit log departure details now include guild tenure when GH3 has a stored join date, so leave and kick rows can show spans such as 5 months 3 days.
- Guild roster update bursts now coalesce before GH3 reruns roster capture, audit diffing, and maintenance cleanup scans, which reduces hitching during busy guild-roster refresh windows.
- Maintenance cleanup summaries and entry lists now reuse the latest scan results instead of rerunning a full roster cleanup pass on every pane render.

### BIS
- The BIS pane now includes a spec selector so the Gear Table and stat-goal summary cards can be switched between tracked specs without leaving the view.
- BIS Gear Select now auto-sets Source to Dungeon, Raid, or Tier when pasted item IDs or links resolve through Blizzard journal data, and falls back to Other when no supported journal source is found so manual overrides such as Crafted or PvP remain available.
- BIS Drops popup refresh work is now coalesced more aggressively, which reduces post-loot hitches when several review rows land together.
- BIS bag and equipment change handling now debounces inventory scans into a short delayed pass, which reduces repeated gear-scan hiccups during bursty item updates.

### UI And Stability
- GH3 now defers protected GH3 Helper batch-confirmation show, hide, and post-run refresh work until after combat, which reduces Blizzard blocked-action or addon-disabled popups during kick and promotion workflows.
- The main GH3 frame close path now avoids hiding secure-child views during combat, which reduces taint risk in protected views such as Mythic+ portal actions.
- Groups reminder online-state rebuilds now read stored roster ids directly instead of rebuilding the fully overlaid visible roster on every guild roster update, which fixes a recent script-ran-too-long error during guild refresh bursts.
- Maintenance cleanup scans now mark themselves dirty on guild-roster and roster-sync updates instead of rebuilding immediately in the background, and Groups reminder tracking now skips those roster passes entirely for non-officers.

## v3.4.1

### Maintenance
- Added a GH3 Helper button to the Blizzard Guild & Communities window so officers can launch batch kick and batch promotion workflows directly from the live guild roster.
- Added a Recruiter workflow under Maintenance > Invites with adaptive WHO scan sessions, candidate queueing, one-click batch invites, and recruiter settings for invite cooldowns, whispers, blacklist sync, and invite-history sync.
- Recruiter scan sessions now begin with one broad level-range WHO pass and queue narrower follow-up refinements when Blizzard caps the results, which improves coverage without falling back to fixed seed buckets.
- Recruiter WHO scans now enforce an 8-second pause between passes and use delayed WHO parsing, which reduces disconnect-risk spam and keeps the scan state aligned with Retail WHO timing.
- Recruiter batch invites now run through a secure Blizzard macro in one click and track per-name outcomes from system messages instead of counting raw invite API calls as success.
- Recruiter batch names that never return a follow-up system message are now marked as contacted and removed from the active queue so they are not immediately offered again.
- Shift-Click on a party member on the Mythics+ Party planner tab will send a guild invite

## v3.3.29

### BIS
- Loot Helper whisper and group-chat sends now sanitize unsupported WoW markup more aggressively, which fixes `SendChatMessage(): Invalid escape code in chat message` errors when item text contains link formatting or inline textures.
- Loot Helper now preserves real item hyperlinks in stored review rows and history while still sanitizing outgoing chat text, so popup validation and item tooltips keep working after the chat-safety fix.
- The BIS Drops popup no longer reuses stale saved coordinates unless popup pinning is enabled, and restored popup positions are clamped back onto the visible screen so the window cannot silently reopen off-screen.
- Preview rows created by `/gh3 loottest` now bypass real-item validation, which restores the BIS Drops popup for local preview testing even when the test rows use synthetic item links.

## v3.3.28

### BIS
- Added a collected-item sort option to the BIS Gear Table so collected rows can be pushed to the top or bottom instead of always staying in the default mixed order.

### Sync
- The DataSync pane now shows addon and sync protocol versions for both your local client and discovered peers, including a dedicated Version column in the peer table.
- Selected-peer status now makes newer-version detection visible in the UI instead of relying only on the one-time chat notice.
- Local addon version resolution now uses the actual loaded addon name and modern metadata lookup fallback paths, which fixes local status lines incorrectly showing `GH3 0` on current clients.
- Sync metadata parsing was hardened so local status rendering no longer trips Lua errors while reading the configured sync protocol version.

### UI
- GH3 menu buttons now use addon-owned popup menus instead of the Blizzard dropdown system in active flows such as BIS quick actions and the DataSync peer picker, which reduces taint and blocked-action popups.

## v3.3.26

### BIS
- BIS Drops now exposes popup-level `O` and `T` header actions so you can offer your own tradable loot to the party or start a trade without needing to click into a specific row first.
- Added a popup-level `D` dismiss-all action so the active BIS Drops queue can be cleared in one click when trading cleanup is finished.

### UI
- The BIS Drops header controls were compacted into `O T D P` buttons so the quick actions stay grouped together in the top-right corner.
- The BIS Drops top bar now keeps the quick-action cluster separate from the sort and filter controls, which fixes overlapping buttons in the popup header.
- BIS Drops helper text was shortened so it stays clear of the header controls and column labels.

## v3.3.25

### BIS
- BIS Loot Helper now preserves full cross-realm party and raid names during loot parsing, which prevents the same looter from being normalized to the wrong realm and showing up as separate review rows.
- Drop-review rows now normalize and merge duplicate logical offers more aggressively, so matching peer offers and local loot-detection rows collapse into a single active row instead of stacking duplicates for the same player and item.
- Manual and row-driven trade attempts now use a shared trade-start path, which keeps trade targeting behavior consistent across the popup.
- Trade attempts no longer force a separate retarget call before opening trade, which reduces Blizzard blocked-action or disabled-popup risk during successful loot-helper trades.

### UI
- The BIS Drops popup now includes a top-level `Trade` dropdown menu for quickly opening trade with any current party or raid member without needing a specific loot row.
- The earlier preselected top trade-target display was replaced with the direct dropdown flow so the popup header is clearer and requires fewer clicks.

## v3.3.24

### Mythic+
- Keystone pedestal slotting now prefers using the owned keystone item directly from the player's bags, which makes auto-slotting and Party Summary self-slot actions more reliable than relying on the challenge-mode slot API alone.
- Keystone helper slot attempts now refuse to fire during combat, which avoids protected-action failures and Blizzard blocked-action popups during encounters.

### UI
- Mythic+ portal tiles now show a stronger gold border pulse on click and keep that pulse active while the teleport cast is in progress.
- Portal tiles now display a small `Casting...` badge during active teleport casts so successful clicks are easier to confirm at a glance.

## v3.3.22

### Mythic+
- Keystone slotting now prefers live owned-keystone data and can auto-slot your current key when the dungeon keystone receptacle opens, while still guarding against invalid difficulty states.
- Mythic+ portal tiles resolve teleport spells more reliably from the GH3 view, including missing dungeon mappings such as Seat of the Triumvirate so unlocked portals cast from every tile in the rail.

### UI
- Party Planning `Target` and `Best Party Target` summary cards now use abbreviated dungeon labels so long dungeon names stay inside their tiles.
- Portal tiles now give more consistent visual feedback for ready and casting states when clicked from the Mythic+ portal rail.

## v3.3.19

### Mythic+
- Portal tiles now use explicit dungeon-to-teleport spell mapping and secure spell buttons, which makes unlocked portals cast more reliably from the GH3 Mythic+ view.
- Mythic+ portal badges now show cooldown state more consistently, including shared-lockout fallback behavior, and flash visually on click while the teleport cast is in progress.
- Added keystone pedestal helper behavior so clicking your own Party Summary keystone row can try to slot your current key automatically, and opening the dungeon keystone receptacle can now try to auto-slot your key as soon as the pedestal is ready.
- Party Planning now restores goal-driven recommendation controls for `Party Gains`, `Score Goal`, and `Portal Goal`, with mode-aware Member Breakdown output for the selected party member.
- Party goal recommendations now evaluate the party's currently held keys against score and portal goals and include a conservative item-level guardrail so GH3 avoids suggesting keys that are too high for the weakest tracked player in the group.
- My Toons season dungeon rows now show best runs as `10`, `10+`, `10++`, or `10+++` instead of always prefixing levels with `+`, and new completed runs can store upgrade-tier information from dungeon completion data.
- The Season Dungeons table now includes per-row projected totals, a bottom total row, and score-goal guidance that estimates what uniform key level would move the selected toon toward milestones such as `3000`.

### UI
- Added a `Role` column to the Mythic+ Party Summary table so grouped players are easier to scan beside their item level and keystone.
- Added `Delves` to the My Toons interest options.

## v3.3.18

### Sync
- Cross-guild roster sync now uses a roster-specific change journal with compact journal requests and repair fallback, which reduces normal sync traffic compared with repeated full roster snapshot exchanges.
- Roster sync now strips volatile or player-managed fields such as item level, spec, online state, notes, and profile-only metadata from sync signatures and journal entries, reducing false churn and conflict noise.
- Bidirectional roster sync no longer starts an unnecessary second outgoing roster push after the pull phase, which helps prevent deep queue buildup during large cross-guild sync sessions.
- Peer status now carries addon version, sync protocol version, and sync capability flags so GH3 can fall back more safely and block incompatible sync peers instead of attempting broken transfers.
- GH3 now shows a one-time chat notice when it sees a peer on a newer addon version.
- Status responses now chunk when needed so larger peer-status payloads still arrive correctly instead of silently dropping version metadata.

### Roster And Diagnostics
- Sync Diagnostics roster counts now align more closely with the active visible roster scope by ignoring deleted and left-guild records in roster status totals.
- Roster journal and repair logic now build guild-specific status comparisons before deciding whether to send no-op journal updates or a repair snapshot.

### Mythic+
- Party Summary item-level rows now propagate more reliably from grouped Mythic+ member data, including live current-character and grouped-player fallback paths.
- Mythic+ party data handling was further hardened around grouped key, score, and item-level refresh flows to avoid stale or missing Party Planning details.

## v3.3.17

### Mythic+
- Restored current-character Mythic+ key and score capture on the local client, including safer live refresh handling for the Party Planning view.
- Added broader party keystone interoperability so GH3 can listen for both GH3 `LRS` traffic and `LibKS` party broadcasts from addons such as BigWigs or KeyMaster.
- Hardened Mythic+ party message handling so failed compression or addon-message edge cases no longer fall back into blank Lua popups.
- Mythic+ party sync now pushes and re-requests grouped GH3 peer status more aggressively, which helps Party Planning refresh faster after group changes.
- Added Mythic+ debug report lines for OpenRaid, LibKS, and GH3 peer mythics status so party-data issues are easier to diagnose in-game.

### UI
- Added an `iLvl` column to the Mythic+ Party Summary table when GH3 has stored item level data for grouped players.

## v3.3.15

### BIS
- Loot Helper now filters non-gear items more aggressively by requiring real weapon or armor item classes before self-loot, GH3 peer offers, or manual group offers can enter the BIS Drops review queue.
- Tooltip and gear validation were tightened for `All Tradeable Loot`, which reduces false-positive rows from trade goods, reagents, mailbox retrievals, and other non-equippable loot.
- GH3 whisper and group-chat messages now sanitize unsupported inline atlas or texture tags from item text before calling Blizzard chat APIs, which fixes `SendChatMessage(): Invalid escape code in chat message` errors.
- Stored drop-review rows and loot-history entries now normalize item text at queue time so popup rows, history, and follow-up actions reuse the same cleaned item text.
- Compact and full BIS Drops popup layouts now remember separate saved locations, so each mode can reopen where it was last placed instead of sharing one position.

### UI
- Fixed BIS Drops row layout so wrapped claimant and roll summaries grow row height dynamically instead of overlapping the next line or the next row.
- Updated the BIS Drops title-bar compact toggle to use arrow-style GH3 buttons beside the close button instead of the older `+` and `-` labels.
- BIS Drops popup position saving now persists the current popup location immediately when it is moved, and restore logic now reopens compact and full layouts from their own saved anchors.

## v3.3.12

### BIS
- Added a grouped BIS drop-review popup that batches burst loot events for a short delay so multiple tradable matches can land in the same GH3 review table instead of opening one popup per drop.
- Added a `Loot` button beside the BIS export controls that opens a dedicated Loot Helper configuration window for queue mode, popup behavior, sound, and trade-complete whisper settings.
- BIS Loot Helper can now run in `BIS Only` mode or a best-effort `All Tradeable Loot` mode that queues self-looted equippable gear for quick group-offer follow-up when Blizzard does not expose a perfect tradable-only signal.
- `All Tradeable Loot` now also surfaces GH3 peer offers from the current party or raid, so addon users can coordinate more than just their own self-looted rows.
- BIS drop review rows now support direct `W`, `O`, `T`, and `D` actions for whispering the holder, offering the item to the current party or raid, attempting a trade, or dismissing the row without action.
- Manual `O` offers now also broadcast to other GH3 users in the current group so their addon can open a matching review row instead of relying only on party-chat text.
- BIS drop review rows now support direct `C` and `R` actions for structured GH3 claims and synced 1-100 loot rolls, with roll results appearing in popup rows for GH3 users while still posting to group chat.
- BIS drop-review messages were polished so GH3 sends clearer whisper and group-chat text when requesting tradable loot or announcing that a tradable item is available.
- GH3 now tracks trade-window completion and can whisper the other player with a success summary after a completed trade closes.
- Self-offer rows now use the `T` action as a trade-target dropdown so you can choose an active group member without dedicating row space to a separate picker control.
- Loot Helper now keeps a bounded recent history log instead of an unbounded audit trail, which limits stored entries by both age and count to keep the saved data small.
- Loot Helper now lets you choose between strict tooltip-based tradable detection and a broader best-effort party-loot review mode when using `All Tradeable Loot`.
- Loot Helper can now pin the BIS Drops popup to a remembered position and optionally keep active rows until you dismiss them, which makes end-of-run trading cleanup easier.
- Active drop-review rows now keep full names and stay visible when the related player leaves group, so GH3 can still help you whisper them later if you want to re-form the party and trade.
- BIS self-alert suppression now ignores item-upgrade-vendor interactions so upgrading an already-owned BIS item does not fire a fake self-drop whisper.

### UI
- Added a GH3-styled BIS Drops popup with grouped review rows, row badges, left-group and roll-status badges, filter and sort controls, action tooltips, hyperlink item hover tooltips, a draggable minimized top-two preview mode that strips row action chrome while keeping a restore control, pin-to-position support, claimant and roll summaries with winner emphasis, hover details, a dismiss action, and an open sound cue so tradable drop follow-up is easier to manage during active runs.
- Added local preview slash commands so the Loot Helper UI can be opened and populated with representative test rows without joining a party or running dungeon or raid content.

## v3.3.11

### Maintenance
- Maintenance now paginates the action queue at 50 rows per page instead of building the full stale-member list at once, which prevents the pane from locking up when large cleanup queues are present.
- Fixed Maintenance queue rules so `Missing From Roster` entries do not appear before the configured stale threshold. Recent misses from incomplete or transient roster captures are no longer treated as immediate cleanup candidates.
- Guild roster capture now requires two consecutive missed home-guild roster passes before a stored member is marked as having left the guild, which reduces false `Missing From Roster` waves caused by partial Blizzard roster updates.

### BIS
- BIS Gear Select now uses the selected toon and selected Loot Spec more consistently when opening journal-backed item pickers and previewing item metadata.
- Journal loot filtering was hardened so GH3 reapplies the requested class and spec filter while walking Encounter Journal tiers, difficulties, instances, and encounters instead of falling back to stale journal state.

### UI
- The My Toons `Export All` button was moved to the top-right of the Member Pane header while still exporting the full My Toons CSV instead of the currently selected toon.

## v3.3.10

### BIS
- BIS Gear Select is now the primary in-game editing workflow, with journal-backed item picking, button-style Spec and Loot Spec selectors, and cleaner per-row source selection instead of the older dropdown-heavy form.
- Added explicit `Tier` and `PvP` BIS source support. Tier rows now pull from Blizzard journal and loot-set data more reliably, while PvP rows can be tracked directly by Blizzard item ID or Wowhead URL when the Encounter Journal does not expose the vendor stock.
- BIS help copy and Stat Goals guidance were rewritten to match the current Gear Select workflow, including raw stat-goal entry and clearer Tier and PvP instructions.
- The BIS Gear Table now shows Instance and Boss columns, renames State to Status, and uses row hover text for notes instead of the older lookup-confidence badge messaging.
- Fixed a BIS editor regression where saving or previewing rows could wipe existing targets when blank preview values were returned.

### UI And Accessibility
- Converted the BIS Gear Table filters, Roster column picker, Groups add-member controls, My Toons editor selectors, Mythic+ selectors, and Settings font pickers to the shared GH3 menu-button style so the major panes use a more consistent control pattern.

## v3.3.9

### BIS
- Added per-spec BIS stat goals with raw-value tracking so Crit, Haste, Mastery, Versatility, Avoidance, Speed, Dodge, and Leech can be compared against saved targets instead of percentage-only displays.
- BIS stat cards now show cleaner current, goal, and delta values in a compact layout, and the main BIS action buttons were moved into the open header space above the summary frame.
- Stat Goals now opens a direct entry popup with one field per tracked stat so Murlok or guide values can be typed in directly instead of pasted through the text-import workflow.
- Live current-toon stat snapshots are now saved locally per toon and spec and reused later for offline review in My Toons views.
- Fixed a BIS service load failure caused by the raw stat-helper conversion so the addon no longer errors during startup with `BISService` missing.

### UI And Stability
- Shared BIS export and import popups now anchor their text areas below the wrapped help copy instead of using a fixed offset, which fixes the overlapping text and textbox layout in the Simple, Template, and Import dialogs.
- The BIS Stat Goals popup now reopens cleanly without anchor-family errors and uses the shared GH3 input helpers correctly.

## v3.3.8

### BIS
- BIS loot alerts now suppress duplicate whispers for the same item within the alert window, which avoids separate self-loot and party-loot lines both whispering about the same drop.
- BIS upgrade-track detection now reads the actual upgrade tooltip line more strictly so Champion items no longer get misclassified as Mythic or Heroic just because those words appear elsewhere in the tooltip.
- BIS loot chat processing now runs through a small queued worker instead of doing the full match pass directly on each loot event, which reduces frame hitches during boss and trash loot bursts.
- Group loot recipient matching is now cached briefly between loot lines so repeated BIS checks do less repeated party-name parsing during active dungeon pulls.
- Added the Profession Skinning to the dropdown.  Was an oversight.

### Stability
- My Toons and roster ownership checks now use a cached main-character lookup instead of repeatedly bouncing through full player-record refresh work, which fixes the `script ran too long` error seen during combat-resume and login flows.

## v3.3.7

### Mythic+
- Party Planning now supports carry-target analysis in Member Breakdown so you can click a party member, then switch between Party Gains, Score Goal, and Key Goal views without leaving the planner.
- Score Goal mode now recommends the lowest helpful key for each dungeon toward carry milestones such as 2000, 2500, and 3000, while Key Goal mode highlights each player's current best until they meet shared goals like +10, +12, or +15.
- Party keystone rows are now one-click planner shortcuts that load the selected member's current dungeon and key level directly into the target controls.

### BIS
- BIS imports now accept stronger itemId-backed workflows, including full Template itemId columns, raw Blizzard item IDs, Wowhead item URLs, and WoW item links pasted into the itemId field.
- BIS import parsing was hardened for spreadsheet pastes so flattened `slot / itemName / itemId` rows, preserved row numbers, and collapsed-column recovery behave more consistently during review.
- BIS imports now always show an import review report that separates supplied-ID, journal-resolved, client-cache, name-only, duplicate, and unresolved rows so players can verify lookup confidence before trusting alerts.
- BIS debug output now includes alert lookup mode, extracted itemId details, client-cache name resolution, and journal match metadata so unresolved imports are easier to diagnose.
- BIS gear-table and tracked-target rows now show hover lookup confidence labels such as `ID+Src`, `ID`, `Name`, and `Review`, and the shared table tooltip path was fixed so those hover details do not error.

### Sync And Stability
- Whisper transport now rejects invalid whisper peers before attempting addon sends, which prevents malformed target names from reaching the sync layer.

## v3.3.6

### Activity Planner
- Activity Planner schedules now store creator timezone metadata alongside the absolute event timestamp so each viewer sees the event in their own local time while still preserving the creator's intended wall-clock schedule.
- Recurring activities now generate future occurrences from the creator's saved schedule hour, minute, weekdays, and timezone offset instead of relying only on the original raw timestamp.
- Activity details now show local time, creator time, and creator timezone context, and the editor explains that schedule fields are entered in the current user's local timezone.

### Mythic+
- Party Planning now keeps the portal rail visible while moving planning controls into the upper-right header area so key, score-goal, and key-goal workflows stay available without replacing the seasonal portal view.
- Member Breakdown was rebuilt into a dungeon matrix with party members on rows and abbreviated current-season dungeons on columns.
- The Member Breakdown matrix now changes by mode: Party Gains shows estimated on-time score gain, Score Goal shows the lowest helpful key toward the selected milestone, and Key Goal shows each player's current best until the selected threshold is met.

### BIS
- Gear Table and slot Details now include direct `?` help buttons that jump to the BIS Help Center article.
- BIS help copy was shortened to match the actual spreadsheet import workflow and reduce clutter in the pane.
- Tracked Targets now uses a wider item column and compact priority labels so item names clip less aggressively and the priority column stays readable.
- BIS source fallback now recognizes tier-family items that share a possessive name prefix, which fixes raid-tier pieces such as `Devouring Reaver's ...` being left as `Other` after import.

### UI And Accessibility
- Settings now includes `Skurri` as an additional pane font option for both pane titles and pane text.

### Performance And Stability
- Opening the BIS pane no longer forces a fresh Encounter Journal build during normal view rendering, which reduces hitching when switching into the BIS view.
- BIS loot matching now uses a cached lookup index instead of walking the full tracked list on every loot message.
- BIS bag and equipment refreshes now avoid immediate inventory rescans during combat and defer that work until normal updates resume.

## v3.3.3

### Mythic+
- Party Planning now shows party keystones as selectable rows so the target dungeon and level can be loaded directly from the group's tracked keys.
- Mythic+ score gain estimates were updated to use a more realistic current-season score model instead of a flat per-level gain guess.
- The old placeholder Mythic+ Info tab was replaced with a current-season leaderboard view, and the Season tab was simplified so it focuses on season coverage instead of repeating the My Toons layout.

### BIS
- BIS drop notices now use whisper-style alerts for the important tracked loot and tradable-share cases so they are easier to notice than general chat messages.
- Incoming tradable BIS claims now whisper the looter directly, and outgoing share requests still whisper the player who picked up the item.
- BIS Help and import guidance were simplified around the actual Template workflow: click Template, paste into a spreadsheet, replace the sample rows, then import the finished list.
- BIS import guidance now mentions the Excel Text to Columns comma-delimited step for cases where pasted template rows land in a single column.
- BIS Simple and Template popups now show real example item rows in the copy area, and the popup text area was fixed so the sample rows stay visible above the dark background.
- BIS slot and target rows now use track-band colors so below-Champion, Champion, Heroic, Mythic, optional, and missing states are easier to read at a glance.
- BIS journal autofill now uses broader imported-name matching so externally sourced item names have a better chance of resolving to Blizzard item IDs and source metadata.

### UI And Accessibility
- Settings now includes pane-only font style selectors for pane titles and pane text so players can switch to a more readable font family without changing layout-sensitive font sizes.
- The pane font setting applies to content-page text styling only and does not change the sidebar menu, menu buttons, or the main GH3 frame title.
- Help was rebuilt into a KB-style Help Center with left-side topic navigation and process-focused articles for setup, BIS, Mythic+, sync, linked guilds, and admin workflows.

## v3.3.1

### Mythic+
- Added a dedicated Mythic+ view with My Toons, Party Planning, Season, and Info tabs.
- Current-character Mythic+ capture now tracks live rating, current keystone, season dungeon progress, and portal unlock visibility when Blizzard data is available.
- Party Planning now summarizes synced group Mythic+ records, highlights missing dungeon coverage, and gives a faster planning view for building runs.
- Season and portal views now keep no-data rows visible so launch-week and low-data characters are still readable instead of appearing empty.

### BIS
- Added a full BIS tracker with per-toon, per-spec slot lists and support for multiple targets per slot.
- BIS imports now accept CSV, tab-separated Excel paste, and simplified slot-plus-item templates, with duplicate skipping and broad slot/header aliases.
- Owned and equipped BIS states are now detected automatically for the current character, including upgrade-track awareness and live refresh on bag or equipment changes.
- BIS source autofill now does best-effort raid and dungeon matching from Blizzard's Encounter Journal, with fallback handling for tier-set style item families.
- Added BIS loot opportunity alerts, group-share addon messages for tradable drops, and best-effort Great Vault BIS offer detection.
- The BIS gear table now highlights slot rows by status: green for primary BIS equipped, blue for an equipped alternative target, and yellow when no tracked BIS target is equipped.

### UI And Stability
- Added BIS import, export, template, confirm, and debug flows to the shared popup styling path so they render consistently with the rest of GH3.
- Shared table rendering now supports row-level color overrides, which is used by BIS status rows and keeps selection styling readable.
- Added a Settings menu with feature toggles for Mythic+, BIS, Raid Bingo, and Groups so menu items and their related background processing can be disabled for troubleshooting or personal preference.
- DataSync now warns when feature toggles have disabled automatic Mythic+ or Groups activity so reduced background traffic is visible instead of looking broken.

## v3.2.7

### Sync
- Roster sync now uses table status checks plus manifest-first delta exchange, which cuts unnecessary sync size and avoids falling back to full snapshot sync during normal updates.
- Large changed-record requests are now chunked as record requests instead of downgrading to full snapshot transfer.
- Roster sync diagnostics now capture chunk counts, byte totals, and requested-record counts so late-night sync tests are easier to verify.
- Sync Diagnostics now includes a copyable Last Roster Sync report popup for manifest, record-request, record-response, and snapshot totals.
- Roster sync sessions now wait longer before timing out, which helps slow cross-guild roster syncs finish cleanly.
- Incoming sync sessions now appear in the active session list on the receiving client, so both peers can see when a sync is in progress.
- Peers that answer real sync traffic now clear stale probe-timeout state correctly, and timed-out peers can be removed from the sync list with a Remove Peer action.

### Roster And Profiles
- Officer Notes were removed from roster and My Toons storage, UI, and sync payloads, and existing saved data is scrubbed during normal refresh paths.
- My Toons now supports delete-with-sync tombstones, automatic undelete on relog, and 90-day tombstone cleanup for retired characters.
- The My Toons Save button was moved to the member-pane header for faster profile editing.

### Exports
- Added Guild Roster Export All for officers and guild masters, with CSV-friendly output that includes offline review data and human-readable timestamps.
- Added My Toons Export All for every player, with CSV-friendly output for offline profile review.
- Added Groups Export Party/Raid for officers and guild masters to export the live members currently in the player's party or raid for attendance and promotion tracking.
- Added Groups Export Events for officers and guild masters to export GH3 event records separately from live party or raid attendance.

### UI And Stability
- Export and diagnostics popup windows now open in front of the main addon window instead of behind it.
- Popup close buttons and actions now use the shared GH3 button styling path so labels render correctly.

## v3.2.6

### Sync
- Manual sync now performs a true two-way exchange so pushed data reaches the other player without requiring them to sync back first.
- Probe Peer now includes discovered online home-guild addon users, so home-guild syncing no longer depends on being grouped.
- Sync All now prioritizes smaller shared tables before roster data and skips federation sync when no approved linked guild is present.
- Conflict handling now prefers the newest real data for My Toons, Board, Groups, and cross-guild roster records instead of creating avoidable manual conflicts.
- Roster conflict detection now ignores volatile fields such as online status and last-seen timing, reducing false conflicts.
- Conflict rows now include a Compare button so local and remote values can be inspected and copied for troubleshooting.

### Raid Bingo
- Prize pool is now locked to the active Raid Bingo session so players cannot locally change payouts during a live game.
- Raid Bingo state sync now carries the locked prize pool through start, reset, state updates, and end-of-game results.
- Only the leader can post Raid Bingo winners and payout messages.
- Help text was rewritten with simpler leader and player steps and now points users to the disclaimer section.

### Roster And Profiles
- Birthday changes now apply across all of your saved My Toon entries instead of needing to be entered per toon.
- BattleTag changes now apply across all of your saved My Toon entries as well.
- My Toons class-based dropdowns now reflect Midnight combat profile changes for classes such as Demon Hunter and Hunter, including hybrid profile support where applicable.
- Roster sync metadata no longer bumps on online-only refresh changes, which reduces unnecessary sync churn.

### UI And Stability
- Fixed the member and groups calendar year-jump behavior.
- Added clearer conflict detail capture for new sync conflicts to make remaining edge cases easier to diagnose.