File Details
EmberLedger_v2.3.3.zip
- R
- Jun 29, 2026
- 489.21 KB
- 136
- 12.0.7+2
- Retail
File Name
EmberLedger_v2.3.3.zip
Supported Versions
- 12.0.7
- 12.0.5
- 12.0.1
v2.3.3
Session Tracking
- Fixed cancelled/expired auction return mail being counted as session material gains when Trusted Mail rewards were disabled.
- Added an ignored mail attachment cache for auction/blocked mail so returned items are consumed from bag-diff tracking instead of being treated as new loot.
- Trusted Mail rewards remain optional and continue to apply only to narrow profession reward mail.
v2.3.2
Session Tracking
- Fixed false material gains after zone/area transitions such as leaving Arcantina.
- Session tracking now re-primes the bag baseline during world and zone transitions so existing inventory is not counted as newly gained session loot.
v2.3.1
Maintenance
- Improved Session LDB tooltip handling for disabled Session Tracking and empty sessions.
- Routed Session LDB tooltip labels through the localization helper where practical.
- Cleaned up minor stale refactor comments.
- Replaced remaining legacy debug helper references with the current debug helper.
v2.3.0
Session Tracking
- Added an optional LibDataBroker session data feed named EmberLedger Session for ElvUI, Titan Panel, Bazooka, ChocolateBar, and similar LDB displays.
- Session LDB text shows current gold/hour and session total.
- Session LDB tooltip shows session time, total, rate, raw gold, gold spent, pricing source, and top session items.
- Left-clicking the Session LDB feed opens the Session window; right-clicking opens Options.
v2.2.2
Profession Cooldowns
- Fixed shared charged cooldowns so recipe-specific locks no longer force the entire shared pool to display as 0/max charges.
- Improved shared charge normalization so the CD column reflects available shared charges while tooltip timing details still preserve recipe lock information.
v2.2.1
Session Tracking
- Changed Auto item value source priority to prefer TSM first, then Auctionator, then fallback.
- Updated the Item Value Source tooltip to match the new Auto priority.
v2.2.0
Session Tracking
- Added an Item Value Source option for Session Tracking.
- Users can now choose Auto, TSM, Auctionator, or Fallback only for session item value pricing.
- Auto preserves the existing behavior by using Auctionator when available and falling back to TSM when needed.
v2.1.10
Bug Fixes
- Added combat-safe deferred hiding for the main tracker and Session window to prevent
ADDON_ACTION_BLOCKEDerrors from protectedHide()calls during combat. - Routed launcher, minimap, and close-button hide paths through shared safe window helpers.
- Preserved Session window and main tracker preferences while deferring the actual hide until combat ends.
- Ensured the Session window always stops dragging before combat-save guards run.
v2.1.9
Localization
- Added community localization updates.
- Special thanks to ZamestoTV for the localization contribution.
- Replaced the localization table with the community-contributed localization update.
- Added Russian localization coverage while preserving English fallback strings for untranslated locales.
v2.1.8
Bug Fixes
- Added combat-safe window positioning guards for the main tracker, Options panel, and Session window.
- Deferred protected window re-anchoring until combat ends to prevent
ADDON_ACTION_BLOCKEDerrors fromClearAllPoints(). - Preserved launcher/minimap window restoration behavior while avoiding protected frame movement during combat.
v2.1.7
Fixed
- Prevented cancelled, expired, or returned auction mail attachments from being counted as trusted session material gains.
- Added auction invoice detection to trusted mail reward filtering so returned auction items do not inflate session value.
v2.1.6
Fixed
- Reworked launcher/minimap window toggling so enabled windows are restored when one preferred window is hidden.
- Fixed the Session window remaining hidden after closing it while the main tracker was still visible.
- Preserved Session Tracking as an enabled module state while allowing the Session window to be closed and restored normally.
Cleanup
- Centralized Session window show/hide/toggle handling through shared helpers.
- Removed obsolete Session window suppress-flag cleanup code from the session history window close path.
- Added Session window show/hide helpers to module verification.
v2.1.5
Fixed
- Fixed the Session window close button marking the window preference as hidden.
- Restored launcher and minimap toggle recovery for the Session window after it has been closed.
- Kept Session Tracking enabled while allowing the Session window to be closed and reopened normally.
v2.1.4
Fixed
- Fixed
/el sessionfailing to restore the Session window after it had been closed. - Added defensive Session window creation/show handling so the command no longer fails silently if the frame is missing.
v2.1.3
Upgrade Migration and Audit Cleanup
- Added a one-time spaced-realm character key migration so legacy keys such as
Name-Area 52are moved to the canonicalName-Area52format. - Migrated related profession, cooldown, concentration, Moxie, mulch, hidden, and pinned data when spaced-realm character keys are corrected.
- Improved duplicate-row candidate selection so an empty current-character record does not win over an older populated record.
- Added Tracking Rows, Options Panel, and Onboarding function checks to module initialization validation.
- Fixed stale amber/gold fallback theme values in row and panel helpers.
- Removed the remaining duplicate theme-helper declaration in
UI.lua. - Clamped onboarding panel frame-level increments and centralized the onboarding body text.
- Kept session history retention at 30 days.
v2.1.2
Character Key Hardening
- Added a canonical character key helper so character name and realm keys are built consistently.
- Normalized realm spacing for saved character keys while preserving display realm text.
- Improved duplicate-row debug output with canonical identity details.
- Kept the v2.1.1 non-destructive duplicate-row guard.
- Consolidated duplicated UI helper code through the shared styling module.
- Removed accidental global theme helper declarations from the options and UI modules.
- Routed visible main-window layout refreshes through the coalesced update path where safe.
- No saved character data is deleted or merged.
v2.1.1
Defensive Duplicate Row Guard
- Added a non-destructive character row dedupe guard for legacy or inconsistent saved data.
- Character rows are now canonicalized by normalized name and realm before display.
- When duplicate row candidates resolve to the same character, EmberLedger shows the preferred canonical row and suppresses the duplicate display row.
- Added debug logging for suppressed duplicate row candidates.
- No saved character data is deleted or merged.
- No SavedVariables schema, cooldown, session, or tracking logic changes.
v2.1.0
Architecture Completion Release
- Completed the planned 2.x modular architecture pass.
- Confirmed Options Panel, Tracking Rows, and Onboarding are now extracted into dedicated modules.
- Preserved the finalized blue-metal row highlight and muted Moxie styling from the final cleanup pass.
- Marks the transition from refactor-focused development back to regular polish, bug fixes, and future feature work.
- No SavedVariables, cooldown, session, tracking logic, or visual design behavior changes.
v2.0.31
Final Cleanup Pass
- Centralized tracker row highlight and hover palette values through the shared styling module.
- Updated stale post-extraction comments in UI, Tracking Rows, and Options Panel code.
- Removed misleading refactor-prep wording now that the module extractions are complete.
- No SavedVariables, cooldown, session, tracking logic, or visual design behavior changes.
v2.0.30
Onboarding Stabilization
- Stabilized the extracted onboarding module after moving it out of UI.lua.
- Added a dedicated onboarding panel refresh helper for text and theme color consistency.
- Hardened Escape-key registration for the onboarding panel.
- Replaced the close button glyph with an ASCII-safe label to avoid font or encoding issues.
- Added missing localization entries for onboarding text and buttons.
- No SavedVariables, cooldown, session, tracking, or visual design behavior changes.
v2.0.29
Onboarding Module Extraction
- Added
Modules/Onboarding.lua. - Moved onboarding panel creation, manual show behavior, and first-run scheduling out of
UI.lua. - Kept slash command routing, onboarding SavedVariables helpers, and OptionsPanel's Show Welcome button behavior unchanged.
- No visual, cooldown, session, tracking, or SavedVariables behavior changes.
v2.0.28
Onboarding Architecture Audit
- Added an in-code onboarding extraction map to UI.lua before moving onboarding logic into a separate module.
- Identified the onboarding methods that should move together: frame construction, show logic, combat deferral, and first-run scheduling.
- Documented which Core and OptionsPanel responsibilities should stay outside the first onboarding extraction pass.
- No behavior, visual design, SavedVariables schema, cooldown, session, or tracking logic changes.
v2.0.27
Tracking Row Stabilization
- Stabilized the post-extraction tracking-row boundary between
UI.luaandModules/TrackingRows.lua. - Centralized tracking-row height constants through shared UI constants so layout and rendering stay synchronized.
- Updated stale tracking-row extraction comments to reflect the current module ownership.
- Added a defensive debug warning if the TrackingRows module is unavailable.
- No visual, tracking, cooldown, session, or SavedVariables behavior changes.
v2.0.26
Tracking Row Visual Restoration
- Restored the blue-metal current-character row highlight after the TrackingRows extraction accidentally reverted it to the older amber/gold treatment.
- Fixed TrackingRows theme color lookups so Moxie and other value/muted text use the current EmberLedger theme colors instead of fallback legacy gold/grey values.
- No tracking logic, cooldown behavior, session data, or SavedVariables schema changes.
v2.0.25
TrackingRows Extraction
- Added
Modules/TrackingRows.luafor tracker row creation, hover/highlight state, column anchoring, and row cell rendering. - Kept main tracker frame sizing, header/footer layout, session windows, onboarding, and launcher/window toggles in
UI.lua. - Updated TOC load order so tracking row helpers load before the main UI.
- No SavedVariables schema changes.
v2.0.24
Tracking Row Architecture Audit
- Added an in-code tracking row extraction map to UI.lua before moving row logic into a separate module.
- Identified the row helpers, column layout helpers, row lifecycle methods, and row-rendering dependencies that must move together.
- Documented which main panel, session, onboarding, and launcher responsibilities should remain in UI.lua during the first tracking-row extraction pass.
- No behavior, visual design, SavedVariables schema, cooldown, or session logic changes.
v2.0.23
Tooltip and Text Polish
- Consolidated shared charged profession cooldown tooltip rows into one shared-pool summary line.
- Preserved the compact gold CD readiness marker and existing cooldown calculation behavior.
- Replaced the Moxie cell bullet separator with a plain ASCII separator to avoid mojibake on clients that render the bullet incorrectly.
- No SavedVariables schema, cooldown logic, or session logic changes.
v2.0.22
UI.lua Cleanup After Options Extraction
- Removed duplicated options-panel helper code left behind in UI.lua after the OptionsPanel.lua extraction.
- Removed duplicate reset confirmation methods from UI.lua so OptionsPanel.lua owns options and reset dialog behavior.
- Removed unused settings dropdown, checkbox, slider, and tooltip helper copies from UI.lua.
- Kept shared tracker, onboarding, session-history, and theme helpers in UI.lua.
- No behavior, SavedVariables schema, cooldown, session, or visual design changes.
v2.0.21
Post-Refactor Stabilization
- Fixed a tracking column toggle error after the Options Panel extraction.
- Restored local tracking column definitions needed by OptionsPanel.lua.
- Added a defensive fallback around tracking column iteration.
v2.0.20
Post-Refactor Stabilization
- Fixed a session history load error caused by a UI constant not being localized after the Options Panel extraction.
- Restored session history row creation and scrolling after the refactor.
- Kept the Options Panel extraction intact with no feature changes or SavedVariables schema changes.
v2.0.19
Options Panel Refactor Stabilization
- Fixed a load error in the extracted Options Panel module caused by a stale UI-local reference.
- Kept the Options Panel extraction intact while restoring clean addon loading.
- No feature changes, SavedVariables changes, or UI redesigns.
v2.0.18
Options Panel Extraction
- Moved options panel construction, runtime methods, Blizzard Settings integration, and UI settings reset behavior into
Modules/OptionsPanel.lua. - Updated TOC load order so the extracted Options Panel module loads before the main UI file.
- Kept shared visual helper functions in
UI.luabecause they are still used by the tracker, launcher, session window, and onboarding. - No behavior, saved data, or settings schema changes.
v2.0.17
Options Panel Refactor Prep
- Grouped and documented options-panel helper, construction, runtime, host-integration, and reset sections inside UI.lua.
- Added refactor-prep comments identifying the dependencies that must move with the options panel.
- Preserved current options behavior, saved settings behavior, cooldown logic, session logic, and UI layout.
- No file split was performed in this version.
v2.0.16
Low-Priority Cleanup
- Clarified profile command main-window preservation logic.
- Routed several safe direct tracker refreshes through the update request system.
- Cleared the spell-name lookup cache when recipe match caches are reset.
- Localized several visible toggle/status messages.
- Added comments around cooldown cache invalidation behavior.
v2.0.15
Diagnostics and Documentation
- Fixed unsupported-event diagnostic logging in safe event registration so debug mode can report skipped unsupported events correctly.
- Corrected the v2.0.14 changelog formatting.
v2.0.14
Update Refresh Coalescing
- Added update refresh coalescing to reduce repeated main tracker redraws during bursty events such as batch crafting.
- Non-immediate UI update requests are now collapsed into a single short trailing refresh window instead of allowing repeated refresh work to stack.
- Kept cooldown logic, session tracking data, SavedVariables schema, and displayed values unchanged.
v2.0.13
Profile Command Window Preservation
- Fixed
/el profile offand related profile commands so they preserve the main tracker visibility state. - Added a small restore guard around profile commands to prevent performance testing from accidentally toggling the main window/module state.
- No cooldown logic, saved tracking data, or profiling measurements were changed.
v2.0.12
- Added short-lived profession cooldown display caches for entry and summary lookups.
- Reduced repeated cooldown entry rebuilding during row sorting, row refreshes, launcher summaries, and tooltip preparation.
- Cache invalidation is tied to cooldown data changes, recipe-list cache resets, cooldown visibility changes, and display-scope changes.
- Kept cooldown calculation logic, saved data, and SavedVariables schema unchanged.
v2.0.11
- Added recipe-match caching for profession cooldown scans to reduce repeated full recipe-list scans during crafting.
- Invalidated cooldown recipe caches only when profession data/source events indicate the recipe list may have changed.
- Added main-window recovery hardening so restoring the tracker recenters it if saved coordinates place it off-screen.
- Added /el recover, /el restore window, and /el reset main as recovery commands for a missing main tracker window.
- Kept profiling labels from v2.0.10 for continued cooldown performance testing.
v2.0.10
Performance Diagnostics
- Added focused cooldown profiling labels for crafting/event refreshes, queued cooldown scans, shared cooldown grouping, cooldown record building, and tooltip/display entry generation.
- This diagnostic build helps isolate any remaining crafting CPU spikes without changing cooldown logic, saved data, or SavedVariables schema.
v2.0.9
- Added crafting performance safeguards to reduce repeated refresh work during batch crafting.
- Debounced session bag-diff processing from repeated BAG_UPDATE_DELAYED events.
- Reduced profession cooldown craft refreshes to a single settled refresh after crafting.
- Added a short cooldown-refresh interval guard to prevent repeated profession cooldown scans from stacking.
- No cooldown data, tracking data, or SavedVariables schema changes.
v2.0.8
- Strengthened the current-character row highlight with a warmer amber/gold treatment and a clearer left accent.
- Added a subtle row-hover overlay for better table readability and row interaction feedback.
- Added a Maintenance reset button for restoring UI settings, thresholds, window positions, launcher, minimap, and action-bar settings to defaults without deleting tracked character or session data.
v2.0.7
- Improved the CD column ready marker so it uses a larger gold texture instead of an inline font texture.
- Updated row tooltip section headers to use a clearer muted blue for better visual separation.
v2.0.6
- Replaced the CD ready Unicode checkmark with a built-in gold checkbox-check texture so WoW clients display an actual checkmark instead of a missing-glyph rectangle.
- Kept the CD column behavior unchanged: actionable cooldowns show the compact ready marker, timers still show when cooldowns are unavailable.
v2.0.5
- Changed the compact CD column ready state from a raw ready count to a single checkmark for clearer cooldown scanning.
- Colored the CD ready checkmark gold/yellow so it is visually distinct from the adjacent green Imbued Mulch ready state.
- Kept cooldown timers, tooltip details, launcher summaries, and saved cooldown data unchanged.
v2.0.4
- Removed registration for unsupported
TRADE_SKILL_UPDATEevent on current Retail clients. - Added guarded event registration so unsupported optional events cannot stop addon loading.
- Kept cooldown settled-refresh hardening on supported profession events.
v2.0.3
- Hardened shared charged profession cooldown normalization by trusting future recipe-lock timing over transient spell-charge Ready states.
- Added TRADE_SKILL_UPDATE handling with a short settled refresh to improve cooldown accuracy after profession UI updates and shared cooldown craft events.
- Bumped SavedVariables schema for cooldown timing normalization cleanup.
v2.0.2
Audit Fixes and Release Hardening
- Fixed unescaped fallback texture paths that could prevent Lua files from loading.
- Added missing UI and tooltip compatibility wrappers required by module verification.
- Updated module refresh iteration to preserve module registration order while keeping a safe fallback.
- Updated minimap and LibDataBroker fallback icons to use the bundled EmberLedger logo when available.
- Removed hidden legacy controls from the Modules options page so it only builds true top-level module toggles.
- Clarified character-data removal wording to note that account-wide session history is kept.
v2.0.1
Audit Cleanup and Asset Optimization
- Reduced bundled EmberLedger logo assets to 256x256 for lighter in-game memory usage.
- Removed obsolete visual theme SavedVariables left over from staged visual testing.
- Added tracked profession coverage to the CD column header tooltip.
- Removed unused legacy color locals and cleaned stale fallback color values.
- Standardized Moxie threshold fallback usage around the shared default constant.
v2.0.0
Visual Refresh and Interface Polish
- Audited and tightened main tracker column spacing to reduce horizontal footprint without cutting off common values.
- Reworked EmberLedger around a single Dark visual style with black, charcoal, silver, and muted white UI tones.
- Added bundled EmberLedger logo artwork for Options, main tracker, and session window headers.
- Refreshed the Options window with a darker header, stronger framing, cleaner sidebar styling, and improved section spacing.
- Polished the main tracker header, table spacing, row highlights, footer/action bar area, and resize grip alignment.
- Improved tooltip, minimap tooltip, launcher, session window, and session history styling to better match the Dark visual identity.
- Removed the temporary Steel and Gold theme selector from the v2.0 development passes.
- Preserved existing tracking behavior, cooldown logic, SavedVariables, and session history behavior.
v1.31.6
Tracked Cooldown Dropdown Polish
- Fixed the tracked cooldown dropdown label so partial selections display Custom instead of the last toggled cooldown name.
- Updated the tracked cooldown dropdown summary states to show All cooldowns tracked, Custom, None, or No cooldowns in scope.
- Preserved independent checkbox toggling behavior inside the dropdown.
v1.31.5
Shared Cooldown Tooltip Clarity
- Fixed charged cooldown tooltip formatting so both next recharge and full recharge are shown when full recharge data is available.
- Preserved cases where next and full recharge are identical or nearly identical, which can happen with shared charged cooldown buckets.
v1.31.4
Cooldown Tooltip and Dropdown Fixes
- Fixed charged cooldown tooltip fallback handling so active shared cooldown entries consistently show their next recharge timer instead of an incomplete charge-only state.
- Fixed tracked cooldown dropdown checkbox refresh behavior so toggling one cooldown no longer visually clears every checkbox in the open menu.
v1.31.3
Shared Charged Cooldown Timer Fallback
- Fixed charged cooldown records that could display Unknown when a recipe cooldown was active but charge timing data was incomplete.
- Added recipe cooldown ready-time fallback handling for charged cooldown display and tooltip state.
- Preserved the intended shared cooldown behavior where 1/2 usable charges shows ready and 0/2 charges shows the active timer.
v1.31.2
Shared Charged Cooldown Accuracy
- Corrected charged recipe cooldown handling so a positive recipe cooldown from the profession window overrides stale spell-charge data.
- Fixed shared charged cooldowns that could still show 2/2 Ready while both charges were actually recovering.
- Preserved 1/2 charge behavior so one genuinely available charge still appears ready in the CD column.
v1.31.1
Shared Cooldown Charge Display Fix
- Corrected shared charged cooldown display when multiple charges are recovering.
- Added charge reconciliation from saved recharge timers so stale Blizzard charge data cannot show Ready when no usable charges remain.
- Preserved the intended 1/2 charge behavior so the CD column still shows ready when one charge is actually available.
v1.31.0
Cooldown Visibility and Launcher Summary
- Corrected Dawnweave Bolt and Duskweave Bolt cooldown metadata so they are treated as The War Within cooldowns instead of Midnight cooldowns.
- Added the next profession cooldown ready state to the launcher, with an option to show or hide the Next CD line.
- Added a Show All Cooldowns button to restore all hidden profession cooldown definitions without deleting saved data.
- Added supported profession coverage to the CD column header tooltip.
- Confirmed Green Thumb remains available on the action bar and in Action Bar button visibility options, including the Midnight spell variant.
- Preserved 30-day session history retention.
v1.30.8
Shared Cooldown Charge Display Fix
- Fixed shared charged cooldown display so 1/2 available charges shows as ready/actionable in the CD column.
- Kept active recharge timing available in tooltips without allowing the recharge timer to override an available charge.
- Preserved 0/2 charge behavior so fully spent shared cooldown buckets still show the active cooldown timer.
v1.30.7
Shared Cooldown Display Fix
- Fixed shared charged cooldown display logic so an active shared lock cannot appear Ready from stale charge data.
- Preserved the intended 1/2 charge behavior where an available charge still displays as Ready when no shared lock is active.
- Kept recharge timing available for tooltip detail without overriding true locked states.
v1.30.6
Cooldown Charge Display
- Updated the CD column so charged profession cooldowns with one available charge still display as ready.
- Kept recharge timing available in tooltips while preventing 1/2 charge states from appearing as unavailable in the compact column.
- Updated cooldown sorting so ready charged cooldowns sort as ready before recovering cooldowns.
v1.30.5
Threshold Default and Final Polish
- Updated the documented global concentration threshold default to 900 across fresh defaults, fallback logic, settings display, and minimap summary logic.
- Added a conservative migration that moves the old untouched 360 default to 900 while preserving custom threshold values.
- Routed remaining profession cooldown tooltip labels through localization helpers.
- Kept session history retention fixed at 30 days as intended.
- Removed small duplicate helper entries left over from prior cleanup passes.
v1.30.4
Final Audit Polish
- Removed the remaining local tracking tooltip bridge from UI.lua and routed row hover directly through the tooltip module compatibility wrapper.
- Extracted tracking header refresh handling from RefreshPanel() into a small helper for easier maintenance.
- Extracted tracking empty-state handling from RefreshPanel() into a small helper without changing empty-state behavior.
- Added a clearer module header comment to Modules/Tooltips.lua.
- Verified the previous now/currentTime naming concern had no remaining currentTime usage to standardize.
- Preserved the existing changelog history rather than pruning historical entries.
v1.30.3
Tooltip and Cooldown Polish
- Added a maintenance comment explaining why the login cooldown guard is armed at module load time.
- Added a cooldown display priority comment so timer, ready, unknown, and untracked states are easier to follow.
- Changed the cooldown duration fallback to use compact formatted time instead of raw seconds.
- Added a shared Moxie threshold default constant and reused it in tooltip fallback logic.
- Routed remaining row tooltip labels and relative-time strings through localization helpers.
- Added a defensive row key guard to tooltip display handling.
- Removed the remaining thin Action Bar SafeNumber wrapper and routed calls directly through EL:SafeNumber().
- Guarded concentration full-time tooltip calls for consistency with other protected helper usage.
v1.30.2
Tooltip and Cooldown Cleanup
- Extracted main dashboard row tooltip handling from UI.lua into Modules/Tooltips.lua.
- Added a lightweight tooltip module registration and Core module lookup helper for cleaner module access.
- Kept profession cooldown tooltip content routed through the existing ProfessionCooldowns module to avoid behavior changes.
- Renamed and documented shared cooldown bucket helper logic in ProfessionCooldowns.lua for clarity.
- Moved login cooldown guard handling into an explicit module helper.
- Cleaned stale comments and standardized additional tooltip numeric handling through shared SafeNumber calls.
v1.30.1
Profession Cooldown Cleanup
- Refactored shared profession cooldown bucket timing into a small internal helper to reduce duplicated lock, charge, and future-timer handling.
- Kept shared charged cooldown behavior unchanged while making login-preserved cooldown state easier to follow.
- Removed the remaining concentration module numeric wrapper in favor of direct shared SafeNumber calls.
- Cleaned minor cooldown definition indentation and maintenance comments without changing user-facing behavior.
v1.30.0
Maintenance and Cooldown Hardening
- Added a short login-time cooldown guard so confirmed saved future cooldown timers are not overwritten by transient ready states during the first scan after login.
- Consolidated module numeric sanitizing through the shared Core.lua SafeNumber helper and removed local fallback conversion implementations.
- Centralized profession cooldown display-state formatting so CD summaries and tooltip rows consume the same canonical ready, charge, next-recharge, and full-recharge values.
- Improved shared charged cooldown tooltip wording to clearly show available charges, next recharge, and full recharge timing.
- Reduced redundant cooldown preservation work by only reapplying saved future state when existing records actually contain future timers.
- Standardized the Imbued Mulch delayed refresh path with a pending guard and fallback refresh behavior.
- Performed minor cooldown comment cleanup while preserving saved cooldown data, tracked-cooldown visibility, expansion-scope filtering, and shared bucket behavior.
v1.29.21
Bug Fixes
- Fixed shared charged cooldowns reverting to ready after full logout/login when saved cooldown data exists but profession identity has not finished repopulating.
- Preserved confirmed future shared cooldown timers during login-time refreshes instead of replacing them with transient ready states.
- Re-applied saved future recipe locks before shared cooldown grouping so the CD column and tooltip stay aligned until the profession window supplies a fresh scan.
v1.29.20
Shared Cooldown Persistence Fix
- Fixed shared profession cooldown groups reverting to a ready state after a full logout/login while a member recipe cooldown was still active.
- Added persisted shared recipe lock timing for grouped cooldowns so login-time scans cannot overwrite active member cooldowns with transient ready states.
- Preserved existing shared charge handling, tracked-cooldown visibility, expansion scope, and saved cooldown data.
v1.29.19
Profession Cooldown Persistence Fix
- Fixed shared charged cooldown recipes appearing fully ready after a full logout/login while an individual recipe cooldown was still active.
- Added per-recipe cooldown lock preservation for shared cooldown groups, so a ready shared charge no longer overwrites a specific recipe cooldown timer.
- The CD column now prefers the next active cooldown timer when some tracked cooldowns are ready and others are still recovering.
- Preserved shared charge grouping, expansion scope, tracked-cooldown visibility, and saved cooldown data.
v1.29.18
Shared Cooldown Login Preservation Fix
- Fixed shared charged profession cooldowns still reverting to Ready on login/reload when another cooldown member held the confirmed future recharge timer.
- Preserves the entire shared cooldown bucket state across login/reload instead of checking only the individual cooldown row.
- No saved cooldown data, expansion-scope settings, or tracked-cooldown visibility settings are deleted.
v1.29.17
Profession Cooldown Login-State Hardening
- Fixed shared charged profession cooldowns briefly resetting to a ready state after login or reload when a confirmed future recharge timer already exists.
- Preserved confirmed shared cooldown timing until it expires naturally or a later profession scan supplies a replacement state.
- No saved cooldown data, tracked-cooldown visibility settings, or expansion-scope settings are deleted.
v1.29.16
Charged Cooldown Full Recharge Correction
- Fixed full-recharge display for shared charged profession cooldowns so it uses the longest known active charge timer instead of adding recharge timers together.
- Preserved next-charge timing as the shortest known active charge timer.
- Kept shared cooldown grouping, expansion scope, and tracked-cooldown visibility behavior unchanged.
v1.29.15
Charged Cooldown Recharge Display
- Added full-recharge timing for multi-charge profession cooldowns when more than one charge is recovering.
- Cooldown tooltips can now show both the next available charge and the time until all charges are restored.
- Improved inferred shared cooldown timing so using the final charge preserves the earlier next-charge timer and separately tracks full recharge time.
- Preserved existing shared cooldown grouping, expansion scope, and tracked-cooldown visibility behavior.
v1.29.14
Shared Charged Cooldown Handling
- Fixed shared charged cooldowns being treated as unavailable when one charge remained.
- Added separate next-charge ready time tracking so charged cooldown tooltips can show the available charge count and the next recharge timer.
- Preserved inferred shared cooldown state after craft-result refreshes so Blizzard API timing gaps do not overwrite the known charge state with Unknown.
- No saved cooldown data, tracked-cooldown visibility settings, or expansion-scope settings are deleted.
v1.29.13
Cooldown Craft Inference
- Added craft-result inference for Midnight Alchemy shared transmutes so EmberLedger can store a reliable cooldown timer even when Blizzard recipe cooldown APIs do not expose one immediately.
- Bouquet of Herbs, Box of Rocks, and School of Gems now use their shared 18-hour recharge bucket after a tracked craft result.
- Preserved shared cooldown grouping, expansion scope, and tracked-cooldown visibility settings.
- No saved cooldown data is deleted.
v1.29.12
Cooldown Recipe Matching Fix
- Fixed Midnight transmute cooldown tooltip rows still showing Unknown when the profession recipe name includes a prefix such as "Transmute:".
- Added recipe-name alias matching for shared Alchemy material transmutes so EmberLedger can find the active recipe ID and cooldown timer reliably.
- Preserved shared cooldown grouping, expansion scope, and tracked-cooldown visibility settings.
- No saved cooldown data is deleted.
v1.29.11
Cooldown Tooltip Timer Fix
- Fixed shared profession cooldown tooltip rows continuing to show Unknown when the Blizzard profession UI exposed the actual timer under a recipe ID different from EmberLedger's curated spell ID.
- Added recipe-list matching for curated cooldown definitions while the profession window is open, so
C_TradeSkillUI.GetRecipeCooldown()can be queried against the active recipe ID. - Preserved shared cooldown grouping, cooldown visibility filters, expansion scope filters, and saved cooldown data.
v1.29.10
Cooldown Timer Source Hardening
- Expanded profession cooldown timing detection to try recipe IDs, craft spell IDs, schematic IDs, and recipe-info cooldown fields.
- Fixed cases where shared cooldown rows could still show
Unknowneven while the Blizzard profession UI had a valid cooldown timer available. - Preserved shared cooldown availability handling and saved cooldown data.
v1.29.9
Profession Cooldown Tooltip Fix
- Fixed shared profession cooldown tooltip rows continuing to show
Unknownwhen the Blizzard trade skill UI exposes a valid recipe cooldown timer. - Added recipe cooldown remaining-time reads as a higher-priority timing source while profession data is available.
- Fixed shared cooldown grouping on tooltip/display copies so grouped cooldown rows use the same canonical timing source as the CD column.
- Preserved existing shared cooldown availability behavior and saved cooldown data.
v1.29.8
Shared Cooldown Tooltip Countdown Fix
- Fixed shared cooldown tooltip rows still showing
Unknownwhen a shared cooldown bucket had a valid future ready time. - Re-applied shared cooldown grouping to display copies so tooltips, summaries, and CD column state use the same canonical bucket timing.
- Preserved existing shared cooldown availability behavior and saved cooldown data.
v1.29.7
Profession Cooldown Tooltip Fix
- Fixed cooldown tooltip rows showing
Unknownwhen a stored shared cooldown ready time was available. - Recovered older or transient cooldown records that were marked unknown but still contained reliable ready-time data.
- Kept the CD column and tooltip aligned without adding stale-state behavior.
- No saved cooldown data, cooldown visibility settings, or expansion-scope settings are deleted.
v1.29.6
Shared Cooldown Tooltip State Fix
- Fixed shared profession cooldown tooltip rows showing ready text when the shared cooldown bucket is still unavailable.
- Shared cooldown groups now treat a future bucket ready time as authoritative, keeping tooltip state aligned with the CD column.
- Improved charged cooldown tooltip formatting so countdowns take priority when the entry is not currently ready.
- No saved cooldown data, cooldown visibility settings, or expansion-scope settings are deleted.
v1.29.5
Shared Cooldown State Fixes
- Added a second delayed cooldown refresh after profession cooldown crafts so shared charged cooldown buckets can settle while the Blizzard Trade Skill window remains open.
- Hardened shared charged cooldown grouping so future bucket ready times are preserved when transient charge data is reported immediately after crafting.
- Preserved the shared cooldown tooltip countdown behavior from v1.29.4.
- No saved cooldown data, cooldown visibility settings, or expansion-scope settings are deleted.
v1.29.4
Bug Fixes
- Fixed shared profession cooldown tooltip countdowns so grouped cooldowns continue displaying their remaining time.
- Shared cooldown entries now preserve stored ready-time data during charged-cooldown normalization.
- No saved cooldown data, cooldown visibility settings, or expansion-scope settings are deleted.
v1.29.3
Bug Fixes
- Fixed shared profession cooldown handling for Midnight Alchemy material transmutes.
- Bouquet of Herbs, Box of Rocks, and School of Gems now share the same tracked cooldown/charge state.
- Fixed charged cooldown normalization so partially available shared cooldowns are not incorrectly treated as unavailable.
- No saved cooldown data, cooldown visibility settings, or expansion-scope settings are deleted.
v1.29.2
Cooldown Refresh and Tooltip Accuracy
- Fixed profession cooldown refresh timing after completing a tracked cooldown craft while the Blizzard Trade Skill window remains open.
- Added absolute ready-time tracking for profession cooldown records so tooltip countdowns continue updating from stored ready timestamps.
- Added compatibility handling for older saved cooldown records that only stored remaining time.
- Updated cooldown tooltips to use
Unknownonly when EmberLedger has no reliable ready-time data. - Added
Last scannedinformation to profession cooldown tooltips. - No cooldown data is deleted and no per-character cooldown settings were added.
v1.29.1
Main Window Options Layout Polish
- Tightened Main Window options section spacing so the new cooldown controls fit cleanly.
- Changed the Tracked Cooldowns list to a compact three-column layout.
- Shortened cooldown helper text while preserving the same meaning.
- No cooldown filtering, saved data, tracking logic, or user-facing behavior changed.
v1.29.0
Cooldown Visibility Controls
- Added global Tracked Cooldowns checkboxes under Expansion Scope.
- Hidden cooldowns are ignored in the CD column, row tooltips, summaries, sorting, and cooldown-ready counts.
- Cooldown visibility is account-wide, not per-character, to avoid configuration bloat.
- Expansion Scope is applied first, then individual cooldown visibility is applied.
- Hidden cooldown settings do not delete saved cooldown data, and newly added cooldown definitions remain visible by default.
v1.28.9
Hardening and Event Coalescing
- Added pending guards to profession cooldown event refreshes so noisy event bursts coalesce into a single delayed scan.
- Added pending guards to concentration and Moxie refresh timers for noisy trade skill and currency event bursts.
- Wrapped trusted mail header/count reads in protected calls for consistency with the addon-wide defensive API pattern.
- No tracking behavior, saved data, cooldown filtering, or user-facing options changed.
v1.28.8
Safety Hardening
- Hardened fallback SafeNumber helpers in ActionBar and ProfessionCooldowns.
- Removed unsafe empty-string comparisons from module fallback number parsing.
- No tracking behavior, cooldown filtering, saved data, or user-facing options changed.
EmberLedger Changelog
v1.28.7
Protected Value and Cooldown Debounce Fixes
- Fixed a BugSack error in SafeNumber caused by comparing protected or secret string values returned by Blizzard APIs.
- Removed the empty-string comparison from SafeNumber and now lets tonumber() safely reject nonnumeric strings.
- Increased the profession cooldown event debounce from 0.2s to 0.5s to reduce refresh pressure during noisy SPELLS_CHANGED and SKILL_LINES_CHANGED bursts.
- No saved data, cooldown filtering, tracking behavior, or user-facing options were changed.
v1.28.6
Maintenance Cache and Expansion Helper Fixes
- Fixed stale cooldown-column cache data when removing a character's saved data.
- Updated previous-expansion helper logic to respect the shared PREVIOUS_EXPANSION_ID constant.
- Routed cooldown Current + Previous filtering through the shared previous-expansion helper instead of subtracting from the current expansion ID inline.
- Added comments for forward-looking expansion helper functions.
- Changed module failure logging to use debug output so hidden module errors remain available when Debug Mode is enabled without showing normal users extra chat messages.
- No tracking behavior, saved cooldown data, user-facing options, or display-scope defaults were changed.
v1.28.5
Attention Only Threshold Fix
- Fixed a Lua error that could occur when enabling Attention Only view.
- Corrected the per-profession concentration threshold lookup so the threshold value is converted safely without passing the override flag into tonumber().
- No cooldown filtering, saved data, or display-scope behavior was changed.
v1.28.4
Midnight Cooldown Scope Fix
- Fixed Current Expansion Only cooldown filtering so the curated Midnight profession cooldowns are treated as current-expansion cooldowns.
- Updated the shared expansion defaults so Midnight is current and The War Within is previous for cooldown display-scope logic.
- Current + Previous and All Cooldowns behavior remains unchanged.
- No cooldown scanning, saved data, or user-facing option behavior was changed.
v1.28.3
Cooldown Column Visibility Fix
- Fixed a regression where the Show CD column setting could be blocked by cooldown display-scope auto-hide logic.
- The CD column now respects the explicit Show CD column toggle consistently.
- No cooldown scanning, saved data, expansion metadata, or scope-filter behavior was changed.
v1.28.2
Future-Proofing and Maintenance Polish
- Centralized expansion IDs, names, and profession-name prefixes in Core.lua for easier next-expansion maintenance.
- Updated profession cooldown scope filtering to use the shared current-expansion helper instead of local expansion fallback logic.
- Added a cooldown maintenance checklist for future expansion updates.
- Added debug-only validation helpers for curated profession cooldown definitions.
- Added a maintenance note around zone-gated Action Bar utility actions.
- No tracking behavior, saved data format, cooldown scanning, or user-facing options were changed.
v1.28.1
Cooldown Options Polish
- Renamed the cooldown filter label from Display scope to Expansion Scope for clearer meaning.
- Replaced the cooldown scope button group with a cleaner dropdown-style control.
- Updated the cooldown scope description and tooltip wording to better explain what the setting affects.
- No cooldown tracking, scanning, saved data, or expansion-filter behavior was changed.
v1.28.0
Cooldown Display Scope & Column Flexibility
- Added expansion-aware profession cooldown display filtering with Current, Current + Previous, and All cooldown scope options.
- Tagged curated profession cooldown definitions with expansion metadata so future expansion cooldowns can be added without rewriting display logic.
- Defaulted cooldown display scope to Current Expansion Only for both new and existing users to reduce older-cooldown clutter.
- Cooldown filtering affects display, summaries, sorting, tooltips, and column auto-hide checks without deleting saved cooldown data or changing scan behavior.
- Confirmed the Imbued Mulch column remains user-toggleable from Main Window column visibility and added clearer tooltip guidance for that control.
- No slash command expansion or new tracking systems were added.
v1.27.2
Action Bar Tooltip Correction
- Restored the main tracker Restore button tooltip.
- Removed the redundant secure Logout action button tooltip from the Action Bar.
- Left the main-window Options button and resize grip tooltips removed.
- No tracking logic, slash commands, or core feature systems were changed.
v1.27.1
Main Window Tooltip & Empty-State Polish
- Corrected the Character column tooltip so row interactions are described accurately.
- Tightened main-window empty-state wording for first scans and visible-data refresh guidance.
- Removed unnecessary main-window tooltips from the Options button and resize grip.
- No tracking logic, slash commands, or core feature systems were changed.
v1.27.0
UI Clarity Polish
- Added clearer main-window column header tooltips with per-column explanations while preserving existing sort behavior.
- Improved main-window empty-state messages for first scans, hidden characters, Attention Only, and refresh guidance.
- Added Options helper text when Session Tracking or Action Bar controls are dimmed because the module is disabled.
- Added Appearance convenience buttons to match launcher/session opacity to the main window or restore default opacity values.
- No tracking logic, slash commands, or core feature systems were changed.
v1.26.2
Threshold Consistency & Tooltip Polish
- Updated concentration max-quantity fallback handling to use the normalized global concentration threshold helper.
- Added shared tooltips to per-profession concentration threshold sliders explaining that 0 uses the global threshold.
- No slash command behavior changes.
v1.26.1
Onboarding & Threshold Consistency Fixes
- Refined first-time onboarding wording for clearer Trade Skill window setup instructions.
- Registered the onboarding panel with Escape-key dismissal and marks onboarding as seen when the panel is hidden.
- Fixed Attention Only empty-state and auto-height checks so per-profession concentration threshold overrides are respected consistently.
- Removed unnecessary refresh updates for hidden legacy module controls.
v1.26.0
First-Time Onboarding
- Added a setup-focused first-time welcome guide for new EmberLedger installs.
- The guide explains that users need to log into each profession character and open that character's profession window once so EmberLedger can scan profession data.
- Added
/el welcomeand/el onboardingto reopen the getting started guide. - Added a Maintenance button to reopen the welcome guide from Options.
- The guide only appears automatically for installs that did not already have tracked profession data, so existing users should not be interrupted.
v1.25.5
Options Placement Cleanup
- Moved Attention Only view from General into Main Window options.
- Kept tracker display behavior controls grouped with Main Window settings.
- No gameplay or SavedVariables behavior changes.
v1.25.4
Options Navigation Cleanup
- Moved Performance options into the Maintenance page.
- Removed the separate Performance sidebar tab.
- Moved Thresholds below Main Window in the Options sidebar so threshold overrides read more like a main-window subsection.
- Kept the Modules page limited to true top-level system toggles.
v1.25.3
Options Scope Cleanup
- Tightened the Modules Options page to show only true top-level systems: Main tracker, Session tracking, Action Bar, Launcher, and Minimap button.
- Kept session-window behavior tied to Session tracking rather than exposing it as a separate module toggle.
- Left column visibility controls on the Main Window page where they belong.
- Limited profession threshold overrides to crafting professions that actually use concentration.
- Excluded Herbalism, Mining, and Skinning from concentration threshold overrides.
v1.25.2
Options Modularity Fix
- Fixed the Options sidebar so the Modules and Thresholds pages are visible and selectable.
- Consolidated the main module and feature switches onto the Modules page.
- Added Session window and Next forecast column controls to the Modules page.
- Moved duplicate Session Tracking and Action Bar module switches out of the Performance page.
- Kept the Performance page focused on history limits and performance tuning.
- No SavedVariables reset is required.
v1.25.0
Modularity & UI Polish
- Added a Modules page in Options to collect the main feature visibility and processing toggles.
- Added optional per-profession concentration threshold overrides.
- Added Thresholds options for global concentration, Moxie, and profession-specific concentration alerts.
- Updated concentration ready/soon counts, Attention Only, forecasts, and row highlighting to respect profession overrides.
- Improved row tooltip interaction hints.
- Kept display presets deferred to avoid overriding custom user layouts.
v1.24.5
Final Tracker Profiling Pass
- Added deeper RefreshPanel profiling markers for character row generation, row filtering, and profession lookup.
- Added SortDashboardRows profiling markers for row wrapping, sorting, and row unwrapping.
- Increased profile report output to show more profiling sections in one report.
- Kept this as a diagnostics-only pass with no intended gameplay behavior changes.
v1.24.4
Large-Roster Tracker Optimization
- Cached character row lists until character identity data or display-name settings require rebuilding.
- Reused cached display-name text and lowercase sort keys during tracker refreshes.
- Reused the dashboard sort cache during row updates to avoid rebuilding profession slots and Moxie entries twice per refresh.
- Optimized Attention Only filtering to reuse already-computed concentration and mulch readiness.
- Added per-character mulch readiness results to the shared mulch status pass.
- Kept visible tracker behavior unchanged while reducing repeated work for large alt rosters.
v1.24.3
Tracker Refresh Profiling
- Added deeper optional profiling markers inside the main tracker refresh path.
- Split tracker profiling into lookup, header, row filtering, sorting, layout preparation, row update, and empty-state/autosize stages.
- Fixed duplicate rows in
/el profile reportoutput. - Increased profile report output so tracker sub-stages are easier to compare.
- No gameplay behavior changes.
v1.24.2
Profile Timer Fix
- Switched optional performance profiling from
GetTime()deltas to WoW'sdebugprofilestop()timer. - Fixed profile reports showing call counts with
0.000mstotals during idle and active tests. - Added
/el profile dumpas an alias for/el profile report. - Updated README profiling notes.
v1.24.1
Performance Diagnostics
- Added optional in-game performance profiling commands.
- Added
/el profile on,/el profile off,/el profile report, and/el profile reset. - Added timing markers for the main update loop, tracker refresh, launcher refresh, session refresh, Action Bar refresh, profession cooldown scanning, bag counting, and bag-diff processing.
- Slow sections are reported only when profiling is enabled, with throttling to avoid chat spam.
- No normal gameplay behavior is changed when profiling is disabled.
v1.24.0
Modularity & Discoverability
- Added /el help command.
- README updated to emphasize modular design and optional systems.
- Reduced decorative icon usage in documentation.
v1.23.7
Locale-Independent Concentration Matching
- Stored parent profession IDs with newly scanned concentration records where Blizzard provides them.
- Matched concentration records against both child profession IDs and parent/base profession IDs.
- Improved P1/P2 profession abbreviations for localized clients by preferring parent profession IDs when available.
- Improved profession icon and Moxie lookup behavior for concentration fallback slots.
- Preserved the v1.23.6 unmatched-concentration rescue fallback for older saved records and untested locale edge cases.
v1.23.6
Locale-Safe Concentration Display
- Improved profession/concentration matching for non-English clients.
- Added a locale-safe fallback so concentration records remain visible even when Blizzard reports profession names or expansion profession labels differently by locale.
- Improved profession name cleanup for expansion names that appear after the profession name, such as localized "profession of Khaz Algar" style labels.
- Preserved existing profession dashboard behavior while prioritizing concentration-bearing slots in the visible P1/P2 columns.
v1.23.5
Defensive Hardening Pass
- Hardened profession cooldown scan confidence so uncertain API states no longer overwrite known cooldown data as unlearned.
- Preserved previous profession cooldown records when spell or recipe APIs are temporarily unavailable.
- Removed raw numeric conversion fallbacks from concentration and mulch API-facing paths.
- Wrapped additional profession and tradeskill API calls with protected guards.
- Added guarded profession API wrappers for current profession identity scans.
- Hardened session bag and item scanning with protected container and item API wrappers.
- Added throttled debug output for noisy session diagnostics.
- Avoided unnecessary spell-button attribute refreshes for disabled Action Bar buttons.
v1.23.4
Secret Number Cooldown Safety
- Hardened shared numeric sanitization against protected/secret number values that can survive conversion but fail later arithmetic.
- Added an extra profession cooldown sanitization pass before charge comparisons and remaining-time calculations.
- Fixed a Lua error path in profession cooldown refresh when Blizzard returns protected charge values.
- Updated the README AI-assisted development disclosure wording.
v1.23.3
Final Micro-Polish Pass
- Updated remaining UI fallback version strings for consistency.
- Sorted profession expansion-prefix matching by longest prefix first to make future expansion entries safer.
- Reduced unnecessary Action Bar availability checks for disabled buttons.
- Avoided repeated secure spell-button attribute writes when the resolved macro text has not changed.
- Added dirty-checking for Action Bar cooldown text updates.
v1.23.2
Cleanup Polish
- Removed unused colored-text cache scaffolding while preserving the simple styling helper for future use.
- Removed an unused UI wrapper around the colored-text helper.
- Clarified the profession expansion-prefix maintenance comment to describe the actual substring ordering rule.
v1.23.1
Localization & Micro-Optimization Polish
- Precomputed lowercase character display names during dashboard sorting to reduce repeated string allocations in sort comparisons.
- Added local global-function upvalues in ActionBar and UI paths used by layout and drag handlers.
- Added lightweight caching for repeated colored text formatting.
- Replaced the copy-session popup's global EmberLedger lookup with the shared addon namespace.
- Optimized profession-name expansion prefix stripping while preserving cached results.
- Routed session bag table headers and the tracker summary strip through the localization helper.
- Applied dirty-checking to the tracker summary strip text.
v1.23.0
Localization Framework
- Added a lightweight
Localization.luaframework with English fallback strings. - Added shared
EL:T()localization lookup and formatting helper for future translations. - Loaded localization immediately after Core so modules and UI files can use the shared table safely.
- Routed slash-command help, tracker headers, key empty-state messages, tracker buttons, and several confirmation dialogs through the localization helper.
- Added README documentation explaining the localization framework and gradual translation approach.
v1.22.10
Sort Safety & Diagnostic Cleanup
- Tightened concentration estimation fallback handling so missing timestamps are normalized before SafeNumber validation.
- Added a safe Core fallback and guarded sort-column availability helper for tracker sort paths before the full UI column rules are available.
- Expanded module self-check coverage to include key Core and UI layout helpers.
- Added targeted debug visibility around session dedupe queueing, bag-diff processing, and ignored money deltas during transfer UI states.
- Added a top-level Core load-order comment and a cooldown spell-ID maintenance note for future patch reviews.
- Updated README wording for guarded sort checks and post-load diagnostics.
v1.22.9
Defensive Maintenance Pass
- Hardened concentration and Moxie currency reads with guarded API calls and shared SafeNumber handling.
- Hardened Imbued Mulch item count, usability, cooldown, and access checks against protected or unavailable API values.
- Expanded module initialization checks so core helper functions are included in the post-load self-check.
- Improved module initialization warnings with the first detected issue and clearer debug guidance.
- Added a TOC load-order comment to document why Core, resource modules, UI helpers, UI, and ActionBar load in the current order.
- Added debug visibility around crafted-item and chat-loot session dedupe consumption.
- Extended startup/reset bag-baseline priming slightly to reduce false session gains during login or immediate reset bag updates.
- Expanded inventory-transfer guards for Guild Bank and Void Storage frames where available.
- Added an extra combat-lockdown guard to floating Action Bar position restoration.
- Updated README wording for session-window width alignment and defensive session/action-bar safeguards.
v1.22.8
CPU Optimization Pass
- Cached the profession lookup used by the tracker instead of rebuilding and sorting profession data every refresh tick.
- Merged concentration summary and row lookup work into one refresh pass to reduce duplicate concentration estimation calls.
- Combined launcher mulch ready and next-ready checks into one mulch status pass.
- Reduced small per-tick table allocations in row highlighting and launcher text updates.
- Shared the current timestamp across related refresh calculations where safe.
- Added guarded text dirty-checking for tracker and launcher font strings to avoid unnecessary SetText calls when values have not changed.
- Updated the README version for this performance-focused maintenance release.
v1.22.7
Row Count Optimization & Documentation
- Reused the already-computed visible tracker row count during refresh autosizing to avoid unnecessary row table rebuilding.
- Kept saved-height restoration behavior unchanged while reducing duplicate empty-state layout work.
- Added main tracker row interactions to the README, including pin, hide, remove, restore hidden, and reset pinned shortcuts.
v1.22.6
Empty-State Restoration Polish
- Added a guarded saved-height restore when visible tracker rows return after a zero-row state.
- Kept zero-row states from reusing saved manual height while preserving the preferred height once rows are visible again.
- Clarified empty-state text when Attention Only is active and hidden characters exist.
v1.22.5
Empty-State Edge Case Hardening
- Ignored saved manual tracker height when the character table has zero visible rows so empty states can shrink safely.
- Prevented zero-row auto-sizing from overwriting the remembered expanded tracker height.
- Corrected the empty-state message priority when Attention Only filters visible characters while other characters are hidden.
v1.22.4
Empty-State Safety Patch
- Fixed compact Attention Only empty-state text being clipped when no characters need attention.
- Changed tracker empty-state messages to short single-line Lua strings for safer parsing and layout.
- Reduced zero-row tracker body height while keeping a safe minimum so the main window cannot collapse into an unusable size.
- Preserved anchored Action Bar spacing and existing window restore behavior.
v1.22.3
Attention Only Empty-State Polish
- Tightened empty-state spacing in Attention Only view for compact and normal tracking windows.
- Shortened empty-state messages so they fit cleanly without clipping in Compact Mode.
- Reduced unused vertical padding around empty tracker states while preserving row and Action Bar layout behavior.
v1.22.2
Character Removal Confirmation Safety
- Added unique confirmation popup keys for single-character data removal and hidden-character bulk removal.
- Removed the direct-delete fallback from Shift-right-click removal so character data is never removed without the confirmation helper.
- Added a safe no-delete fallback if a required removal confirmation dialog cannot be shown.
v1.22.1
Character Row Tooltip Cleanup
- Restored the release metadata after the character data cleanup pass.
- Updated character row tooltips so regular right-click hiding and Shift-right-click permanent data removal are shown as separate actions.
- No database or behavior changes.
v1.22.0
Character Data Cleanup
- Added a confirmed Remove Hidden option for deleting EmberLedger saved data tied to currently hidden characters.
- Added confirmation before removing a character's saved EmberLedger data from the main tracker row shortcut.
- Character data removal now clearly distinguishes permanent EmberLedger data cleanup from temporary hiding.
v1.21.3
Combat Safety & Numeric Optimization
- Added combat-safe deferral to floating Action Bar position reset.
- Added combat-safe deferral to Action Bar enable/disable performance toggle.
- Removed dead concentration dashboard sort helper.
- Adjusted protected numeric conversion to try a cheaper guarded
tonumberpath before using the protected tostring fallback.
v1.21.2
- Hardened shared numeric conversion for WoW protected/secret cooldown values.
- Removed raw numeric fast paths from Action Bar and Profession Cooldown safety helpers so protected API values are always sanitized before comparison or arithmetic.
- No behavior, layout, or database changes.
v1.21.1
Performance Cleanup
- Reused concentration estimates during tracker row refresh instead of recalculating the same values for display and coloring.
- Replaced per-row layout key string generation with a lightweight layout generation check.
- Updated concentration summary helpers to use the cached concentration index where appropriate.
- Kept the update cadence and visible behavior unchanged.
v1.21.0
Final Completion Cleanup
- Centralized shared EmberLedger theme color constants for UI, Styling, Session Window, and Action Bar styling.
- Moved remaining Action Bar styling helpers to the shared Styling module while preserving the Action Bar's distinct minimal look.
- Split database normalization into smaller internal helper sections for resources, stats, display, alerts, session settings, and Action Bar settings.
- Added a cached concentration index by character to reduce repeated concentration-table scans during dashboard refresh and sorting.
- Added concentration-index invalidation when concentration data changes or character data is reset.
- Kept behavior and UI layout unchanged; this is a completion/maintenance cleanup pass.
v1.20.9
Stability & Consistency Improvements
- Fixed profession cooldown refresh to capture both the current character key and character table correctly.
- Resetting a character now clears stored profession cooldown data for that character.
- Added missing slash command help entries for main, history, and session pause/resume commands.
- Improved crafted item event parsing by validating numeric item candidates through item info instead of relying on a fixed itemID threshold.
- Added clearer comments around StaticPopup button handling and aggregate stat subtraction behavior.
- Made session gold/hour return zero until a session has elapsed time instead of forcing a one-second minimum.
- Tightened a delayed concentration refresh guard and cleaned a profession cooldown API field fallback.
v1.20.8
Shared Numeric Safety Helpers
- Centralized protected numeric conversion through a shared
SafeNumberhelper in Core.lua. - Added a fast path for normal Lua numbers before protected string conversion.
- Added debug-only one-time logging when cooldown paths sanitize a non-numeric protected value.
- Updated Action Bar and Profession Cooldown modules to use the shared numeric safety helper.
- No layout, database, or feature behavior changes.
v1.20.7
Protected Cooldown Value Hardening
- Replaced cooldown numeric sanitization with a safer protected string-conversion path.
- Hardened Action Bar and Profession Cooldown cooldown/charge handling against WoW protected or secret number values.
- No feature or layout changes.
v1.20.6
Cooldown Numeric Safety Fixes
- Hardened Profession Cooldown numeric handling to avoid converting protected/secret cooldown and charge values.
- Updated Action Bar numeric safety helper with the same protected-value guard pattern.
- No layout, database, or feature behavior changes.
v1.20.5
Anchor Restoration Stability
- Fixed remaining main-window anchor-family errors by restoring the tracker only against UIParent instead of launcher/action frames.
- Added safer Action Bar cooldown numeric handling for protected/secret cooldown values.
- Kept floating Action Bar behavior unchanged while improving restore stability.
v1.20.4
Frame Anchor Recovery
- Added safer main-panel anchor restoration to prevent anchor-family
SetPointerrors when the launcher or other frames are reparented. - The main tracker now falls back to a standard UIParent anchor if an attached launcher anchor is invalid.
- Hardened saved frame point restoration with sanitized anchor points and protected SetPoint fallback handling.
v1.20.3
Action Bar Login Visibility Fix
- Fixed anchored Action Bar not appearing inside the main window after login until the floating option was toggled.
- Updated Action Bar refresh gating so anchored mode can refresh when the main tracker is visible, even before the bar has completed its first show/layout pass.
- Added an immediate Action Bar layout/refresh pass when the main tracker opens or restores from saved state.
v1.20.2
Floating Action Bar Stability
- Fixed a floating Action Bar anchoring error that could occur when restoring saved floating positions.
- Prevented floating Action Bar refreshes from snapping the bar back while it is being dragged.
- Kept the Action Bar anchored inside the main window by default after the floating-bar test release; floating mode can still be enabled from Options.
- Added a safe fallback that resets invalid floating anchors to a standard center-screen position instead of throwing a Lua error.
v1.20.1
Floating Action Bar Polish
- Added a shared
GetConcentrationThreshold()helper so minimap and tracker summary logic use the same threshold source. - Made the floating Action Bar lock toggle follow the same combat-safe layout deferral pattern as the floating placement toggle.
- Bumped the database version to
11600for the floating Action Bar settings added in v1.20.0. - Updated README documentation to explain that floating Action Bar mode can be dragged, locked, and reset from Options.
v1.20.0
Floating Action Bar
- Added an optional floating Action Bar mode for independent placement outside the main tracker window.
- Added Action Bar placement controls for floating mode, lock/unlock behavior, and position reset.
- Floating action bar uses a very minimal background and border to stay unobtrusive during active gameplay.
- Preserved the existing anchored action bar behavior as the default.
- Kept action bar layout changes combat-safe by deferring secure layout updates when needed.
v1.19.0
Final Polish and Consistency
- Centralized Profession Cooldown store fallback usage so the module now relies on the shared Core initialization path.
- Added cooldown store initialization to the module self-check requirements.
- Moved remaining Next/CD column option layout values into named UI constants.
- Cleaned several old internal migration comments without changing behavior.
- Updated release metadata for the v1.19.0 polish milestone.
v1.18.9
Cooldown Storage & Stability
- Centralized Profession Cooldown store initialization through a shared Core helper used by both database normalization and the cooldown module.
- Added a small cooldown store pruning pass to remove stale character entries and obsolete cooldown keys.
- Tightened cooldown display and tooltip calls with protected fallbacks so main tracker rows remain stable if a cooldown helper errors.
- Expanded Session window layout constants for remaining safe metric and close-button values.
- Added cleanup for the profession-name cache on logout.
- Updated module verification context labels for clearer post-load diagnostics.
- No feature or database schema changes.
v1.18.8
Cooldown Storage Hotfix
- Fixed Profession Cooldown store helper calls that could error during cooldown refresh or row tooltip generation.
- Restored the local cooldown store initializer used by
RefreshCurrentProfessionCooldownsandGetProfessionCooldownEntriesForCharacter. - No behavior or layout changes.
v1.18.7
Cooldown Initialization Safety
- Added explicit profession cooldown store normalization for older SavedVariables before first scan.
- Added a defensive cooldown sort fallback so the dashboard remains stable if cooldown helpers are unavailable.
- Ran module initialization verification after module load with the same one-time release warning behavior used after UI creation.
- Added a short Profession Cooldown module storage-scope comment.
- No behavior or layout changes.
v1.18.6
Protected Cooldown Value Hotfix
- Fixed a cooldown scan error caused by protected/secret numeric values returned by WoW cooldown APIs.
- Added safe numeric conversion guards to Profession Cooldown scanning and tooltip display paths.
- Cleaned the duplicate v1.18.5 changelog heading.
v1.18.5
Options Layout Cleanup
- Polished Main Window column option sections for better spacing.
- Tightened Next and Cooldown Readiness descriptions so the bottom of the page no longer feels cramped.
- Moved the CD column checkbox closer to its explanation.
- Moved the CD column toggle into its own Cooldown Readiness Column section in Options.
- Added a short Options description explaining what the CD column tracks.
- Moved the Next column toggle into its own Options section.
- Added a short Options description explaining that Next shows concentration readiness forecasting.
- No behavior changes.
v1.18.3
Cooldown Tooltip Clarity
- Improved Profession Cooldown tooltip clarity for characters that have the relevant profession but have not learned a supported cooldown recipe.
- Added an explicit
Unlearnedstate so unlearned cooldown recipes are no longer shown asOpen profession to scan. - Reserved
Open profession to scanfor genuinely unknown or unscanned cooldown data.
v1.18.2
Cooldown Display Polish
- Polished the Profession Cooldown
CDcolumn countdown display so sub-hour timers use compactXm/<1mvalues instead of longer countdown text. - Kept full cooldown timing detail in tooltips while preserving the narrow main tracker column.
- Added short README coverage for Profession Cooldown readiness tracking.
v1.18.1
Cooldown Tracking Stabilization
- Stabilized Profession Cooldown readiness tracking after the initial v1.18.0 implementation.
- Removed duplicate login cooldown scans by letting the module refresh path handle PLAYER_ENTERING_WORLD.
- Cached cooldown-column availability so the main tracker no longer scans all characters every refresh.
- Hoisted cooldown entry sorting to a named helper to avoid repeated closure allocations.
- Shortened hour-based CD column countdowns to compact
Xhdisplay while keeping full timers in tooltips. - Tightened recipe-known detection so unlearned browsable recipes are not treated as ready cooldowns.
- Bumped the SavedVariables schema version for the new profession cooldown settings/resources.
v1.18.0
Profession Cooldown Readiness
- Added Profession Cooldown readiness tracking for a curated set of Alchemy and Tailoring cooldown crafts.
- Added a compact optional
CDcolumn to the main tracker with tooltip details for supported cooldowns. - Added
Modules/ProfessionCooldowns.luato keep cooldown scanning and display summary logic separated from the main UI. - Tracked cooldowns include Wondrous Synergist, Bouquet of Herbs, Box of Rocks, School of Gems, Dawnweave Bolt, Duskweave Bolt, Arcanoweave Bolt, and Sunfire Silk Bolt.
- Added profession cooldown module initialization checks and saved cooldown data under existing SavedVariables resources.
v1.17.3
- Fixed Action Bar spell-variant icon resolution so zone-specific profession utility spells use the resolved active spell icon.
- Removed dead locked-branch cleanup code from Action Bar refresh after the combat deferral guard.
- Added a clarification comment for Styling scroll bar handling on anonymous versus named scroll frames.
v1.17.2
- Final polish pass for the completed UI modularization cycle.
- Added a one-time release warning if required modules fail initialization, while keeping detailed diagnostics debug-only.
- Moved remaining Session total-card layout values into named UI constants.
- Added a scope comment to
Modules/SessionWindow.luafor future maintenance. - Cleaned several outdated internal version-specific comments without changing behavior.
v1.17.1
- Added a debug-only module initialization self-check for the staged UI modules and expected public helpers.
- Moved additional Session window layout values into named UI constants while preserving the existing layout.
- Simplified the SessionWindow module OnLoad sanity check to use the shared verification path.
- Declared the v1.16.x to v1.17.x UI modularization phase complete for this maintenance series.
v1.17.0
- Completed medium-priority SessionWindow refactor cleanup.
- Added a unified Session view refresh dispatcher for Stats and Bag Summary tabs.
- Replaced several session window layout magic numbers with named constants while preserving the existing layout.
- Added short comments documenting the extracted SessionWindow refresh paths.
v1.16.9
- Cleaned up maintenance refactor metadata after the staged SessionWindow extraction.
- Updated the Core/UI fallback version strings so displayed versions remain consistent if TOC metadata is unavailable.
- Corrected duplicate/missing changelog headings from the v1.16.x refactor sequence.
- Added a lightweight SessionWindow module registration sanity check and debug-only warnings for missing session view helpers.
v1.16.8
- Continued the staged SessionWindow maintenance refactor.
- Moved Session window layout, show/hide, and frame creation wiring into
Modules/SessionWindow.lua. - Kept shared session panel creation in
UI.luato avoid a larger high-risk extraction. - Preserved existing Session window behavior while reducing
UI.luaresponsibility.
v1.16.7
- Continued the staged SessionWindow maintenance refactor.
- Moved Session Stats refresh/render helper logic into
Modules/SessionWindow.lua. - Fixed visible package version metadata so the TOC and README match the active test build.
- Kept frame creation and tab initialization in
UI.luato reduce regression risk.
v1.16.6
- Continued the staged SessionWindow maintenance refactor.
- Moved Bag Summary refresh/render helper logic into
Modules/SessionWindow.lua. - Kept session stats, history frame creation, and tab initialization in
UI.luato reduce regression risk.
v1.16.5
- Continued the staged SessionWindow maintenance refactor.
- Moved session history row formatting and rendering helpers into
Modules/SessionWindow.lua. - Kept frame creation and tab initialization in
UI.luato reduce regression risk.
v1.16.4
- Fixed the SessionWindow helper module load pattern so extracted session formatting helpers attach to EmberLedger correctly.
- Resolves a nil helper error in the Stats window after the v1.16.3 initial SessionWindow refactor.
v1.16.3
- Started the Session window maintenance refactor in smaller, safer steps.
- Added
Modules/SessionWindow.luafor shared Session Stats, Sessions, and Bag Summary formatting helpers. - Kept Session window creation and rendering logic in
UI.luafor this pass to reduce refactor risk. - No intended user-facing behavior changes.
v1.16.2
Maintenance Refactor
- Added
Modules/Styling.luafor shared UI styling helpers. - Moved common backdrop, inner border, header accent, scrollbar, text color, and Blizzard button styling helpers out of
UI.lua. - Preserved existing UI behavior and visual styling.
v1.16.1
- Hotfix: corrected action bar button styling so Blizzard button template textures are cleared safely without passing nil to SetNormalTexture or related texture setters.
- Preserved the v1.16.0 action bar module split with no intended user-facing behavior changes.
v1.16.0
- Maintenance refactor: moved action bar creation, action button helpers, secure button setup, and action bar refresh logic into
Modules/ActionBar.lua. - Preserved existing action bar behavior while reducing the size and responsibility of
UI.lua. - Updated addon metadata for v1.16.0.
v1.15.4
- Adjusted EmberLedger window stacking behavior
- Standard Blizzard windows now correctly appear above most EmberLedger windows
- Options window retains elevated priority for usability
- Additional UI polish and cleanup
v1.15.3
Performance Guidance Polish
- Moved Performance warning guidance to the top of the settings section
- Added clearer read-first warnings for performance-related settings
- Added guidance text for:
- Session tracking
- Action bar behavior
- Session history retention
- Clarified that default settings are appropriate for nearly all users
v1.15.2
Window Stacking & UI Polish
- Added improved EmberLedger window stacking behavior
- Newly opened or interacted windows now correctly move to the front
- Improved interaction behavior between overlapping EmberLedger windows
- Updated Session History warning guidance text
v1.15.1
Aggregate Safety Hardening
- Added defensive non-negative guards for aggregate monetary values
- Hardened aggregate stat calculations against edge-case corruption
- Cleaned Session History Cap slider rounding behavior
- Minor internal cleanup and maintenance polish
v1.15.0
Aggregate Statistics Architecture
- Added compact aggregate statistics architecture
- Today, This Week, and 30 Days stats no longer depend solely on raw session history entries
- Added daily and weekly aggregate stat buckets
- Improved long-term SavedVariables scalability
- Session stat cards now remain accurate regardless of session history cap size
Session History Improvements
- Added support for retaining up to 30 days of sessions while enforcing a configurable maximum entry cap
- Added pruning safeguards for extremely large alt rosters
- Improved long-term performance stability for heavy users
v1.14.2
Session History Performance Controls
- Added configurable Session History Cap setting
- Added Performance warning guidance for Session History Cap settings
- Clarified potential SavedVariables and login/logout performance impacts for extreme users
- Additional settings panel polish
v1.14.1
Session History Improvements
- Added session history pruning safeguards
- Stats window now displays range labels with max-entry indicators
- Improved retention handling for very large session histories
v1.14.0
Cleanup & Stability
- Final code polish and cleanup release
- Hardened tracking column setting mutation paths
- Additional internal cleanup and maintenance
v1.13.19
Tracking Column Stability
- Hardened tracking column mutation safety
- Removed remaining dependency on fallback display table mutation behavior
- Minor internal cleanup
v1.13.18
Resize Grip & Dropdown Cleanup
- Removed duplicate resize grip double-click handling
- Corrected resize grip visual line direction
- Improved dropdown ESC handling reliability
- Removed legacy hidden session collapse frame
- Minor stat card spacing polish
- Additional hot-path cleanup and optimization
v1.13.17
Resize Grip Positioning
- Added alternate resize grip positioning when the action bar is disabled
- Improved resize grip placement behavior
- Minor UI polish
v1.13.16
Vertical Resize Improvements
- Removed hard cap on visible character rows
- Main tracker window height now scales naturally with vertical resizing
- Scroll behavior now depends on available screen space instead of fixed row limits
v1.13.15
Resize Grip Layout
- Moved resize grip into the action bar region
- Improved spacing between the resize grip and Logout button
v1.13.14
Action Bar Layout Polish
- Adjusted Logout button positioning to improve resize grip spacing
v1.13.13
Resize Grip Visual Pass
- Added traditional bottom-right resize grip styling
- Improved resize grip visuals and interaction area
v1.13.12
Resize Behavior Improvements
- Increased maximum vertical resize limits
- Added resize double-click reset behavior
v1.13.11
Vertical Resizing
- Added vertical-only resizing support for the main tracking window
- Width remains automatically managed by visible columns
v1.13.10
Session History Dropdown Cleanup
- Completed dropdown lifecycle cleanup
- Added additional dropdown close-path handling
- Improved session history dropdown behavior and stability
v1.13.9
Session History Filters
- Added Today filter support to Session Stats
- Added custom Session Stats display dropdown
- Improved Session Stats filtering and display behavior
v1.12.x
Crafted Item Tracking
- Added optional crafted item tracking support
- Added crafted item tracking safeguards and warnings
- Added combat-safe deferred refresh handling
- Improved session tracking robustness
- Additional performance optimization and polish
v1.11.x
Session Stats Expansion
- Added Session Stats mode
- Added lifetime statistics
- Added aggregate session stat cards
- Added Moxie split-column support
- Added minimap integration and launcher support
v1.10.x
Minimap & Launcher Integration
- Added minimap button support
- Added LibDataBroker integration
- Added fallback minimap button support
- Improved launcher behavior and tooltip handling
v1.0.0
Initial Public Release
- Initial public release of EmberLedger