debate_judge_verdict
- Category: debate
- Access: write
- Audience: advanced (ordinary users do not normally call this directly)
Purpose
Records one immutable judge verdict on a projection. When AB and BA agree on winner plus decision the debate stops; disagreement leaves it stalemated.
Arguments
Required: projection_id, judge_role, verdict_json.
-
projection_id. Note: Target projection from debate_judge_prepare. -
judge_role. Note: Must be active, declared, non-blind, and non-human; one judge role per pair. -
verdict_json. Note: Object with non-empty winner_msg_id and decision; stringified JSON is re-parsed like the reference client.
Result
Object with projection_id, topic_id, complete, stable (null until both sides speak), and the current protocol_state.
Boundaries
Judge independence is enforced: the judge role must be an active declared participant outside the blind pair, and each pair admits a single judge role. Terminal phase moves compare-and-swap on ADJUDICATE, so concurrent verdicts cannot double-apply.
Lifecycle / side effects
Each verdict persists atomically with an audit/history event and is immutable. Full agreement moves the topic to STOPPED; split verdicts move it to STALEMATE with an order-swap disagreement reason.
Errors
Unknown projections, malformed verdicts, ineligible judges, duplicate judge roles, and lost phase races are rejected uniformly.
Example
{
"judge_role": "CONDUCTOR",
"projection_id": "<uuid>",
"verdict_json": "{\"winner_msg_id\":\"<uuid>\",\"decision\":\"adopt\"}"
}
Result shape:
{
"complete": false,
"projection_id": "<uuid>",
"stable": null,
"topic_id": "<uuid>"
}
See also
debate_judge_prepare, debate_protocol_state, debate_protocol_maintain, debate_post, debate_state.