- _apply_silent_participant_override: new Python-level override that forces
any participant who hasn't spoken yet into the next turn (fires before
contrarian check, language-aware Russian/English call-out)
- _execute_participant_respond: now sends call_out as a moderator message
before generating the participant response (was silently skipped before,
causing 0-action loops and incoherent conversation flow); uses .get()
instead of [] to avoid KeyError when LLM omits optional fields
- _apply_contrarian_override: language-aware call-out message (Russian if
last moderator message contains Cyrillic)
- conversation-decision-engine.md: explicit rules that call_out MUST name
the participant and topic_context MUST give a specific angle; silent
participants must be called before repeat speakers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>