v0.9.104-beta
Pre-release
Pre-release
LumenUI
v0.9.104-beta (2026-07-02)
Full Changelog Previous Releases
- Merge pull request #45 from NennMichSchinken/dev
docs: add honest About + Contributing sections to README - docs: add honest About + Contributing sections to README
- Merge pull request #44 from NennMichSchinken/dev
added logo - added logo
- Merge pull request #43 from NennMichSchinken/dev
dev into main - Merge pull request #42 from NennMichSchinken/libs-drop-unused-AceTimer;-docs-README-+-remove-stale-AceConfig-refs
libs: drop unused AceTimer; docs: README + remove stale AceConfig refs - libs: drop unused AceTimer; docs: README + remove stale AceConfig refs
- Merge pull request #41 from NennMichSchinken/feature/3-clickcast-catalog
clickcast: action-catalog UI redesign + EUI catalog (Stage 2) - clickcast: action-catalog UI redesign + EUI catalog (Stage 2)
Replace the per-binding panels with a compact action catalog: one card row
per binding (icon + name, keybind, options gear, enable switch, delete), in
Standard + Custom-spells sections. One keybind field routes click vs hover by
key type; modifiers captured inline. Adds the EUI spell catalog (external
defensives, smart rez, trinkets) with smart per-class defaults + migration.
New widgets: Switch, SectionLabel, MenuButton, SquareIcon, IconButton, gear
popover, bare pickers, dashed/solid keybind border. Settings + delete icons
(Icons8) as gold-tinted TGA textures. All row metrics central in UI.WIDGET.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Create SECURITY.md for security policy
Added a security policy document outlining supported versions and vulnerability reporting. - Merge pull request #40 from NennMichSchinken/feature/3-hovercast
clickcast: rebuild hovercast (race/clear/keybind-grab fixes - clickcast: rebuild hovercast (race/clear/keybind-grab fixes
- Merge pull request #39 from NennMichSchinken/feature/1-aura-restructure
raidframes: per-context aura settings + collapsible (Feature 1) - raidframes: per-context aura settings + collapsible (Feature 1)
Dissolve the standalone Auras tab; the aura display knobs (enabled,
max icons, spacing, auto-fit, swipe, debuff filter) are now per context
and live in a collapsible section at the bottom of the Raid and Group
tabs. The tracked-spell list stays shared in the Tracking tab. New
W.Collapsible widget; collapsed by default, state remembered per
context. No data carry-over (fresh defaults); Core migrate v5 strips
the obsolete shared aura knobs.
Also fixes found while testing on the renamed (LumenUI) folder:- assets: build font/texture paths from the addon-folder name (ADDON)
instead of a hardcoded Lumen, so a folder rename no longer breaks
fonts/textures. - shell: derive the scroll range from the content height instead of the
frame-late GetVerticalScrollRange, fixing an oversized/overflowing
scrollbar after collapsing a section.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- assets: build font/texture paths from the addon-folder name (ADDON)
- Merge pull request #38 from NennMichSchinken/dev
Dev - chore: english comments in .pkgmeta and release workflow
- brand: rename product to LumenUI (formal name)
Formal product name -> LumenUI everywhere the user sees/types it:
.toc Title + filename (Lumen.toc -> LumenUI.toc), package-as,
AceAddon name (chat prefix), ESC-menu button, Shell wordmark,
/lumenui slash command (/lumen + /lu kept as aliases), README.
Short name 'Lumen' kept in running prose (locale strings) and for
internal identifiers that no user sees or that would force churn:
SavedVariables LumenDB, frame names (LumenShellFrame, LumenUnit*,
LumenCC*), and the Share export-code tag (payload.addon='Lumen',
kept for code compatibility).
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - release: link CurseForge project (X-Curse-Project-ID 1590189)
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - release: add BigWigs packager workflow + .pkgmeta
Tag (v*) -> BigWigs Packager -> CurseForge/Wago. Libs are bundled
from the committed Libs/ folder (no externals). Dev artifacts
(.luacheckrc, tools, .github, *.md) excluded from the package.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #37 from NennMichSchinken/i18n-remaining-strings
i18n: localize remaining UI strings, drop dead widget gallery - i18n: localize remaining UI strings, drop dead widget gallery
Wrap the last German user-facing strings in ns.T() with deDE pairs:
ClickCast KEY_DISPLAY/MOD_DISPLAY (filled on locale-ready) and the
"No spec" fallback; Widgets search/empty/confirm/keybind placeholders;
Shell error print. Delete the unreachable Gallery sandbox screen and its
file-level locals; the dead else-branch becomes a no-op. Bump to 0.9.87.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #36 from NennMichSchinken/cleanup-english-comments-part2
cleanup: translate remaining code comments to English (part 2) - cleanup: translate remaining code comments to English (part 2)
- Merge pull request #35 from NennMichSchinken/cleanup-remove-ace-shell-and-english-comments
cleanup: remove the AceConfig backup shell + translate comments to En… - cleanup: remove the AceConfig backup shell + translate comments to English (part 1)
The suite shell is now the only UI, so the old AceConfig backup is gone, and
the code starts moving to English comments for an international repo.
Remove AceConfig backup shell:- Delete Options.lua; OpenConfig just toggles the suite shell (no "ace" arg,
no fallback); drop the SetupOptions() call in Core. - Drop now-unused libs from embeds.xml and Libs/: AceGUI-3.0, AceConfig-3.0,
AceDBOptions-3.0.
Localize the Lumen texture dropdown labels (Shield/Heal-absorb): the stored
value stays the German key ("Lumen Schild"/"Lumen Heilabsorb", needed for
texture/pattern matching), only the shown label is translated.
Translate comments to English (part 1): GameMenu, EditMode, Style, Core,
Modules/MiniCC, Modules/Share, Locales/Locale, Locales/deDE (comments only,
German values kept). Remaining large files (Tokens, ClickCast, Shell, Screens,
Widgets, Raidframes) follow in a part 2.
luacheck 0/0. Version 0.9.85.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Delete Options.lua; OpenConfig just toggles the suite shell (no "ace" arg,
- Merge pull request #34 from NennMichSchinken/shell-localization-i18n
i18n: localize the suite shell (English default + German, auto-detect) - i18n: localize the suite shell (English default + German, auto-detect)
Add a lightweight localization layer so the suite shell is usable
internationally: English is the code default, German is a full
translation, and the WoW client language is auto-detected.- Locales/Locale.lua: ns.T("english") / ns.L lookup (key = English
source, falls back to the key). ns.onLocaleReady registry +
RunLocaleReady so string-bearing module constants (dropdown option
lists etc.) are built AFTER the language is resolved. - Locales/deDE.lua: ~240 German translations.
- Language resolved from db.global.language ("auto" | "enUS" | "deDE")
in Core:OnInitialize; "auto" follows GetLocale(). Manual picker
(Auto / English / Deutsch) added to the Global > Base tab; switching
prompts a reload. - All user-facing strings wrapped in T() across Screens, Widgets, Shell
(ComingSoon + nav tooltip), Core print, Share error texts, Raidframes
reload popup + aggro text, ClickCast mouse/modifier/action labels. - SECTIONS nav/tab labels and module/brand names stay English on
purpose (they double as ns.Screens lookup keys / §4.1 product terms).
Note: Options.lua (the /lumen ace backup config) is still German and
will be localized in a follow-up. Version bumped to 0.9.84.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Locales/Locale.lua: ns.T("english") / ns.L lookup (key = English
- Merge pull request #33 from NennMichSchinken/raidframes-add-aggro-only-in-dungeon/raid-option-(default-on)
raidframes: add "aggro only in dungeon/raid" option (default on) - raidframes: add "aggro only in dungeon/raid" option (default on)
- Merge pull request #32 from NennMichSchinken/raidframes-exempt-own-tank-spec-from-aggro-overlay-when-role-unassigned
raidframes: exempt own tank spec from aggro overlay when role unassigned - raidframes: exempt own tank spec from aggro overlay when role unassigned
- Merge pull request #31 from NennMichSchinken/Global-tab-(profile-mgmt-+-export/import-popup)-
shell: Global tab (profile mgmt + export/import popup) + coming-soon … - shell: Global tab (profile mgmt + export/import popup) + coming-soon nav + UI.Border position fix
- Merge pull request #30 from NennMichSchinken/clickcast-shell-screen
clickcast: suite-shell screen (mouse bindings); hovercast deferred to P2 - clickcast: suite-shell screen (mouse bindings); hovercast deferred to P2
Click-Cast als Suite-Shell-Screen (ein Tab "Klick auf Frame"), verdrahtet gegen ns.ClickCast.- Maus-Bindings: Maustaste / Aktion / Modifier (Dropdown), Spell-Auswahl per W.SpellPicker
(suchbar/scrollbar, mit Icon), Keycap-Kopf, "Nur ausserhalb Kampf" jetzt auch fuer Menue
(verhindert versehentliche Menues im Kampf - wirkt nur auf Lumens Frames). - ClickCast.lua: oocOnly fuer Menue via benanntem Proxy + /click [nocombat]-Makro (taint-sicher).
- Neue Widgets: W.KeybindButton, W.SpellPicker mit Icon-Option.
- UI.Border: verzoegerter Pixel-Re-Snap (Border verschwand nach Re-Render bis zum Scroll).
- Tabs: konstanter Schnitt aktiv/inaktiv (kein Springen mehr).
- Hovercast vorerst ausgeblendet (P2): Secure-Tasten-Treiber gibt die Taste in 12.0.7 nicht
sauber frei. Code + Datenmodell bleiben (Flags CC_HOVERCAST / HOVERCAST_ENABLED).
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Maus-Bindings: Maustaste / Aktion / Modifier (Dropdown), Spell-Auswahl per W.SpellPicker
- Merge pull request #29 from NennMichSchinken/aura-positioning+search+shell-default
raidframes auras: positioning, dropdown search, shell as default UI - raidframes auras: positioning, dropdown search, shell as default UI
Feature 2 (aura positioning, phase 1):- per-context (raid/party) anchor, grow, X/Y offset, inside/outside; size
already per-context. Shared: enabled/spacing/maxIcons/autoFit/swipe/filter. - Core defaults reshaped + migration v4 (lifts old shared anchor/grow to both).
- inside/outside without extra frames (anchor math in positionAuraIcons).
- new reusable W.Segment widget (gold-filled active cell) for the in-card
Raid|Gruppe context toggle and the Innen|Außen switch. - Auras tab rebuilt per category: "Menge & Verhalten" (shared) + "Platzierung
& Größe" (per context, box-local Raid|Gruppe toggle); size is one slider now. - offset range -80..80, size up to 80.
Feature 3 finish: real-time search field in W.Select (o.search) + visible
W.Hint line for the mousewheel hint (dropped the hover tooltip).
Shell as default UI: - /lumen opens the suite shell; old AceConfig moved to /lumen ace.
- ESC menu "Lumen" button opens the shell, sits right under "Addons" grouped
with section spacing, and is restyled to Cinzel gold (pool-reuse safe).
Fixes: cold-start custom-font warm-up (persistent alpha-0 FontStrings + button
OnShow heal) so the color picker "Übernehmen" label renders on a fresh client
start; W.Segment default selection handled false-valued options correctly.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- per-context (raid/party) anchor, grow, X/Y offset, inside/outside; size
- Merge pull request #28 from NennMichSchinken/base-text-transparency-dropdowns
raidframes: shared text optics, transparency, dropdown UX, shield tex… - raidframes: shared text optics, transparency, dropdown UX, shield textures
Base tab reorg + Suite-Shell (/lumen shell):- Name/HP text colour + outline are now SHARED (Base "Text" section); size,
position, show-toggle and HP-type stay per-context (raid/party). One-time
profile migration (v3) carries existing raid values over. - "Name in class colour" toggle (shared, overrides name colour).
- Transparency subgroup: background colour + background/health/shield/healabsorb
opacity sliders. Health alpha folded into SetStatusBarColor so only the fill
dims (shield/heal-absorb stay full); shield/heal-absorb alpha on the overlays. - "Show frames when solo" toggle (SecureGroupHeader showSolo, default off).
- Lebensbalken rows reorganised; field-style colour swatches; Raid/Group text
sections reduced to size + position.
Widgets: - Sliders: left-aligned labels (value box stays centred); grabbable thumb via
hit-rect so the square is easy to catch at 0/100 %. - W.Select: max 8 visible rows + scrollbar + mousewheel fast-preview (throttled,
opt-in via wheelPreview — only texture dropdowns) + hint tooltip.
Shields: - Shield/heal-absorb texture selection (Lumen striped pattern + LibSharedMedia
textures from other addons). Render swap keeps the absorb clips intact; custom
textures render as a stretched fill, default keeps the tiled Lumen look.
Fixes/docs: - Tokens font warm-up: SetFont before SetText (was aborting Tokens load on a
cold start) + STANDARD_TEXT_FONT fallback in UI:SetFont. - Slim CLAUDE.md; history/specs moved to the external Wissens-Index.
- toc 0.9.68.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Name/HP text colour + outline are now SHARED (Base "Text" section); size,
- Merge pull request #27 from NennMichSchinken/major-cd-aura-option-raidframes
new major-cd-tab - new major-cd-tab
- Merge pull request #26 from NennMichSchinken/font-resizing+tooltip+hint
font-resizing tooltip+hint - font-resizing tooltip+hint
Changed Fontsize for Tooltips and hints - Merge pull request #25 from NennMichSchinken/tracking-tab+tooltip
tracking-tab+tooltip-ui-update - tracking-tab+tooltip-ui-update
Updated tracking tab + tooltip ui - Merge pull request #24 from NennMichSchinken/feat/suite-shell-boxes-swatches
shell: sub-box grouping + rhythm spacing + field swatches across Raid… - shell: sub-box grouping + rhythm spacing + field swatches across Raidframes screens
Finishes the Raidframes section of the Suite-Shell (/lumen shell): Base, Raid,
Group and Auras are all db-wired and polished. Runs parallel to the classic
AceConfig.- Sub-box primitive (makeBox/subgroup): nested lighter boxes inside section
cards; heavy section header / light gold-label sub-box title / none. - Rhythm spacing (UI.LAYOUT.rhythm: tight/row/afterCheck/group) rolled out
across all Raidframes screens; removed the old per-section ad-hoc gaps. - Module gate: disabling "Raidframes aktiviert" greys + locks the module.
- Auras screen (new) + box grouping for Name/HP/Dispel/Aggro; cohesive
sections stay flat. - Aggro "Darstellung" dropdown now has 3 options (folds in the text checkbox,
data model unchanged). - ColorSwatch field mode (square chip, chip-only hit area); colour-picker
widened with 8px button gap; card border on OVERLAY so the header line shows;
first-launch tiny-tabs fix.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Sub-box primitive (makeBox/subgroup): nested lighter boxes inside section
- Merge pull request #23 from NennMichSchinken/feat/suite-shell-phase3
Suite-Shell Phase 3 — db-wired Raidframes screens + section panels - shell: Phase 3 — db-wired Raidframes screens + section panels
Suite-Shell Phase 3: first real screens, wired straight to db.profile.- Screens.lua (new): Raidframes Base/Raid/Group screens; widget get/set
read/write db.profile.raidframes directly + trigger UpdateLayout. Central
per-category spacing lives in UI.LAYOUT. - Widgets.lua: own HSV color-picker popover (Lumen style, replaces Blizzard
ColorPickerFrame) + ColorSwatch; SetWidgetEnabled on widgets for greying
out value-dependent options. - Shell.lua: stack:section() — each section renders as a card (surface +
gold hairline + header) instead of the centered gold divider, which also
removes the scroll-disappear bug at its root. Card sits below content via
explicit frame level. - Tokens.lua: bigger panel (scale 0.80, height 1060); central section-card
metrics in UI.WIDGET; UI.LAYOUT central spacing incl. base-tab toggle gaps;
GradientLine hairlines now PixelUtil-snapped (sub-dividers stay visible
when scrolling).
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Screens.lua (new): Raidframes Base/Raid/Group screens; widget get/set
- Merge pull request #22 from NennMichSchinken/feat/suite-shell-widgets
Feat/suite shell widgets - docs: update briefing to v0.9.36 (Suite-Shell Phase 1+2)
Document the Suite-Shell: new Shell/ files (Tokens/Widgets/Shell), the ns.W
widget toolkit, central UI.WIDGET/UI.ROLE tokens, and the parallel /lumen shell
entry. Adds §10.11; updates header status, §4, §10.1 file table, §10.5 next step.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - shell: bold primary button, clearer dropdown selection, live slider clamp
- Bundle HankenGrotesk-Bold (SIL OFL, same family) and give buttons a
per-variant weight: primary bold, ghost medium, danger semibold. - Dropdown: active row now marked by a gold left bar + gold text that persists;
hover is just the warm brown wash + bright text -> selected vs hover no longer
look almost identical (Florian feedback). - Slider value box clamps to max live while typing (not only on Enter).
- Checkbox label 14->16 (matches field/dropdown labels).
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Bundle HankenGrotesk-Bold (SIL OFL, same family) and give buttons a
- shell: softer dropdown hover + editable slider value box
- Dropdown row hover is now a warm brown (inkTint) that sets off subtly from
the menu ground instead of strong gold; gold stays only as a faint marker on
the active row (Florian feedback). - Slider value box is now an EditBox: click, type a number, Enter commits
(clamped to min/max + snapped to step), Esc cancels; focus brightens the
border. Drag still updates it live; typing guard prevents clobbering.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Dropdown row hover is now a warm brown (inkTint) that sets off subtly from
- shell: centralize widget metrics + cleaner checkbox tick + font sizes
- New UI.WIDGET table in Tokens.lua holds ALL widget dimensions (control/
button heights, checkbox size, slider metrics, gaps, group offsets). Widgets
and the gallery read only from it — no magic numbers — so a design change in
one place propagates everywhere. Fonts already centralized in UI.ROLE. - Checkbox tick now uses Blizzard's check texture (desaturated + ink-tinted)
instead of two hand-drawn lines — looks clean, not pixelated. - Font sizes to the 4-grid: section heading 24->20, group title 15->16,
value box 16->14, hint 13->12.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- New UI.WIDGET table in Tokens.lua holds ALL widget dimensions (control/
- shell: widget toolkit polish from screenshot feedback
- Dropdown menu rows: real hover feedback (wash was hidden on non-active
rows so OnEnter did nothing) — 3-state hover/active/off via alpha. - Checkbox: bigger box (18->22) + thicker 3px tick (less pixelated).
- Primary Button: vertical gold gradient (metallic sheen) + brighter hover.
- Fonts bumped per design: section heading 24, slider caption/value 16,
field/dropdown text 16, slider end numbers 14 medium, checkbox label 14,
button 16, hint 13. Split shared roles (selectText/checkLabel/sectionHead). - Adjusted gallery/widget heights for the larger type.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Dropdown menu rows: real hover feedback (wash was hidden on non-active
- shell: add Phase 2 widget toolkit (Slider/Select/Checkbox/Button/etc.)
New Shell/Widgets.lua exposes ns.W reusable builders on the design tokens:
SectionDivider, Field, Slider (pointer-driven), Select (popover dropdown),
Checkbox, Button (primary/ghost/danger), Card, GroupPanel, IconTile, Row.
Shared build primitives (Border/Fill/FS/SetColor/GradientLine) hoisted from
Shell.lua into Tokens.lua so chrome + toolkit share them (DRY). RenderDummy is
now a live, interactive widget gallery (sandbox data) for the screenshot loop.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #21 from NennMichSchinken/feat/suite-shell
Feat/suite shell - shell: add Suite-Shell Phase 1 scaffold (chrome, tokens, fonts)
Custom config shell in the Lumen design language, running parallel to the
existing AceConfig (/lumen stays classic, /lumen shell opens the new shell).
Phase 1 = chrome + look only; widgets and real screens follow in Phase 2/3.- Shell/Tokens.lua: design system ported to Lua (colors, gold opacities,
font roles, spacing, radii) as ns.UI, shared by shell + future widgets. - Shell/Shell.lua: panel chrome — header/wordmark, nav rail, tab strip,
content area, footer, vector rune corners, circular close-X, dummy content. - Fonts/: bundled Cinzel + Hanken Grotesk (static TTF, SIL OFL + licenses).
- Borders use PixelUtil snapping so 1px hairlines stay crisp under SetScale.
- Core.lua: /lumen shell entry point. .luacheckrc: shell globals. Version 0.9.31.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Shell/Tokens.lua: design system ported to Lua (colors, gold opacities,
- raidframes: fix groupingOrder nil error on role sort
Set the groupingOrder attribute before groupBy. Each SetAttribute triggers
SecureGroupHeader_Update immediately; with groupBy set first, groupingOrder
is still nil there and Blizzard's update indexes it -> error on login when
role sorting is active. Ordering groupBy last avoids the transient nil.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #20 from NennMichSchinken/docs/briefing-v0.9.30
docs: update briefing to v0.9.30 (MVP raidframes block complete) - docs: update briefing to v0.9.30 (MVP raidframes block complete)
- Header + §7 + §10.5: v0.9.21–.25 follow-up fixes after the v0.9.20
regression (HP%/aura-crash via ScaleTo100, talent->aura remap, click-cast
safe defaults, healer ID audit + Dawnlight). - Aggro warning (v0.9.28) and role/group sorting (v0.9.30) marked done +
live-confirmed; new §10.9 (aggro) and §10.10 (sorting) detail sections. - Next big step = Suite-Shell (docked live preview); MVP rests done.
- Notes the temp /ldump debug command (remove before release).
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Header + §7 + §10.5: v0.9.21–.25 follow-up fixes after the v0.9.20
- Merge pull request #19 from NennMichSchinken/feat/sort-role-group
raidframes: sort by role or group (secure header), raid opt-out - raidframes: sort by role or group (secure header), raid opt-out
- New Base-tab "Sortierung": Gruppe (default) or Rolle.
- Role sort is secure-conform via SecureGroupHeader groupBy="ASSIGNEDROLE" +
groupingOrder (EllesmereUI pattern); applied OOC, deferred in combat via the
existing secureLayoutDirty flush. groupingOrder gets ",NONE" appended so
role-less units still show. - Free reorderable role priority list (Tank/Heiler/DPS, up/down). Global —
same order for raid and party. - Raid opt-out: role sort always applies in dungeon/party; in raid only when
"Auch im Raid nach Rolle sortieren" is checked (default off — you build raids
by group). isRaidContext() gates it. - Test mode previews role sorting (fakes carry roles; stable bucket sort), and
honors the raid opt-out (size 5 = party always, size 20/40 = raid gated).
Known Blizzard limit (accepted): role sort needs assigned roles; all real group
content assigns them. In the open world other players' spec role isn't reliably
readable (would need async inspect) — EllesmereUI confirms the same.
Bump to 0.9.30.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Merge pull request #18 from NennMichSchinken/feat/aggro-warning
raidframes: add aggro warning (2-stage, per-stage border/overlay) - raidframes: add aggro warning (2-stage, per-stage border/overlay)
Event-driven via UnitThreatSituation (UNIT_THREAT_SITUATION_UPDATE) — threat
is NOT secret, so plain compares/shows are fine in combat. No polling.- Two stages: status 1-2 = "Aggro droht" (yellow), status 3 = "hat Aggro" (red).
- Per stage: display mode "Nur Rand" (border) or "Rand + Overlay", plus an
optional "Aggro" text (only in overlay mode). Defaults: red = overlay+text,
yellow = border only. - Shared appearance: overlay opacity + text size/position/offset/outline
(the two stages never show on one frame at once). - Dedicated aggro layer above the aura icons so border, overlay AND text stay
visible over the auras. - Tanks excluded by default (UnitGroupRolesAssigned) — they're meant to have aggro.
- Test mode previews both stages (Owlday red, Tormund yellow).
- Options live in Base tab as three blocks (red / yellow / shared). Disabled
sub-options grey out with a desc tooltip naming what unlocks them — the new
consistency convention (disable+tooltip for value-dependent options).
Bump to 0.9.28.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Merge pull request #17 from NennMichSchinken/fix/aura-hp-crash-clickcast-safe-defaults
Fix/aura hp crash clickcast safe defaults - clickcast: keep target/menu as safe defaults until rebound
With Click-Cast enabled, applyEnabled neutralized all clicks before
applying user bindings, so an un- or mis-bound left/right click did
nothing -> easy to accidentally lock yourself out of targeting/menu.
Now the baseline keeps the standard layout: left click = target, right
click = WoW unit menu (via the shared menu proxy, since togglemenu is
12.0.7-gated). Explicit BUTTON1/BUTTON2 bindings still override it.
Bump to 0.9.25.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - raidframes: fix HP% aura-crash, talent->aura remap, healer ID audit
- HP "Prozent" used UnitHealthPercent(u, true) without a curve; the *100
arithmetic sat OUTSIDE the pcall, so the live 12.0.7 value threw and
aborted RenderLive before its final RenderAurasLive call -> ALL auras
(HoTs and untouched Def CDs) vanished whenever HP text was "Prozent".
Now UnitHealthPercent(u, true, CurveConstants.ScaleTo100) -> guaranteed
non-secret 0..100, format directly, no arithmetic outside pcall. - Tracking add-dropdown sources talent IDs (C_Traits); proc/dupe talents
(e.g. Germination/"Verschmelzung") apply an aura with a DIFFERENT id than
the talent. Added TALENT_TO_AURA (155675->155777) + Raidframes:ResolveTrackId;
AddWhitelist remaps talent->aura before storing, Options dedupe hides the
redundant talent once the aura is tracked. - Healer ID audit vs EllesmereUI benchmark: all 7 healer HoT/def defaults
already matched (real aura IDs, no talent IDs). Only gap: Holy Paladin
missing Dawnlight -> added 431381 to HOT_DEFAULTS[65]. - Added temporary /ldump (/lumendump) debug command dumping own+target
HELPFUL auras (name+spellId+tracked marker) to find such mismatches.
Remove before public release.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- HP "Prozent" used UnitHealthPercent(u, true) without a curve; the *100
- Merge pull request #16 from NennMichSchinken/docs/briefing-v0.9.20
docs: update briefing for v0.9.20 (two bugfixes, pending live test) - docs: update briefing for v0.9.20 (two bugfixes, pending live test)
HP percent x100 fix + HoT category positive-whitelist-only fix (PR #15).
Marked as merged but not yet live-tested.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #15 from NennMichSchinken/fix/hots-buff-leak-hp-percent
raidframes: fix HP percent (x100) + HoT category leaking non-whitelis… - raidframes: fix HP percent (x100) + HoT category leaking non-whitelisted buffs
- HP "Prozent" showed 1% at full health: UnitHealthPercent returns a 0..1
fraction without the ScaleTo100 curve -> multiply by 100. - HoTs category showed non-whitelisted own buffs in combat (toys, trinkets,
general buffs that land in Blizzard's buff frame). Since the filter was
widened to plain HELPFUL, the old "fall back to filter when spellId is
unresolvable" path let them through. HoTs now require a positive whitelist
match (resolved spellId in the whitelist); no filter fallback.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- HP "Prozent" showed 1% at full health: UnitHealthPercent returns a 0..1
- Merge pull request #14 from NennMichSchinken/feat/aura-b4-whitelist-editor
raidframes: aura whitelist editor (Tracking tab) + HoT/reset fixes - raidframes: aura whitelist editor (Tracking tab) + HoT/reset fixes
- New "Tracking" tab (Base|Raid|Group|Auras|Tracking): per-spec whitelist
editor for HoTs + own defensives (entry list, search, add/remove, reset). - Spell source CC:GetAuraSpells() = castable spellbook + only SELECTED talents
(C_Traits) so talent/passive auras (e.g. Germination) are selectable without
dumping the whole tree; already-tracked spells hidden from the picker. - Custom AceGUI dropdown item (LumenSpellDropdownItem) shows the spell tooltip
on hover, lifted above the pullout's TOOLTIP strata. - Tracking is bound to the active spec (other specs' talents aren't readable
live; curated defaults cover them) -- no spec switcher. - Fix: hotsOwn filter HELPFUL|PLAYER|RAID -> HELPFUL + ownOnly so proc/talent
HoTs without a PLAYER source flag appear; match via base spell + alt-id map. - Fix: ResetWhitelist writes the curated defaults back directly.
- Public API: WhitelistEntries / WhitelistMap / Add / Remove / ResetWhitelist.
- luacheckrc: whitelist C_Traits, C_ClassTalents, GameTooltip. toc 0.9.19.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- New "Tracking" tab (Base|Raid|Group|Auras|Tracking): per-spec whitelist
- docs: update briefing for Aura Phase 2 (v0.9.11)
3 Kategorien (Fremde HoTs entfernt), HoT-/Defensiv-Whitelist pro Spec (alle
Klassen/Specs), echte secret-sichere Icons im Kampf, Blizzard-Standard-Debuffs.
Naechster Schritt B4 (Whitelist-Editor). Entscheidungen dokumentiert: kein CDM,
C_CooldownViewer ungenutzt, Cast-Event-Modul fuer fremde Defensiven spaeter.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #13 from NennMichSchinken/feat/aura-whitelist-icons-debuffs
raidframes: aura whitelists + Blizzard-standard icons & debuffs (Phas… - raidframes: aura whitelists + Blizzard-standard icons & debuffs (Phase 2)
- HoT whitelist (B2): hotsOwn zeigt kuratierte/gelernte "hot"-Spells pro Spec;
secret-sichere spellId-Aufloesung (OOC direkt, Kampf via gelernter Signatur). - Defensive whitelist (B3): volle Per-Klasse/Spec-Baseline (DEF_CLASS +
DEF_DEFAULTS + SPEC_CLASS); Defensives = EXTERNAL_DEFENSIVE ODER eigene "def";
Lazy Seed-Merge (whitelistSeeded) haelt Profile aktuell ohne entfernte erneut zu seeden. - Echte secret-sichere Aura-Icons im Kampf (SetTexture nimmt secret nativ an) fuer
HoTs/Defensives/Debuffs - kein Zahnrad-Platzhalter mehr. - "Fremde HoTs"-Kategorie entfernt (Ueberladung/wenig Nutzen) -> 3 saubere
Kategorien: HoTs, Defensives & Externe, Debuffs. - Blizzard-Standard-Debuffs: Filter-Modi raid (Default)/all/dispellable.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- HoT whitelist (B2): hotsOwn zeigt kuratierte/gelernte "hot"-Spells pro Spec;
- Merge pull request #12 from NennMichSchinken/feat/aura-whitelist-groundwork
Feat/aura whitelist groundwork - docs: mark v0.9.11 aura phase 2 groundwork (in progress) + v0.9.10 live-confirmed
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - raidframes: aura whitelist groundwork (RAID filter + signature learning)
Phase 2 groundwork toward an exact HoT whitelist. Two pieces:
Stufe A (live-visible): own + foreign HoT categories now also require the
RAID aura filter, which drops food/flask/general buffs while keeping
HoTs/shields. Secret-safe and works for foreign auras too.- hotsOwn: HELPFUL|PLAYER|RAID
- hotsOther: HELPFUL|RAID + subExclude HELPFUL|PLAYER
B1 (groundwork, invisible): passive signature learning. auraSig() builds a
4-filter fingerprint (PLAYER|HELPFUL with RAID / RAID_IN_COMBAT /
EXTERNAL_DEFENSIVE / RAID_PLAYER_DISPELLABLE) for the player's own auras;
learnUnitSigs() records sig->spellID into db.global.auraSigs[specID] out of
combat (where spellID is readable) so combat (spellID secret) can identify
own auras by signature later.
Performance: zero cost in combat (InCombatLockdown early-out); OOC steady
state is just a bounded scan thanks to the learnedIID skip-cache (each aura
instance fingerprinted once), cleared on spec change.
Live-test still pending; B2 (own HoTs -> whitelist), B3 (own defensives ->
Def), B4 (whitelist editor) to follow.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Merge pull request #11 from NennMichSchinken/feat/aura-categories
Feat/aura categories - docs: update briefing for v0.9.10 (four aura categories)
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - raidframes: add foreign HoTs, defensives & debuffs aura categories
Three more aura-indicator categories alongside own HoTs, all secret-safe
and filter-based:- hotsOther: HELPFUL minus own (subExclude via IsAuraFilteredOutByInstanceID)
- defensives: HELPFUL + EXTERNAL_DEFENSIVE (subInclude)
- debuffs: HARMFUL
Options become four inline category blocks from a shared builder
(auraCatGroup over AURA_TAB_CATS), each with its own get/set. Per-category
test-mode icons (FAKE_HOTS/FAKE_DEFENSIVE/FAKE_DEBUFF). Defaults: only own
HoTs enabled, the rest off + pre-anchored to distinct corners.
Test mode confirmed in-game; live behaviour (esp. the EXTERNAL_DEFENSIVE
filter) still to be verified.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Merge pull request #10 from NennMichSchinken/feat/raidframe-auras
Feat/raidframe auras - docs: update briefing for v0.9.9 (auras tab)
New 10.8 covering the aura-indicator system, plus version/status bumps
across the briefing (header, 7, 8, 10.1, 10.2, 10.5).
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - raidframes: add aura indicators (own HoTs) + fix heal-absorb tiling
Phase 1 of the aura-indicator system as a new Raidframes "Auras" tab
(Base | Raid | Group | Auras). One category for now: own HoTs.- 9 anchor positions + growth direction; center-line anchors auto-center
the row from the actual icon count (positionAuraIcons at render time) - Auto-Fit icon sizing from frame height, capped by frame width/height so
the full row never overflows the frame; manual sizes when Auto-Fit off - Secret-safe live scan via HELPFUL|PLAYER filter; cooldown swipe via
SetCooldownFromDurationObject (the only secret-tolerant cooldown setter) - Test mode renders fake HoT icons so the tab is previewable without a
live preview pane - Heal-absorb overlay now tiles vertically at fixed pixel size (256x128,
power-of-two) so the X pattern no longer stretches on tall frames; the
shield (256x40, non-PoT) stays vertical CLAMP to avoid a seam
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- 9 anchor positions + growth direction; center-line anchors auto-center
- Merge pull request #9 from NennMichSchinken/feat/share-export-import
Feat/share export import - docs: update briefing for v0.9.8 (export/import + spec fix)
Mark export/import done (new section 10.7), record the bundled libs, the
sparse-export/merge-onto-defaults design and the layout split, and point the
"next steps" to the small MVP features / suite-shell design. Note the
Click-Cast spec-dropdown blank fix.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - clickcast: always default spec dropdown to active spec
The spec dropdown was often blank on first open because rebuildCC() runs in
OnInitialize (before login), where GetSpecialization() returns nil, and
PLAYER_SPECIALIZATION_CHANGED does not fire on login. Resolve the spec lazily
in the dropdown's get, and also refresh on PLAYER_LOGIN / PLAYER_ENTERING_WORLD.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - share: add export/import (AceSerializer + LibDeflate)
One text code for the whole setup (WeakAuras/ElvUI style), granular per
module with a separate "import layout positions" switch. New Modules/Share.lua
handles the codec (AceSerializer -> LibDeflate deflate -> EncodeForPrint),
export and granular import. UI lives at the bottom of the Global > Profile tab.
Export is intentionally sparse (AceDB keeps unchanged values only in the
defaults metatable); import merges the incoming module onto a fresh copy of
the Lumen defaults so missing fields are filled cleanly and it stays
version-tolerant. Layout positions (point/x/y) are split out of raid/party
into a separate block so the layout switch works independently.
Bundles AceSerializer-3.0 and LibDeflate; bumps version to 0.9.8.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #8 from NennMichSchinken/feat/clickcast-phase2
clickcast: add Phase 2 bindings (mouse click-cast + hovercast) - clickcast: add Phase 2 bindings (mouse click-cast + hovercast)
New module Modules/ClickCast.lua: per-spec click-cast and hovercast
bindings on the secure raid buttons. Spell/dispel/rez resolve via
@mouseOver macros (one path for click and hover); target/menu route
through ungated "click" secure proxies. Hovercast uses a global secure
button + SecureHandlerStateTemplate driver ([@mouseOver,exists]) so keys
only redirect while hovering a unit. Bindings written out of combat,
deferred to PLAYER_REGEN_ENABLED in combat.
Options: restructure tree to Global (tabs Base|Profile) / Click-Cast /
Raidframes. Click-Cast node has dynamic binding rows (mouse button +
optional modifier toggle, or keybinding for hover), action type, spell
picker with icons + search + "helpful only" filter, and a spec selector
decoupled from the live spec (auto-follows active spec on change).
Raidframes: expose default clicks via ns.RF_ApplyDefaultClicks /
ns.RF_GetMenuProxy so ClickCast restores Phase-1 behavior when disabled.
Bump version to 0.9.7; whitelist new globals in .luacheckrc; sync CLAUDE.md.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #7 from NennMichSchinken/chore/untrack-tools
chore: untrack tools/ (local dev tooling, not part of the addon) - chore: untrack tools/ (local dev tooling, not part of the addon)
The luacheck runner and binary are local dev tooling and don't belong in
the published addon repo. Ignore the whole tools/ folder and stop tracking
tools/check.ps1 (kept locally). .luacheckrc stays as standard project config.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #6 from NennMichSchinken/phase1-secure-clicktocast
Phase1 secure clicktocast - docs: sync CLAUDE.md to v0.9.6 (click-to-cast phase 1 + luacheck)
- Header/§8/§10 status to 0.9.6; mark click-to-cast phase 1 as built and
live-confirmed, promote the bindings page to the next big step. - §10.5: document the secure-header architecture (Decorate host split,
header attributes, secure menu proxy, in-combat deferral, CC seam). - §2: record the now-installed luacheck toolchain and how to run it.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Header/§8/§10 status to 0.9.6; mark click-to-cast phase 1 as built and
- tooling: add luacheck linter (standalone binary + config + runner)
Set up a pre-commit Lua linter as required by the project workflow.- .luacheckrc: std lua51, WoW/Ace3 globals whitelisted, Libs/+tools/
excluded, WoW idioms silenced (unused ADDON, implicit self). - tools/check.ps1: ASCII-only runner (PS 5.1 reads BOM-less .ps1 as ANSI).
- .gitignore: keep the luacheck.exe binary out of the repo/package.
The binary itself (tools/luacheck.exe v1.2.0, lunarmodules release) is
fetched locally and gitignored. Current tree: 0 warnings / 0 errors.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- .luacheckrc: std lua51, WoW/Ace3 globals whitelisted, Libs/+tools/
- raidframes: secure unit buttons via SecureGroupHeader (click-to-cast phase 1)
Move the raid frames from display-only CreateFrame("Frame") to real
SecureUnitButtons managed by a SecureGroupHeader, making them
clickable/targetable with click-to-cast support (phase 1: left=target,
right=unit menu).- Factor the whole render stack into Decorate(host) so the same code
decorates both secure buttons (live) and the non-secure preview pool (test). - Live path: SecureGroupHeaderTemplate + SecureUnitButtonTemplate; Blizzard
owns roster/sort/in-combat. Orientation maps to header attributes
(point/columnAnchorPoint/unitsPerColumn=5/maxColumns=8). Event routing via
OnAttributeChanged(unit) -> unitToButton. - Right-click menu via a hidden SecureActionButton proxy (*type2=click,
useparent-unit) to stay taint-free under 12.0.7 (raw togglemenu is gated). - InCombatLockdown discipline: defer layout/size/visibility via a dirty flag,
flush on PLAYER_REGEN_ENABLED. Header updates roster in combat itself. - Seam ns.CC_RegisterButton(button) per button for the later full click-cast.
- Drop dead BuildLiveUnits + orphaned upvalues (caught by luacheck).
- Bump version to 0.9.6.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Factor the whole render stack into Decorate(host) so the same code
- Merge pull request #5 from NennMichSchinken/docs-release-hygiene-todo
docs: add pre-release hygiene checklist (de-EllesmereUI, gitignore CL… - docs: add pre-release hygiene checklist (de-EllesmereUI, gitignore CLAUDE.md)
Capture the release-time cleanup in section 8: remove the 4 EllesmereUI
mentions from shipped Lua comments, untrack CLAUDE.md via .gitignore (kept
locally + mirrored to a private repo for backup), optional history scrub.
EllesmereUI is a learning benchmark only — nothing is copied, so no
attribution is owed; this is perception hygiene for the public/portfolio repo.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #4 from NennMichSchinken/docs-and-toc-patch-12.0.7
Docs and toc patch 12.0.7 - docs: add WoWAddonDevGuide reference and sync interface to 120007
Add Amadeus-/WoWAddonDevGuide (cloned at E:\Github\WoWAddonDevGuide) as a
second API/pattern reference in section 9, alongside EllesmereUI. Note the
guide targets 12.0.5 while live is 12.0.7, so verify new API details against
the Warcraft wiki. Sync the stale 120005 interface mentions to 120007.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - toc: bump Interface to 120007 for patch 12.0.7
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #3 from NennMichSchinken/docs-state-v0.9.5
docs: update state to v0.9.5 and next steps - docs: update state to v0.9.5 and next steps
Refresh CLAUDE.md to the current state: secret-safe render confirmed live,
tiled shield/heal-absorb textures (manual TexCoord + clip frames), in-combat
dispel detection, layout orientation, text outline options, and the
Global + Base/Raid/Group settings structure with per-context layout, position
and name/HP text. Set §8 next step to the Secure-Unit-Button (click-to-cast)
rework and bump version references to 0.9.5.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Merge pull request #2 from NennMichSchinken/raidframes-contexts-and-dispel
raidframes: per-context tabs, secret-safe dispels, layout & text options - raidframes: per-context tabs, secret-safe dispels, layout & text options
Layout- Fixed 5-person groups (raid groups / dungeon never mixed) with a
vertical/horizontal orientation option instead of a free "per column" slider.
Dispel (reliable in combat) - Detect via Blizzard's "HARMFUL|RAID_PLAYER_DISPELLABLE" filter + secret-safe
dispelName nil-check; color via C_UnitAuras.GetAuraDispelTypeColor + a
C_CurveUtil color curve, so type-accurate highlighting works in combat without
reading secret values. Two modes (recolor / border+overlay) and per-type colors.
Text - Name & HP text get an outline option (none / outline / thick).
Settings restructure - Left tree node renamed to "Global"; Raidframes uses Base | Raid | Group tabs
(naming convention in CLAUDE.md 4.1). - Layout, position and name/HP text are now per-context (raid vs party), each with
its own settings; shared look/dispel/test stay on the Base tab. - One-time profile migration copies old flat values into raid+party (deep-copies
colors) so existing profiles are preserved.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
- Fixed 5-person groups (raid groups / dungeon never mixed) with a
- Merge pull request #1 from NennMichSchinken/raidframes-tiled-absorbs
Add Lumen addon with secret-safe tiled absorb rendering - Add Lumen addon with secret-safe tiled absorb rendering
Initial content for the Lumen raidframes module plus its Ace3 libs.
Raidframes render health, heal prediction, shields and heal absorbs
secret-value safe (12.0): raw values go straight to StatusBars, geometry
is handled by clip frames anchored to the fills (no Lua math on secret
values). Shields and heal absorbs use Blizzard's tileable textures with
manual TexCoord tiling (fixed-size pattern, no stretching) and per-bar
clip frames anchored to the absorb fill, so the pattern is limited to the
actual absorb amount and stays seamless across the health edge.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com - Initial commit