File Details
v3.2.18
- R
- May 17, 2026
- 5.17 MB
- 45
- 12.0.5
- Retail
File Name
WHEREDNGN-v3.2.18.zip
Supported Versions
- 12.0.5
Loot & Baloot
v3.2.18 (2026-05-17)
Full Changelog Previous Releases
- docs(CHANGELOG): add v3.2.18 release notes
ISMCTS runtime memory guard — targets a whole-WoW-client freeze/crash
class (high memory, ~trick 3, 1-human + 3-bot Saudi-Master games):
memory emergency brake + per-move telemetry via /baloot ismctsdiag +
conservative 3-bot world-count caps + single post-move incremental GC
step (never a full collect). Also folds in the non-addon CLAUDE.md
CurseForge project-ID doc fix. Single release point after v3.2.17.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - fix(BotMaster): v3.2.18 Codex polish — GC-step 0-disable + worldscompleted reset
Two small follow-up blockers from Codex review of abfe653 (no rewrite
of abfe653; follow-up commit only):- GC-step disable semantics. Constants doc says
K.BOT_ISMCTS_GC_STEP_KB = 0 disables the post-move step, but the
bareif gcAvail then collectgarbage("step", (... or 256))still
issued step(0) when the tunable was 0. Now resolves
local gcStepKB = (K and K.BOT_ISMCTS_GC_STEP_KB) or 256and
gatesif gcAvail and gcStepKB > 0 thenso 0 truly disables. - Telemetry reset consistency. The per-move reset comment promises
/baloot ismctsdiag never shows a stale world count on a
short-circuit, but _lastWorldsCompleted was not reset there — the
no-legal-moves / legal-build-failed exits could surface a prior
heavy move's count. Added BM._lastWorldsCompleted = 0 to the
reset block before the short-circuit exits.
Tests (+8): G.3j/j2/j3/j4 pin the resolve +> 0gate + gated call
and assert the old un-gated form is gone; G.3k still enforces no
collectgarbage("collect"); G.3m positionally pins the
_lastWorldsCompleted reset before short-circuit exits; G.7 is a
deterministic behavioral test that stubs R.IsLegalPlay→false to take
the no-legal exit (which has no own _lastWorldsCompleted write) and
proves a seeded stale 999 is cleared to 0 by the reset block.
Full harness 1545/0; H1 11/0; H7 9/0; git diff --check main..HEAD
clean.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- GC-step disable semantics. Constants doc says
- fix(BotMaster): ISMCTS runtime memory guard + 3-bot world-count cap (v3.2.18)
HIGH stability incident: WoW client freeze / high-memory crash around
trick ~3 in 1-human + 3-bot Saudi-Master games. The v0.11.17
wall-clock budget bounds ISMCTS latency but not allocation — on a
fast client the determinization/rollout loop allocates megabytes of
transient tables well within 0.12s, and with 3 Saudi-Master bots
sampling back-to-back per trick the Lua heap spikes faster than the
incremental GC reclaims it.
Changes (Saudi Master ISMCTS only — no UI/log-leak changes):- Runtime memory emergency brake in BM.PickPlay's world loop:
collectgarbage("count") net-delta vs K.BOT_ISMCTS_MEM_BUDGET_KB
(default 16384 — emergency-only, several× steady-state). On trip:
stop sampling, vote with completed worlds; zero completed → the
existing _restore(nil) heuristic fallback (unchanged). gcAvail-
guarded so collectgarbage-less envs degrade gracefully. - Per-move telemetry (_lastMemKB, _lastMemCapped, _lastNumWorlds,
_lastLegalCount, _lastTrickCount) surfaced via /baloot ismctsdiag
(Δmem + [MEM-CAPPED] tag). - 3+-bot tables cap early/mid world counts more conservatively
(trick≤2 100→50, ≤5 60→30, late 30→20) via math.min. Internal
sample-count only — no rules/scoring/wire/UI/card-legality change. - Single post-move incremental collectgarbage("step", N) — never a
full collect, never inside the per-world/per-card tight loops.
Confirmed bounded and NOT changed: UI handPool (≤8, reused via
clearHand), B.Log (200 fixed ring), freezeLog (200 ring, off by
default), WHEREDNGNDB.history (200 ring, per-round).
Tests: new test_botmaster.lua section G (38 asserts) — behavioral
(telemetry populated + 3-bot cap = 50 @ trick0; 0-world → heuristic
fallback) + source pins (guard structure, no full-collect literal,
Constants tunables, ismctsdiag memory output). Full harness 1537/0;
H1 11/0; H7 9/0.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- Runtime memory emergency brake in BM.PickPlay's world loop:
- docs(CLAUDE): fix CurseForge project ID (1526129 -> 1529200)
The documented CurseForge project ID was stale — 1526129 actually
resolves to a different addon (GOBIGnINTERRUPT). WHEREDNGN is
project 1529200 ("Loot & Baloot", slug wheredngn). Doc-only;
no code/packaging change.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

