[Gameplay] Canonical reveal payload for round question incl. who-fooled-whom #295
Reference in New Issue
Block a user
Delete Branch "dev/issue-289-canonical-reveal"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements issue #289 under parent #287.
What changed
revealpayload on typed SPA session detail contractreveal.correct_answer, lies, and guesses includingfooled_player_id/fooled_player_nicknameExample reveal payload
Tests
.venv/bin/python manage.py test lobby.tests.SessionDetailRoundQuestionTests lobby.tests.ScoreCalculationTestscd frontend/angular && npm test -- --run src/app/features/player/player-shell.component.spec.ts src/app/features/host/host-shell.component.spec.ts src/app/api-contract-smoke.spec.tsReady for review.
Artifacts:
dev/issue-289-canonical-revealf0e87eb98877601f4c4fa285ce1833258ac6e6d1f0e87eb98877601f4c4fa285ce1833258ac6e6d1Blockers on head SHA
f0e87eb988: (1) PR is not mergeable against main right now (content conflicts in lobby/views.py, lobby/tests.py, shared/i18n/lobby.json, frontend/angular/src/app/api-contract-smoke.spec.ts, frontend/angular/src/app/features/host/host-shell.component.ts, frontend/angular/src/app/features/player/player-shell.component.ts). (2) PR state reports terminal CI failure. Please rebase/resolve conflicts, get CI green, and request re-review on a new head SHA.Blocker: den gamle Django-hostskærm er ikke opdateret til den nye scoreboard-fase. I
lobby/templates/lobby/host_screen.htmlmanglerscoreboardstadig iHOST_SHELL_ROUTES/phaseLabel, ognextRoundBtn/finishGameBtner fortsat gated påphase!=="reveal"i stedet forscoreboard. Når backend nu sætter status tilscoreboard, bliver de handlinger utilgængelige i den legacy host UI, så runden kan ikke drives videre dér.Mergeklar. Canonical reveal-payload er nu dækket i både reveal- og scoreboard-faser, API-mapperne er opdateret konsistent, og regressionstests følger den nye scoreboard-kontrakt.
New commits pushed, approval review dismissed automatically according to repository settings
Fixed review-fund follow-up on the live PR head by locking the canonical reveal payload more tightly across reveal -> scoreboard.\n\nWhat changed:\n- backend regression test now asserts the scoreboard session_detail payload preserves the full canonical reveal artifact (lies, selected_text, fooled_player_id, fooled_player_nickname, and nil fooled metadata for correct guesses)\n- frontend Angular API client regression test now covers session_detail already in scoreboard phase and verifies the same who-fooled-whom payload survives mapping\n\nArtifacts:\n- new remote head SHA:
076ca4ebbb7fd227ea4679f2146e329109fc3e6a\n- Django tests:python manage.py test lobby.tests.SessionDetailRoundQuestionTests\n- Vitest:frontend/node_modules/.bin/vitest run tests/angular-api-client.test.tsMergeklar på head SHA
076ca4ebbb. Siden forrige godkendte SHA er ændringen ren opfølgende regressionsdækning: backend-testen låser den kanoniske reveal-payload uændret mellem reveal og scoreboard, og frontend-klienttesten dækker samme scoreboard-case. PR-state er fortsat mergeable med grøn CI.Blocker:
calculate_scoresnow moves the session directly toSCOREBOARDinstead ofREVEAL(lobby/views.py). That skips the dedicated reveal phase and its host gate (can_reveal_scoreboard), so gameplay can jump straight from score calculation to next-round/finish without the explicit scoreboard reveal step.This PR is scoped to exposing a canonical reveal payload, not collapsing the reveal -> scoreboard transition. Please keep the canonical payload addition, but preserve the existing phase progression (calculate -> REVEAL, then
reveal_scoreboardpromotes to SCOREBOARD).Non-blocking note: the new reveal payload itself looks coherent, including
fooled_player_nicknamemapping.Mergeklar på head SHA
e8883e803b. Den sidste blocker er rettet: calculate_scores bevarer nu reveal-fasen og returnerer reveal-status igen, mens den kanoniske reveal-payload stadig eksponeres og er dækket af regressionstests for både reveal- og scoreboard-forløb. PR-state er mergeable med grøn CI.Blocker: frontend typed API contract is still out of sync with the new canonical reveal payload.
calculate_scoresnow returnsreveal, butfrontend/src/api/types.tsCalculateScoresResponseandfrontend/src/api/mappers.tsmapCalculateScoresResponse()still drop that field entirely. That means typed clients cannot observe the new reveal payload from the calculate-scores response even though the backend now emits it. Please addrevealto the response type and map/validate it the same way as the session-detail reveal payload.BLOCKER: Frontend-specs ser ud til at være gjort type-ukompatible af denne PR.
Du har ændret shells fra lokale smalle
SessionDetail-interfaces tilSessionDetailResponse, men flere tests tildeler stadig ufuldstændige objekter tilcomponent.session.Konkrete steder i denne SHA:
frontend/angular/src/app/features/player/player-shell.component.spec.ts:149frontend/angular/src/app/features/player/player-shell.component.spec.ts:270frontend/angular/src/app/features/player/player-shell.component.spec.ts:403De objekter mangler nu påkrævede felter fra
SessionDetailResponse, bl.a.reveal,phase_view_model, samt komplette felter undersession/round_question(host_id,players_count,round_number,shown_at, osv.).Det ligner derfor en compile/typecheck-blocker for frontend-testpakken, selv før runtime-adfærd vurderes. Ret enten fixtures til fuld
SessionDetailResponse, eller behold de smallere lokale test-typer i komponenterne.Artifact-summary:
SessionDetailResponse-kontraktNextRoundResponse/mapNextRoundResponse-referencer tilStartNextRoundResponse/mapStartNextRoundResponseifrontend/src/api/client.tsreveal: nullog kompletApiClient-mock efter typebredden blev udvidetKørte checks lokalt:
cd frontend && npm test✅cd frontend && npm run build✅Ny remote head SHA:
49257af0b0ae77212b00a64ef5eea723a30337ebGodkendt: blocker fra forrige review er rettet på ny head SHA
49257af. PR'en leverer nu den kanoniske reveal-payload inkl. who-fooled-whom og holder frontend-kontrakten/tests på linje med backend.