File Details
Grouper-v0.6.3
- R
- Apr 2, 2026
- 257.72 KB
- 94
- 2.5.5+1
- Classic + 1
File Name
Grouper-Grouper-v0.6.3.zip
Supported Versions
- 2.5.5
- 1.15.8
Grouper
Grouper-v0.6.3 (2026-04-02)
Full Changelog Previous Releases
- fix: resolve all 34 findings from 2026-04-01 code review
High (B-01–B-04, CS-01–CS-03, SS-01–SS-02, UX-01):- B-01: Remove duplicate ScheduleTimer whisper in HandleDirectRequestData
- B-02: Fix HandleCompactGroupUpdate members hash → array (ipairs was yielding nothing)
- B-03: Transfer Leadership now searches raidMembers for raid groups
- B-04: AnnounceGroupToLFG dungeon lookup fixed to use numeric-ID-keyed table
- CS-01: Remove duplicate file-load-scope AceComm handler registration
- CS-02: Add missing local to member in ProcessSingleExternalInvite callback
- CS-03: SendRequestDataViaChannel uses SafeSendChatMessage, not bare SendChatMessage
- SS-01: URI-encode location field (colons) before wire, decode on receipt
- SS-02: AnnounceGroupToLFG final send uses SafeSendChatMessage
- UX-01: Whisper Leader uses GetFullPlayerName for cross-realm suffix
Medium (B-05–B-07, CS-04–CS-12, SS-04–SS-06, UX-02–UX-03): - B-05: HandleJoinedGroupResults sets leader="yes" (string) not true (boolean)
- B-06: HandleDirectGroupUpdate guard raised from <11 to <14 fields
- B-07: My Groups deduplicates leader row when leader is already in members[]
- B-08: Won't fix (intentional cache reset on reload)
- CS-04: SendGroupUpdateViaChannel retries use ScheduleTimer with per-group handles
- CS-05: OnPartyChanged calls RefreshGroupListManage directly, not full SelectTab rebuild
- CS-07: populateChunk uses isActive flag instead of nil-checking released AceGUI widgets
- CS-08: BuildPlayersCacheFromNames stores short name in .name (not full Name-Realm)
- CS-09: Legacy channel fallback gate and dispatch branches use cleanMessage not raw message
- CS-10: myCurrentGroupId reads from self.players[normLocalPlayer].groupId
- CS-11: Remove no-op C_Timer.After(0.01) from ProcessRefreshQueue while loop
- CS-12: bracketCheckboxes/bracketGroup cleared before ReleaseChildren
- SS-04: perMemberHeight raised 15 to 32 in role assignment popup
- SS-05: ProcessSingleExternalInvite wrapped in pcall; flag reset on error
- SS-06: Create tab timer callback guards currentTab before populating
- UX-02: Manage tab member list uses role loops not 5 hardcoded slots
- UX-03: Empty level in Assign popup is optional (stored as 0)
Low (B-09, CS-13–CS-14, SS-03, SS-07–SS-08, UX-04): - B-09: Results tab role text uses ROLE_DISPLAY lookup
- CS-13: Fix merge artifact on GrouperBrowse.lua line 4; restore RefreshGroupListResults
- CS-14: Realm normalization gsub pattern %s to %s+
- SS-03: ChatThrottleLib internal ring loop wrapped in pcall
- SS-07: All UnitRace calls use select(2, UnitRace(...)) for English race name
- SS-08: groupData.minLevel/maxLevel default to 1/60 when nil
- UX-04: RedrawDebugMessages capped at last 200 messages
docs: REVIEW_2026-04-01.md updated with fix details for all 34 findings
- docs: mark perf item 9 as N/A (zone events already implemented correctly)
- perf: cache data table globals as file-scope locals; remove dead nil guards\n\nAdded file-scope local aliases for DUNGEONS, DUNGEON_IDS, DUNGEON_INFO,\nDUNGEON_SHORT_NAMES, and GrouperRaidData in all 6 consumer files. TOC\nload order guarantees Data/ files execute before all consumers, so the\nouter nil guards (GrouperRaidData and, DUNGEON_IDS and, if not DUNGEONS)\nwere dead code. Removed 7 dead guard sites across GrouperManage.lua,\nGrouperComs.lua, GrouperCreate.lua, GrouperResults.lua, and Grouper.lua.

