Flourish Forever — verified baseline and roadmap
What exists in current source
- Player-only UNIT_SPELLCAST_SUCCEEDED listener; ability configured by lowercased spell name and resolved from event spell ID.
- Spellbook enumeration via
C_SpellBookor legacy spell-tab APIs; passive spells skipped when detectable. - Configurable enabled emotes discovered from the game's
EMOTE*_TOKENglobals, with ROAR fallback; each selected uniformly withmath.random. - Per-ability 0–100% chance, 0–120 seconds cooldown via sliders; defaults 100% and 6s, with only ROAR enabled.
- Rate limiting timestamp updated only after DoEmote is selected; failed chance / empty pool doesn't spend a cooldown.
- Separate character settings using GUID-based profiles inside account-wide
FlourishForeverStorage; conditional adoption ofROARitFOREVERStorageand name-keyed profile migration. - Movable 620×520 Blizzard-style window with enable checkbox, ability dropdown/list, selected ability editor, sliders and emote checkboxes.
- Slash aliases
/flourish,/flourishforever,/rit, withconfig,ui,status. - Two GitHub beta release tags with no uploaded release assets, CurseForge-oriented
.pkgmeta, no LICENSE, no committed test harness or CI.
P0 — gameplay event correctness
- Install all three Lua files and TOC on intended WoW: Forever client interface 16001, and confirm
/flourishopens without Lua errors. - Select one spell and verify that the client actually fires
UNIT_SPELLCAST_SUCCEEDEDwith parameters the addon expects (unit, _, spellID); record version and event payload. - Distinguish successful cast from actual target hit/effect application. Test a cast that succeeds but misses/resists or doesn't affect its target; the current listener may still emote.
- Test interrupts, failed casts, duplicate cast-success events, triggered/proc spells, different ranks with one name, channelled casts, spells on cooldown and abilities that cannot be selected from the spellbook.
- Verify the passive filter and dropdown's available spell list under both new and legacy API paths. Test changed talent/spellbook lists while the window remains open via
SPELLS_CHANGED. - Confirm
math.randomchance with 0%, 100% and intermediate values across repeated casts; distinguish probability from deterministic “every nth cast.” - Confirm cooldown per normalized ability name, independence of two configured spells, and zero/6/120-second intervals.
- Specifically test first eligible cast shortly after login:
lastFireByAbility[key] or 0may suppress it ifGetTime() < cooldown. Decide whether to repair only after reproducing or designing the intended behavior. - Confirm cooldown timestamps reset on
/reloadand relog; the source doesn't save them. Document whether that is acceptable for play.
P1 — saved character profiles and emote behavior
- Test fresh character GUID binding and settings after reload, logout/login and switching characters. Confirm no selections leak across characters.
- Test old
ROARitFOREVERStoragemigration using backed-up SavedVariables, including name-keyed or old name-realm-keyed entries. The old root must actually have been loaded; current TOC declaring a new root doesn't automatically load a missing old file. - Test character setup when
UnitGUIDis briefly unavailable;EnsureDBcreates a fallback session table and rebinds when the GUID returns. Ensure early edits aren't lost. - Test no emotes checked, one enabled, several enabled and a token unsupported by
DoEmote. Inspect actual client chat/sound/animation and behavior with other emote addons. - Inspect
statusprinting the raw character GUID and decide whether diagnostic privacy/readability should change. - Test saved chance/cooldown values outside slider bounds or in nonnumeric legacy formats; source converts with
tonumberbut does not clamp on load. - Test duplicate spell names, spell localization changing the persisted ability key, and spell IDs changing rank/specialization.
- Test dropdown menu templates and their optional dynamic load;
CreateUIstill assumes several globals exist after attempting to load them.
P2 — packaging and portfolio evidence
- Confirm CurseForge packager successfully processes
.pkgmeta, includes only intended Lua/TOC files and uses the manual CHANGELOG; not verified by the existence of the metadata file. - Consider adding a small mocked Lua harness for spellcast matching, cooldown, chance boundaries, GUID migration and UI creation, then run it and record output.
- Verify public GitHub beta release entries: currently v0.3.0-beta and v0.3.1-beta have no uploaded release assets. Do not advertise a ZIP at their release URLs.
- Decide on an explicit repository license; no LICENSE was found in the inspected main tree.
- Obtain actual client screenshots/recordings of the config panel and sample in-world emote, recording consent/character names appropriately.
- Test UI legibility and keyboard accessibility for the ability/emote scroll frames at common display scales.
Open creative directions requiring creator approval
Would per-ability preview help select the right flourish? Should emotes triggered close together be globally rate limited to keep chat quieter? Should cooldowns survive reload? Should the addon distinguish cast success from actual hit? Should a user be able to supply custom text or keep the native emote-only boundary? Are certain class/proc spells too noisy? These are proposals, not implemented features or accepted decisions.
Document information
Creative decision authority: Babuni.dev. Release: 0.3.1-beta, October 22, 2026.
Status of this roadmap: proposed checks and unapproved alternatives, not implementation instructions.