feat(round3): design and implement the final round (#18) #39

Merged
Reliodas merged 1 commit from feat/18-finale into develop 2026-06-24 14:18:53 +00:00
Owner

Closes #18.

Finale « Le Tableau » validée avec le mainteneur, implémentée comme manche 3.

Règles (figées dans docs/Regles.md)

  • Ouverture par un déchiffrage T9 fixant l'ordre de passage des 3 finalistes.
  • Plateau de 12 cases : facile 1 / moyen 2 / difficile 3 points ; 3 cases mystère (×2).
  • Tour par tour ; plus haut score gagne ; départage déterministe (score manche 2, puis rang codebreaker, puis ordre d'arrivée).

Changements

  • Serveur : round3.ts + round3.engine.ts (3ᵉ RoundEngine), transition via la nouvelle action start-final. Plateau, score, vainqueur, projections par rôle (le MJ voit la solution de la case + réponses du code ; jamais les candidats ; cases mystère cachées jusqu'à révélation). Champ finalScore, constantes finale, chargeur de questions sur toute la banque.
  • Shared : Round3Status, types de cases/état, actions finale, événement player:select-cell.
  • Client : rendu de la finale dans les 3 vues, réutilisant Codebreaker + nouveaux FinalBoard/FinalStandings ; bouton « Démarrer la finale ».
  • Tests : unitaires round3, dispatch moteur, projection/no-leak game.state, composants. Docs mises à jour.

Plateau à cases numérotées (images runtime optionnelles) → build propre sans assets privés (CLAUDE.md).

Tests

  • node:test 191/1 skip, Jest 13, Vitest 83 ; couverture au-dessus des planchers (round3.ts 100 %) ; typecheck + builds OK.

Critères d'acceptation

  • Règles validées avant développement
  • Finale à 3 candidats avec tableau (cases)
  • Difficulté, valeurs de points et cases mystères
  • Nouveau déchiffrage du code
  • Nombre de questions, égalités, désignation du vainqueur
  • États serveur, vues par rôle, tests complets (assets visuels optionnels)

🤖 Generated with Claude Code

Closes #18. Finale « Le Tableau » validée avec le mainteneur, implémentée comme manche 3. ## Règles (figées dans docs/Regles.md) - Ouverture par un **déchiffrage T9** fixant l'ordre de passage des **3 finalistes**. - Plateau de **12 cases** : facile 1 / moyen 2 / difficile 3 points ; **3 cases mystère** (×2). - Tour par tour ; plus haut score gagne ; **départage déterministe** (score manche 2, puis rang codebreaker, puis ordre d'arrivée). ## Changements - **Serveur** : `round3.ts` + `round3.engine.ts` (3ᵉ `RoundEngine`), transition via la nouvelle action `start-final`. Plateau, score, vainqueur, projections par rôle (le MJ voit la solution de la case + réponses du code ; jamais les candidats ; cases mystère cachées jusqu'à révélation). Champ `finalScore`, constantes finale, chargeur de questions sur toute la banque. - **Shared** : `Round3Status`, types de cases/état, actions finale, événement `player:select-cell`. - **Client** : rendu de la finale dans les 3 vues, réutilisant `Codebreaker` + nouveaux `FinalBoard`/`FinalStandings` ; bouton « Démarrer la finale ». - **Tests** : unitaires round3, dispatch moteur, projection/no-leak `game.state`, composants. Docs mises à jour. Plateau à cases numérotées (images runtime optionnelles) → build propre sans assets privés (CLAUDE.md). ## Tests - node:test 191/1 skip, Jest 13, Vitest 83 ; couverture au-dessus des planchers (round3.ts 100 %) ; typecheck + builds OK. ## Critères d'acceptation - [x] Règles validées avant développement - [x] Finale à 3 candidats avec tableau (cases) - [x] Difficulté, valeurs de points et cases mystères - [x] Nouveau déchiffrage du code - [x] Nombre de questions, égalités, désignation du vainqueur - [x] États serveur, vues par rôle, tests complets (assets visuels optionnels) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(round3): design and implement the final round
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
b0eaab4b6e
Implement the validated finale "Le Tableau" as round 3 (#18).

Rules (frozen in docs/Regles.md): the finale opens with a T9 codebreaker that
fixes the play order of the 3 finalists; a 12-cell board scores questions by
difficulty (1/2/3 pts) with 3 mystery cells worth double; finalists take turns
picking cells; the highest score wins, ties broken deterministically
(round-2 score, then codebreaker rank, then join order).

- Server: round3.ts state machine + round3.engine.ts, registered as the third
  RoundEngine; round 2 transitions in via the new start-final action. Board,
  scoring, winner and per-role projections (host sees the cell solution and
  codebreaker answers; players never do; mystery cells stay hidden until
  revealed). New finalScore on players, finale constants in rules.ts, and a
  whole-bank final question loader.
- Shared: Round3Status, final cell/state types, finale actions and the
  player:select-cell event.
- Client: finale rendering in all three role views, reusing Codebreaker and new
  FinalBoard / FinalStandings components; a "Démarrer la finale" control.
- Tests: round3 unit tests, engine dispatch, game.state no-leak/projection,
  and component tests. Docs updated (Regles.md, Implémentation.md).

The board uses numbered cells with optional runtime images, so a clean build
never requires private assets.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 63e2db5aa4 into develop 2026-06-24 14:18:53 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: jeux/le-grand-concours#39
No description provided.