[READY][Gameplay] Canonical reveal payload for round question incl. who-fooled-whom #289

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

Parent: #287

Problem

Canonical reveal mangler som egentlig round-output. Nuværende implementation beregner score, men eksponerer ikke et komplet reveal-datasæt med korrekt svar, løgne og relationen “hvem narrede hvem”, som UI kan bruge direkte.

Scope

Implementér canonical reveal-output efter #287:

  • reveal-data bundet til den konkrete round_question
  • korrekt svar
  • alle lies med ophavs-spiller
  • alle guesses med korrekthed + fooled-relation
  • session/session-detail eller dedikeret reveal-endpoint giver data nok til host/player reveal-visning

Acceptance criteria

  • efter guess -> reveal kan klienten hente et komplet reveal-datasæt for aktiv round question
  • reveal-datasættet indeholder mindst:
    • correct_answer
    • lies med player_id eller nickname + text
    • guesses med player_id eller nickname + selected_text + is_correct + fooled_player_id hvis relevant
  • reveal-visning kan afgøre både korrekt svar og hvem der narrede hvem uden ekstra heuristik i frontend
  • tests dækker mindst ét forløb med bluff-point og én spiller, der gætter korrekt

Required artifacts

  • commit SHA i issue-comment når arbejdet er klart
  • head SHA / PR-reference hvis arbejdet leveres via branch/PR
  • eksempel på reveal-payload i issue-comment eller PR-beskrivelse
Parent: #287 ## Problem Canonical reveal mangler som egentlig round-output. Nuværende implementation beregner score, men eksponerer ikke et komplet reveal-datasæt med korrekt svar, løgne og relationen “hvem narrede hvem”, som UI kan bruge direkte. ## Scope Implementér canonical reveal-output efter #287: - reveal-data bundet til den konkrete `round_question` - korrekt svar - alle lies med ophavs-spiller - alle guesses med korrekthed + fooled-relation - session/session-detail eller dedikeret reveal-endpoint giver data nok til host/player reveal-visning ## Acceptance criteria - efter `guess -> reveal` kan klienten hente et komplet reveal-datasæt for aktiv round question - reveal-datasættet indeholder mindst: - `correct_answer` - lies med `player_id` eller nickname + text - guesses med `player_id` eller nickname + `selected_text` + `is_correct` + `fooled_player_id` hvis relevant - reveal-visning kan afgøre både korrekt svar og hvem der narrede hvem uden ekstra heuristik i frontend - tests dækker mindst ét forløb med bluff-point og én spiller, der gætter korrekt ## Required artifacts - commit SHA i issue-comment når arbejdet er klart - head SHA / PR-reference hvis arbejdet leveres via branch/PR - eksempel på reveal-payload i issue-comment eller PR-beskrivelse
Owner

Implemented on branch dev/issue-289-canonical-reveal-payload and pushed to origin.

