// Mirrors the Dialectic.Backend models — kept in sync by hand. If a // field is added on the backend (models/topic.go / store responses), // also add it here so the UI can use it. export type TopicStatus = | 'created' | 'signup_open' | 'signup_closed' | 'debating' | 'completed' | 'cancelled'; export type Visibility = 'public' | 'private'; export type Camp = 'pro' | 'con' | 'judge'; export interface Topic { id: string; title: string; summary: string; visibility: Visibility; verdict_schema_id: string; status: TopicStatus; signup_open_at: string; signup_close_at: string; debate_start_at: string; debate_end_at: string; creator_user_id: string; visibility_changed_by?: string | null; visibility_changed_at?: string | null; cancelled_reason?: string | null; created_at: string; updated_at: string; } export interface CampAllocation { id: string; topic_id: string; camp: Camp; agent_id: string; allocated_at: string; } // GET /api/topics/{id} returns the full Topic spread + `camps` sibling. export interface TopicDetail extends Topic { camps: CampAllocation[] | null; } export interface Argument { id: string; topic_id: string; round_id: string; camp: Camp; agent_id: string; content: string; posted_at: string; } export interface Verdict { id: string; topic_id: string; judge_agent_id: string; // verdict shape depends on the topic's verdict_schema_id; UI shows raw JSON. verdict: Record; rationale: string; tokens_input: number; tokens_output: number; produced_at: string; }