c23d0163d5
Nine resources moved their change ticks on every update packet without changing, so the feeds that read them re-ran each frame for nothing. - `Items`, `GuildState`, `AuctionOpen`, `TradeSession`, `LootState`, `DeathNet`, `BagView`, `BagCache` and `HouseLane` are now written only on a real change. - A creature's health packet leaves all nine untouched. - A raid update-storm bench times the whole client's frame: 40 units, 120 packets. This prepares per-packet event state: a listener will refresh only what its packet really changed. The tests check the change ticks over the handlers alone and over a full frame. Part of #2217 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>