Elastibar-1.0.1-beta1
What's new
Elastibar
1.0.1-beta1 (2026-10-06)
- Merge pull request #9 from unselfish-means/chore/bump-1.0.1-beta1
chore(release): bump version to 1.0.1-beta1 - chore(release): bump version to 1.0.1-beta1
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #8 from unselfish-means/chore/curseforge-project-id
chore(release): add the CurseForge project ID and the beta tag rule - chore(release): add the CurseForge project ID and the beta tag rule
Elastibar's CurseForge project is 1730569. While it's in beta, every
tag must contain "beta" so the packager uploads a Beta file, not a
Release. CLAUDE.md spells out the rule and the tag commands; the README
says it's in beta.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #7 from unselfish-means/chore/curseforge-display-name
chore(release): name CurseForge files <Addon>-<version> - chore(release): name CurseForge files <Addon>-<version>
The CurseForge display name now matches the zip's file name, for example
Reclaim-1.0.3, instead of the bare version.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #6 from unselfish-means/chore/bump-1.0.0
chore(release): bump version to 1.0.0 - chore(release): bump version to 1.0.0
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #5 from unselfish-means/chore/bigwigs-packager
chore(release): upload to CurseForge with the BigWigs packager - docs: add a player-facing README and a CLAUDE.md for development
The README describes what's on main for players and is the CurseForge
description. CLAUDE.md points to the design specs, platform notes, dev
workflow, and release setup. .pkgmeta ignores both so they don't ship.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(release): read the CurseForge token from the CURSEFORGE_API_TOKEN secret
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(release): describe the BigWigs packager in .pkgmeta
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(release): package and upload to CurseForge with the BigWigs packager
Add the shared tag-triggered workflow that runs BigWigsMods/packager. It
fails on purpose until the .toc has an X-Curse-Project-ID and the
CF_API_TOKEN secret is set.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #4 from unselfish-means/chore/curseforge-packaging
chore(release): add .pkgmeta for CurseForge automatic packaging - chore(release): add .pkgmeta for CurseForge automatic packaging
Ship Elastibar/Elastibar as the package root and leave out the dev-only
ElastibarProbe, docs, scripts, and tests.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #3 from unselfish-means/feat/visibility-editor
feat(visibility): add the visibility rule editor - fix(visibility): dock the editor on whichever side of the settings panel has room
Near the right edge of the screen, clamping pushed the editor back over the
panel. It now docks to the left there, and re-docks after the panel is dragged.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(visibility): add the visibility rule editor
A docked editor window with presets, context-aware snippets, a draft that
survives closing and reloads, a live preview that never sends unknown
conditions to the game, and the translated rule for spec names.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #2 from unselfish-means/feat/account-rules
feat(buttons): enforce account-bar rules; support mounts, battle pets, and toys - Merge pull request #1 from unselfish-means/docs/github-account
docs(platform): record the unselfish-means GitHub setup - docs(platform): record the unselfish-means GitHub setup
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(buttons): enforce account-bar rules; support mounts, battle pets, and toys
Account bars now refuse spells, pet actions, and character macros with
a message, leaving them on the cursor. Mounts (cast by name), battle
pets (/summonpet), and toys (secure "toy" action) can be placed on any
bar, with icons, active glow, tooltips, and Shift-drag pickup. The
random favorite mount is refused for now.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #4 from unselfish-means/feat/layout
feat(layout): resize, snap, and configure bars in Edit Mode; shift-drag buttons - fix(buttons): place cursor contents on click so swapped items can be dropped
After a swap the old contents are on the cursor but no drag is in
progress, so the next action is a click, which ran the button's action
instead. Switch the action off in PreClick when the cursor holds
something and place it in PostClick, restoring the action if nothing
was placed. A release that arrives as both a drop and a click is
handled once per frame. Swap is now a decided behavior in the spec.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(layout): add a per-bar "Hide empty slots" setting
A checkbox in the bar settings panel (off for new bars) makes empty
buttons invisible. Uses alpha, which isn't protected, so it works in
combat and invisible slots still accept drops; they reappear while
something is on the cursor and while Edit Mode is open. Replaces the
global option in the options spec.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - fix(layout): keep the bar settings panel still while adjusting sliders
The panel was anchored to the bar, so resizing or rescaling the bar
moved the panel under the cursor and made the sliders jump. Open it at a
fixed screen position next to the bar instead, and make it draggable.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(buttons): shift-drag to move or clear button contents
Shift + drag picks a button's contents up onto the cursor and empties
it: drop on another Elastibar button to move, on a Blizzard bar to place
there, anywhere else to clear. Dropping onto an occupied button swaps,
putting the old contents on the cursor instead of losing them.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(layout): resize, snap, and configure bars in Edit Mode
- Drag a bar's right edge, bottom edge, or corner to change columns and
rows live (1..12 each), keeping the top-left corner fixed; buttons
shrunk away keep their contents. - Moving is a custom drag that snaps the top-left corner to Elastibar's
own grid (lines shown while dragging, Shift to skip, /eb grid <px>). - A bar settings panel replaces the right-click menu: Scale, Columns,
and Rows sliders, Layer (Behind/Normal/Above UI/Top), and Visibility,
Rename, and Delete. - Specs updated with the step 3 decisions; grid math and size clamping
have standalone tests.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- Drag a bar's right edge, bottom edge, or corner to change columns and
- Merge pull request #3 from unselfish-means/feat/pet-actions
feat(buttons): support pet actions - fix(buttons): resolve pet actions dragged from the spellbook
The cursor reports spellbook positions for pet actions, which the slot
guess treated as pet bar slots. Watch C_SpellBook.PickupSpellBookItem
for the picked spell ID and name and find the pet bar slot holding it
(commands like Attack match by name). Drop the slot guess; if the pet
action isn't on the pet bar, say so instead of placing the wrong one.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - fix(buttons): take the pet action slot from PickupPetAction
Pet commands (Attack, Follow) have no spell to match, and the cursor's
values don't map to slots on this client, so Attack could land as
Follow. Watch PickupPetAction (taint-safe hooksecurefunc) for the exact
slot dragged from the pet bar; keep spell matching as a fallback.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - fix(buttons): place the dragged pet action and keep it visible without a pet
The cursor's first value for a pet action isn't the pet bar slot on
this client, so the button mirrored the wrong slot. Find the slot whose
spell matches a cursor value (falling back to a slot-like value) and
log the raw values. Remember each pet action's icon and name so the
button shows it greyed out when no pet is summoned.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(buttons): support pet actions
Pet actions dragged from the pet bar mirror that pet bar slot via the
secure "pet" action type, so pet commands (Attack, Follow, stances)
work alongside pet spells. Buttons show the slot's icon, cooldown
(falling back to the spell duration object if values are secret),
usability, range, active state, and tooltip, and update on pet events.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - Merge pull request #2 from unselfish-means/feat/bar-model
feat(bars): add the bar model with character and account bars - fix(bars): make button clicks work and stop random checked highlights
Set typerelease alongside type with pressAndHoldAction, as Button Forge
does: presses are dropped, so mouse clicks act on release. Drive the
CheckButton checked glow from IsCurrentSpell/IsAutoRepeatSpell instead
of letting clicks toggle it. Stop ElastibarProbe auto-running at login,
where its control conditional printed "Unknown macro option".
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(bars): add the bar model with character and account bars
Replaces the 2x2 spike with real bars built from saved records:- BarStore (pure Lua, tested): create, delete, rename, list, find;
account bars in ElastibarDB, character bars in ElastibarCharDB;
buttons keyed by row,col so resizing keeps contents; migrates the
spike bar into a character bar named "Spike". - Bar/Bars: pooled secure frames with per-bar layout, scale, layer,
per-Edit-Mode-layout position, and translated visibility; every
change refused in combat. - EditMode: the spike's Edit Mode hook for every bar, with a per-bar
scale panel that keeps the bar centered. - Slash commands (list, new, delete, rename, vis, taintlog) until the
options panel exists.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- BarStore (pure Lua, tested): create, delete, rename, list, find;
- Merge pull request #1 from unselfish-means/feat/editmode-spike
feat: spike bar, Edit Mode hook, and v1 feature specs - docs(platform): attribute BuffFrame errors to taintLog, not MoveAny
The BuffFrame errors stopped with MoveAny enabled once taint logging
became opt-in. Details_RaidCheck errors come from its raid plugin.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): confirm Edit Mode hook works on Forever; record debugging lessons
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - fix(spike): make taint logging opt-in
Chat errors on XP messages appeared only in sessions where the spike
turned the taintLog CVar on at login. Only re-enable it after
/eb taintlog.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - fix(spike): stop combat taint from item range checks; use secret-safe spell cooldowns
The taint log showed every blocked action came from C_Item.IsItemInRange,
which is protected in combat; Edit Mode hooks were clean. Skip item range
in combat, show spell cooldowns via GetSpellCooldownDuration and
SetCooldownFromDurationObject, and log whether item cooldowns are secret.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(platform): note secret-value cooldown restriction in combat
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - fix(spike): hide Edit Mode overlay on exit; auto-enable taint log; probe secret values
Blizzard's ShowHighlighted re-shows the overlay, so hide it after
resetting the highlight. This client resets taintLog on reload, so the
spike turns it on at each login unless /eb taintlog off. Log which
duration/secret-value APIs exist, since SetCooldown rejects secret
cooldown values from addon code in combat.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(spike): add /eb taintlog to set the taintLog CVar directly
/console fails in this beta's chat code, so set the CVar via SetCVar.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(spike): log diagnostics to SavedVariables and add Edit Mode name tooltip
Everything Elastibar prints is also kept in ElastibarDB.log so taint
and /eb editmode output can be read after a reload. Edit Mode events
and selection are logged, diagnostics run once per session, and the
overlay shows an "Elastibar" tooltip on hover like Blizzard's frames.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - fix(spike): size spike buttons at 45px and stop Edit Mode hover error
ActionButtonTemplate is natively 45px on Forever, so the 36px grid let
buttons spill past the bar and the Edit Mode overlay. Blizzard's
selection overlay hover script needs self.system; replace OnEnter and
OnLeave like the other overlay scripts. Document both in the specs.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(spike): hook the spike bar into Blizzard Edit Mode
Shows a selection overlay on the spike bar while Edit Mode is open,
lets it be selected and dragged, keeps positions per Edit Mode layout,
and opens a small scale dialog (50-200% in 10% steps). Reports any
ADDON_ACTION_BLOCKED/FORBIDDEN events, and /eb editmode prints which
Edit Mode pieces this client offers.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): mark minimap icon behavior decided
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): mark options panel location and contents decided
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): mark LibDBIcon and separate icon/compartment toggles decided
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): add addon compartment entry to options spec
Forever has Blizzard's addon compartment; installed addons register via
the AddonCompartmentFunc toc field or LibDBIcon.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): add options panel and minimap icon specs
Also record that the spike confirmed account macros use indexes 1-120.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): drop templates from v1, make scale per bar, record spike results
Live-linked templates overlapped with account bars; v1 keeps character
and account bars only. Scale is a per-bar setting. The 2x2 spike passed
in game with no errors, including in combat.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): record decisions on delete, scope, templates, scale, edit mode
No delete confirmation; scope changes out of v1; templates are live
links; per-bar scale follows Blizzard's action bar scale; hook into
Blizzard Edit Mode if possible; Shift-drag to move or remove button
contents; mounts, toys, and pets count as items; custom macro tooltip
formatting may move to vNext.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - docs(specs): document decided v1 feature specs
Bars, layout and edit mode, buttons, visibility (including spec-name
rules and the rule editor), and platform facts from ElastibarProbe.
Each requirement is tagged Decided, Proposed, or Open.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - feat(spike): add 2x2 spike bar with spec-name visibility rules
One character bar of custom secure buttons on WoW: Forever: drag-and-drop
spells, items, and macros; cooldown, count, usable, and range display;
tooltips; a movable handle; and a visibility rule set with /eb vis.
Spec names in rules ([spec:beast]) are translated to native [spec:N]
using the talent columns from C_Traits group display info. A tie or no
points means no named tree matches. Includes standalone tests for the
translation.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(probe): prototype per-spec-group talent column lookup
GetGroupDisplayInfoByTreeID names the three talent columns. Walk the
config for each spec group via GetCombatConfigIDForSpecGroup and total
ranks per named column. Also pass GetGroupCurrencyInfo a groupIDs table.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(probe): record talent node groups and group display info
Nodes carry groupIDs, and C_Traits.GetGroupDisplayInfoByTreeID may hold
the column names the talent UI shows. Also records the class spec IDs.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(probe): discover talent APIs and rank spread by node position
The trait config has one tree with no sub-trees, so list every
talent-related function and frame the client exposes, dump one
purchased node, and total ranks per column position.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(probe): walk the trait config for talent tree names and points
GetTalentTabInfo is absent and GetSpecializationInfo is class-level on
Forever, so look for tree names and per-tree ranks in the active
C_Traits config, grouped by tree and sub-tree.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(probe): record talent tree names and points per spec group
Needed to translate [spec:<tree name>] visibility rules into the
native [spec:N] talent-group conditional.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(probe): add control to detect inconclusive conditional checks
On the 1.60.1 beta every conditional read as supported because unknown
conditionals evaluate false and their no-prefixed form true. A made-up
control conditional now flags when the <input disabled="disabled" type="checkbox" checked="checked" />/[nox] heuristic can't tell
real conditionals from unknown ones.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(deploy): add script to link addons into the beta client
Junctions every top-level folder with a matching .toc into the
_classic_beta_ AddOns folder. Idempotent; never replaces a real folder.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com - chore(probe): add ElastibarProbe API discovery addon
Dev-only addon that records which APIs, frame templates, macro
conditionals, and frame strata the WoW: Forever client (toc 16001)
supports. Results are stored per build in ElastibarProbeDB as sorted
line lists so builds can be diffed as text. Defers while in combat.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include
This mod has no related projects

