Repository navigation
Conversation
Wydziel sekcje spotkan do MeetingsSection i zastap dotychczasowa liste responsywnym rozkladem glosow w trzech kolumnach. Sortuj graczy od najwiekszej liczby glosow do zera, wyrownuj wysokosc kart w rzedzie oraz pokazuj pominiecia i brak oddanego glosu w dwoch osobnych panelach pod kandydatami. Dodaj wieksze avatary kandydatow, nicki oraz historie rol z ikonami i kolorami odpowiednimi dla sezonu gry. Glosujacych pokazuj jako kompaktowe avatary; nick i rola wysuwaja sie jako animowana nakladka po najechaniu lub zaznaczeniu klawiatura. Nakladka nie przesuwa pozostalych elementow i nie przedluza obszaru aktywnego kursora. Zachowaj linki do profili i oznaczenia wielokrotnych glosow jednej osoby. Przenies zgony nad rozklad glosow do wspolnej czerwonej ramki. Oznacz uciszonych ikona BlackmailLetter oraz czerwona polprzezroczysta nakladka, a uwiezionych przezroczysta grafika InJail na calym avatarze. Na karcie kandydata stosuj pojedyncza nakladke calego panelu zamiast nakladania jej ponownie na jego kafelek z nickiem. Udostepnij zapisany wynik wyrzucenia i odroznij brak wyniku w starszych grach. Odtwarzaj uczestnikow ostatniego spotkania bez glosowania na podstawie skladu gry, zapisanych zgonow, wyrzucen i pozniejszych uczestnictw. Pokazuj ich z zerem glosow. Rozpoznawaj zgony podczas spotkan z akcji zgadywania i egzekucji, przypisuj je na podstawie podsumowan zgonow kolejnych spotkan i dodaj notke Zginal na spotkaniu. Ogranicz pobieranie relacji glosujacych i celow do nazw graczy. Zachowaj aktualny mechanizm osi czasu z main oraz brak odczytu game_events dla v1. Zmiana dotyczy widoku gry, jego danych pomocniczych, ikon i testow; nie obejmuje ankiet cesarza, zapisow ani avatarow Discord. Walidacja: testy uczestnikow spotkan, zgonow podczas spotkan i zliczania glosow; kontrola TypeScript oraz git diff --check.
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing. Review the Copilot code review billing settings.
MalkizH3
left a comment
There was a problem hiding this comment.
Znalazłem błąd wymagający poprawy przed scaleniem: ustalanie ofiary nietrafionego zgadywania może oznaczyć żyjącego gracza jako zmarłego i przypisać go do niewłaściwego spotkania (szczegóły przy kodzie).
Weryfikacja: analiza zmian, kontraktu v2 i zapisu akcji do bazy oraz odtworzenie logiki helpera dla nietrafionego zgadywania. PR Check dla tego commita zakończył się sukcesem. Nie uruchamiałem lokalnie pełnego zestawu testów ani aplikacji.
| const isMeetingDeath = ('isGuess' in detail && detail.isGuess === true) || | ||
| ('causeOfDeath' in detail && ['Jailor', 'Prosecutor', 'Guess', 'Misguess'].includes(String(detail.causeOfDeath))); | ||
| if (!isMeetingDeath) continue; | ||
| const name = action.target.name; |
There was a problem hiding this comment.
[P2] Ustal faktyczną ofiarę nietrafionego zgadywania zamiast zawsze używać action.target.
Kontrakt w src/app/api/schema/gamesV2.ts wyraźnie opisuje, że dla nietrafionego zgadywania Vigilante/Assassina z guessedRole lub guessedModifier pole target wskazuje zgadywanego gracza, który nadal żyje; ginie zgadujący. detailFor zachowuje te pola w bazie. Tutaj każde kill z isGuess: true bezwarunkowo traktuje cel jako ofiarę, a zdarzenia death są pomijane.
Przykład: na spotkaniu #1 A błędnie zgaduje rolę B, a podsumowanie spotkania #2 zawiera zgon A. Helper szuka B w podsumowaniach; jeśli B przeżyje grę, wybiera ostatnie spotkanie i zwraca #2 -> [B] zamiast #1 -> [A]. Widok błędnie oznacza B jako zabitego i usuwa go z odtwarzanego zbioru żywych. Należy rozwiązać rzeczywistą ofiarę z semantyki akcji (z uwzględnieniem autora/zdarzenia śmierci), dopiero potem przypisać spotkanie. Proszę dodać test dla nietrafionego zgadywania z żyjącym celem.
quarties
left a comment
There was a problem hiding this comment.
Przejrzałem df8bbb9. npx jest src/app/dramaafera: 88/88 ✅. CI (tsc, lint) zielone. Przypadki sprawdziłem na lokalnej kopii D1. Brak nowych zapytań do D1, a zawężenie target/voter do name to dobra zmiana 👍.
Wcześniejszy komentarz o nietrafionym zgadywaniu (_meetingDeaths.ts:14) jest nadal otwarty. Od tamtej pory doszły tylko merge z main. Potwierdzam go na danych: w 20260923_1845 helper oznacza Malkiza jako zabitego na spotkaniu #4 (cel misguessa), a nie zgadującego.
Parse only kill/death details and resolve each victim through a first-summary lookup instead of repeatedly scanning every meeting. Preserve first-match behavior after revives and existing guess attribution. No additional D1 queries. Validation: typecheck, 189 tests, ESLint on changed files and git diff --check.
Strona gry pokazuje pełniejszy przebieg spotkań: wynik, rozkład głosów, statusy graczy oraz uczestników bez otrzymanych głosów lub zabitych podczas spotkania. Karty głosowania mają układ do trzech kolumn, historię ról i oznaczenia uciszenia oraz uwięzienia. Pominięcia i osoby bez oddanego głosu mają osobne panele.
Nietrafione zgadywanie z guessedRole/guessedModifier wskazuje jako ofiarę zgadującego, a nie żywy cel. Obsługiwane są również starsze zapisy zgadywań, zdarzenia death, zgony od Deputy oraz akcje Prosecutora i Jailora bez detail. Powtórzone zapisy kill/death nie dublują ofiar. Właściwa osoba pozostaje przypisana do spotkania, a odtwarzanie listy żywych nie usuwa żywego celu zgadywania.
Dla gier v1 ukryta jest nieobsługiwana plakietka wyniku; zachowane są zapisane remisy. Dymki nad awatarami nie są przycinane przez kartę spotkania, a na telefonie nicki głosujących są widoczne pod awatarami. Usunięto nieużywane pole skip z grup kandydatów. Zmiany nie dodają zapytań do D1; relacje celu i autora głosu pobierają tylko nazwę.
Walidacja: 187 testów w 20 zestawach, TypeScript, ESLint zmienionych plików i git diff --check. Lokalny podgląd komponentu: wyniki v1/v2, remis, pozycja dymka oraz widoczność nicków i brak poziomego przepełnienia przy 320 i 412 px. Weryfikacja używała lokalnych przypadków testowych; nie wykonywano dodatkowego pomiaru na produkcyjnej D1.