19b67feec6
The friends, ignore and who lists answered from VM copies pushed at frame end, and their events fired from a frame-end feed. In 1.12.1 the getters read the lists at the call (`GetFriendInfo 0x5ad060`, `GetIgnoreName 0x5ad460`, `GetWhoInfo 0x5ad6e0`). The handlers raise `FRIENDLIST_UPDATE`, `IGNORELIST_UPDATE` and the who answer in place, which goes to the frame or to chat by the flag at that moment (`0x5adf9c`). Now the getters read live through the call host, and the events fire on a social lane at their handlers. Each item seats the lists as its packet left them, so a listener's `SetSelectedFriend(1)` or `RemoveFriend(1)` acts on that packet's list. Tests: getters read lists the handlers wrote with no frame between, the events interleave in packet order, a listener's verbs act on its signal's list, and the who route follows the flag at its stamp. All fail on main. Part of #2217 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>