ADR 0007 et 0013 amendés : analyse de partie dans le journal, adresses du bilan et de l'analyse

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-10 10:30:17 +01:00
co-authored by Claude Opus 5.5
parent 2c5ae08f46
commit 4d6f8cfc2e
2 changed files with 63 additions and 0 deletions
@@ -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 »).
+29
View File
@@ -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/<id>/bilan` |
| Analyse d'une partie, placée sur un coup | `#/parties/<id>/analyse/<coup>` |
| Analyse d'une partie, sur le coup à revoir | `#/parties/<id>/analyse` |
`<id>` est l'identifiant de la partie enregistrée ; `<coup>` 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.