File Details
v3.2.9
- R
- May 15, 2026
- 5.16 MB
- 8
- 12.0.5
- Retail
File Name
WHEREDNGN-v3.2.9.zip
Supported Versions
- 12.0.5
Loot & Baloot
v3.2.9 (2026-05-15)
Full Changelog Previous Releases
- docs(CHANGELOG): add v3.2.9 release notes
v3.2.9 entry covers:- Host-only stale visual state during 4-human bidding/contract
flow. Bid-phase analog of v3.2.8's play-phase fix; same root
cause (SendAddonMessage no-loopback + dispatcher Refresh
bypassed for host-direct mutation paths). - Three sites fixed in N._HostStepBid:
- action == "next" — mid-bid turn advance.
- action == "contract" — contract finalization.
- action == "round2" — round-2 bid kickoff.
- No turn logic, networking, timers, scoring, bot decisions,
protocol, saved-variable, .toc, .pkgmeta, .github, or
packaging changes.
Deferred: audit findings #4/#5 (N.LocalPlay / N.LocalBid
non-host optimistic refresh). Pending playtest of whether the
4th-play-of-trick 2.2s lag is user-visible.
Verification: harness 1301/0 (+3 BP source-pins from v3.2.8
baseline of 1298/0), H1=11/0, H7=9/0. Pre-fix BP.1-3 all FAIL
at 1298/3 (wire-proves all three Net.lua hunks are the cause).
Committed locally only — no push, no tag, no release until
Codex reviews.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- Host-only stale visual state during 4-human bidding/contract
- fix(Net.lua): host bid/contract/round-2 local-refresh (bid-phase v3.2.8 analog)
Companion to v3.2.8's _HostStepPlay host-turn visual refresh fix.
Same root cause, bid phase instead of play phase: in 4-human
games the host advances S.s.turn via S.ApplyTurn + broadcasts
MSG_TURN via N.SendTurn, but C_ChatInfo.SendAddonMessage doesn't
loopback to the sender, so the host's own MSG_TURN handler never
fires and HandleMessage's dispatcher Refresh at Net.lua:1280 is
bypassed for host-direct mutation paths.
Three sites in N._HostStepBid all had the same shape and all
shipped the bug:
action == "next" (mid-bid turn advance):
S.ApplyTurn + N.SendTurn + N.MaybeRunBot + return.
Host UI's bid-glow stales on prior bidder when next bidder
is host itself.
action == "contract" (contract finalization):
Various branches end with N.MaybeRunBot (post-bid Bel
dispatch). Host UI's post-contract affordances
(Bel/Triple/Four buttons, bid-card highlight clear,
phase banner) don't redraw until next message arrives.
Preempt and overcall sub-branches already returned above
with their own Refresh or phase-driven UI flow; unaffected.
action == "round2" (round-2 bid kickoff after all-pass redeal):
S.ApplyTurn + N.SendTurn + N.MaybeRunBot + branch end.
Same shape as action == "next".
Fix: addif B.UI and B.UI.Refresh then B.UI.Refresh() endat
end of each elseif branch (3 insertions), mirroring v3.2.8's
defensive pattern. Plus a docblock at the top of _HostStepBid
explaining the root cause and pointing back to v3.2.8 for
context.
Single-site root cause: _HostStepBid is called from _OnBid
(wire path, dispatcher-covered), LocalBid (host UI click,
uncovered), MaybeRunBot bot-bid (direct call, uncovered), and
_HostTurnTimeout AFK (fallback Refresh at Net.lua:5489
already covers it). Fixing inside _HostStepBid covers all
direct callers.
Tests: new BP section in tests/test_state_bot.lua source-pins
the three v3.2.9 refresh markers. Pre-fix BP.1/BP.2/BP.3 all
FAIL (verified via stash push: 1298 passed, 3 failed); post-fix
1301/0. H1/H7 smokes clean (11/0 + 9/0).
Findings #4 (LocalPlay non-host) and #5 (LocalBid non-host)
from the multi-human audit are MED severity and deferred to a
separate slice pending playtest verification of whether the
WoW UI animator masks the 2.2s 4th-play visual lag in #4.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

