Changelog
- Clear any stale registration for a UID on re-register (reconnect / second
opt-in) before allocating the fresh session, so listener sets are never built
against a dead player entry — suspected cause of routing breaking after reconnects
- Wire proximity listeners bidirectionally on a single screen event in
OnScreenAdd/OnScreenRemove (idempotent), so a pair routes to each other even
when the reciprocal Vision.Add fires late or not at all
- Add event-driven logging across the Frost->native boundary: session
create/destroy, register/unregister, move, listener-set results with vision
player counts, listener-pair deltas, and skip reasons (unregistered / session
mismatch) to pinpoint any remaining gaps