EmberLedger

Lightweight WoW Retail addon for profession alt tracking, concentration, Artisan Moxie, Imbued Mulch, gathering sessions, gold/hour, and lifetime stats.

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_BLOCKED errors from protected Hide() 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_BLOCKED errors from ClearAllPoints().
  • 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 session failing 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 52 are moved to the canonical Name-Area52 format.
  • 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.lua and Modules/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.lua for 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.lua because 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 off and 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_UPDATE event 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 Unknown even 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 Unknown when 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 Unknown when 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 Unknown when 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 Unknown only when EmberLedger has no reliable ready-time data.
  • Added Last scanned information 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 welcome and /el onboarding to 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 report output.
  • 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's debugprofilestop() timer.
  • Fixed profile reports showing call counts with 0.000ms totals during idle and active tests.
  • Added /el profile dump as 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.lua framework 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 tonumber path 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 SafeNumber helper 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 SetPoint errors 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 11600 for 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 RefreshCurrentProfessionCooldowns and GetProfessionCooldownEntriesForCharacter.
  • 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 Unlearned state so unlearned cooldown recipes are no longer shown as Open profession to scan.
  • Reserved Open profession to scan for genuinely unknown or unscanned cooldown data.

v1.18.2

Cooldown Display Polish

  • Polished the Profession Cooldown CD column countdown display so sub-hour timers use compact Xm / <1m values 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 Xh display 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 CD column to the main tracker with tooltip details for supported cooldowns.
  • Added Modules/ProfessionCooldowns.lua to 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.lua for 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.lua to avoid a larger high-risk extraction.
  • Preserved existing Session window behavior while reducing UI.lua responsibility.

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.lua to 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.lua to 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.lua to 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.lua for shared Session Stats, Sessions, and Bag Summary formatting helpers.
  • Kept Session window creation and rendering logic in UI.lua for this pass to reduce refactor risk.
  • No intended user-facing behavior changes.

v1.16.2

Maintenance Refactor

  • Added Modules/Styling.lua for 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