- libunitscan: expire the shared player cache once per session (180 days
for known classes, 90 for class-less, at most 10,000 players). Every
sighting now stamps an age, so roster and mouseover entries can expire.
- libunitscan: keep a player's GUID only while the class is unknown and
resolve such entries later with GetPlayerInfoByGUID.
- libunitscan: skip the GUID lookup for known chat speakers seen within
the hour, throttle full guild rescans to once a minute, skip UnitGUID
when UnitClass answered, and query ClassicAPI's player cache once per
miss instead of twice.
- Social Colors: drop its separate 180-day cleanup.
- Range Color: use its own 0.2 s timer. Sharing Blizzard's rangeTimer ran
the check every frame for every ranged button.
- Docs/PERFORMANCE.md: document the cache rules.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019W3rwusM4i1CYaHQAYixJ7