v2.4.1-classic
What's new
# Changelog
## 2.4.1 (2026-08-18)
- Fixed: **a value you type into a settings box is saved when you click away.** Until now
a text field only saved if you pressed Enter — literally that key, nothing else. Type a
name and click the next row, a button, or anywhere at all, and every keystroke was
thrown away in silence; the field quietly repainted itself with the old value the next
time the page refreshed, so it looked as though nothing had been typed. This is why a
chat channel nickname would not stick, and every text field in every Daseeki addon had
it, hidden anywhere the same value could also be set some other way. Text fields now
save when you leave them, exactly as they save on Enter — once, never twice — and
Escape still puts back the stored value and saves nothing. A field you click into and
straight back out of without typing is left alone, and a value the setting itself
tidies up (trimming spaces, lowering case) is shown back to you as it was stored.
- Fixed: **captions on settings pages are no longer invisible.** A plain text caption
beside a control — "Theme", "Font", "Buff", the name of a channel — was built with no
width of its own, and a settings page hides anything with no width, so the caption was
written, laid out and never drawn. Every Daseeki addon's settings page inherited this
from Core. Captions are now measured from the text itself and re-measured whenever the
text or the font changes, so they appear where they were always meant to, and the
control beside them sits at its proper distance instead of sliding left into the gap.
Pages that already set their own caption widths by hand are untouched.
- Fixed: **renaming a caption or a button in place now actually changes it.** Asking a
caption to change its text did nothing at all (there was no way to ask), and asking a
button to change its label quietly succeeded while painting nothing — which is why a
button could sit there wearing the wrong word. Captions, hints, section titles, buttons
and checkboxes all now answer to being renamed, and the new text is drawn.
## 2.4.0 — 2026-08-11
- Fixed: **changing a theme, font or text size can no longer send the interface into a
loop.** When you pick a new look, Core tells every Daseeki addon to redraw itself, and
each of those redraws runs to completion before the setting has finished applying. If
any one of them reached back and changed the appearance again — a perfectly ordinary
thing for an addon to do — the whole redraw started over from inside itself, and could
keep doing so until the game ran out of room. Core now finishes the redraw it is on,
applies whatever was asked for in the meantime, and runs one more pass so nothing is
left half-changed. If something keeps asking without ever settling, Core stops and
writes down what happened instead of freezing.
- Fixed: **switching pages in the settings window can no longer leave the sidebar and the
page disagreeing.** Each addon builds its own settings page, and that build can ask
Core to jump somewhere else while it is still running. The jump now happens after the
page it interrupted has finished, so the highlighted entry in the sidebar, the page on
screen and the page Core remembers for next time are always the same one — and a page
that asks for itself over and over is stopped rather than allowed to recurse.
- Added: **a performance log for the suite.** Core now takes a quiet snapshot of the
game's own addon profiler a few minutes after you log in, every fifteen minutes after
that, and once more as you log out — recording how much CPU time each Daseeki addon is
actually using, alongside the ten heaviest addons you have running overall so there is
something to compare against. **`/daseeki perf`** prints the latest snapshot: every
Daseeki addon with its recent average, session average and peak in milliseconds, the
all-addons and game-itself totals for scale, and the top five overall.
**`/daseeki perf clear`** empties it.
The last 60 snapshots are kept in your saved variables — several days of play — so
"the interface felt heavy in Naxx last night" can be answered from the log the next
morning instead of guessed at. The sampler itself costs nothing between snapshots:
no per-frame work, no combat hooks, just a handful of readings on a timer. If your
client's addon profiler is switched off (or your client has none), the log records
one line saying exactly that and stops for the session rather than filling up with
blanks. Every snapshot is stamped with the Core version that took it, so a reading
from an older build is never mistaken for a current one.
Which addons get measured is decided by name at runtime, not from a list — a Daseeki
addon released next month is picked up the day you install it.
- Added: **a permanent record of every play session.** The performance log above keeps
the last 60 snapshots, which sounds like plenty until a ten-hour day fills the whole
thing and pushes last Friday out of it — so "was the interface heavier tonight than it
was with that other addon loaded last week?" became a question the log could no longer
answer. Core now also keeps **one small summary per play session**, and those go back
about six weeks (up to 120 sessions) rather than a few days.
Each summary records when the session started and ended, how many snapshots went into
it, and for every Daseeki addon — plus whatever else was heaviest that night — the
average cost, the worst cost, and the worst spike. **`/daseeki perf sessions`** lists
them, newest first, with the three heaviest addons of each; **`/daseeki perf session`**
(optionally with a number from that list) prints one in full. **`/daseeki perf sessions
clear`** empties the archive; the two logs are separate, and clearing one never touches
the other.
The summary is written a few minutes into a session and refreshed as it goes, so a game
that crashes still leaves a record of the evening — one that says plainly that it is
incomplete rather than quietly pretending otherwise. The final version is written as you
log out, in the moment the game gives for it, and costs well under a millisecond.
- Fixed: **the minimap button finally wears the Daseeki mark.** It had been showing a
generic Blizzard cog — the custom artwork was a `.jpg`, a format WoW cannot load, so
the button silently fell back to a stock icon. The button now carries the suite maker's
mark: the crimson brand diamond with its bronze keyline, the same hallmark the settings
window and the Nexus dashboard wear in their title bars, drawn to read at minimap size.
- Changed: Daseeki Core is now licensed **All Rights Reserved** rather than MIT, matching the rest of the suite; the bundled Fira Sans Condensed font keeps its own SIL Open Font License 1.1 (`fonts/OFL.txt`) and is unaffected.
## 2.2.0 — 2026-08-03
### Added
- **A new look for the suite: Field Ledger.** The settings window is redressed as worn
ink on parchment — warm dark grounds, a faint paper grain, aged edges and a thin bronze
keyline, with the suite crimson kept for selection and urgency. Field Ledger is the
theme a fresh install starts on. If you have already picked a theme, your choice is
left exactly as it was; switch to it from Core > Appearance whenever you like.
- **New "Daseeki" theme** — the owner's original 1.x skin rebuilt from the real thing:
near-black window grounds, blood-red accents and borders, warm gold titles. Pick it
in Core > Appearance if you miss the old look.
- **Material dial** (Core > Appearance): **Subtle / Standard / Strong** sets how strongly
the parchment grain, the aged edge and the bronze keyline read on your monitor.
Standard is the default, and `/daseekiui debug material` cycles the three live so you
can compare them side by side. Your choice is remembered.
- **Font picker** (Core > Appearance): choose the face the whole suite is drawn in.
Daseeki Core now ships with **Fira Sans Condensed Medium** (SIL Open Font License 1.1)
and uses it by default on a fresh install — this replaces the thin Arial Narrow that
made labels and numerals hard to read. Alongside it you get the six built-in WoW faces
(Friz Quadrata, Arial Narrow, Morpheus, Skurri, 2002, 2002 Bold) plus any font
registered with LibSharedMedia by WeakAuras, Details or another addon, merged in at
runtime. Picking a face re-skins every Daseeki window immediately. Ceremonial headers
stay Morpheus by design and never follow the picker. If you already had a font chosen,
it is not changed.
- **Text size slider** (85–130%, default 100%) scales all suite text at once. Both the
face and the size are remembered.
### Changed
- Settings window sidebar: the **Core** group (Appearance) now sits above the **Suite**
group, and the suite addons under it are listed alphabetically instead of in whatever
order they happened to load. The order is settled when the sidebar is drawn, so an
addon that loads late in the session still lands in its alphabetical place rather than
at the bottom — the list reads the same every session.
- Settings window title bar: the **Daseeki Suite** wordmark is painted in your active
theme's accent colour (the suite crimson on the shipped themes) instead of a fixed
cream, matching the Nexus wordmark and the Raid Prep title. It re-tints live when you
switch theme, so a theme with a different accent gets its own. The version number
beside it stays muted — it is metadata, not part of the lockup.
### Fixed
- **A font your client cannot read no longer blanks the UI.** WoW can only load font
files that were already on disk when the game *started* — a font installed or shipped
mid-session resolves to a valid path but loads as nothing, so every piece of text on
that face draws invisible. A /reload does not fix it; only a full game restart does.
This is what made the Channel input look untypable and the Copy-bundle dialog look
blank on the day the bundled Fira Sans Condensed became the default face. Core now
proves a face actually renders before committing to it — at login, on every apply, and
when you pick a face from the picker. A face that fails puts the whole session back on
Friz Quadrata with one plain chat line explaining that a full game restart is needed,
and every Daseeki window re-skins to the fallback together. Your saved font choice is
**not** changed, so the next proper restart silently gives you the font you picked.
- The Field Ledger material now reads correctly at real in-game gamma. The grain is a
parchment-white substrate, so turning the material up lightens the gutters between
panels toward paper instead of muddying them dark, and the aged edge and bronze
keyline make a step you can actually see.
### For addon authors
- `DaseekiSuite.CORE_VERSION` (this Core's version string, read from the .toc once at
load) and `DaseekiSuite.RequireCore(minVersion[, caller])` — the cross-addon version
guard. Call it before touching an API a given Core introduced; against an older Core
you get `false` plus one plain chat line ("… needs Daseeki Core v2.2.0, v2.0.0
installed — update Daseeki-Core") instead of a Lua error, and the feature simply stays
off. `DaseekiSuite.CompareVersions(a, b)` is exposed alongside it. Guard the ledger-kit
APIs on 2.2.0.
- `DaseekiSuite:GetSuiteOrder()` (registered addon ids in sidebar order) and
`DaseekiSuite:GetNavPlan([activeAddonId])` (the sidebar's ordered entry list as plain
data). The nav order now lives in core.lua and hub.lua only renders it; the hub's
default selection uses the same order, so "first addon" means the first one shown.
- Font API: `UI.SetFont` / `GetFont` / `FontNames` / `SetFontScale` / `GetFontScale` /
`FontFile` / `OnFontChanged` / `RegisterFont`, plus `UI.IsFaceFallback()` (is this
session on the fallback face, and which face failed) and `UI.FontFileRaw()` (the picked
path, unverified — for diagnostics). `UI.FontFile()` is unchanged for callers but now
returns only a face that has been proven to render. Choices persist in
`DaseekiCoreDB.fontChoice` / `fontScale`.
- Material API: `UI.SetMaterialPreset` / `GetMaterialPreset` / `GetMaterialPresetNames`
(`subtle` | `standard` | `strong`); persists in `DaseekiCoreDB.materialPreset`.
### Internal
- New headless self-test harness (`harness/run-selftests.cmd`, real Lua 5.1, mirroring
the Daseeki-Nexus pattern): parse-gates every .lua the .toc lists, covers the font load
guard and the cross-addon version guard, and firewalls the globals core.lua and
theme.lua are allowed to publish. Not shipped in the packaged addon.
## 2.0.0
- Complete settings-window overhaul: new DaseekiUI framework replaces the old fixed hub.
- Sidebar navigation (suite addons + Core pages) with breadcrumb title bar.
- Resizable window (minimum 1140x560, size remembered per character).
- Theme system with an end-user picker (Core > Appearance): six themes ship in 2.0.0 —
Ashenvale Gold, Neutral Slate, Orgrimmar Ember, Stormwind Regalia, Felwood, and
Winterspring Frost; themes re-skin live with no /reload.
- Every settings pane now scrolls and clips — settings can no longer render outside the
window or overlap.
- New widget toolkit (checkboxes, sliders, dropdowns, segmented toggles, lists, editor
cards) with consistent spacing and mouse-wheel scrolling everywhere.
- /daseekiui debug toggles a layout-outline overlay for troubleshooting.
- Older Daseeki addon versions still render via a built-in compatibility path.
## 1.0.0
- Initial CurseForge release.
This mod has no additional files

