GuildRosterFix 1.0.6
====================

Refreshes guild member locations when you open the roster or switch to its tab.
Uses one guild-filtered player search per opening because /who can return fresh
locations while the guild API remains stale. No periodic searches or periodic
roster redraws run while the window stays open. Normal guild/search events still
update the display as they arrive.

If the Social window is open, the single request waits until it closes, provided
the roster is still open. Closing the roster cancels that deferred request.
Empty, hidden, or truncated search results do not mark members offline. Search
results only update matching roster names. Membership and offline detection
still depend on normal guild data. Cold-login recovery is retained.

Activation
----------
Run /rel once to load this version. Open the Roster tab and allow the server
search response to arrive. Close/reopen the roster to request another update,
or switch away from its tab and back. No 15-second wait is imposed.

Diagnostics
-----------
/script GuildRosterFix.Status()
/script GuildRosterFix.Inspect()
/script GuildRosterFix.Refresh(true)

Status includes version, guild-event count, last refresh error, search requests,
responses, corrections, and API/roster location comparisons. Refresh(true) only
redraws existing data; opening the roster triggers the fresh server search.

Validation
----------
.validation/test_roster.py runs the installed stock roster code under Lua 5.1
with mocked game APIs. Tests cover cold-login recovery, stale source values,
visible text, search corrections, event ordering, empty/hidden results, one
search per open/tab entry, Social-window deferral, and no recurring searches.
Backups of prior Core.lua versions are in .validation. No game archives changed.
