File Details
v0.30.2
- R
- Apr 27, 2026
- 320.94 KB
- 5
- 12.0.5
- Retail
File Name
GuildBankLedger-v0.30.2.zip
Supported Versions
- 12.0.5
GuildBankLedger
v0.30.2 (2026-04-27)
Full Changelog Previous Releases
- Merge pull request #6 from RussellFeinstein/sync/v0.30.2-instrumentation
Sync v0.30.2: receiver auto-bootstrap audit + ACK timeout liveness tag - Add receiver auto-bootstrap audit and ACK timeout liveness tag (v0.30.2)
Two diagnostic-only additions to the sync subsystem, no behavior change.
The motivation is observability before action: prior captures showed
chunkFail ~45-50% patterns that conflate true wire loss, combat-with-lost-
BUSY, full peer disconnect, and a separate auto-bootstrap desync path.
Fixing chunk sizing without first measuring the cause distribution risks
treating the wrong failure mode.
HandleSyncData now logs "Auto-bootstrap at chunk N from <sender>" when a
SYNC_DATA chunk arrives at index >1 with no active receive session. That
means the receiver missed an earlier abort hand-off (combat with a lost
BUSY whisper, or sender-side state desync) and is recovering data mid-
stream. Bootstraps at chunk = 1 stay silent (legitimate fresh start, e.g.
addon reload between SYNC_REQUEST and the first chunk).
The ACK timeout retry audit line now appends ", target=online|offline|
unknown" via IsGuildMemberOnline. "unknown" covers both "not in roster"
and "roster not yet populated" (the latter only relevant for a few
seconds after PLAYER_ENTERING_WORLD). Lets future capture analysis count
how many timeouts happened against a peer who was already offline (failed-
to-detect-disconnect) versus a peer who was nominally online (true wire
loss or in-instance silent abort).
Six new tests in spec/sync_spec.lua: three auto-bootstrap cases (chunk>1
logs, chunk=1 silent, chunk=nil silent/no-crash) and three liveness cases
(target online, target goes offline mid-stream, target leaves guild mid-
stream). The mid-stream pattern mirrors real-world conditions: SendSyncWhisper
blocks transmission to known-offline targets at Sync.lua:222, so the test
must flip the roster after HandleSyncRequest succeeds.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com