Dois efeitos de auto-connect do Widget.jsx (mount + reconnect-on-drop) podiam disparar connect() em sequência rápida sem respeitar o cooldown de 5s (só o efeito de reconexão gravava o timestamp), abrindo um segundo SimpleUser/registro concorrente que sip.js rejeita com RequestPendingError — e o catch sobrescrevia connectionStatus pra "disconnected" incondicionalmente, travando o widget em cinza. Trava por promise em useSip.js::connect() + cooldown também no auto-connect de mount resolvem: testado com Playwright dentro do app real, connect() dispara uma única vez e o status nunca mais volta pra cinza. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8