[READY][Gameplay] Canonical session state model: explicit scoreboard phase after reveal #288

Closed
opened 2026-03-13 16:35:37 +01:00 by architecture-bot · 1 comment

Parent: #287

Problem

Backend og frontend er ikke enige om canonical round states. Frontend phase-machine har scoreboard, men backend GameSession.Status mangler den, og reveal/scoreboard er derfor ikke modelleret som to eksplicitte trin.

Scope

Gør state/API-modellen canonical efter #287:

  • persisted statuses: lobby | lie | guess | reveal | scoreboard | finished
  • eksplicit overgang reveal -> scoreboard
  • host-gating følger faseansvar
  • session_detail og relaterede endpoints afspejler samme faseorden

Acceptance criteria

  • GameSession.Status og relaterede serialiseringer understøtter scoreboard
  • der findes en eksplicit backend-transition fra reveal til scoreboard
  • reveal_scoreboard er ikke længere kun et sidekald i reveal; scoreboard kan identificeres som selvstændig sessionfase
  • start_next_round() og finish_game() er gated fra scoreboard, ikke reveal
  • API/tests dokumenterer og verificerer canonical faseforløb lie -> guess -> reveal -> scoreboard -> lobby/finished

Required artifacts

  • commit SHA i issue-comment når arbejdet er klart
  • head SHA / PR-reference hvis arbejdet leveres via branch/PR
  • kort note om hvilke endpoints/tests der blev opdateret
Parent: #287 ## Problem Backend og frontend er ikke enige om canonical round states. Frontend phase-machine har `scoreboard`, men backend `GameSession.Status` mangler den, og reveal/scoreboard er derfor ikke modelleret som to eksplicitte trin. ## Scope Gør state/API-modellen canonical efter #287: - persisted statuses: `lobby | lie | guess | reveal | scoreboard | finished` - eksplicit overgang `reveal -> scoreboard` - host-gating følger faseansvar - `session_detail` og relaterede endpoints afspejler samme faseorden ## Acceptance criteria - `GameSession.Status` og relaterede serialiseringer understøtter `scoreboard` - der findes en eksplicit backend-transition fra `reveal` til `scoreboard` - `reveal_scoreboard` er ikke længere kun et sidekald i `reveal`; scoreboard kan identificeres som selvstændig sessionfase - `start_next_round()` og `finish_game()` er gated fra `scoreboard`, ikke `reveal` - API/tests dokumenterer og verificerer canonical faseforløb `lie -> guess -> reveal -> scoreboard -> lobby/finished` ## Required artifacts - commit SHA i issue-comment når arbejdet er klart - head SHA / PR-reference hvis arbejdet leveres via branch/PR - kort note om hvilke endpoints/tests der blev opdateret
Owner

Implementeret i commit a0277fd8be17a923d992cf92fa8e530cd2c462aadev/issue-288-scoreboard-phase.

Head SHA: a0277fd8be17a923d992cf92fa8e530cd2c462aa
PR: #291 #291

Opdaterede endpoints/flow:

  • GET /lobby/sessions/:code/scoreboard laver nu eksplicit transition reveal -> scoreboard og kan genlæses i scoreboard
  • POST /lobby/sessions/:code/rounds/next er gated fra scoreboard
  • POST /lobby/sessions/:code/finish er gated fra scoreboard
  • session detail/phase view model og GameSession.Status serialiserer nu scoreboard

Opdaterede tests:

  • Django: ScoreCalculationTests, RevealRoundFlowTests, SessionDetailPhaseViewModelTests
  • Angular/Vitest: src/app/api-contract-smoke.spec.ts, src/app/features/host/host-shell.component.spec.ts
  • Frontend/Vitest: tests/angular-api-client.test.ts, tests/gameplay-phase-machine.test.ts

Verificeret lokalt:

  • .venv/bin/python manage.py test lobby.tests.RevealRoundFlowTests lobby.tests.SessionDetailPhaseViewModelTests lobby.tests.ScoreCalculationTests
  • npm test -- --run src/app/api-contract-smoke.spec.ts src/app/features/host/host-shell.component.spec.ts (i frontend/angular)
  • npm test -- --run ../frontend/tests/angular-api-client.test.ts ../frontend/tests/gameplay-phase-machine.test.ts (i frontend)
Implementeret i commit `a0277fd8be17a923d992cf92fa8e530cd2c462aa` på `dev/issue-288-scoreboard-phase`. Head SHA: `a0277fd8be17a923d992cf92fa8e530cd2c462aa` PR: #291 https://gitea.weircon.dk/wpp/weirsoe-party-protocol/pulls/291 Opdaterede endpoints/flow: - `GET /lobby/sessions/:code/scoreboard` laver nu eksplicit transition `reveal -> scoreboard` og kan genlæses i `scoreboard` - `POST /lobby/sessions/:code/rounds/next` er gated fra `scoreboard` - `POST /lobby/sessions/:code/finish` er gated fra `scoreboard` - session detail/phase view model og `GameSession.Status` serialiserer nu `scoreboard` Opdaterede tests: - Django: `ScoreCalculationTests`, `RevealRoundFlowTests`, `SessionDetailPhaseViewModelTests` - Angular/Vitest: `src/app/api-contract-smoke.spec.ts`, `src/app/features/host/host-shell.component.spec.ts` - Frontend/Vitest: `tests/angular-api-client.test.ts`, `tests/gameplay-phase-machine.test.ts` Verificeret lokalt: - `.venv/bin/python manage.py test lobby.tests.RevealRoundFlowTests lobby.tests.SessionDetailPhaseViewModelTests lobby.tests.ScoreCalculationTests` - `npm test -- --run src/app/api-contract-smoke.spec.ts src/app/features/host/host-shell.component.spec.ts` (i `frontend/angular`) - `npm test -- --run ../frontend/tests/angular-api-client.test.ts ../frontend/tests/gameplay-phase-machine.test.ts` (i `frontend`)
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wpp/weirsoe-party-protocol#288