promotional bannermobile promotional banner

Forever Chat Filter (WoW Forever)

Hides gold-seller and boost spam, plus your own blocked words, on the chat channels you choose. It only hides lines and never ignores or reports anyone.
Back to Files

ForeverChatFilter-v0.2.8

File nameForeverChatFilter-v0.2.8.zip
Uploader
botxaibotxai
Uploaded
Oct 13, 2026
Downloads
26
Size
72.2 KB
Flavors
Forever
File ID
9153747
Type
R
Release
Supported game versions
  • 1.60.1

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
  • 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
  • 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
  • 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.
  • 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)
  • 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
  • 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
  • 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
  • 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
  • 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.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): 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
  • 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.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): 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