WhatTodo-v1.5.2.zip
What's new
Changelog
All notable changes to WhatTodo are documented here.
[1.5.2]
Fixed
- Long task labels are no longer clipped: the display window now computes its width from the widest rendered label instead of using a hardcoded 280px. Width is measured with
GetStringWidth()during the layout pass (checkbox width and gaps included, colour codes excluded), rounded up to a 10px step so the frame does not jitter when a reset countdown changes length, then clamped between 280px and 40% ofUIParent:GetWidth()— the same clamp shape already used for the height (UI/Display.lua) - Labels that still exceed the cap are truncated with an ellipsis on a single line (
SetWordWrap(false)), so row height and the existing height computation are unchanged. Hovering a truncated row shows aGameTooltipwith the full label, account-wide(account)tag included
Notes
- The viewport width is derived arithmetically from the frame (
width - 2 × 12) rather than read back from theScrollFrame, whose anchor has just been resized - No new locale keys, no SavedVariables change, no
Core/change — the Busted suite is unaffected - Changelog popup is triggered for this release (
CHANGELOG_VERSIONbumped to1.5.2inUI/ChangelogPopup.lua, FR/EN strings updated)
[1.5.1]
Changed
## Interfacebumped to120100for the Midnight 12.1.0 patch (Curse of Ula'tek), as announced in the 1.5.0 notes
[1.5.0]
Added
- Midnight Season 2 templates (patch 12.1.0, Curse of Ula'tek — live 12 Aug 2026 EU, season start 19 Aug 2026 EU): 28 tasks across six categories, covering the three frequencies. Daily: Curse Surges & rares on the Coiled Isle, Cursed Fishing, Ral'kala bonus, Mythic 0 (which switches to a daily reset when the season opens). Weekly: The Venomous Abyss raid, Mythic+, the Tidebound Grotto lair, Nebulous Voidcore bonus roll, T8+ and Bountiful Delves, Great Vault, crest cap, Prey hunts, Zul'jarra's Forces renown, Corrosive Souls, Delver's / Preyhunter's Journeys, Conquest objective, profession treatise. Monthly: Trading Post / Traveler's Log
- Season selector:
Core/SeasonTemplates.luanow holds an ordered list of seasons (SeasonTemplates.seasons, most recent first) instead of a single flat category list. A Dropdown in the config window switches between Midnight S2 and S1; the category checkboxes are rebuilt for the selected season (UI/AdminPanel.lua,L.TPL_SEASON*keys) - Two new template categories: PvP and Professions (
L.TPL_CAT_PVP,L.TPL_CAT_CRAFT) - Bulk removal of season tasks: a "Remove selected" button deletes, behind a
StaticPopupconfirmation, the tasks matching the selected season and categories — the missing counterpart to Import when rolling from one season to the next (SeasonTemplates.Remove,L.SEASON_REMOVE*keys) - Template provenance:
Tasks.Addtakes an optional fourth argumenttemplateSeason, persisted on the task. Removal only targets tasks carrying the season's marker, or none at all (tasks imported with 1.4.0, or typed by hand with an identical label) — a task marked with a different season is always preserved, which is what protects the labels shared between S1 and S2 (Great Vault, Mythic+, housing weekly, world event, Timewalking) - Busted coverage for season templates: structure, localization completeness, import dedup across seasons, and every removal path (
tests/SeasonTemplates_test.lua, 18 specs)
Changed
SeasonTemplates.GetCategories(seasonKey)takes an optional season key (defaults toSeasonTemplates.defaultSeason);SeasonTemplates.Import(seasonKey, categoryKeys)gained a leading season argument. Both return empty / 0 for an unknown season- Config window height raised to 600 to fit the season selector and the six categories
Notes
- French labels reuse the official in-game names (Île Annelée, Abîme Venimeux, Autel des crochets, Grotte des Marées, Gouffres / Gouffres abondants, la Traque, Résurgences maudites, Pêche maudite, Forces de Zul'jarra, Noyau du Vide nébuleux, Âmes corrosives / Autel de la corrosion). Where no official French name was found, the English term is kept as-is (Vaults of Atal'Utek, Housing Endeavor)
- Season 2 wording is based on pre-patch information and should be checked against the live client; every label lives in the locale files. The crest terminology and the target Delve tier (T8) are the most likely to need adjusting
## Interfacedeliberately stays at120007so the addon keeps loading on the live 12.0.7 client; it is to be bumped to120100when patch 12.1.0 goes live- No SavedVariables migration is required:
templateSeasonis a new optional field, absent on existing tasks and handled as such
[1.4.0]
Added
- Season task templates: a "Season templates" section in the config window imports preset to-do lists for the current season (Midnight S1, 12.0.7), grouped into four categories — World, Dungeons & Raid, Reputation, Limited-time events. The user ticks the categories to import and clicks Import; re-importing is idempotent (existing labels are skipped, no duplicates). Hovering a category checkbox shows a
GameTooltippreviewing the tasks it would add (newCore/SeasonTemplates.lua, wired intoUI/AdminPanel.lua,L.SEASON_*andL.TPL_*keys in both locales) Core/SeasonTemplates.luakeeps the curated content as pure data (ordered categories of{ labelKey, frequency, scope }) separate from the UI, reusingTasks.Add/Tasks.GetAll; template labels go throughL.TPL_*so the in-game wording can be corrected without touching logicCore/SeasonTemplates.luaadded to the.toc(afterCore/Tasks.lua) and to the MakefileADDON_FILESpackaging list
Notes
- The Season 1 activity names are a best-effort starting point and may need adjusting to match live in-game wording — they are centralized in the locale files for easy editing. No SavedVariables migration is required (templates only call
Tasks.Add)
[1.3.0]
Added
- Account-wide tasks: each task now has a
scope(charoraccount). Account-wide tasks are shared across all characters with shared completion, stored indb.global.tasks; per-character tasks live indb.profile.tasks. Scope is picked from a dropdown when adding a task and shown as a badge in the panel and on the list (Core/Tasks.lua,UI/AdminPanel.lua,UI/Display.lua, newL.SCOPE_*keys) - Copy list between characters: a "Profiles" section in the config window copies another character's task list onto the current one, using AceDB's native per-character profiles (
db:GetProfiles/db:CopyProfile) (UI/AdminPanel.lua,L.PROFILE_*keys) - SavedVariables schema migration framework: ordered, scope-aware migrations with per-scope version tracking (
db.char.dbVersionreplayed per character,db.global.dbVersionrun once per account), run at init before any module reads the DB (Core/Migrations.lua, wired inWhatTodo.lua) - Busted coverage for migrations and multi-scope tasks (
tests/Migrations_test.lua,tests/Tasks_test.lua;strtrim/GetServerTime/GetCurrentRegionstubs added totests/mock_wow_api.lua)
Changed
- The database now uses per-character profiles instead of the shared
"Default"profile (thetruedefault-profile argument was dropped fromAceDB:New). On upgrade, each character is switched to its own profile and its existingdb.char.tasksare migrated intodb.profile.tasks— existing lists are preserved. This is what makes per-character isolation and the copy-between-characters feature possible (WhatTodo.lua, migration v1 inCore/Migrations.lua)
Upgrade notes
- Your current task list is kept automatically; it simply becomes your character's own profile. From now on, lists are per-character — create Account tasks for chores you want shared across every character, and use the Profiles → Copy action to clone a list onto another character.
[1.2.1]
Fixed
- No more
[ADDON_ACTION_FORBIDDEN] ClearTarget()taint error on login after an update: the changelog popup no longer reassigns the globalStaticPopupDialogs. The dialog is now registered at file load time (writing a single key) withpreferredIndex = 3(UI/ChangelogPopup.lua)
[1.2.0]
Fixed
- Weekly reset day is now region-aware instead of being hardcoded to Wednesday: auto-detected via
GetCurrentRegion()— Tuesday on US, Wednesday on EU, Thursday on KR/TW/CN (fallback Wednesday) (Core/Reset.lua). Daily (5:00) and monthly (1st) are unchanged
Added
Reset.GetWeeklyResetWeekday(region)(pure region→weekday mapping) andReset.GetCurrentRegion();GetResetBoundary/GetNextReset/IsDonetake an optionalweeklyResetWdayargument so the reset day stays injectable and testable (Core/Reset.lua, wired inCore/Tasks.luaandUI/Display.lua)tests/Reset_test.luaBusted coverage for the region mapping and weekly boundaries;_G.datestub added totests/mock_wow_api.luadocs/ROADMAP.mddocumenting the publication roadmap and per-feature status
[1.1.0]
Added
- Changelog popup shown once per account on the first login after an update, localized FR/EN from the client locale (
Core/Changelog.lua,UI/ChangelogPopup.lua,L.CHANGELOG_*keys inLocales/enUS.luaandLocales/frFR.lua) - Account-wide
db.global.lastSeenVersion(first use of an AceDB global root) to track the last announced version; compared against theCHANGELOG_VERSIONconstant - Unit-test infrastructure: Busted suite run under Docker (
Dockerfile.test,tests/mock_wow_api.lua,tests/Changelog_test.lua) - Packaging guard
tools/check-packaging.pyensuring every script referenced in the.tocis shipped in the zip
Changed
Makefileswitched from blind directory globbing to an explicitADDON_FILESlist (with a recursiveLibs/walk), gated by the packaging guard before each build
[1.0.3]
Changed
- bump wow versikon
[1.0.2]
Changed
- Display window now resizes dynamically to fit the number of tasks instead of using a fixed height, and is capped at 80% of the screen height (
UI/Display.lua) - Beyond the cap, the task list becomes scrollable with the mouse wheel — tasks no longer overflow outside the frame when many are added
[1.0.1]
Added
- Localization (EN/FR): the UI language now follows the WoW client locale — English by default, French when
GetLocale() == "frFR"(Locales/enUS.lua,Locales/frFR.lua) ## Notes-frFRentry in the.tocfor the French addon-list description- Custom parchment icon (
Textures/icon.tga) used for the addon list and the minimap button
Changed
- All user-facing strings moved out of the UI code into the locale tables
[1.0.0] — Initial release
Added
- Per-character to-do list with three task frequencies: daily, weekly, monthly
- Automatic reset at 5:00 server time:
- daily tasks reset every day,
- weekly tasks reset every Wednesday,
- monthly tasks reset on the 1st of each month
- Completion state derived from the last completion time versus the current reset boundary — tasks re-arm by themselves when a reset passes, no cleanup needed
- Admin panel (AceGUI) to add, rename, re-categorize and delete tasks, with a real "Add" button
- Parchment-style display window: draggable, position persisted, tasks grouped by frequency with a per-section reset countdown and checkboxes
- Minimap button (LibDBIcon) — left-click toggles the display, right-click opens the admin panel, tooltip shows remaining tasks per frequency
- Slash commands:
/wt(toggle display) and/wt config(open admin panel) - Embedded libraries: Ace3 (AceAddon, AceDB, AceConsole, AceEvent, AceGUI, AceConfig), LibDataBroker-1.1, LibDBIcon-1.0
This mod has no additional files

