promotional bannermobile promotional banner

Loot & Baloot

Loot & Baloot — Play Saudi Baloot (بلوت) inside World of Warcraft. A four-player trick-taking card game over the party addon channel. Host with friends or play solo against bots, with full Hokm / Sun rules, melds, escalations, and SWA claims.

File Details

v3.2.2

  • R
  • May 12, 2026
  • 5.15 MB
  • 13
  • 12.0.5
  • Retail

File Name

WHEREDNGN-v3.2.2.zip

Supported Versions

  • 12.0.5

Loot & Baloot

v3.2.2 (2026-05-12)

Full Changelog Previous Releases

  • docs: add v3.2.2 release notes
    Tie-randomization predictability touch-up for the Hokm bidder-team
    side-Ace exhaustion fallback (one site, audit F5 D-1, commit
    697cb4d). Maintenance release framing — no gameplay/UI/protocol/
    saved-variable/scoring changes. v3.1.x / v3.2.x clients remain
    addon-message-compatible.
    Verification: 1,245 / 0 harness, 20 / 0 standalone smokes.
    No tag yet — release-prep only. Design + per-site rationale lives
    in .swarm_findings/v3_2_2_tie_randomization_design.md.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • docs(batch v3.2.2): align design counts with BE.3 split
    Codex review of the v3.2.2A implementation (697cb4d) noted that
    the design doc still said BE.1-BE.3 were "3 new checks" with a
    harness delta of 1241 → 1244 and a final result of 1,244 / 0,
    while the actual implementation has 4 new checks (BE.1, BE.2,
    BE.3a, BE.3b — the source-pin BE.3 was split into two assertions
    in the same do block for clearer marker-vs-audit-ref diagnostics)
    and a final result of 1,245 / 0.
    Doc-only amend, marked inline as a v0.3 amendment in §4.3:
    • §4.3 test count summary: "3 new checks" → "4 new checks";
      delta 1241 → 12441241 → 1245. Added BE.3a/BE.3b sub-rows
      to the table.
    • §4.4 (test architecture): updated the "2 deterministic + 1
      source-pin" phrasing to acknowledge the BE.3 block fires 2
      distinct assertions.
    • §7 expected harness delta: 1,244 → 1,245; BE.3 sentence now
      refers to BE.3a + BE.3b.
    • §9 implementation order step 5: final harness 1,244 → 1,245;
      step 3 now mentions BE.3a + BE.3b explicitly.
      No edits to Bot.lua, tests/test_state_bot.lua, or any other
      runtime/test/packaging file. Branch harness still 1,245 / 0 from
      the prior implementation commit.
      Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • fix(Bot.lua): tie-randomize Hokm side-Ace exhaustion fallback
    v3.2.2 F5 site 1 (audit D-1): the side-Ace exhaustion fallback in
    pickLead used a strict-> loop to pick the highest non-trump card
    after all three opp Aces had been observed played. Ties at the
    same TrickRank (e.g., K♠ and K♥, both RANK_PLAIN["K"] = 6)
    were broken by hand-iteration order — broadcasting hand position
    to a careful observer. Routes through the existing
    Primitives.highestByRank instead, which uses pickRandomTied
    for ties.
    Non-tie behaviour is unchanged: highestByRank still returns the
    unique max when no ties exist, and the 1-element tied-set
    short-circuit in pickRandomTied (if #tiedSet == 1 then return tiedSet[1] end) avoids any spurious math.random calls.
    Behavioural tests (tests/test_state_bot.lua, section BE, +4
    checks):
    • BE.1: tied K♠ + K♥ with math.random(2) stubbed to return 2
      now returns K♥ (was K♠ pre-fix). The wire-proof.
    • BE.2: non-tie K♠ vs Q♥ returns unique max K♠ regardless of
      stub. Non-tie regression guard.
    • BE.3a/b: source-pin for v3.2.2 F5 site 1 marker and
      audit D-1 reference in Bot.lua.
      Harness: 1241 → 1245 passing checks, 0 failing.
      Standalone smokes: test_H1_pin_J9_trump 11/0; test_H7_sun_shortest_lead 9/0.
      Deferred (not in this batch, per design doc):
    • F5 site 2 (Sun establishing boss-lead, single-suit filter, no ties)
    • F5 site 3 (pos-3 Takbeer donate, currently unreachable)
    • F5 site 4 (pos-3 hold-back, F2-flagged dead branch)
    • F6 (BotMaster forced-ruff override, trump-only filter, no ties)
      Runtime edit confined to Bot.lua; test edit confined to
      tests/test_state_bot.lua. No tag, no release, no edits to TOC,
      .pkgmeta, workflows, BotMaster, Net, State, Rules, Cards, UI, or
      protocol.
      Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • docs: add v3.2.2 tie-randomization design
    Design pass for the deferred F5/F6 tie-randomization findings from
    the v3.2.1 pickplay audit. After Codex review (v0.2 amendment), the
    batch narrows to a single approved site: F5 site 1 (Bot.lua:2033-
    2040, Hokm side-Ace exhaustion fallback).
    The other four originally-enumerated sites are deferred:
    • F5 site 2 (Sun establishing boss-lead): single-suit filter → no
      ties possible (8 unique ranks per suit).
    • F5 site 3 (pos-3 Takbeer donate): unreachable — gate requires
      partnerWinning<mark>true but execution path guarantees
      partnerWinning</mark>false (enclosing partnerWinning block returns
      first). Same shape as v3.2.1 F2.
    • F5 site 4: F2-flagged dead branch + single-suit filter.
    • F6 (BotMaster forced-ruff): trump-only filter → no ties.
      Expected harness delta: 1241 → 1244 (3 new BE.* checks).
      Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com