--- plan name: fix-model-swap plan description: Fix model swap race condition plan status: active --- ## Idea Corrigir a race condition onde o modelo selecionado é sobrescrito pelo refresh automático durante uma troca de modelo. **Problema identificado:** 1. Usuário seleciona modelo B no frontend 2. `swapModel()` é chamado para trocar no backend 3. O backend leva tempo para trocar (para API, reinicia com novo modelo) 4. Enquanto isso, o `useModels.refresh()` pode executar e buscar lista de modelos do servidor 5. O servidor ainda retorna modelo A (antigo) pois a troca não completou 6. `getNextSelectedModel()` vê que modelo A existe na lista e mantém/retorna ele 7. Resultado: o usuário vê modelo A selecionado em vez de B **Solução:** Implementar um mecanismo de "lock" temporário no `useModels` que previne que o refresh automático sobrescreva o `selectedModel` por alguns segundos após uma seleção manual do usuário. ## Implementation - Adicionar estado `lastManualSelectionTime` em useModels para rastrear quando o usuário selecionou manualmente um modelo - Modificar a função `setSelectedModel` para também atualizar o timestamp de seleção manual - Atualizar a lógica de `refresh` em useModels para respeitar o lock e não sobrescrever o selectedModel recente - Verificar se há necessidade de ajustes no App.tsx ou Sidebar.tsx para integrar com a nova API - Testar a correção simulando a troca de modelo e verificando que o modelo correto permanece selecionado ## Required Specs