Skip to content

v0.9.104-beta

Pre-release
Pre-release

Choose a tag to compare

@NennMichSchinken NennMichSchinken released this 02 Jul 19:55
0519135

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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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