{# R3 · DISPATCH center view (live, event-driven, PROPOSE-MODE). The operator's "what work is waiting + who should take it" surface. For the selected project it lists OPEN/PENDING handoffs and, per handoff, a RULE-BASED proposed agent (match handoff.to_agent if set, else handoff.to_role, against the roster) with that agent's harness + model — or "unassigned" when nothing in the roster matches. PROPOSE-MODE INVARIANT (critical): NOTHING fires autonomously. The dispatch list only PROPOSES. A dispatch runs ONLY when the human clicks an "Approve & Run" button (→ POST /dispatch/{project}/run?agent_name=…), which spawns that agent's harness on the handoff's summary and streams the result here (like the chat). A clear propose-mode banner says so; nothing on page load or on a live event calls the run path. EVENT-DRIVEN: this view subscribes (browser EventSource) to the console /stream proxy over Cortex GET /events and REFRESHES the handoff/dispatch list the instant a new event lands — no 10s poll for this view (other views keep their polls). The EventSource + refresh wiring lives in the