debate_judge_prepare
- Category: debate
- Access: write
- Audience: administrative (ordinary users do not normally call this directly)
Purpose
Creates the immutable AB and BA order-swap projections for adjudication from two CLAIM or REBUT positions held by the two opposing blind roles. Agreement later stops the debate.
Arguments
Required: topic_id, left_msg_id, right_msg_id.
-
topic_id: existing debate topic. -
left_msg_id. Note: First position; must sit in the topic and carry CLAIM or REBUT. -
right_msg_id. Note: Second position; must be distinct from the left and come from the opposing blind role.
Result
Object with topic_id and projections: two entries (order AB and BA), each with projection_id, order_key, protocol_version, topic_id, round_no, and positions.
Boundaries
Conductor callers only; the call takes no judge role so it cannot be role-gated any other way. Both positions must come from the two opposing blind roles while the topic sits in ADJUDICATE. Rewrites conflict: identical repeats are idempotent, differing repeats are rejected.
Lifecycle / side effects
Projections persist atomically with an audit/history event and are immutable afterwards. Verdicts arrive separately via debate_judge_verdict.
Errors
Wrong kinds, non-opposing roles, wrong phases, unknown messages, and projection conflicts are rejected uniformly.
Example
{
"left_msg_id": "<uuid>",
"right_msg_id": "<uuid>",
"topic_id": "<uuid>"
}
Result shape:
{
"projections": [
{
"order_key": "AB",
"positions": [],
"projection_id": "<uuid>",
"protocol_version": "debate/v1",
"round_no": 1,
"topic_id": "<uuid>"
}
],
"topic_id": "<uuid>"
}
See also
debate_judge_verdict, debate_protocol_state, debate_post, debate_protocol_maintain.