ForeverChatFilter-v0.2.8
What's new
Forever Chat Filter
ForeverChatFilter-v0.2.8 (2026-10-13)
Full Changelog Previous Releases
- Check-All Runner + ForeverChatFilter 0.2.8 To Main (#134)
- tools: repo-wide check_all runner + CI (Capt yes 2026-10-12)
tools/check_all.py: luac 5.1.5 on every Lua file, TOC files exist, TOC version = Lua VERSION, main-file locals <= 195, raw StartMoving/RegisterForDrag ban (5 known leftovers), CopyToClipboard ban (tools/CLIPBOARD_EXEMPT.txt), all sanity scripts. Inherited failures in tools/KNOWN_RED.txt; CI fails on new breaks or if the list grows.
tools/forever_toc.py: sanity scripts read versions from the TOC (no hard pins).
ForeverQuestTracker.lua: 7 tag-mark helpers grouped into one tagMark table (200 -> 194 main-chunk locals). Same bodies, no behaviour or visual change. - check_all: TOC version floor vs base ref; sanity expected versions as floors; downgrade negative tests
- ForeverChatFilter 0.2.8: Whole-Word Blocklist, Hits Bubble, Release UI, Icon, Minimap Button, Hide Blocked Chat Bubbles, Service-Ad Pack (#130)
- ForeverChatFilter 0.2.2: blocklist words and names match whole words only (Elon no longer hides belong)
- ForeverChatFilter 0.2.3: Hits tab count bubble (Look spec a80bebbd, Capt 10:58 AM PT)
- ForeverChatFilter 0.2.3: UTF-8 letter edges only, unfinished |H/|T as text, fold accented capitals (Proof should-fixes)
- ForeverChatFilter 0.2.3: empty default blocklist for new installs (saved lists kept); community README
- ForeverChatFilter 0.2.3: release UI (Look spec 9821e4d0, Capt 12:34 PM PT): Gold/Boost Pack toggle on every checked channel, Reset All confirm, final strings
- ForeverChatFilter 0.2.3: Gold/Boost Pack skips Guild, Officer and Party (Capt 1:23 PM PT); blocklist still applies
- ForeverChatFilter 0.2.3: pack wording names Guild, Officer And Party (release-spec addendum)
- ForeverChatFilter 0.2.4: speech-bubble icon (Media\Portrait.tga) and minimap button (icon spec, Capt 1:43 PM PT)
- ForeverChatFilter 0.2.5: Hide Blocked Chat Bubbles, shorter Help rows (bubbles spec, Capt 3:20 PM PT)
- ForeverChatFilter 0.2.6: Gold/Boost Pack catches service ads (two-signal rule), bubble sweep cap and next-frame restore (Proof)
- ForeverChatFilter 0.2.6: service-ad rules allowlist community sites, need a core term or service domain; spaced, (dot) and leet domains (Proof corpus)
- ForeverChatFilter 0.2.7: service-ad rules tightened (Proof corpus 2): wts/selling/cheap out of Rule C, game-name sites need 2 soft terms, dotted letters joined, lvling core term
- ForeverChatFilter 0.2.8: boost-ad rule simplified (Capt): hide only with a non-community website link AND a core boost phrase; corpus 3 in sanity, link-free ads documented as accepted misses
- ForeverChatFilter 0.2.8: /fcf help and info lines use the signed Gold/Boost Pack sentence (Proof design check)
- ForeverChatFilter 0.2.8: link-free boost-ad path (Capt 4:03 PM): strong phrase next to a sales cue; generic phrases need a money cue; dev normal-chat lines in sanity
- ForeverChatFilter 0.2.8: help, /fcf help and info say 'Leveling Ads Hide With A Website Link Or Sales Words.' (Look signed); README and TOC Notes describe link-or-sales-cue rule
- ForeverChatFilter 0.2.8: Hits wrapped rows (spec, Capt 4:08 PM): 4-line wrap, 22-64 px rows, 6 px gap, 28 px pixel scroll, tooltip on cut rows; Hits bubble re-anchored on every tab change (Capt 4:09 PM); link-free path tightened (Proof corpus 4)
- ForeverChatFilter 0.2.8: Hits bubble anchors to the visible tab right cap (RightActive / Right), not the 32 px button top (Capt 4:17 PM)
- ForeverChatFilter 0.2.8: Report Missed Spam (spec 6e1e1cdd, Capt 4:21 PM): chat name menu entry via Menu.ModifyMenu, 10-min per-sender buffer, missReports cap 50, /fcf miss, Help rows
- ForeverChatFilter 0.2.8: Discord links out of the gold pack (Capt 4:43 PM); report times in server time (UTC); README Report Missed Spam section
- ForeverChatFilter TOC: restore X-Curse-Project-ID and X-Wago-ID
- tools: repo-wide check_all runner + CI (Capt yes 2026-10-12)
- Release Automation: CurseForge + Wago Packager (#131)
- Release automation: CurseForge + Wago packager for ForeverChatFilter
Add a tag-triggered packager workflow that publishes only ForeverChatFilter
(IDs 1742246 / n6VYaoNd). Other add-ons stay out of the release path.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Fix packager: run at git root with move-folders, pin actions, GH_API_TOKEN
Drop -t so the packager runs from the repo root, point -m at the ChatFilter
.pkgmeta, and move-folders that add-on to the zip root. Ignore sibling add-ons
so the archive is only ForeverChatFilter/. Trigger on ForeverChatFilter-v*
tags, pin checkout and packager to SHAs, and use GH_API_TOKEN.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Packager allowlist ignore plus -n zip name
Ignore every root path except addons/ and every addons/* name except
ForeverChatFilter, so new folders cannot leak into the zip. Name the
archive from the tag via -n "".
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Update release.yml
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Release automation: CurseForge + Wago packager for ForeverChatFilter
- Quest Tracker: Locals Under Cap + Minimap Check (v1.4.94) (#132)
- ForeverQuestTracker 1.4.94: main-chunk locals under cap + minimap sanity pin
Pack Elite/Dungeon/Raid/Heroic mark helpers into tagMark so the main chunk drops from 200 locals to 194 (under the 195 check_all cap and Lua 5.1 /reload limit), and update version-pinned FQT sanities to 1.4.94.
Co-authored-by: Cursor cursoragent@cursor.com - Fix duplicate 1.4.94 README tip assert in FQT minimap sanity.
Co-authored-by: Cursor cursoragent@cursor.com
Co-authored-by: Cursor cursoragent@cursor.com - ForeverQuestTracker 1.4.94: main-chunk locals under cap + minimap sanity pin
- ForeverRotation 0.2.0: split cast-rotation out of ForeverUI (ForeverUI 0.2.0 base only) (#122)
- ForeverUI 0.1.65: OOC DoT retry on failed/interrupted card cast + /fui castseqtest probe
- ForeverUI 0.1.65: Proof B1/B2 fixes
- ForeverUI_Move: skip ForeverBagsMinimapButton (Capt 8:54 AM PT)
- ForeverUI 0.1.65: /fui castseqtest [N] builds a DoT-refresh /castsequence cycle (reset=target/combat, auto filler count from DoT duration + cast time); own-cast DoT timer note (logic only) (Capt 10:16 AM PT)
- ForeverUI_Move: skip ForeverCombatDeskFrame (desk owns its safe-drag title grip; Move grip covered Minimize).
- ForeverUI 0.1.65 key guard: clear ForeverUI EditBox focus on click-away (GLOBAL_MOUSE_DOWN) and combat start; /fui unlockkeys emergency release (stop bind listen, ClearFocus, EnableKeyboard off on all ForeverUI frames, prints who held focus).
- ForeverRotation: git mv rotation files out of ForeverUI (history only; wiring next)
- ForeverRotation 0.2.0: split cast-rotation tools out of ForeverUI (ForeverUI 0.2.0 base only)
Capt 2026-10-11 11:47 AM PT. New addons/ForeverRotation (/frot, /foreverrotation):
DoT target cards, rotation editor, Recommend/Export, Ctrl-N binds, sequence
button, rotation minimap button, plus #105 DoT retry / castseqtest / unlockkeys.
ForeverUI keeps Buffs toolbar, Lua error panel (own backdrop), window drag,
and #110 ForeverBagsMinimapButton move skip.
- ForeverRotation_Core.lua: ForeverUISecret moved here; one-time deep copy of
rotation keys ForeverUIDB -> ForeverRotationDB (old keys kept); /frot;
/fui rotation aliases still work via the shared chain. - Guarded SaveBindings (Binds + Sequence): skip until UPDATE_BINDINGS fired
once and GetModifiedClick("CHATLINK") is not empty/NONE (10/10 bindings-cache
"modifiedclick NONE" killed shift-click chat links). - Button names unchanged (ForeverUIDotCard1-5, ForeverUISequenceButton/Reset);
own Bindings.xml header FOREVERROTATION; ForeverUI Bindings = BuffLayout only. - No ForeverUI minimap button yet (Look mocking).
- Sanity tools split: forever-rotation-* (renamed) + new
forever-rotation-split-sanity.py; base forever-ui-* retargeted.
- ForeverRotation 0.2.0: migration fills only missing keys (never overwrites); no 'copied 0' print
Proof #122 should-fix: one-time ForeverUIDB copy skips keys already in
ForeverRotationDB; migratedFromForeverUI flag keeps it to one run; fresh
install prints nothing. split-sanity adds never-overwrite, run-once and
fresh-install checks.
- ForeverBags 0.1.12: quiet sort (mute item pickup/putdown sounds while Sort runs) (#124)
- ForeverBags 0.1.11: Ties hint off the bottom border (#114)
- ForeverQuestTracker 1.4.93: readable guide arrow text + movable guide arrow (#123)
- ForeverQuestTracker 1.4.92: readable guide arrow objective + yards text (Option A)
- ForeverQuestTracker 1.4.93: movable guide arrow, saved per character
- ForeverQuestTracker 1.4.91: zone dropdown spans the list; Reopen After Combat fix (#121)
- FQT 1.4.91: zone dropdown spans from the first quest title to the scroll-bar column (Capt 11:20)
Left edge x46 (pad 12 + scroll inset 6 + row pad 4 + hop gutter 18 + gap 6), right edge on the list's right edge incl. scroll bar, y44, clear of the portrait circle; text truncates. Sanity 137. - FQT 1.4.91: Reopen After Combat only after an auto-minimize; manual changes win (Capt 11:28)
Any manual setOpen clears the pending reopen; combat start/end use the slide target (D.isOpenTarget) so a mid-slide state isn't misread. Sanity 143.
- FQT 1.4.91: zone dropdown spans from the first quest title to the scroll-bar column (Capt 11:20)
- ForeverQuestTracker 1.4.90: Sparkle loot highlight, softdebug, edge drawer (#119)
- ForeverQuestTracker 1.4.86: loot highlight drives soft-target interact so quest boxes get the outline/icon
- ForeverQuestTracker 1.4.87: visual-only loot highlight (restore 1.4.86 SoftTarget CVars) + read-only /fqt softdebug
- FQT 1.4.87: softdebug dedupe/throttle + issecretvalue guards; legacy SoftTarget restore only if still 1.4.86 value; loot sanity block fix (Proof B1-B3)
- FQT 1.4.88: Sparkle turns all outline CVars off (normal+raid, engine) + CVAR_UPDATE re-apply while Sparkle
- FQT 1.4.88: mask own CVAR_UPDATE echoes (applying flag) + give up per CVar after 2 misses (Proof loop sim)
- FQT 1.4.89: remove Outline loot mode (Sparkle + Leave), migrate saved outline to sparkle, restores marked as restores
- FQT 1.4.89: loot hint at y 140 (23 px under Leave) + Title Case settings window strings (Proof design gate)
- FQT 1.4.89: Title Case minimap tooltip per fquest-options spec 3a270c89
- FQT 1.4.90: edge drawer per fquest-drawer spec e324630d
New ForeverQuestTracker_Drawer.lua (zero new main-chunk locals): Left/Right edge drawer, pull tab, 0.2s ease-out slide, vertical-only ForeverCore safe-drag, zone filter dropdown, Share All (0.5s spacing), docked stock details out of combat, Auto-Minimize In Combat + Reopen After Combat, Hide Stock Quest Tracker with restore guard. Settings window 558px. New tools/forever-quest-tracker-drawer-sanity.py. - FQT 1.4.90: keep dock record through combat; restore panel layout after combat (Proof B1)
undock() in combat keeps D.docked, queues restore (+ pending hide) for PLAYER_REGEN_ENABLED; never records our own false as the original. Sanity +5 checks. - FQT 1.4.90: stock gold chevron icon on minimize + tab; combat close hides details now (Proof design B1 + should-fix)
ChatFrameExpandArrow texture (flipped for left) on the UIPanelButtonTemplate minimize (template normal/highlight/pushed, icon nudges on push) and on the pull tab. Combat close hides QuestLogFrame immediately; only the UIPanelLayout restore waits for PLAYER_REGEN_ENABLED. Settings portrait gets a SetPortraitToTexture fallback. Sanity 106. - FQT 1.4.90: minimap left-click toggles our drawer; stock tracker stays hidden while the setting is on (Capt 9:36)
Cause: left-click Hide()d ForeverQuestTrackerFrame; the drawer OnHide re-ran applyStock with want = setting and oursOn() = false, so the restore guard Show()ed QuestWatchFrame. Now left-click calls D.toggleFromButton (show if hidden + slide open, else slide open/closed) and want = setting only. Sanity 110. - FQT 1.4.90: combat undock restores QuestLogFrame's pre-dock anchors; chevron texture fallback (Proof should-fixes b1d5922f)
dock() records the stock frame's points; undock (combat or not) puts them back immediately (plain frame), else the stock left-panel slot; only UIPanelLayout waits for combat end. setChevronTex falls back to UI-SpellbookIcon-NextPage-Up when GetTexture is empty. Sanity 117. - FQT 1.4.90: plain /fqt toggles the drawer; chevron fallback keyed on SetTexture return (Proof 5346ca22)
Slash routes through ForeverQuestTrackerDrawer.toggleFromButton() (old show/hide only if the drawer isn't loaded), so /fqt never leaves no tracker on screen. setChevronTex uses SetTexture's return value. Sanity 119. - FQT 1.4.90: Forever Auction frame chrome + 40x88 pull tab per fquest-drawer spec 23a78325
Chrome = PortraitFrameTemplate child (FA.buildChrome build: SetTitle, QuestBang portrait, tiled rock Bg) over the tracker; red X + stock HideButton minimize both slide the drawer closed with the Minimize tooltip; left edge portrait overhangs upward only. Content 12/12 padding, dropdown y44, list y70, shelf buttons 126. Pull tab 40x88: tinted rock in a 5px bronze bevel (top/bottom/inner), 32px portrait ring, gold chevron toward center; hover ADD glow + ring glow, pressed +1,-1 and body -25%. Minimap tooltip line 2: Left-Click: Open Or Close The Drawer. Sanity 129. - FQT 1.4.90: pull tab rounded inner corners r9 from stock circle mask (Proof b2e06ae1)
Bronze TempPortraitAlphaMask quadrant (r9) + slate quadrant (r4) per inner corner; straight bevel runs stop 9px short; screen side flush; rivets kept. Sanity 134. - FQT 1.4.90: zone dropdown half width, right-aligned to the list edge (Capt 11:16)
198 px (UIDropDownMenu_SetWidth 158), TOPRIGHT at the list's right edge incl. scroll bar (-12 + 16 cap), y44, clear of the portrait; Text fixed width, no wrap, right-justified so long zone names truncate. Sanity 136.
- ForeverChatFilter 0.2.1: blocklist word fit + scroll polish (#117)
- ForeverChatFilter 0.2.1: blocklist word right edge anchored to count left -6 (ellipsis), fixed right-aligned count, scrollBarHideable, scroll to newly added word (Proof)
- ForeverChatFilter 0.2.1: count sized to its digits (min 8 px, 5+ digits never truncate), word right = count left - 6, tighter cell margins; scroll bar explicitly shown/hidden by content vs view height, re-checked on OnScrollRangeChanged (Proof B1/B2)
- ForeverAuction 0.8.1: Deep Scan bar = max(groups done / groups, elapsed / Max Time), monotonic, full on Done; Stop keeps the fraction (Capt 7:42 PM PT) (#118)
- ForeverAuction 0.8.0 redesign (#115)
- ForeverAuction 0.8.0: slate PortraitFrame redesign, four tabs, Deep Max Time + Load/Auto Stop, Scan Summary + Deals, Alt+RClick trend (folds #57)
Capt approved 2026-10-10 4:31 PM PT. Spec sha256 0ccff8162a725254b4357d30c65a5b3d863dfcaf3413b10ee9d6691d56ba9c0c. No OnUpdate, no ReplicateItems, no auto-buy/post. - ForeverAuction 0.8.0 fix: cumulative Deep clock (pause only on real waits, never backward); Auto Stop row fits at 1.3 text scale; Alt+Right-Click: Price Candles tooltip; quality-colored names; pressed active timeframe; dashed Add Item chips
- ForeverAuction 0.8.0: Post Helper Post As (Single / Full Stack, settings.postAs); Fill Post writes price + quantity only (Capt 5:03 PM PT)
- ForeverAuction 0.8.0: static We'll Be Right Back Deep Scan board (Stop, no progress); Scan Music checkbox (off by default, stock Gnomeregan PlayMusic 53189/53190, respects sound CVars, StopMusic only if we started it) (Capt 5:52 PM PT)
- ForeverAuction 0.8.0: slate PortraitFrame redesign, four tabs, Deep Max Time + Load/Auto Stop, Scan Summary + Deals, Alt+RClick trend (folds #57)
- ForeverChatFilter 0.2.0: one window (Filter | Hits | Help), mute only (#116)
- ForeverChatFilter 0.2.0: one 480x590 PortraitFrame window (Filter | Hits | Help), mute only - remove soft-ignore/Sellers path, gold/boost pack hides the line only, never touches the ignore list; ForeverCore safe drag (Capt 6:46 PM PT)
- ForeverChatFilter 0.2.0: blocklist scrolls past 24 words (stock UIPanelScrollFrameTemplate, 2 columns, column-major A-Z, no OnUpdate) (Capt 7:18 PM PT)
- ForeverCombatDesk 0.2.1: This Fight solo page as tab 1 (stacked on #103) (#113)
- ForeverCombatDesk 0.2.0 (WIP): Capt local build - Capture / This Fight / Pulls, roster, multi-night, JSON export.
- ForeverCombatDesk 0.2.1: This Fight solo page as tab 1 (spec 883d510e), ported from #112. Bones chrome 1104x820, ForeverCore safe-drag, Capture/Pulls kept as tabs 2/3, 0.2.0 roster/detail pane retired. /fcd role, /fcd reset.
- ForeverCombatDesk 0.2.1: rotation-editor chrome (PortraitFrameTemplateMinimizable + Rock Bg + template title), minimized = title bar only (portrait hidden, 34 px), tabs at x 64 + i*124 y 42 per 0.2.0 dashboard.png.
- ForeverCombatDesk 0.2.2: healer variant of This Fight (spec Healer Variant, spec.md c8b315d6)
- ForeverCombatDesk 0.2.2: explicit /fcd role override wins over auto detection; /fcd role auto clears
- ForeverCombatDesk 0.2.2: buffs After line names the dropped buff ('Inner Fire Gone', '+N'), truncated to fit
- ForeverCombatDesk 0.2.2: After line caps icons at 3, UTF-8-safe name trim keeps ' +N Gone', tooltip lists Dropped / Still Up
- tools: retire ForeverBags no-autosell-on-open sanity; update quality-overlay sanity (#111)
- ForeverQuestTracker 1.4.85: settings window, loot highlight, 2x map numbers, minimap save fix (#104)
- ForeverQuestTracker 1.4.83: settings window, quest loot highlight, no map route squares, minimap save fix.
- FQT 1.4.83: options grip uses #99 safe-drag API (handle, {target, persist}).
- FQT 1.4.84: 2x map hop numbers, thick outline, fixed screen size (Look 7a).
- FQT 1.4.85: map hop numbers 25% smaller (20 -> 15), Capt 7:31 PM PT.
- FQT sanity: expect 1.4.85.
- FQT sanity: expect 1.4.85 TOC.
- ForeverCore 0.4.0: safe-drag helper for FQT settings window (#109)
- ForeverCore 0.4.0: safe-drag helper ported from #99 onto main (opts API for FQT settings drag; positional ForeverUI call refused so its fallback stays) (Capt 8:52 AM PT)
- ForeverCore safe-drag: one follow loop per grab (generation + per-drag token); re-grab test (Proof note #109)
- ForeverBags 0.1.10: Tidy default preset, Sort When Closed (default on) (#108)
- ForeverBags 0.1.9: fast batched sort, sort with bags closed, Sort On Close (#107)
- ForeverBags 0.1.9: batched near-instant sort, sort with bags closed, sortOnClose + /fbags sortclose (Capt 7:38 PM PT)
- ForeverBags 0.1.9: batch cap step-down 24->4->1 on failed moves; abort only after 3 failures at cap 1 (Proof PR #107)
- ForeverBags 0.1.9: one step-down per tick; 5-landing streak resets cap-1 failure count (Proof notes on a9017c9a)
- ForeverBags 0.1.8: Sell Junk, auto-sell, Sort Bags + Sort Order, minimap button (#106)
ForeverBags 0.1.7: Sell Junk, auto-sell, our own Sort Bags, options page - ForeverBags 0.1.8: Sort Order presets/custom list, minimap button (255, FUI/FQT build, fixed save), Title Case hints (Capt approved 6:14 PM PT)
- ForeverBags 0.1.7: vendor refusal skips item and continues (spec section 2), per-visit refused-slot guard
- ForeverBags 0.1.7: Sell Junk, Auto Sell Junk, own Sort Bags, options page (Capt approved 4:26 PM PT)
- ForeverUI 0.1.64: Capt's live-tested rotation build (#98)
ForeverUI 0.1.60: Clear re-listen; kill seq chrome; spell+unit (HOLD) - Merge pull request #102 from live-free-1776/capt/fqt-1.4.82
ForeverQuestTracker 1.4.82: Capt's live-tested local build - ForeverUI 0.1.64: Capt local live-tested build (target cards, error panel).
- ForeverQuestTracker 1.4.82: Capt local live-tested build (minimap button + tracker updates).
- ForeverUI README: document tip install gap (AddOns disk vs GitHub push).
Capt /reload only loads Interface/AddOns; main is still 0.1.24 until PR #98 lands.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.60: login print + /fui version so Capt can verify tip on disk.
GitHub push does not update Interface/AddOns; chat fingerprint confirms load.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.60: Clear auto-relisten; paint/seqpos never revive seq chrome.
Clear and BACKSPACE now leave capture armed for the next key (Capt could
not rebind after Clear). Every paint and applyPoint/seqpos force-retire
the SequenceBar/Button so on-screen Control-six chrome cannot return.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.60: TOC version bump + ARM_STEP comment contiguous.
Ensure ## Version is 0.1.60 and sanity finds Match SequenceButton exactly.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.60: kill seq chrome; Clear rebind; type=spell DotCard.
Hard-kill SequenceBar/Button (1x1, alpha 0, mouse off, off-screen);
unbind any SequenceButton key then re-ensure DotCard CTRL-1..5.
Clear stops listen+neutralizes so a new click can rebind.
DotCard arms type=spell|item + unit=npunit like SequenceButton (no macro).
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.59: hard-retire seq chrome; /cast [@plate]; unbind CTRL-N.
Capt still saw SequenceBar + CTRL-6 and Ctrl-1 dead after 0.1.58.
Root: Hide()-only retire left mouseable chrome; CTRL release used
GetBindingKey only (missed SavedVariables CTRL-6 at PEW); /target +
plain /cast still no-oped while seq type=spell on target worked.
Hard-retire SequenceBar (1x1 host, alpha 0, mouse off, never Show);
scan GetBindingAction CTRL-N and unbind SequenceButton; arm
/cast [@nameplateN] with PRE fail-open when npunit is set.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.58: DotCard /target+/cast; retire seq chrome.
Ctrl-1 still no-oped after 0.1.57 while seq CTRL-6 kind of worked.
Root: sticky held survived false plate-gone→up flickers, and Forever
does not deliver type=spell+unit=nameplate while health paints. Arm
unconditional /target nameplateN + /cast|/use (no [exists] conditional);
clear held whenever UnitExists; true gone clears npunit for reserved.
Hide ForeverUISequenceBar; stop auto CTRL bind for SequenceButton —
cards are the cast UI per Capt/spec.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.57: clear sticky held only on false plate-gone.
Reserved recycle stays held when state-plate=up. Forever sticky
miss is state-plate=gone + UnitExists — clear held there only.
Restricted-env stub gains Show/Hide for PRE self:Show().
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.57: clear sticky held so Ctrl-N casts.
0.1.56 spell+unit still no-oped live: false plate-gone stuck
sidecar held=1 while UnitHealth painted; PRE gated held before
UnitExists recovery. Clear held+Show when the plate token exists,
allow up-only CLICK, and warn once on empty rotation.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.56: DoT cast via spell+unit; minimap open.
Cards painted health but Ctrl-N no-oped: /target macrotext and
[@nameplateN,exists] failed closed while Unit* still worked. Arm
type=spell/item + unit=nameplateN; recover false plate-gone/armed=0
when UnitExists still holds. Classic minimap button toggles the
rotation window (not auto-cast).
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.55: bind OnKeyDown only while listening.
A permanent OnKeyDown on the keybind slots kept eating CTRL-N and
action keys after mouse-look was restored. Install the script in
startListen and clear it in neutralizeKeyboard so casts work again.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.54: stop bind slots from stealing mouse-look.
SetScript OnKeyDown can re-arm keyboard consume on Forever. Neutralize
immediately after arming the script, and again from editor OnHide /
open / PEW so a stuck listen cannot leave mouse-look dead.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.53: H in-combat legend + login scale.
Center the horizontal combat legend on all visible cards including
mid-fight, 16 px below the tallest (99+16 when unkeyed). Apply saved
DoT scale after the strip exists so /reload and login pick it up.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.52: keep unkeyed 13 px grow without moving art.
Combat SetSize on the unprotected slot only. Positions stay at the
last OOC collapse. Vertical legend accounts for the extra height.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.52: freeze combat art on last OOC collapse.
Keyed card art no longer snaps back to the slot index at pull.
In combat it stays over its own SABT; mid-fight art is Shown at
parked n+1. Art and legend live on ForeverUIDotArt, a non-protected
sibling of the strip, so combat SetPoint never references a
protected frame. Vertical legend sits 16 px below the lowest
visible card including mid-fight. Harness covers gap1 H/V.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.51: seq SetFrameRef, OOC collapse, plate Show/Hide.
applySidecarDrivers runs after state.btn is set so the seq wrap can
GetFrameRef. OOC the group collapses to spec :223; SABTs re-point on
the strip. Combat art uses the next collapsed slot; the legend sits
below the 5-slot extent. No visibility driver; no BaseTemplate sidecar.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.50: reset on dead/gone before sidecar fail-closed.
Wrap PRE still rewinds seqi when the unit is dead or gone even if
GetFrameRef("info") is missing, then returns false so the press does
not cast.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.50: OOC-only slot layout, 605 legend, sidecar fail-closed.
SABTs sit on the strip, not the art slots, so combat paint is alpha/text
only. Keep all five slots; legend is 605 px / below the 5th. Seq sidecar
Hide/driver defer on combat reload. Document the 0.2 s throttle slip.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.49: protected sidecar, state-driver disarm, seq reset.
Card and seq Info frames are SecureHandlerStateTemplate so lockdown
GetFrameRef is legal. Combat disarm/hide uses RegisterStateDriver;
insecure re-arm is OOC at regen. Reset to step 1 on dead/gone, target
change, and regen. Collapse unused slots, TOP-align names, center the
legend on the visible group, and fail-open SECRET hostility on nameplates.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.48: reserved-key no-op, combat layout, spec 09f204b8.
Proof 0.1.47 blockers: sidecar armed no-op until regen, pre-lay slots,
SABT not parented by card art, regen GUID dedupe, UnitCanAttack nil,
merge-once settings, seq reset only dead/gone, legend on the group,
Ctrl-1..5 no-shift. Editor closes only via X or /fui settings.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.47: keys-stick-to-mobs, live nameplate miss, death reset.
Capt 0.1.46 live (SDF-1): UnitCanAttack=1 and IsSpellInRange(nameplateN)=nil
were treated as false/OOR; "Not specified" was filtered as a critter. Fail-open
those paths and add /fui debug. Dead/gone units reset seqi to 1 in wrap PRE
before the no-op so the next press is step 1.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.46: string-metatable secret fallback and health compare.
Shared ForeverUISecret no longer treats getmetatable("") as secret.
UnitHealthPercent uses truthiness, not ~= nil. UNIT_HEALTH plate
resolve is target/focus/mouseover only. Comment: secret ownership
on a nameplate may still create a card. NO_ISSECRET BASE42 matches
the 0.1.42 baseline (4 fails, editor rows, 0 foreign cards).
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.45: wrap UnitGUID landmine and nameplate-only cards.
RestrictedEnvironment 12.1.5 has no UnitGUID. CLICK_PRE now uses
UnitExists/UnitIsDead plus sidecar reseti. Cards come from nameplate
tokens only so a secret GUID cannot duplicate target+plate or ghost
on token reuse. 0.1.44 excerpts fail the whitelist sandbox; 0.1.45
passes. Logic-only; no visual change.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.44: issecretvalue=nil parity and harness SetAlpha.
Sequence CD compares and ForeverUI foldName now pcall when the
secret detector is missing. Health scale and leftover DoT math do
the same so UnitHealthPercent still SetValue. Load-order SetAlpha
stores alpha so secret-name cards are counted.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.44: secret names SetText, usable icon not inverted.
Proof FAIL of 0.1.43: SetDesaturated(usable) painted grey when the
spell was usable, and readableString(UnitName) folded secrets to '?'.
Pass secret names to FontString:SetText, leave the lead icon normal
under a secret IsSpellUsable, use GetAuraDuration for the DoT swipe,
and keep cards when aura name/ownership/GUID are secret. Adopt Proof's
stricter secret harness.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.43: secret-safe combat paint (cooldown, usable, health).
Never compare or do arithmetic on Forever SECRET cooldown, aura, usable,
or health values. Per-card paint is isolated so a timer field cannot
blank name or health. Harness secret stub: 0.1.42 cooldown compare
throws; 0.1.43 combat events produce 0 Lua errors.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Note 0.1.42 clip/outline fixes in Settings stock-check.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.42: Proof 0.1.41 FAIL — clip reorder, resize dashes.
Skip scrolled-out rows in reorder hit-test using the well clip and
GetEffectiveScale so a drop on the slot with 9+ steps lands at the
end. Re-lay dashed unlock outlines after each group layout and
OnSizeChanged so H/V match the current rect. 5px/4px dashes. Dedupe
pendingWrappers by button. Clear the cooldown swipe when it ends.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.77: nameplate kill bangs, drop row loot icons.
Pull loot/kill cues from PR #100, then polish Capt feedback: bigger bottom-aligned nameplate !, no per-line collect bangs (gold text only).
Co-authored-by: Cursor cursoragent@cursor.com - ForeverUI 0.1.41: Proof 0.1.40 FAIL — lead button, reorder, cooldown.
Forward-declare makeLeadButton so ADDON_LOADED can build the rotation
button and DoT group. Test rows before the list well; a still click is
a no-op; drop below the last row is the end; 15s reorder cancel.
Drive the cooldown swipe and unusable desat+0.6 from SPELL_UPDATE_*.
Dashed unlock outlines at the spec offsets. Refuse group unlock in
combat and re-lock on regen. Queue combat card wrappers. Real TOC
load-order harness plus the listed behavior tests.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.40: approved Look editor and detached rotation button.
Capt approved the rotation window 2026-10-07 5:37 PM PT. Restores the
0.1.38 Look editor, then splits the rotation SABT onto its own frame
and fixes Proof M1-M11 plus combat/minimize/reorder items.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Reapply "Tighten 0.1.38 layout sanities to Look row anchors."
- Reapply "ForeverUI 0.1.38: Look-spec rotation editor and DoT strip."
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.39: park Look redesign; keep 0.1.37 window.
The 0.1.38 three-column editor is parked on
cursor/foreverui-rotation-editor-redesign-parked pending Capt review.
This tip stays on the 0.1.37 standalone two-column window.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Revert "ForeverUI 0.1.38: Look-spec rotation editor and DoT strip."
- Revert "Tighten 0.1.38 layout sanities to Look row anchors."
- Tighten 0.1.38 layout sanities to Look row anchors.
Font-scale checks use the 44px name/meta offsets and keep
the three-column boxes inside 880x576 at 1.0/1.15/1.3.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.38: Look-spec rotation editor and DoT strip.
Build the 880x576 three-column ForeverUIRotationEditor to Look's
handoff (Capt approved 2026-10-07). Keep stay-open and input-lock.
Drop Escape-close so the Game Menu is not opened or hidden in combat.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Note 0.1.37 focus-only Escape in DESIGN.
The editor is not in UISpecialFrames; Escape closes only while focused.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.37: keep the editor open beside the spellbook.
UISpecialFrames made CloseSpecialWindows hide the window whenever
another panel opened. Use a plain UIParent Show, focus-only Escape,
and the Proof layout/combat-guard notes.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.36: standalone rotation window with spellbook drop.
Move the editor out of the stock Options canvas into a two-column
ForeverUI window so spells can be dragged from the spellbook. Slim
Settings page only opens that window. Keep the 0.1.35 input-lock.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.35: stop Settings/binds from eating login input.
A shown Settings canvas plus bind slots that consumed keyboard
(EnableKeyboard without restoring propagate) locked keys and mouse-look
on character enter. Hide the canvas at load; keyboard only after a
clicked bind slot, with combat/hide/timeout cancel.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.34: charge instant DoTs a GCD in Recommend.
Setup and filler steps use max(castSec, live GCD) so Corruption / Flame
Shock / instant Immolate / Conflagrate are not treated as zero-time.
Trinkets stay off-GCD. Room is shortest - setup - latency.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.33: fold Assist Recommend + Export onto this tip.
Port #82 Assist heuristic (live cast times, DoT duration, GCD, latency,
known specs) and Export onto the MultiTarget tip. Recommend + Export stay
on the existing Settings rotation page. Advisory only; no auto-cast.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.32: DoT lock cells in a transparent H/V window.
One cell per locked mob; Settings persist horizontal (left→right) or
vertical (top→bottom). Locked stays see-through; unlock shows a shadow
outline and drags via enableSafeDrag or throttleWhile cursor-follow.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.31: skip trinkets unless the target is a boss.
Settings checkbox (default ON) persists ForeverUIDB.skipItemsUnlessBoss.
Item steps get seqready=0 on trash so the seq bar and DoT buttons walk
past them. Stock boss = worldboss classification or boss1..N tokens.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.30: raid mark above NAME on DoT lock column.
Stock GetRaidTargetIndex + SetRaidTargetIconTexture on RAID_TARGET_UPDATE.
Show only — does not assign marks or gate casts. See-through, 0.5–2.0
scale, and hotkey under ROT stay.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.29: center-out DoT lock column plus clamped scale.
Capt locked mockup: NAME → health pill → dots → ROT → hotkey, see-through
chrome, no portrait. Health is paint-only. Settings slider/stepper scales
the strip; ForeverUIDB.dotScale clamped to 0.5–2.0 on load and write.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.28: settings keybinds with lowest-free Control-N.
Assign a key per live rotation / multi-target button on the Settings
page (stock SetBindingClick + KeyBindingButtonTemplate capture). Defaults
take the lowest free CTRL-N, skip stock/sticky combos, and refill holes
when a button dies or clears. Combat bind writes wait for regen.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.27: Settings rotation page; live buttons are just buttons.
Stock Settings canvas first (RegisterCanvasLayoutCategory), InterfaceOptions
fallback, BasicFrameTemplateWithInset last. Manual create/edit plus lean
Recommend (#82 detectSpec unpack, ForeverUI-only). Strip R/E/arrow chrome
from the live seq bar; reset stays hidden for the keybind.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.26: per-target DoT expiry resets the next click.
Each locked GUID tracks up/missing sequence DoTs via UNIT_AURA. An
unprotected sidecar carries reseti so the next click casts the first
missing DoT, then wrap POST walks later steps. Secret auras keep the
last known step. Still click-per-cast; no auto-sequence.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI DoT strip: click only nameplate or current-target SABTs.
Focus/mouseover can keep a lock painted, but those tokens have no
pre-bound button. Prefer nameplateN so same-named mobs stay GUID-safe.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.25: hidden-until-DoT multi-target rotation buttons.
Add ForeverUI_MultiTarget.lua: up to 5 GUID-locked click-per-cast
buttons that appear after a sequence DoT lands, retarget via stock
SABT macrotext, and hide when the unit token is gone. No auto-cast,
no CLEU, no OnUpdate.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Merge pull request #97 from live-free-1776/cursor/foreverui-buff-bar-polish-5045
ForeverUI 0.1.24: Buffs bar polish (64px, V/H, no double-fire) - Merge origin/main into ForeverUI buff-bar polish; keep 0.1.24 + move frames.
- ForeverUI 0.1.24: Buffs bar polish (64px, V/H layout, no double-fire).
Capital B chrome/hotkey label, 2x missing-buff icons, /fui layout
vertical|horizontal (default left-center vertical), and wrap PRE skip
on mouse-up so a buff-icon click casts once. Additive only — does not
rebuild stock BuffFrame/AuraContainer.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Merge origin/main into ForeverUI move work.
- ForeverUI README: restore bag top strip wording for 0.1.22.
Co-authored-by: Cursor cursoragent@cursor.com - ForeverUI 0.1.22: drop StartMoving to stop mouse lock; top-strip follow only.
Co-authored-by: Cursor cursoragent@cursor.com - ForeverChatFilter 0.1.11: gold/boost pack + soft-ignore (#67)
- ForeverChatFilter 0.1.9: gold/boost pack + soft-ignore
Shipped Trade+General pattern pack hides gold/boost/dungeon-service
spam without adding each seller. Session TTL name/phrase soft-ignore
keeps the loop gone (hide-only, no mute). Editable blocklist stays.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.10: Sellers tab + Unignore
Hits frame bottom tabs list pack-hit sellers (name + triggering
line) with Unignore that clears session soft-ignore only — not
mute and not the durable blocklist.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - docs: mention FCF Sellers tab on the suite README
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.11: alphabetical blocklist UI
Sort the editable keyword list case-insensitively (same fold as
match). Add/reset/paint re-sort so new words stay A–Z. Hide path
unchanged.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.9: gold/boost pack + soft-ignore
- ForeverUI README: document always-on /fui move help.
Co-authored-by: Cursor cursoragent@cursor.com - ForeverUI 0.1.21: always-on panel drag and bag top-strip follow.
Co-authored-by: Cursor cursoragent@cursor.com - Ignore .worktrees for isolated feature checkouts.
Co-authored-by: Cursor cursoragent@cursor.com - ForeverQuestTracker 1.4.69: show quest level after status tag.
Co-authored-by: Cursor cursoragent@cursor.com - Merge pull request #93 from live-free-1776/cursor/docs-fqt-design-1-4-68
Docs: ForeverQuestTracker 1.4.68 DESIGN.md - Docs: ForeverQuestTracker 1.4.68 chrome, gold arrow, portrait bang.
Co-authored-by: Cursor cursoragent@cursor.com - Merge pull request #92 from live-free-1776/cursor/fqt-footer-button-bar-ddac
ForeverQuestTracker 1.4.68: gold guide arrow, ornate portrait bang, transparent checkbox row - ForeverQuestTracker 1.4.68: gold guide arrow, ornate portrait bang, transparent checkbox row.
Co-authored-by: Cursor cursoragent@cursor.com - ForeverQuestTracker 1.4.61: ship Guild chrome, portrait bang, row layout.
Tight bottom action shelf, taller 420x600 panel, compact top checkbox strip, custom QuestBang portrait on slate, hide row exclamation icons with aligned objectives, and offline import/sanity updates.
Co-authored-by: Cursor cursoragent@cursor.com - ForeverQuestTracker 1.4.52: tight ButtonBottomBorder shelf
Retarget onto the live Guild & Communities tip (1.4.51). Shrink
ACTION_BAR_H 44→28 and fill equal Recalculate/Invite slots with 2px pad
so the gray shelf is only slightly taller than the buttons — Capt's
buttons-on-buttons read on SDF-1.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.51: drop panel-button texture overrides
Proof FAIL on b826707: SetNormal/Pushed/Highlight/DisabledTexture
UI-Panel-Button-* without TexCoord stretched the atlas. makeAction
now mirrors Combat Desk createButton: plain UIPanelButtonTemplate
height 22, no MagicButton, no file overrides. Keep Title-Case autos
and ButtonFrame slate. Do not ship b826707. No merge.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.50: Combat Desk shelf buttons, Title-Case autos
Recalculate/Invite match Combat Desk createButton: MagicButtonTemplate
fail-open UIPanelButtonTemplate at height 22 with stock UI-Panel-Button-*
maroon/gold art. List labels Auto-Track / Auto-Accept / Auto-Complete.
Keep ButtonFrame slate + GossipTitle* bangs. No parchment. No merge.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.49: Guild & Communities ButtonFrame slate
Capt discarded mahogany / IRS Combat Desk chrome. Inherit
ButtonFrameTemplate like CommunitiesFrame: circular stock Portrait
(AvailableQuestIcon SetTexture, never SetPortraitToTexture), slate
title, stock ButtonBottomBorder shelf for Recalculate/Invite. Keep
short auto-* and GossipTitle* row !. No parchment. No merge.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.48: inherit stock GossipTitle* row !
Capt live-fail on 1.4.46–1.4.47 bangHolder CreateTexture. Rows now
CreateFrame-inherit GossipTitleAvailableQuestButtonTemplate /
GossipTitleButtonTemplate / QuestTitleButtonTemplate (CharacterFrame
copy-stock-screen method). paintRowBang only Shows the stock Icon.
Keep 1.4.47 mahogany/strip/shelf/420 locks. No parchment merge.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.47: top checkboxes, metallic well, real row bangs
Live-fail on 1.4.46: autos sat on the bottom shelf, no silver inset trim, and
per-row AvailableQuestIcon still missed (texture-on-Button under the title).
Move auto-track | auto-accept | auto-complete onto a #2B2926 strip under the
mahogany title. List well is InsetFrameTemplate (UI-Tooltip-Border fail-open).
IRS action shelf keeps Recalculate / Invite. Row bangs use a raised holder
plus Show/SetTexture/SetDrawLayer. Width stays 420. No parchment, no trophy.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.46: mahogany title, action shelf, row bangs
Live-fail on 1.4.45: charcoal title vs Combat Desk #2E1E11, no bottom shelf,
long auto-* labels on a 680-wide panel, and missing per-row yellow !.
Paint TitleBg + fqtTitleFill mahogany. Add a 72px #121212 action shelf for
auto-track | auto-accept | auto-complete. Restore 420x500. Overlay
AvailableQuestIcon beside each quest title. No parchment, no trophy.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.45: keep SetPortraitToTexture out of chrome comments
Parchment-chrome sanity treats SetPortraitToTexture( as a live call. Restate
the trophy ban without a parenthesized call so the lock stays a real-call gate.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.45: Combat Desk chrome, drop parchment, widen
Abandon the failed QuestFrame parchment fill. Inherit BasicFrameTemplateWithInset
like ForeverCombatDesk so outer chrome is gold title, gold trim, red X, and stock
dark slate Inset. Overlay AvailableQuestIcon as the crest. Widen 420→680 with
CHECK_STRIDE 216 so Auto-Track | Auto-Accept | Auto-Complete stay readable.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.43: paint Inset.Bg hole, show raw bang
5b899df hid Inset.Bg (the widget that already fills the metallic hole) so the
torn greeting page floated on black, and SetAlpha(0) emptied the portrait ring.
Color-fill Inset.Bg / NineSlice.Center / parchmentHole via SetColorTexture.
Portrait SetAlpha(1) + fqtQuestBang on the frame. Three-across checkboxes kept.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.42: three-across checkboxes, not wrap pixels
Proof rejected bed5341: CHECK_ROW_Y/WRAP_Y still resolved to (8,52)/(204,52)/(8,24).
Put Auto-Track | Auto-Accept | Auto-Complete on one row at CHECK_ONE_Y=32 with
CHECK_STRIDE=132 → (8,32)/(140,32)/(272,32). Recalculate/Invite stay below.
Parchment bleed + fqtQuestBang kept. Sanity asserts resolved pixels.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.40: bleed parchment, overlay bang, origin-grid wrap
1.4.38 still failed SDF-1: greeting 4-piece stayed native-size (black void),
SetPortraitToTexture circled the bang into the template trophy, and checkbox
points were still a051a117 LEFT+170. Bleed TopLeft SetAllPoints + SetSize
quads fill the hole; hide mixin portraits and overlay AvailableQuestIcon;
Track|Accept at CHECK_ROW_Y, Complete at CHECK_WRAP_Y. No OnUpdate, no TGA.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.38: keep Recalculate/Invite lock strings on Inset
Parent the bottom buttons to Inset after makeAction(frame, ...) so existing
invite/route-order sanities still see the list-panel Invite and BOTTOMLEFT 8,4 row.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.38: Inset-flush parchment + raw AvailableQuestIcon bang
Live 1.4.35 left black gutters (button-bar Inset + frame-center quads), the
ButtonFrameTemplate trophy (SetPortraitToAsset/SetPortraitToTexture need 64x64),
and a vertical checkbox stack when template defaults kept extra points.
HideButtonBar, fill Inset, SetPortraitTextureRaw/SetTexture fail-open, ClearAllPoints wrap.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.35: QuestFrame parchment + AvailableQuestIcon bang
Restyle the list panel to stock QuestFrame/GossipFrame chrome: ButtonFrameTemplate, UI-QuestGreeting parchment/gold, and the gossip available-quest ! in the portrait slot. Checkboxes wrap horizontal-first; size stays 420x500.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.13: click-per-cast rotation (#81)
- ForeverUI 0.1.0: missing self-castable buff click toolbar
Additive left-center SecureActionButton bar for known class self-buffs
that are not on the player. Event-driven, combat-lockdown safe, no CLEU.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.1: click-per-cast named rotation button
One SecureActionButton sequence (hotkeyable), reset does not cast,
CD skip advances only, named rotations manual switch.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.2: assignable reset-rotation hotkey
Stock CLICK binding on ForeverUISequenceReset — same as R, never casts.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.3: load FOREVERUI binding header once
header= only on the first Bindings.xml row. Client auto-loads the file;
repeating the header on reset warned on live.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.4: OOC click-per-cast rotation step editor
Add a small out-of-combat panel so the active named rotation can be
edited without a long /fui seq A, B, C line. Typed Add and cursor
pickup (GetCursorInfo after stock spellbook/bag pickup) append a step;
X removes a row. Open via E on the seq chrome or /fui seq edit.
Slash /fui seq remains the power-user backup. Cast path unchanged.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.5: accept action-bar pickup as a rotation step
GetCursorInfo after stock PickupAction is "action" plus the slot, not
spell/item. Map that slot through GetActionInfo to the existing step
shape (spell name, item:ID, trinketN, slot:N). ClearCursor only.
Never casts. Spellbook, bag, and typed add unchanged.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.6: cast-on-press seq button, 1.5x size, bar-macro fallback
Register ForeverUISequenceButton for AnyUp+AnyDown so ActionButtonUseKeyDown
actually casts the showing step before the wrap advances. Skip the up phase
(no double-cast). Leave pressAndHoldAction off so hold does not walk the
list. Size the seq icon to 68px (1.5x stock 45px ActionButton). Custom SABT
cannot PickupAction onto a stock slot; /fui seq bar CreateMacro/PickupMacro
a /click down macro instead. Reset still never casts.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.7: wrap PRE must return a message so POST advances
0.1.6 PRE skipped mouse-up but on down returned nothing. SecureHandlers
Wrapped_Click only runs postBody when preBody returns a non-nil message,
so SABT still fired (targeting / ask-for-spell) and seqi never moved.
PRE now returns button, "ok" on down (cast then advance) and false on up.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.8: no-op mid-cast; advance only after a completed cast
Wrap PRE returns false while UnitCastingInfo/UnitChannelInfo is set so a
press during a cast does not fire SABT or move seqi. POST no longer
advances on every down (empty casting info is idle, instant, or fail).
Ready spells arm seqawait; UNIT_SPELLCAST_SUCCEEDED / successful channel
stop advances. CD-item seqready==0 still advances only. Hold off. Reset
never casts.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.9: keep seq icon and SABT attrs in sync in combat
0.1.8 painted the next step after UNIT_SPELLCAST_SUCCEEDED while lockdown
blocked SetAttribute/Execute on the protected button, so the next click
still cast the old spell. Paint only from live seqi/type/spell. Stash the
completed-cast next step on unprotected ForeverUISequenceFlag and copy it
onto the SABT in wrap PRE on the next idle press, then that press casts
that same step. Mid-cast still no-op. Hold off. Reset never casts.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.10: do not call UnitCastingInfo in RestrictedExecution
0.1.9 probed UnitCastingInfo via Execute and SoftErrored
(RestrictedExecution.lua:428). Wrap PRE now only reads sidecar
GetAttribute("casting"). Insecure UNIT_SPELLCAST_START/STOP and channel
events write that flag on unprotected ForeverUISequenceFlag. Mid-cast
no-op, completed-cast advance, and combat icon/attr sync unchanged.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.11: wrap must not handle the plain sidecar
Capt 0.1.10 RestrictedFrames.lua:84 Invalid frame handle came from
wrap PRE GetFrameRef on unprotected ForeverUISequenceFlag. In combat
only protected frames are handles. PRE now CallMethod on the SABT,
copies casting/pend onto self, and GetAttribute. Picture still flips
on cast start; post-cast writes sidecar only.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.12: PRE must write pend onto SABT before cast
Capt 0.1.11: picture walked to Shadow Bolt / 2/4 but type/spell/seqi
stayed put (Immolate / Intellect loop). RestrictedExecution discards
CallMethod returns, so PRE never applied pend. SeqPull now SetAttributes
seqi/type/spell on the SABT; POST stashes seqnext* for the snippet copy.
Each successful idle click advances seqi. Mid-cast still no-op. No wrap
GetFrameRef of the plain sidecar. No post-cast SABT Execute.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.13: advance type/spell/seqi in wrap POST
Proof 0.1.12: CallMethod SeqPull / event Apply are insecure Lua.
Combat lockdown left the old spell armed. POST now SetAttributes
type/spell/item/seqi from pre-staged seq* attrs after the press
uses the current step. CallMethod SeqPaint is icon only.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverUI 0.1.0: missing self-castable buff click toolbar
- ForeverQuestTracker 1.4.34: tracker row numbers match map hops (#78)
ForeverQuestTracker 1.4.34: tracker row numbers match map route hops.
Capt Ship 2026-10-04 PT. Proof PASS tip d1eded1. Stock missing-quests stays separate. - ForeverQuestTracker 1.4.33: stock detail + elite + load fix
FQT 1.4.33: stock detail click, elite mark, Garrett 6322, locals pack + inviteMenu rows= parse fix.
Capt Ship 2026-10-04 PT. - ForeverCombatDesk 0.1.12: Look layout + formatAmount fix (#70)
- ForeverCombatDesk 0.1.7: one SavedVariables raid-night list
Group boss pulls under one instance night (GetInstanceInfo +
ENCOUNTER_START/END). Store OOC C_DamageMeter numbers and tip-8
gear names only. Up/down vs prior only when both pulls stored
stock numbers. Night pane uses stock scroll + Clear night.
Not a disk folder. No CLEU. No OnUpdate. No mid-fight watch.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.8: Personal / Raid / Night stock panes
Collapse the desk to three stock PanelTemplates panes. Personal keeps
this-fight OOC meter plus tip-6/8 surfaces and a StatusBar row from
stored pull numbers. Raid paints YOUR stored pulls for this instance
night only. Missing pulls stay blank slots; no interpolated charts.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.9: larger 980x800 stock desk
Grow BasicFrameTemplateWithInset so Personal / Raid / Night can breathe.
Drop the Personal outer ScrollFrame. Keep UIPanelScrollFrameTemplate only
as last resort for long ability, taken, gear, raid, and night lists.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.10: drop after-fight wear
Keep the OOC gear-at-pull freeze for swap compare. Remove after-fight
gear capture, dual gear columns, and night afterGear. Buff after-fight
list stays. You cannot change gear in combat.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.11: Look Figma layout
Restack Personal / Raid / Night to Look's 980x800 stock-widget mock.
Same tip-12 data: personal OOC meter, pull-to-pull StatusBars, at-pull
gear freeze, no after-fight wear, no CLEU.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.12: formatAmount in scope for filled rows
fillSplitMeterRow called later locals formatAmount / abilityPct as
nil globals when a stored number existed. Forward-declare them.
Same Look layout and tip-12 data. No CLEU.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.7: one SavedVariables raid-night list
- ForeverBags 0.1.6: stock ItemButton click for mana potion use (#71)
Quality rings were Frame children raised above bag slots. That sat in the
hit list and tainted ContainerFrameItemButtonMixin:OnClick ->
C_Container.UseContainerItem (AllowedWhenUntainted), blocking mana potions.
Paint with CreateTexture only. Never call UseContainerItem.
Proof offline PASS + Capt live PASS (mana potion click works). - ForeverCombatDesk 0.1.6: personal OOC desk through Gear tab (#69)
- ForeverCombatDesk 0.1.0: personal OOC combat desk
Capt Start/Stop LoggingCombat (5/10s) plus out-of-combat personal DPS
and ability StatusBars from C_DamageMeter. No CLEU, no raid/guild share,
no auto-play. Sanity pins TOC 16001 and the V0 locks.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.1: opt-in Auto-log on boss
Default-off checkbox persists on account-wide ForeverCombatDeskDB.
When on, LoggingCombat follows ENCOUNTER_START / ENCOUNTER_END only,
sharing the V0 5/10s budget. Manual Start/Stop stays. No CLEU.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.2: Minimize / Auto-minimize on boss
Manual Minimize/Restore probes stock MaximizeMinimizeButtonFrameTemplate
and fails open to a button. Opt-in Auto-minimize (default off) tucks on
ENCOUNTER_START and restores on END only if this tip tucked it.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.3: OOC personal damage-taken from C_DamageMeter
Stock Enum.DamageMeterType.DamageTaken / AvoidableDamageTaken already
exist. Show local-player taken totals and ability bars OOC; no CLEU
and no invented stood-in labels.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk: restore XML fail-open min-chrome citation
Sanity still requires the stock-check comment to mention fail-open
Minimize/Restore when MaximizeMinimizeButtonFrameTemplate is missing.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk tip-5: stock gap — no fight-buff session list
C_DamageMeter session structs have no buffs/auras-up fields. Docs-only
FAIL-to-ship; no buff-icon UI; version stays 0.1.3.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.4: at-pull buff estimate + after-fight real list
OOC C_UnitAuras snapshot frozen at ENCOUNTER_START for an estimate
(Might-style remaining vs fight length). First readable OOC scan after
the fight is a real list, not a whole-fight watch. No combat aura scrape.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.5: wider stock-tab desk
Split the personal OOC desk into five PanelTemplates panes
(Summary / Damage / Taken / Buffs / Settings) on a 720x560
BasicFrameTemplateWithInset. Probe stock tab templates and
fail-open UIPanelButtonTemplate. Remember last tab 1-5 only.
Tip-6 estimate vs real wording and no-CLEU / no-OnUpdate /
no combat aura scrape locks stay.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.6: at-pull gear freeze + after-fight wear
Sixth stock Gear tab. Freeze last OOC GetInventoryItemLink snapshot
at ENCOUNTER_START; first readable OOC scan after ENCOUNTER_END is
what's on you then. Weapons/trinkets plus named paper-doll slots.
Not live, not a mid-fight watch, not a DPS score, not auto-swap.
Account DB stays toggles + selectedTab only.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverCombatDesk 0.1.0: personal OOC combat desk
- ForeverTooltip 0.2.13: no DE/Vendor on spell tips (#66)
ForeverTooltip 0.2.12: hide DE line on non-disenchantable items - ForeverTooltip 0.2.13: never paint DE/Vendor on spell tips
AllTypes tooltip post-call was treating spell data.id as an itemID, so
Stoneskin Totem Rank 1 (a spell) got Disenchant + Vendor. Fail closed
unless the tip is clearly an item; keep the #66 totem-item DE gate.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverTooltip 0.2.12: hide DE line on non-disenchantable gear
Gate Disenchant results on stock Instant subclass / INVTYPE_RELIC and
the Cannot be disenchanted GlobalStrings. Totems and relic-slot siblings
no longer get a DE block; normal green/blue armor and weapons still do.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Merge pull request #65: FQT Invite menu + window stack tip
ForeverQuestTracker 1.4.28: larger Invite Nearby menu + Cancel - ForeverQuestTracker 1.4.28: larger Invite menu and Cancel
Widen the nearby pick list, enlarge name rows, use a readable title,
and add an explicit Cancel that hides the menu without inviting.
Escape, Invite toggle, and click-outside still close it. No invite-all,
no OnUpdate.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverQuestTracker 1.4.27: restack Invite onto window-stack tip
Port click-only Invite beside Recalculate from PR #56 onto the #63
Interface 16001 / Hits Raise tip. Nearby menu still scans nameplates
plus soft targets once per click; each name is InviteUnit.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix: retarget offline sanity Version pins to FCF 0.1.8 / FAH 0.7.25
Proof failed because chat-filter and auction candle sanities still
required the pre-Raise TOC Versions. Pins only; no addon Lua or TOC edits.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix: Forever windows Raise as one unit (FCF 0.1.8, FAH 0.7.25, ACL 0.1.2)
Hits Add/Remove were painting through overlapping DIALOG panels because
sibling roots never SetToplevel/Raise with their children. Same leak on
ForeverAuction (FAH/Info/Trend/Confirm) and ACLCapture.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix: Forever TOC Interface 16001 for Camelot/_classic_beta_
SDF-1 wow_classic_beta 1.60.1.70170 uses Interface 16001. All Forever*
TOCs still declared 120100 (Midnight), so the client marked every pack
out of date. Set ## Interface and ## Interface-Camelot to 16001, patch-
bump each Forever* Version, and retarget sanity allowlists.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.6: thin opt-in ? help
Add a stock-probed info button (tooltip + small help panel, default
closed). Copy stays four lines: open/close log, Clear, highlight =
matched block token, hide-only/session-only/no mute-report.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.6: session-only opt-in hits log
Move the blocked-hit ring off SavedVariables into in-memory session
storage (cap 100, wipe on /reload and PLAYER_LOGOUT). Add an opt-in
scroll UI (Hits button or /fcf hits) with token highlight, Clear, and
Close. Default hidden; blocks never auto-open it.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.5: local blocked-hit ring (/fcf hits)
Capt audit ring of the last ~100 hidden lines in account SavedVariables.
Keep fail-open hide-only filter behavior; no mute/report/upload/telemetry.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverBags 0.1.4: fail-closed no auto-sell on vendor open
Remove MERCHANT_SHOW UseContainerItem of quality-0 bags (Capt LIVE FAIL
ERR_VENDOR_DOESNT_BUY). Force autoSellGray off. Quality rings unchanged.
Proven tip: 2cbf31d66ef73a6fe7ef4b8fafcdfe6ee114ef25 - ForeverQuestTracker 1.4.25: cyan neon guide arrow (#58)
ForeverQuestTracker 1.4.25: cyan neon guide arrow (Capt live PASS 2026-09-30 PT + Proof offline PASS tip 0e030cdd58063e3eddce58d67825e8a1850a36d8). - ForeverQuestTracker 1.4.24: multi yellow-? sequential turn-in (#55)
ForeverQuestTracker 1.4.24: sequential multi yellow-? auto turn-in (Capt soft PASS + Proof offline PASS tip 76a1855). - ForeverAuction 0.7.23: multi-item candles + TF chips (#53)
ForeverAuction 0.7.23: multi-item candles + 4h/1D/Weekly/Monthly TF chips (Capt live PASS + Proof offline PASS tip e2f4f31). - ForeverTooltip 0.2.10: secret color table fail-open (#54)
ForeverTooltip 0.2.10: fail-open on secret color tables (Capt live PASS + Proof offline PASS tip 06a33a0). - ForeverTooltip 0.2.9: fail-open on secret tooltip strings (#52)
Combat-enter on Forever was LuaErroring: string.sub on FontString:GetText
in tooltipHasPrefix (already-painted Vendor:/Auction: walk). Secret strings
still type as string. Probe with issecretvalue/canaccessvalue, skip Forever
lines when the value is secret or inaccessible, and audit sibling name/price/DE
string paths in the same file.
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.4 Capt channel-expand (#51)
Expand /fcf picker to Capt's channel list. Defaults stay Trade+General.
Social events are opt-in; whisper is inbound local hide only.
Drop Services; ignore orphaned DB key. Zone IDs stay 1/2/22/26.
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ForeverChatFilter 0.1.3 (#50)
ForeverChatFilter 0.1.3: /fcf settings, channel picker, per-token same-line counts, whole-line Trade/General hide.
Capt soft PASS + Proof offline PASS on tip 9808544. - ForeverTooltip 0.2.8 + ForeverAuction 0.7.21 (#48)
ForeverTooltip 0.2.8 Auctionator-style DE + Auction polish; ForeverAuction 0.7.21 Last Scan stamp under Auction:.
Capt live PASS + Proof offline PASS on tip e983563. - fix(FAH): 0.7.20 honest flat candles that actually load (#49)
- feat(FAH): 0.7.18 Shopping ticker OHLC candles
Log browse/Deep min-buyout samples into ForeverAuctionDB.history,
draw in-game candles from the existing Shopping list, and open the
same SV chart from bags when the AH is closed.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FAH): 0.7.19 honest flat price candles
Paint flat / near-flat OHLC as a thin mid-plot dash with Y-pad and a
capped body width so 2–3 buckets cannot become a full-height slab.
Footer shows N samples · oldest -> newest from the history ring.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FAH): 0.7.20 pack constants so /reload can load
WoW Lua 5.1 dies when the main chunk exceeds 200 locals; 0.7.19
hit that at buildUI so the flat-candle paint never loaded. Move
numeric/string/label constants into one K table (173 locals).
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): 0.7.18 Shopping ticker OHLC candles
- feat(FAH): 0.7.17 hide helper and cancel Deep when stock AH closes (#42)
Proof offline PASS + Capt live PASS on tip 8e3c759. Hide FAH frames + dropPending Deep on AH close. Stock-check: additive hide only. - fix(ForeverBags): skip bag actions while bank open (#46)
bankSession gates sell/hooks/rings while BankFrame open. Capt live PASS + Proof offline PASS on tip c9a7089. - feat(FQT): map route NN + SuperTrack override + Recalculate (1.4.23)
FQT 1.4.23: greedy NN map hops, SuperTrack override, Recalculate clear+NN + guide/arrow to hop 1. Layout second-row under checkboxes. Capt live PASS + Proof offline PASS on tip df43609. - fix(FQT): finish Auto-Complete at an open vendor (#44)
- fix(FQT): finish Auto-Complete at an open vendor
merchantSuppressesAuto still pauses Auto-Accept and available
gossip while MerchantFrame is shown. Complete/progress uses a
narrower gate so n<=1 vendor turn-in can finish. TOC 1.4.18.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): invert merchant-pause if complete is blanket-blocked
Check tryCompleteDialog before requiring merchantSuppressesComplete
so main 5f9e339 fails on the vendor turn-in lock.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): finish Auto-Complete at an open vendor
- fix(FQT): Auto-Complete gossip yellow-? turn-in (#43)
- fix(FQT): Auto-Complete gossip yellow-? turn-in
Select C_GossipInfo.SelectActiveQuest(questID) before index
SelectGossipActiveQuest. Prefer ready turn-ins over available
accepts. Treat isComplete nil/false via ReadyForTurnIn and a
single gossip active. TOC 1.4.16. 1.4.15 stays a live FAIL.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): one unambiguous gossip turn-in Select*
Eggbot lock: Auto-Complete issues one C_GossipInfo.SelectActiveQuest
when gossip has exactly one completeable (isComplete / ReadyForTurnIn).
No n==1 guess, no GossipTitleButton Click, no second Select* on retry.
TOC 1.4.17. 1.4.16 stays a live FAIL for the guess/hammer path.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): Auto-Complete gossip yellow-? turn-in
- feat(FAH): 0.7.16 drop Sub#, Band beside Deep, 460x570 (#41)
- feat(FAH): 0.7.12 one Shopping list + stock SearchBar + right-click add
Cut the duplicate FAH SearchBar. Named browse reads stock SearchBar.
Watch UI is gone. Watch SV names migrate into one Shopping list.
Profession and recipe-resolvable bag right-click add craft output.
Expandable craft panel uses last-scan SV prices only.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): drop craft panel from 0.7.12 lean tip
Eggbot lock. Expandable reagents and last-scan prices stay queued.
This tip keeps stock SearchBar, one Shopping list, and right-click add.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): right-click remove on Shopping rows
Keep the Remove button. Row right-click takes that name off the list.
Buy Hint does not auto-remove.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): restore expandable last-scan craft panel
Capt override. Shopping rows expand to output + every reagent with
last-scan SV prices only (missing paints -). No mid-Deep browse.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FAH): avoid extract_lua_fn on reagentsFromRecipe
The extractor treats the "function" type string as a nested function.
Needle-check schematic slots instead.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - chore(FAH): drop yieldIdle comment and Shopping stock-check sermon
Hook names stay on the Shopping right-click / craft bullets.
Sanity docstring removed.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): 0.7.13 top chrome, scroll Shopping, hide stock filters
Capt live FAIL on c402b33. Cluster Deep/Undercut/Idle at the top.
Hide stock SearchBar.FilterButton (ExactMatch/UsableOnly/LevelRange).
Cut Results 0/0 and Sell Assist. Shopping scrolls. Right-click add
seeds undercut of last-scan SV.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): keep Fill Post, compact 460x420 frame
Fill Post writes undercut of last-scan into stock sell PriceInput. Sell Assist stays cut. Frame height 940 -> 420.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): 0.7.14 align top chrome, Undercut under Deep Scan
Line up the top cluster on one left gutter. Undercut Cut% / -1c sit under Deep Scan. Refresh Notes and Info.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): 0.7.15 clear chrome overlap, lead Info with PAGE MAP
Stack Undercut under Deep, Hide Own/Idle on the next row after the Hide Own label. Info PAGE MAP is first so /reload shows current chrome.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): 0.7.16 drop Sub#, Band beside Deep, 460x570
Sub# was FAH-only power chrome, not stock. Removing it does not rebuild stock SearchBar/CategoriesList filters. Band% sits beside Deep Scan. Hide Own and Idle sit on the Undercut row. Buy Hint and Fill Post start at the left gutter. Shopping pool grows with the taller frame.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): 0.7.12 one Shopping list + stock SearchBar + right-click add
- feat(FAH): 0.7.11 Deep overlay flush to AH panel + Idle Info
- feat(FAH): hide stock AH browse chrome during Deep Scan
Deep Confirm still drives C_AuctionHouse.SendBrowseQuery. While that sweep
is running, Hide SearchBar / CategoriesList / BrowseResultsFrame so the
stock Buy list does not flash every subclass. Restore on sweep end,
dropPending (cancel / AH close), or AH reopen if no sweep is live.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - docs(FAH): name Idle List Scan in the Info window
PAGE_INFO /fah info now states default off, named shopping-list only,
AH-open idle, never Deep, never auto-buy, and cancel on Scan/Watch/List/Deep
or AH close. Idle List Scan behavior is unchanged.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - revert(FAH): show stock browse chrome during Deep Scan
Capt rejected hidden SearchBar / CategoriesList / BrowseResultsFrame.
Deep again drives stock browse visibly. Idle List Scan Info blurb stays.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): opaque Deep overlay over stock Buy browse
While Deep sweep is live, cover SearchBar / CategoriesList /
BrowseResultsFrame with ForeverAuctionDeepOverlay and the same Sweep
status. Hide the overlay on Partial, Done, cancel, AH close, or leaving
Buy. Do not Hide the stock frames. Idle List Scan Info stays.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FAH): flush Deep overlay to AH Bg, drop flat black
Size to AuctionHouseFrame.Bg (PortraitFrame 2,-21 / -2,2). Fill with
auctionhouse-background-index or tiled UI-Background-Rock. No 0,0,0 box.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com
Co-authored-by: Cursor Agent cursoragent@cursor.com
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): hide stock AH browse chrome during Deep Scan
- feat(FAH): 0.7.8 Scan-cut, Deep Scan, Cut%, Recipe Watch, coin icons (#38)
feat(FAH): 0.7.8 Scan-cut, Deep Scan, Cut%, Recipe Watch, coin icons - feat(FAH): paint money with GetCoinTextureString
Tooltip, Results, and Sell Assist use stock coin textures.
ASCII PRICE_SEP stays. Missing API paints "-". Chat keeps moneyString.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): 0.7.8 Scan-cut, Deep Scan, Cut%, Recipe Watch
Cut the FAH Scan button. Named browse is stock SearchBar; /fah scan stays.
Rename Deep to Deep Scan. Replace Undercut -1% with Cut% N and a -1c toggle.
Add a Professions Watch hook for the selected recipe craft output name.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): cut Lean checkbox grid; Scan is named-only
Drop leanSubOn UI/SV and the checkbox Scan filter path. Named and
category browse stay on stock AuctionHouseFrame.SearchBar. Deep
Confirm, Info, Fill Post, sell-quiet, and ASCII PRICE_SEP stay.
TOC 0.7.7.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FAH): forward-declare sweep helpers before pumpQueue
Deep Confirm nil-called on the first sweep job because pumpQueue
closed over sweepTotalOver/dropRemainingSweepJobs before those
locals existed. TOC 0.7.6.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): stock Info window for the auction page
Probe UIPanelInfoButton / MainHelpPlateButton, fall back to an Info
button, and open a scrollable BasicFrameTemplateWithInset help frame
plus GameTooltip. No HelpPlate_Show.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): Deep class x subclass grid + Lean Scan checkboxes
Queue every Forever-known ItemClass x subclass from live Enum.*
walks. Tighter per-job Deep caps plus a 90s total wall. Lean Scan
paints persistable checkboxes on the FAH results area and applies
only checked filters in one lean browse.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FAH): Deep category sweep with per-class band floor
Deep Confirm now runs one capped browse per major class instead of a
single named dump. Band default is 25; floor resets per job so 1c junk
cannot starve Plate or recipes. Sweep persists mins to SV and keeps
Results as progress-only chrome.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FAH): ASCII price separators and Exact/Usable row
Forever UI font tofu'd Unicode arrows between min/suggest. Use ASCII
' -> '. Move Exact/Usable under Search so labels cannot overlap Deep.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FAH): stop sell ERR toasts during Scan bag paint
Scan/paintBags was calling C_AuctionHouse.IsSellItemValid with default
displayError=true, which toasts BoundItem/EquippedBag/ItemNotAvailable.
Keep bag paint silent; gate Fill Post with IsSellItemValid(loc, false).
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): Auto-Complete Progress steal + accept-next (#34)
Capt live PASS turn-ins+accepts; Proof offline PASS. Tip 2d467a6 Progress steal root-cause. - fix(FQT): run stock Progress complete on QUEST_PROGRESS
640ec55 stays a live FAIL. QUEST_PROGRESS now reaches the complete
pass on the event. Progress is not stolen by a shown Complete Quest
button. Stock QuestProgressCompleteButton_OnClick advances, then n<=1
reward finishes in the same pass. TOC 1.4.15.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): fail 640ec55 Progress steal and event miss
640ec55 stays a live FAIL. rewardDialogOpen treats a shown
QuestFrameCompleteQuestButton as the reward page, so Sarkoth
Progress never reaches stock QuestProgressCompleteButton_OnClick.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): Click Progress Continue on required-item turn-in
Stock QuestProgressCompleteButton_OnClick calls CompleteQuest.
Auto-Complete Clicks shown enabled QuestFrameCompleteButton, then
CompleteQuest when IsQuestCompletable. TOC 1.4.14. db4a62d stays a live FAIL.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): fail when Progress Continue stays stuck
db4a62d stays a live FAIL. Sarkoth Progress with the required item in
bags and Continue lit must Click QuestFrameCompleteButton.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): ShowQuestComplete on QUEST_AUTOCOMPLETE COMPLETE popups
Stock AutoQuest COMPLETE popup calls ShowQuestComplete. Auto-Complete
does the same for an already-listed popup. No UseQuestLogSpecialItem
and no bag scan. TOC 1.4.13. 90525cb stays a live FAIL.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): fail when QUEST_AUTOCOMPLETE does not ShowQuestComplete
90525cb stays a live FAIL. Item-in-bags complete uses the stock
COMPLETE popup, not UseQuestLogSpecialItem or bag scan.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): AcceptQuest an already-open follow-up after QUEST_FINISHED
Drop after-GetQuestReward accept schedules. QUEST_FINISHED accepts
or selects the follow-up only when that dialog is already open.
TOC 1.4.12. 9e3fefc stays a live FAIL.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): require QUEST_FINISHED AcceptQuest on an already-open offer
9e3fefc stays a live FAIL. After turn-in, AcceptQuest or
SelectGossipAvailableQuest the follow-up only when that dialog
is already open. Money-only n==0 and next-select bars stay.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): accept the follow-up after money-only turn-in
After GetQuestReward(0), schedule tryAcceptDetail and
trySelectAvailable. Do not mark an available select as handled
before AcceptQuest. TOC 1.4.11. 9e3fefc stays a live FAIL.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): fail when turn-in does not schedule accept-next
9e3fefc stays a live FAIL. After GetQuestReward(0) and after
SelectGossipAvailableQuest, the follow-up must be accepted.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): SelectGossipActiveQuest the next quest after turn-in
Skip the handled first entry. SelectGossipAvailableQuest is the
available equivalent. Money-only n==0 finish stays. TOC 1.4.10.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): require SelectGossipActiveQuest for the next quest
After turn-in, the next gossip active must be selected. First-only
SelectGossipActiveQuest(1) fails. fbe40c48 stays a live FAIL.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): pick the next quest instead of the first turn-in
One gossip action per pass. Skip the quest just accepted or
finished. Select only completeable actives. Keep money-only
n==0 Click plus GetQuestReward(0). TOC 1.4.9.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): fail same-pass gossip override and first-only select
Capt live on fbe40c48: one giver with multiple quests keeps
re-selecting the first turn-in. Lock one gossip action per pass
and skip the handled quest.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): finish GetNumQuestChoices()<mark>0 with GetQuestReward(0)
n</mark>0 is finishable, same as n<=1. Click Complete Quest when shown
and enabled, then GetQuestReward(0). n>1 still holds. TOC 1.4.8.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): prove money-only n<mark>0 Click plus GetQuestReward(0)
4b5ab4b stays a live FAIL. This lock requires an explicit n</mark>0
finish, not an else branch, and keeps gossip, Continue, and
accept-next.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): finish money-only Complete Quest after Continue
Prefer the reward page over a lingering Continue widget. Mark
QUEST_COMPLETE so GetQuestReward(0) runs for n<=1. Click Complete
Quest when that text is on QuestFrameCompleteButton. TOC 1.4.7.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): fail when progress return blocks money-only finish
Capt live on 4b5ab4b: Continue auto-advances, then Complete Quest
stays stuck on money-only. Lock reward-before-progress and the
QUEST_COMPLETE page mark.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): finish Complete Quest and accept the next offer
Click QuestFrameCompleteQuestButton when shown and enabled, then
call GetQuestReward for n<=1. Hold when n>1. Distinct 0.12s retry
tokens so scheduleRefresh generation debounce cannot cancel the
second pass. QUEST_FINISHED re-runs accept and gossip. Accept
shown wins over a lingering Complete Quest button. TOC 1.4.6.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): lock reward finish and next-offer accept
Failing check first: main still skips QuestFrameCompleteQuestButton
Click, shares one completeToken for retries, and never schedules
accept or gossip on QUEST_FINISHED.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Merge pull request #33 from live-free-1776/cursor/foreverbags-enumerate-crash-e13b
ForeverBags: Enumerate type-guard — real frames only (Proof PASS tip 469a611) - fix(ForeverBags): bind Enumerate frame, reject non-frames
ContainerFrameUtil_EnumerateContainerFrames yields (index, frame).
The single-var for-loop stored 1, 2 in the list and crashed
hookContainerFrames on frame.HookScript. Unpack both returns and
drop anything that is not a frame object.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(ForeverBags): lock Enumerate first-return crash class
A for-x-in over ContainerFrameUtil_EnumerateContainerFrames appends
the index. Live locals were CombinedBags + ContainerFrame1..7 then 1, 2.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Merge pull request #32 from live-free-1776/cursor/foreverbags-thicker-quality-ring-cac7
ForeverBags: thicker additive item-quality rings (Proof PASS tip b84c102) - fix(ForeverBags): lock additive rings to C_Container quality
Eggbot refine: overlay reads C_Container only, paints uncommon+ including
blue/purple/orange, and FAIL-bars OnUpdate, invented rarity, click-steal,
and any SetItemButtonQuality rebuild.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverBags): add thicker quality rings on top of stock borders
Stock IconBorder already paints uncommon+; Capt could barely see it.
Draw an additive 3px high-contrast ring from ITEM_QUALITY_COLORS, event-driven, no OnUpdate or click steal.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Merge pull request #31 from live-free-1776/cursor/fqt-chevron-aim-root-cause-8d27
fix(FQT): root-cause GuideChevron aim (drop OFFSET retune)
Proof PASS offline static 2026-09-24 PT. Capt live “looks pretty good”. - test(FQT): lock Capt NNE-of-north; client tip-up evidenced
Capt clarified 10-15° CCW of north on the SSE pair. Live −140° is NNE,
not toward the quest. Kill the tip-down / nearly-correct reading.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): root-cause GuideChevron aim, drop OFFSET retune
Mirrored atan2(dx,-dy) vs GetPlayerFacing/SetRotation (both 0=N CCW)
made error quest-dependent. Aim in world space on the pin's uiMapID,
coerce map % to 0-1, keep GuideChevron tip-up at SetRotation(0).
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Merge pull request #30 from live-free-1776/cursor/fqt-facing-offset-140-3928
fix(FQT): retune ARROW_FACING_OFFSET to −140°
Proof PASS offline static 2026-09-24 PT. Live UNCHECKED — Capt one /reload aim smoke. - fix(FQT): retune ARROW_FACING_OFFSET to −140°
Capt live miss after #29: chevron tip still ~20° clockwise. Named constant only.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): Capt-tuned ARROW_FACING_OFFSET −120° (#29)
fix(FQT): apply Capt-tuned ARROW_FACING_OFFSET - fix(FQT): apply Capt-tuned ARROW_FACING_OFFSET
GuideChevron used TomTom atan2(dx, -dy) - facing without a tip-axis calibration.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): lock GuideChevron facing offset
Failing repro for the Capt 2026-09-24 PT 120° clockwise miss.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - ship: land Proof-green tip 86eb7b8 on main (#27)
ship: land Proof-green tip 86eb7b8 on main (#26 stack) - feat(FQT): replace MinimapArrow with Forever chevron
Ship original GuideChevron.tga and point shade, artwork, and shine
at Interface\AddOns\ForeverQuestTracker\media\GuideChevron. Keep
the #24/#25 HUD gates. Bump TOC to 1.4.2.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FQT): pause auto dialog while merchant is open
Vendor+quest NPCs were losing the merchant when Auto-Complete
selected an active quest from gossip. Gate accept/gossip/complete
try* paths on MerchantFrame:IsShown and cancel pending dialog
tokens on MERCHANT_SHOW. Leave Capt checkboxes unchanged.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FQT): TomTom-scale green guide chevron HUD
Always show a custom green MinimapArrow chevron while FQT is
guiding. Hide SuperTrackedFrame / C_Navigation frames and the
ghost box so stock silver and FQT do not double-arrow. Text is
Blizzard waypoint / objective / distance only, plus the same
5-yard elevation cue. Restore stock SuperTrack when idle.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverAuction): drop quality, sort, and class UI
Stock AuctionHouseFrame already covers quality, sort orders, and
class filters. Remove the quality-cycle button, sort-cycle button,
and V1.9 CLASS_TOGGLES checkboxes. Keep price-asc SendBrowseQuery
for lean Scan / Deep / priceBand early-stop. Shopping list, Buy
Hint, sell-assist, and lean FAIL bars stay.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - docs(FQT): drop guide README sermons
Keep the overlay parent, SuperTrack vs fallback rules, and the
terrain-tile API gap. Drop restated absence banners and the
guide.visual field legend.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(FQT): skip SuperTrack set when quest already matches
NAVIGATION_FRAME_CREATED and SUPER_TRACKING_CHANGED both rebuild.
Writing the same quest id again can retrigger those events.
Compare GetSuperTrackedQuestID first.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - test(FQT): lock SuperTrack arrow and elevation rules
Sanity fails on a 48px arrow, OnUpdate, mesh/auto-walk strings,
user-waypoint invention, and a flat-color world map. It checks
elevationDelta cases and that blizzard visual hides the custom arrow.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(FQT): SuperTrack pin first, larger fallback arrow
Prefer SuperTrackedFrame / C_Navigation.GetFrame after SetSuperTrackedQuestID.
Hide the custom 2D arrow on that path so Blizzard owns facing.
Fallback uses a 96px arrow and ▲/▼ only when Blizzard pin Z and player Z differ.
Keep the painted world map as the route-overlay background.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(ForeverTooltip): latch skip before a second post-call
RecipeRankInfo can arrive with no item id. Defer paint until the
result id is known, and latch skip or vendor so a later call cannot
add AH lines.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverTooltip): vendor-only soulbound bar
Soulbound and BoP tips paint GetItemInfo sellPrice only.
Quality 0 and quest items still skip. Tradeable items keep
last-scan AH paint. DE stays deferred. No in-repo rate table.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverTooltip): skip Poor and quest paint
Skip the whole paint path when the hovered item or recipe result
is quality 0 or a quest item. Reagents and the blue footer stay
off those tips. Uncommon and above still paint.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverTooltip): last-scan item min and recipe rollup
Read ForeverAuctionDB.prices by itemID only. Paint AH min, qty,
and scan age on GameTooltip and ItemRef. Recipe reagents come
from C_TradeSkillUI or classic TradeSkill getters. Unscanned
reagents print an em dash. Missing item scan is omitted.
No OnUpdate, no SendBrowseQuery, no Auction SV writes. DE later.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - fix(ForeverAuction): chain V1.9 panel layout off the filter rows
Class, armor, and trade toggles plus results through bags now
anchor to the previous row. Avoids a nil y leftover and overlap
from fixed offsets under the taller filter block.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverAuction): V1.9 class toggles, Deep Scan, price band
Settings class/subclass checkboxes feed SendBrowseQuery filters.
Unchecked excludes. All-off refuses browse. Toggles do not scan.
Deep Scan is player Confirm only. Caps 40/2000/2000/120s. ETA from
page rate. Lean 5/80/400/12s unchanged. Idle List Scan stays lean.
priceBandPct defaults 0. Floor is min seen or list maxCopper.
Hide over-band. Early-stop only on price-asc full page above band.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverAuction): V1.8 idle-only shopping-list drain (default off)
AH-open only, one named list job at a time under V1.5 caps. Busy is
event/flag evidence (Forever inflight/queue, SendBrowseQuery hook,
browse results/failure); unknown is treated as busy. No OnUpdate,
no auto-buy, no auto-post.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverAuction): V1.7 sell-assist — suggest + player Post click
Bag picker shows last-scan min/undercut. Fill Post / Sell Hint pre-fills
Blizzard sell fields or chats the suggest. Player clicks Post each listing.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverAuction): V1.6 named shopping list under V1.5 scan caps
Persist ForeverAuctionDB.shoppingList as named craft mats with optional
max copper and qty. Scan List dropPending + one-flight named jobs only.
Checklist greens from bags + last-scan AH. Buy Hint stays player click.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverAuction): V1.5 mega-AH lean scan with page/row/wall caps
Harden browse so mega-server AH inventory cannot dump the full catalog
into Lua or UI. Cap pages, local rows, inspect walk, and wall-clock;
drop pending on new search or AH close; toast partial when truncated.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverAuction): V1 filters — quality/class/sort, usable, hide own
- feat(ForeverAuction): V0 throttled browse, local log, watchlist, tooltips
- docs(FQT): align README with dialog-only SelectActiveQuest
- feat(FQT): world-map nearest-first route polyline + hop markers
- feat(ForeverBags): auto-sell poor/gray at open merchant
- fix(FQT): multi-dialog accept/complete + truthy checkbox checks
- fix(ForeverQuestTracker): sort pinned quests by distance
- fix(ForeverQuestTracker): strip labels Auto-Track/Accept/Complete
Align quest-log options strip checkbox labels with locked V1.1 wording. Widen strip spacing for longer Title Case labels. Keep dialog-only auto-complete default off. - fix(ForeverQuestTracker): Title Case addon-authored UI strings
Panel and strip labels, empty states, and /fqt echoes use Title Case.
Blizzard quest titles, zones, objectives, and rewards stay as returned.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverQuestTracker): add quest-log strip and dialog complete
Anchor a thin track/accept/complete strip to Blizzard quest log Show.
Auto-complete calls CompleteQuest/GetQuestReward only on an open
progress or reward dialog. Accept and complete stay default off.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverQuestTracker): add dialog accept and pin guide
Auto-accept runs only on an already open offer or gossip dialog
and defaults off. Auto-track supertracks a current-zone Blizzard
pin and draws a throttled arrow plus a two-point ghost line.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverCore): add throttleWhile for active tracks
C_Timer loop that runs only while isActive stays true.
stopThrottle cancels the next tick. No OnUpdate.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverQuestTracker): add current-zone tracker UI
Replace the empty shell with a pooled list of current-map quests.
The tracker calls ForeverCore for coalesced refresh and reads only
Blizzard quest, task, and map APIs.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(ForeverCore): add coalesced event refresh helpers
scheduleRefresh and bindCoalescedEvents debounce with C_Timer.After.
Feature addons call these instead of writing OnUpdate loops.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - feat(suite): add ForeverCore and folder-per-addon shells
Move the V0 ACL checklist into ForeverACLCapture with a TOC
Dependencies line on ForeverCore. Core exports a version table
only. Quest tracker, meter skin, UI, and bags stay empty TOC
shells. DESIGN records the suite list and anti-jobs.
Co-authored-by: live-free-1776 live-free-1776@users.noreply.github.com - Add Forever API map and Capt theorycraft briefs
- Seed ForeverAddons monorepo: README, DESIGN, addons/tools placeholders
This mod has no additional files

