Add event priority system (player_chat=0, perception=1, feedback=2, no_action_followup=3) with getEventPriority helper, implement coalesceQueue() to stable-sort queue by priority and drop redundant no-action follow-ups when player chat is waiting, call coalesceQueue before each queue shift to ensure player messages are processed first, add tests verifying chat promotion/followup dropping/order preservation