# Implementation Plan: Per-Ticket Model Override (per_ticket_model_20260306)

> **Reference:** [Spec](./spec.md) | [Architecture Guide](../../../docs/guide_architecture.md)

## Phase 1: Model Override Field
Focus: Add field to Ticket dataclass

- [x] Task 1.1: Initialize MMA Environment
- [x] Task 1.2: Add model_override to Ticket (245653c)
    - WHERE: `src/models.py` `Ticket` dataclass
    - WHAT: Add optional model override field
    - HOW:
      ```python
      @dataclass
      class Ticket:
       # ... existing fields ...
       model_override: Optional[str] = None
      ```

- [x] Task 1.3: Update serialization (245653c)
    - WHERE: `src/models.py` `Ticket.to_dict()` and `from_dict()`
    - WHAT: Include model_override
    - HOW: Add field to dict conversion

## Phase 2: Model Dropdown UI
Focus: Add model selection to ticket display

- [x] Task 2.1: Get available models list (63d1b04)

- [x] Task 2.2: Add dropdown to ticket UI (63d1b04)

- [x] Task 3.1: Color-code override tickets (63d1b04)

## Phase 4: Execution Integration
Focus: Use override in worker execution

- [x] Task 4.1: Check override in ConductorEngine.run() (e20f8a1)
    - WHERE: `src/multi_agent_conductor.py` `run()`
    - WHAT: Use ticket.model_override if set
    - HOW:
      ```python
      if ticket.model_override:
       model_name = ticket.model_override
      else:
       # Use existing escalation logic
       models = ["gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3.1-pro-preview"]
       model_idx = min(ticket.retry_count, len(models) - 1)
       model_name = models[model_idx]
      ```

## Phase 5: Testing
- [x] Task 5.1: Write unit tests
- [x] Task 5.2: Conductor - Phase Verification
