c1507a281c
The trade window reached the interface through a per-frame feed, so its events fired ahead of the frame's other packets and its getters read a VM copy. In 1.12.1 the trade status handler (`0x4bfa08`'s cases) signals inside the packet, and the getters read the session at the call. - The getters read the session through the host. Every trade signal goes on a trade lane, stamped in its handler. - A request's checks run inside BEGIN_TRADE, with the ignore list ahead of the object lookup (`0x4bf750`). - Our slots 1-6 raise no TRADE_PLAYER_ITEM_CHANGED from the status (`0x4bf2b0`). - A close waits behind the open it closes, cancel included (`0x4bf527`, `0x493365`). - Status 12 prints its line before the close (`0x4bf88e`). - A chat-kind line raised in a Lua call fires inside it (`0x496842` → `0x49a870`). Each change has a test that fails without it. Part of #2168 and #2217. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>