Effort: thorough
SciDEXOrchestrator.run_debate (agent.py:1420 +
scidex/agora/scidex_orchestrator.py) and the artifact-debate fan-outs
all run a fixed number of rounds (commonly 4: theorist → skeptic →
domain_expert → synthesizer). Many debates converge by round 2; others
genuinely need 6+. A fixed N over-spends compute on easy questions and
under-resolves the hard ones. Build a stability-aware round controller
that watches the inter-round content for convergence (semantic similarity,
verdict-vote stability, no new claims emerging) and decides each round
whether to stop, continue, or escalate to a fresh persona — bounded by
min_rounds and max_rounds.
scidex/agora/round_controller.py:class RoundController with should_continue(state) -> Decision,Decision ∈ {stop_converged, continue_baseline,escalate_new_persona, stop_max_rounds, stop_safety}.
scidex/core/embedding.py).aggregate_debate_consensus_dissent's consensus parser) isscidex.agents.select) to break the tie.
min_rounds = 2 (always), max_rounds = 8 (default;agent.py:run_debate andscidex/agora/scidex_orchestrator.py:1843 swap their fixedfor round_idx in range(num_rounds): loop forwhile controller.should_continue(state) != stop_*:.
debate_round_decisions(session_id TEXT, round_index INT,migrations/20260428_debate_round_decisions.sql.
debate_sessions.num_rounds continues to be the final round countGET /api/agora/debate/{id}/round_decisions — full controller/debate/{id}.
tests/test_round_controller.py:stop_converged,num_rounds=3.escalate_new_persona, controller integrates the new persona.SCIDEX_DEBATE_DYNAMIC_ROUNDS=shadowdebate_round_decisions withoutenabled.
debate_round_decisions trace; spot-check one decisionscidex/agora/scidex_orchestrator.py:1843 for the canonicalwhile controller.next() == continue: ....
synthesis_engine.py. Claim-novelty diff iscost_savings_estimate rollup to the dashboard so we canscidex/agora/synthesis_engine.py — verdict parser.scidex/core/embedding.py — semantic sim.scidex.agents.select — escalation persona picker.q-debate-evidence-weighted-vote — voting layer benefits fromq-debate-judge-interruption — the judge's mid-round halt API and{
"completion_shas": [
"ebb12f65f44046b50d986be9a6067956779b1ae1"
],
"completion_shas_checked_at": ""
}