- Add channelIdFromCtx parameter to deriveDecisionInputFromPrompt
- Priority: ctx.channelId > conv.chat_id > conv.channel_id
- This fixes turn gate not working because channelId was empty/wrong
- Update all 3 call sites to pass ctx.channelId
- Add moderator bypass in before_model_resolve: if senderId equals moderatorUserId,
skip no-reply evaluation to prevent moderator handoff messages from being treated
as regular messages without 🔚
- Add debug log when bypass is triggered