Commit SHA: f0ebc25da71f362f5157ee2de4e4e119a7d9acfe
Head SHA: f0ebc25da71f362f5157ee2de4e4e119a7d9acfe
PR: not created yet (branch ready: https://gitea.weircon.dk/wpp/weirsoe-party-protocol/pulls/new/dev/issue-289-canonical-reveal-payload)

What changed

  • frontend API contract now models canonical reveal payload on GET /lobby/sessions/:code during reveal phase
  • frontend API contract now models canonical reveal payload on POST /lobby/sessions/:code/questions/:id/scores/calculate
  • reveal payload includes correct_answer, lies with player_id/nickname/text, and guesses with player_id/nickname/selected_text/is_correct/fooled_player_id (+ fooled_player_nickname when present)

Checks

  • frontend: npm test -- --run tests/angular-api-client.test.ts
  • backend: python manage.py test lobby.tests.ScoreCalculationTests lobby.tests.SessionDetailRoundQuestionTests (run in local .venv with sqlite-backed default settings; full pip install -r requirements.txt was not possible here because mysqlclient build deps are missing, so I installed the minimal Django deps needed for the targeted tests)

Example reveal payload

{
  "round_question_id": 77,
  "round_number": 1,
  "prompt": "Hvem opfandt pæren?",
  "correct_answer": "Edison",
  "lies": [
    {
      "player_id": 3,
      "nickname": "Bo",
      "text": "Tesla",
      "created_at": "2026-03-01T16:00:20Z"
    }
  ],
  "guesses": [
    {
      "player_id": 2,
      "nickname": "Maja",
      "selected_text": "Tesla",
      "is_correct": false,
      "fooled_player_id": 3,
      "fooled_player_nickname": "Bo",
      "created_at": "2026-03-01T16:01:00Z"
    },
    {
      "player_id": 4,
      "nickname": "Ida",
      "selected_text": "Edison",
      "is_correct": true,
      "fooled_player_id": null,
      "created_at": "2026-03-01T16:01:02Z"
    }
  ]
}
Implemented on branch `dev/issue-289-canonical-reveal-payload` and pushed to origin. Commit SHA: `f0ebc25da71f362f5157ee2de4e4e119a7d9acfe` Head SHA: `f0ebc25da71f362f5157ee2de4e4e119a7d9acfe` PR: not created yet (branch ready: https://gitea.weircon.dk/wpp/weirsoe-party-protocol/pulls/new/dev/issue-289-canonical-reveal-payload) What changed - frontend API contract now models canonical `reveal` payload on `GET /lobby/sessions/:code` during reveal phase - frontend API contract now models canonical `reveal` payload on `POST /lobby/sessions/:code/questions/:id/scores/calculate` - reveal payload includes `correct_answer`, lies with `player_id`/`nickname`/`text`, and guesses with `player_id`/`nickname`/`selected_text`/`is_correct`/`fooled_player_id` (+ `fooled_player_nickname` when present) Checks - `frontend: npm test -- --run tests/angular-api-client.test.ts` ✅ - `backend: python manage.py test lobby.tests.ScoreCalculationTests lobby.tests.SessionDetailRoundQuestionTests` ✅ (run in local `.venv` with sqlite-backed default settings; full `pip install -r requirements.txt` was not possible here because `mysqlclient` build deps are missing, so I installed the minimal Django deps needed for the targeted tests) Example reveal payload ```json { "round_question_id": 77, "round_number": 1, "prompt": "Hvem opfandt pæren?", "correct_answer": "Edison", "lies": [ { "player_id": 3, "nickname": "Bo", "text": "Tesla", "created_at": "2026-03-01T16:00:20Z" } ], "guesses": [ { "player_id": 2, "nickname": "Maja", "selected_text": "Tesla", "is_correct": false, "fooled_player_id": 3, "fooled_player_nickname": "Bo", "created_at": "2026-03-01T16:01:00Z" }, { "player_id": 4, "nickname": "Ida", "selected_text": "Edison", "is_correct": true, "fooled_player_id": null, "created_at": "2026-03-01T16:01:02Z" } ] } ```
Owner

Implemented on branch dev/issue-289-canonical-reveal-payload.

Artifacts:

  • commit SHA: 2c524d7d2d38942137540e8403d62b1a80c752af
  • head SHA: 2c524d7d2d38942137540e8403d62b1a80c752af
  • branch: dev/issue-289-canonical-reveal-payload

What changed:

  • added canonical reveal payload builder for the active round_question
  • exposed reveal from GET /lobby/sessions/{code} during reveal phase
  • exposed reveal directly from score calculation response after guess -> reveal
  • included player identity on lies/guesses plus fooled_player_id/nickname for who-fooled-whom rendering
  • added tests covering a correct guess + bluff points flow and session-detail reveal retrieval

Example reveal payload:

{
  "reveal": {
    "round_question_id": 42,
    "round_number": 1,
    "prompt": "Hvilken sport spiller man i Wimbledon?",
    "correct_answer": "Tennis",
    "lies": [
      {
        "player_id": 9,
        "nickname": "Nora",
        "text": "Padel",
        "created_at": "2026-03-15T11:20:00+00:00"
      }
    ],
    "guesses": [
      {
        "player_id": 7,
        "nickname": "Luna",
        "selected_text": "Tennis",
        "is_correct": true,
        "fooled_player_id": null,
        "created_at": "2026-03-15T11:21:00+00:00"
      },
      {
        "player_id": 8,
        "nickname": "Mads",
        "selected_text": "Padel",
        "is_correct": false,
        "fooled_player_id": 9,
        "fooled_player_nickname": "Nora",
        "created_at": "2026-03-15T11:21:05+00:00"
      }
    ]
  }
}
Implemented on branch `dev/issue-289-canonical-reveal-payload`. Artifacts: - commit SHA: `2c524d7d2d38942137540e8403d62b1a80c752af` - head SHA: `2c524d7d2d38942137540e8403d62b1a80c752af` - branch: `dev/issue-289-canonical-reveal-payload` What changed: - added canonical `reveal` payload builder for the active `round_question` - exposed `reveal` from `GET /lobby/sessions/{code}` during reveal phase - exposed `reveal` directly from score calculation response after `guess -> reveal` - included player identity on lies/guesses plus `fooled_player_id`/nickname for who-fooled-whom rendering - added tests covering a correct guess + bluff points flow and session-detail reveal retrieval Example reveal payload: ```json { "reveal": { "round_question_id": 42, "round_number": 1, "prompt": "Hvilken sport spiller man i Wimbledon?", "correct_answer": "Tennis", "lies": [ { "player_id": 9, "nickname": "Nora", "text": "Padel", "created_at": "2026-03-15T11:20:00+00:00" } ], "guesses": [ { "player_id": 7, "nickname": "Luna", "selected_text": "Tennis", "is_correct": true, "fooled_player_id": null, "created_at": "2026-03-15T11:21:00+00:00" }, { "player_id": 8, "nickname": "Mads", "selected_text": "Padel", "is_correct": false, "fooled_player_id": 9, "fooled_player_nickname": "Nora", "created_at": "2026-03-15T11:21:05+00:00" } ] } } ```
Owner

Issue #289 implemented via PR #295.

Artifacts:

Issue #289 implemented via PR #295. Artifacts: - parent: #287 - branch: `dev/issue-289-canonical-reveal` - commit SHA: `f0e87eb98877601f4c4fa285ce1833258ac6e6d1` - remote head SHA: `f0e87eb98877601f4c4fa285ce1833258ac6e6d1` - PR: #295
Owner

Leveret i PR #297.

  • Branch: dev/issue-289-canonical-reveal-payload-devbot
  • Commit SHA: 7a6eb0b88e0566a370013eb12f5cfb7873b7825b
  • Remote head SHA: 7a6eb0b88e0566a370013eb12f5cfb7873b7825b

PR-beskrivelsen indeholder konkret eksempel på canonical reveal-payload og test evidence.

Leveret i PR #297. - Branch: `dev/issue-289-canonical-reveal-payload-devbot` - Commit SHA: `7a6eb0b88e0566a370013eb12f5cfb7873b7825b` - Remote head SHA: `7a6eb0b88e0566a370013eb12f5cfb7873b7825b` PR-beskrivelsen indeholder konkret eksempel på canonical reveal-payload og test evidence.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wpp/weirsoe-party-protocol#289