promotional bannermobile promotional banner

Darkmoon Party Shuffle

Open a table at the Darkmoon Faire: players take a seat in-game, then shuffle everyone into balanced 5-man dungeon parties — tank/healer/DPS sorted, Mythic+ & keystone ready.

File Details

v0.24.1

  • R
  • Jun 24, 2026
  • 242.12 KB
  • 5
  • 12.0.7
  • Retail

File Name

MythicPlusPartyShuffle-v0.24.1.zip

Supported Versions

  • 12.0.7

Darkmoon Party Shuffle

v0.24.1 (2026-06-24)

Full Changelog Previous Releases

  • docs(openspec): archive community-reachability-fixes
    Sync the spec deltas for the participant-side reachability fixes:
    • comm-protocol: lean codec carries the debug-only community sim c; observed-over-
      guild reachability requires sender authenticity.
    • dev-roster-fixture: the community sim is specified and rides the wire so participants
      classify fakes correctly.
    • hand-popup: the popup re-renders reachability markers live on a membership change.
      community-reachability-nudges is unchanged — the code was re-aligned to it.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • fix(community): correct participant-side reachability marker + live popup refresh
    Three defects surfaced once the in-hand reachability marker was tested from a
    PARTICIPANT (not the organizer):
    1. A member acting as inviter wrongly flagged every cross-faction/cross-realm peer.
      On a participant the organizer-local fake/hasCommunity flags are stripped by
      the SHUFFLE/GROUPMAP lean round-trip, so peerInCommunity fell back to scanning the
      community directory for a fake that cannot resolve there -> guaranteed false warn.
      Fix: SpecDetails:ToLean/ExpandLean carry the fixture's community sim as a debug-only
      c field (present ONLY on fakes; real entries never set it), and peerInCommunity
      keys on the presence of hasCommunity rather than e.fake, so organizer and
      participant read the same membership truth.
    2. Every fake collapsed to the GUILD tier on a participant. The fixture spoofs each
      fake's JOIN from the organizer over the GUILD broadcast (sender=organizer, src=fake);
      _guildSeen then marked every fake guild-reachable. Fix: _handle(env, dist, sender)
      marks _guildSeen only when the chat sender authenticates src (new _senderIs helper);
      a sender-less direct call (harness) trusts the distribution as before.
    3. The standalone hand popup never refreshed its markers when membership flipped
      (the CLUB_ADDED/CLUB_REMOVED event fires before GetSubscribedClubs settles). Fix:
      while shown, the popup watches IsMember() on a 0.5s ticker and re-renders live on a
      change; cancelled on hide.
      Also restores the member-side info-only marker (DirectoryHas/EnsureDirectoryFresh and
      the iAmMember branch) that the progressive-disclosure pass had dropped, re-aligning the
      code with the community-reachability-nudges spec.
      Tests: +2 roster-codec (community sim round-trip), +1 comm-whisper (spoofed GUILD does
      not grant guild-reachability). 303 tests green. DEV_BUILD reset to 0 for release.
      Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
  • feat(community): restore member-side reachability warning (info-only)
    A community member acting as group inviter again flags whisper-tier peers
    (opposite faction / non-connected realm, not guild) who are absent from the
    community directory — these are the seats the in-game InviteUnit cannot reach.
    The marker is informational: a member cannot force the community on a peer, so
    the seat carries no click action ("it's up to them to join").
    This restores the directory-backed detection (CommunityGate:DirectoryHas /
    EnsureDirectoryFresh and the iAmMember branch in unreachableInvitees) that the
    prior progressive-disclosure pass had collapsed into a non-member-only signal —
    which left a false-negative gap: a peer reaching the host via guild/channel and
    relayed onward could be whisper-tier and non-member relative to the inviter, yet
    went unflagged. The non-member case (clickable join CTA) is unchanged, and the
    live CLUB_REMOVED refresh in Setup() is kept.
    Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com