promotional bannermobile promotional banner

Grouper LFG

Grouper is a looking for group tool for WoW Classic
Back to Files

Grouper-v0.8.1

File nameGrouper-Grouper-v0.8.1.zip
Uploader
PmptastyPmptasty
Uploaded
Aug 5, 2026
Downloads
301
Size
198.3 KB
Flavors
Titan Reforged ClassicMoP ClassicRetailClassic TBCClassic
File ID
8584950
Type
R
Release
Supported game versions
  • 12.0.7
  • 5.5.4
  • 4.4.2
  • 3.80.0
  • 3.4.5
  • 2.5.6
  • 1.15.9

What's new

Grouper

Grouper-v0.8.1 (2026-08-05)

Full Changelog Previous Releases

  • release: Grouper v0.8.1 — Auto-Join repair, 2nd Role, per-flavour TOCs
    Auto-Join was dead on every Classic client and took several defects with it.
    fix: InviteUnit is no longer a global on Classic Era. Blizzard moved it into
    C_PartyInfo on Classic as well as retail; 1.15.9 removed the bare form. The
    call was gated on IS_RETAIL and fell through to a nil global, so every Classic
    client raised "attempt to call a nil value". Replaced with
    Grouper.InviteUnitCompat, which feature-detects. Verified against Blizzard's
    Classic Era source: C_PartyInfo.InviteUnit is documented there and no Blizzard
    Classic Era code calls the bare form. (AUTOJOIN-003)
    fix: Restored the confirmation popup deleted in 3308af5. It is not a courtesy —
    clicking it is the hardware event that makes the invite and the roster
    broadcast legal. Without it the flow ran tainted and produced eight
    ADDON_ACTION_BLOCKED errors per invite. OnAutoJoinRequest now only validates,
    refuses and asks; OnAccept invites and broadcasts. (AUTOJOIN-005)
    fix: Auto-Join refused anyone already listed in the group they were joining, and
    whispered the LEADER "disband your party first" on a self-request.
    (AUTOJOIN-001, AUTOJOIN-002)
    fix: A failed invite was silent on both sides — the error branch sat behind
    IsDebugEnabled. (AUTOJOIN-004)
    fix: The 2nd Role column showed a dash for everyone in BOTH tabs. Two causes: a
    secondary equal to the primary was suppressed, and most members carry no
    secondaryRole at all. Both renderers were private copies; they now share
    Grouper.SecondaryRoleText. (UI-012, UI-013)
    fix: An enabled LFG channel the player had not joined was skipped silently.
    (UI-014)
    fix: Shaman used the post-TBC blue on Classic Era, where it shares Paladin's
    pink. Flavour-gated. (UI-015)
    fix: Status bar ran the label into the version; Grouper_TBC.toc hardcoded
    v0.6.1 forever. (UI-016)
    fix: Long titles are sent as the community abbreviation (LBRS) rather than
    truncated mid-word.
    fix: Removed /grouper autojoin accept. Both autoJoin settings were write-only,
    and autoAccept promised to skip a popup that cannot be skipped. enabled is
    now honoured.
    chore: Per-flavour TOCs authored explicitly (TBC/Wrath/Cata/Mists/Mainline),
    enable-toc-creation off, interface numbers refreshed.
    test: 233 -> 319 assertions. New autojoin, flow, secondary_role, announce,
    appearance and toc specs. flow_spec drives Auto-Join and Sync end to end,
    handing each step the real artefact from the one before. env/protected.lua is
    enforced so ADDON_ACTION_BLOCKED is caught offline. Every fix above was
    verified by restoring the broken code and confirming the suite goes red.
    docs: CHANGELOG, Grouper_Bugs.md, CurseForge description and README updated.
    Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
  • docs: v0.8.1 changelog covers the whole harness adoption
    Brings the v0.8.1 section up to what actually landed: the submodule pin moved to
    62ec9e4, the spec count is 12, and four entries were missing -- the five harness
    contracts raised and delivered, the per-flavour sandbox that probes the expansion
    gate on all seven clients, the stub helper and the teardown-order leak it
    exposed, and the mixed-type annotation on players<input disabled="disabled" type="checkbox" checked="checked" />.level.
    Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
  • test: adopt the last two harness globals, and silence the diagnostics cleanly
    Adopts 62ec9e4 (UnitAffectingCombat, JoinPermanentChannel). All five contracts
    Grouper raised are now delivered, so installGaps() is empty -- each was verified
    by probing for the symbol before its stand-in was deleted, never on the strength
    of the written response alone.
    Three IDE diagnostics, fixed at the cause rather than suppressed:
    • assign-type-mismatch on players<input disabled="disabled" type="checkbox" checked="checked" />.level. Not a defect: the field is
      deliberately mixed-type ("?" is the display fallback, used identically at ~10
      write sites) and nothing compares a player's level numerically -- the only
      numeric comparisons on a .level are quest levels, a different field. Annotated
      ---@type integer|string, because coercing it to a number would silently turn
      "unknown" into a real-looking level 0 in the member lists.
    • duplicate-set-field reported against GrouperUtilities.lua, caused by specs
      assigning stubs with plain Grouper.X = function. The language server reads
      that as a second DEFINITION of the field, so a test file was putting a warning
      on shipped source -- and it could not be silenced from the spec, because the
      diagnostic attaches to the other file. Specs now stub through Tests/support/
      stub.lua, which assigns via rawset (a call declares nothing) and returns a
      restore function.
    • invisible on widget.frame in ui_spec, which is expected when a spec walks
      AceGUI internals.
      Converting to the stub helper exposed a real leak in chunks_spec: the
      CheckForMissingChunks teardown unwound its stubs in FORWARD order, so a stub a
      test appended over one the before_each installed restored the earlier stub
      rather than the original, leaving GetGrouperChannelIndex pinned at 5 for every
      later spec file. Invisible in a single-file run; it took two comms specs red on
      the full-suite run. All teardowns now unwind in reverse.
      Also fixes two specs that reassigned wow.channels instead of emptying it in
      place, which detached it from the reference the harness's GetChannelName holds.
      233 passed, 0 failed.
      Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
  • test: adopt the WoWAPITesting harness, and fix the five defects it found
    Adds the shared offline harness as the Tests/wowapi submodule (pinned bed4205),
    with Tests/support/addon.lua loading all 12 TOC files in order on the widget
    layer and driving the real Grouper:OnInitialize(). 10 spec files, 233 assertions
    passing, 41.08% line coverage measured with Tests/wowapi/coverage.lua.
    Five defects found by the suite on the day it was written, four of them raising
    a Lua error on a path players hit routinely -- invisible with the client default
    of error display off, which is why none had been reported:
    • UI-009 Tooltips wired to AceGUI .label/.titletext FontStrings. A FontString
      inherits Region + FontInstance only, so it has neither EnableMouse nor
      SetScript; all 15 sites raised and aborted the enclosing tab builder,
      leaving the Search Filters and Create Group tabs part-built. Now
      routed through Grouper:AttachWidgetTooltip, anchored to the widget's
      real frame. GrouperBrowse.lua coverage went 1.58% to 65.22% on this
      fix alone.
    • COMM-005 Chunk resend timers armed per chunk instead of per message, so an
      incomplete multi-part message broadcast 2*(N-1) duplicate GRPR_REQ
      requests on the shared channel, scaling with chunk count.
    • UI-010 ReleaseScrollFrame's double-release guard cleared its own marker
      before it could work, so a second call reached AceGUI:Release and
      raised from whichever addon next drew from the shared pool.
    • COMM-006 GetFullPlayerName doubled the realm when name already carried one,
      producing Name-Realm-Realm keys that match nothing -- and skipping the
      space-stripping branch, so a key could contain a literal space.
    • UI-011 /grouper status always reported "Players: 0" (# on a hash table), and
      a bare /grouper printed usage instead of opening the window.
      Also brings wow-version-replication.ps1 back into agreement with the packager:
      bare folder names in .pkgmeta compiled to ^docs$ and matched only a file of that
      name, so docs/ and Tests/ replicated despite being listed; and the always-skip
      list named only git files, so dotfolders replicated too. Verified with -DryRun.
      Three harness contracts were raised and delivered during the session (UTF-8 BOM
      tolerance, a caller-supplied env for loadAddonFile, and three missing globals);
      two remain open and are staged locally in Tests/support/addon.lua.
      Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

This mod has no additional files