From 4d6f8cfc2ec677ca051a60b0b8ec7ace23b916c4 Mon Sep 17 00:00:00 2001 From: Pierre MARTIN Date: Tue, 10 Nov 2026 10:30:17 +0100 Subject: [PATCH] =?UTF-8?q?ADR=200007=20et=200013=20amend=C3=A9s=20:=20ana?= =?UTF-8?q?lyse=20de=20partie=20dans=20le=20journal,=20adresses=20du=20bil?= =?UTF-8?q?an=20et=20de=20l'analyse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- ...007-architecture-et-conventions-de-code.md | 34 +++++++++++++++++++ docs/adr/0013-position-dans-l-adresse.md | 29 ++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/docs/adr/0007-architecture-et-conventions-de-code.md b/docs/adr/0007-architecture-et-conventions-de-code.md index 22a7ec9..f16099b 100644 --- a/docs/adr/0007-architecture-et-conventions-de-code.md +++ b/docs/adr/0007-architecture-et-conventions-de-code.md @@ -150,3 +150,37 @@ relira sans recalcul. conseils ; un conseil reste attaché à son événement, même hors de la branche courante. - Le schéma IndexedDB ne change pas : le journal est enregistré tel quel. + +### 2026-11-10 — L'analyse de partie rattachée au journal + +Avec le bilan de fin de partie et l'écran d'analyse (étape 1e), le journal +d'une partie (`GameJournal`) gagne un second champ facultatif, `review` +(`GameReview`, `app/src/domain/game/review.ts`) : le reste de l'analyse +de la partie par le moteur, à côté des conseils du maître (`advice`) : + +- `luck` : la chance de chaque jet (`DiceRolled`, jet d'ouverture compris) + pour le camp qui le joue ; +- `winChances` : les chances de gagner du joueur après chaque coup + (`MovePlayed`), de 0 à 1 ; +- `computer` : les décisions de l'ordinateur, analysées comme celles du + joueur (même format que les conseils) ; +- `unanalysed` : les décisions que le moteur n'analyse pas (videau + inaccessible, position de départ), pour ne plus les redemander ; +- `version` (`REVIEW_VERSION`, 1) et `ply`, le niveau des analyses (2). + +Comme les conseils, ce n'est pas un événement : les événements gardent leur +version (2). Les analyses qui manquent (dont tous les conseils d'une partie +jouée avant l'étape 1d) sont calculées en arrière-plan sur le second moteur, +une à une, rangées au fur et à mesure, et l'ensemble s'arrête quand on n'en +a plus besoin (`app/src/ui/review-runner.ts`). + +- À la reprise (`migrateJournal`), une analyse d'une autre version ou mal + formée est oubliée ; ses entrées rattachées à un événement absent aussi. + Un journal enregistré avant l'étape 1e n'a pas de champ `review` et se + reprend tel quel. Testé dans `app/tests/game-analysis.test.ts`. +- Une analyse faite en arrière-plan sur une copie du journal s'y range + sans toucher aux conseils déjà là (`withAnalysesOf`). +- Le schéma IndexedDB ne change pas : le journal est enregistré tel quel. + La bibliothèque gagne `saveAnalyses`, qui enregistre le journal analysé + d'une partie sans en faire la partie en cours ni changer la date de sa + dernière action (l'ordre de « Mes parties »). diff --git a/docs/adr/0013-position-dans-l-adresse.md b/docs/adr/0013-position-dans-l-adresse.md index 1b26b81..7dfa5b1 100644 --- a/docs/adr/0013-position-dans-l-adresse.md +++ b/docs/adr/0013-position-dans-l-adresse.md @@ -130,3 +130,32 @@ conseil est enregistré dans le journal (ADR 0007, amendement du 2026-11-10). Un événement sans conseil donne un message, jamais une page cassée. L'adresse n'a de sens que sur l'appareil qui a joué la partie : ce n'est pas un lien à partager (le lien de la position, lui, se partage). + +### 2026-11-10 — Adresses du bilan et de l'analyse d'une partie + +Ajoutées avec le bilan de fin de partie et l'écran d'analyse (étape 1e), +dans le même schéma, sous l'adresse de la partie dans « Mes parties » : + +| Écran | Adresse | +| --- | --- | +| Bilan de fin de partie | `#/parties//bilan` | +| Analyse d'une partie, placée sur un coup | `#/parties//analyse/` | +| Analyse d'une partie, sur le coup à revoir | `#/parties//analyse` | + +`` est l'identifiant de la partie enregistrée ; `` le numéro d'un +tour de la partie (ce qu'un camp a fait quand il avait la main : doubler ou +non, lancer, jouer), à partir de 1, sur sa ligne courante. + +- Le bilan remplace le panneau de fin de partie dès que l'analyse est + prête : l'adresse de la partie (`#/`) est alors remplacée par celle du + bilan, sans rien empiler. Il monte au-dessus de la partie, comme une + feuille ; le fermer (croix, retour du téléphone) laisse voir la partie + finie, sans le panneau. « Mes parties » donne le bilan de chaque partie + finie. +- L'analyse est une page. Choisir un autre coup (courbe, flèches, liste) + remplace l'adresse : le retour du téléphone quitte l'écran au lieu de + repasser par chaque coup. « Rejouer d'ici » ramène à la partie (`#/`), + reprise juste avant la décision du coup. +- Comme la feuille d'explication, ces adresses n'ont de sens que sur + l'appareil qui a joué la partie. Une partie absente donne un message, + jamais une page cassée.