64d5bc391d
Deploy PROD / deploy (push) Successful in 24s
Interfejs sali mial DWA niezalezne zrodla prawdy o tym, czy uczestnik moze mowic: napis "Masz glos, mikrofon jest wlaczony" bral sie ze stanu ZGLOSZENIA (`speak.granted`), a faktyczny mikrofon z uprawnienia w TOKENIE (`canPublishAudio`). Te dwie rzeczy nie sa tym samym. Prawo do audio daje takze rola ACTIVE_PARTICIPANT, ktora uczestnik dostaje przy wlaczonym trybie "wideo dla wszystkich". Odebranie glosu nie zmienia wtedy uprawnien, ale zmienia stan zgloszenia: napis znikal, a mikrofon zostawal otwarty. Po kilku cyklach nadania i odebrania obraz w panelu rozjezdzal sie z tym, co uczestnik faktycznie moze. Zgloszone z produkcji. Pasek akcji dostaje teraz `canPublishAudio` wprost z tokenu i to ono rozstrzyga o napisie. Gdy glos jest juz przyznany, a token jeszcze nie dotarl, pasek mowi "trwa wlaczanie mikrofonu" zamiast klamac w ktorakolwiek strone. Przycisk "Oddaj glos" zostaje przy zgloszeniu, bo dotyczy wlasnie jego. SLAD DO DIAGNOZY Rozjazd miedzy interfejsem a serwerem jest trudny do zbadania po fakcie: uczestnik zglasza "mikrofon nie dziala", a log serwera pokazuje poprawnie wydany token. Konsola sali wypisuje teraz po kazdej zmianie stan tokenu obok stanu zgloszenia i obu trybow, wiec przy nastepnym zgloszeniu widac, ktora strona jest nieaktualna. To nie jest debugowanie do usuniecia: nigdzie indziej nie widac obu tych rzeczy naraz. Hipoteza o wygasajacym tokenie sprawdzona i ODRZUCONA: TTL to szesc godzin, czyli dluzej niz najdluzszy webinar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>