Skip to content

Rozbudowa spotkań i głosowań w podsumowaniu gry - #371

Merged
MalkizH3 merged 11 commits into
mainfrom
meetingi
Oct 28, 2026
Merged

MalkizH3 merged 11 commits into
mainfrom
meetingi

Conversation

@MalkizH3

@MalkizH3 MalkizH3 commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

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.

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.
Copilot AI balanced review requested due to automatic review settings October 19, 2026 20:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
MalkizH3 requested a review from quarties October 19, 2026 20:12

@MalkizH3 MalkizH3 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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;

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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 quarties left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@MalkizH3
MalkizH3 requested a review from quarties October 25, 2026 17:49
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.

@quarties quarties left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ran npm run typecheck and npm test on dc5d4f8. All pass.

@MalkizH3
MalkizH3 merged commit a124644 into main Oct 28, 2026
2 checks passed
@MalkizH3
MalkizH3 deleted the meetingi branch October 28, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants