Le 2026-11-09, Pierre a demandé « un bouton (ou autre) pour mettre à jour l'app (service worker) de manière forcée quand il y a un changement ».
Aujourd'hui, une nouvelle version publiée n'arrive sur le téléphone qu'au hasard des rechargements. Le joueur ne sait pas quelle version il utilise.
web/sw.js appelle skipWaiting() dès l'installation et efface l'ancien cache. Une page déjà ouverte garde alors son ancien code, alors que les fichiers qu'elle pourrait encore demander ont disparu. C'est une source d'erreurs difficiles à reproduire.
Quoi
Le plan docs/plans/2026-11-03-accueil-tutoriel-aide.md (0e.5) reçoit un point 5, « Mise à jour de l'application » :
Un bandeau discret « Nouvelle version disponible », avec un bouton « Mettre à jour ». Il n'apparaît jamais pendant un coup en cours.
Le nouveau service worker attend l'accord du joueur, sauf à la toute première installation. Le bouton l'active (skipWaiting), puis la page se recharge au controllerchange, et la partie reprend où elle en était.
Une ligne « Rechercher une mise à jour » dans le menu (registration.update()).
La version publiée (le commit de version.json) s'affiche dans « À propos ».
Un test navigateur publie deux versions l'une après l'autre et vérifie la mise à jour.
La ligne 0e.5 de la feuille de route mentionne aussi cette mise à jour.
Comment
Cette fonction rejoint 0e.5, qui crée déjà l'onglet « À propos » et touche au menu et au service worker. Elle s'appuie sur le cycle de vie standard des service workers, sans dépendance.
Choix et compromis
Un bandeau plutôt qu'une mise à jour silencieuse au prochain lancement : c'est ce que Pierre demande, et le joueur garde la main en pleine partie.
Pas de vérification périodique : les vérifications de mise à jour du navigateur, plus la ligne du menu, suffisent pour une app hors ligne.
Risques et déploiement
Documentation seule. À l'implémentation, la version qui introduit ce mécanisme sera encore installée par l'ancien service worker, qui s'active seul. Le bandeau n'apparaîtra qu'à partir de la version suivante.
## Pourquoi
Le 2026-11-09, Pierre a demandé « un bouton (ou autre) pour mettre à jour l'app (service worker) de manière forcée quand il y a un changement ».
Aujourd'hui, une nouvelle version publiée n'arrive sur le téléphone qu'au hasard des rechargements. Le joueur ne sait pas quelle version il utilise.
`web/sw.js` appelle `skipWaiting()` dès l'installation et efface l'ancien cache. Une page déjà ouverte garde alors son ancien code, alors que les fichiers qu'elle pourrait encore demander ont disparu. C'est une source d'erreurs difficiles à reproduire.
## Quoi
Le plan `docs/plans/2026-11-03-accueil-tutoriel-aide.md` (0e.5) reçoit un point 5, « Mise à jour de l'application » :
- **Un bandeau discret** « Nouvelle version disponible », avec un bouton « Mettre à jour ». Il n'apparaît jamais pendant un coup en cours.
- **Le nouveau service worker attend l'accord du joueur**, sauf à la toute première installation. Le bouton l'active (`skipWaiting`), puis la page se recharge au `controllerchange`, et la partie reprend où elle en était.
- **Une ligne « Rechercher une mise à jour »** dans le menu (`registration.update()`).
- **La version publiée** (le commit de `version.json`) s'affiche dans « À propos ».
- **Un test navigateur** publie deux versions l'une après l'autre et vérifie la mise à jour.
La ligne 0e.5 de la feuille de route mentionne aussi cette mise à jour.
## Comment
Cette fonction rejoint 0e.5, qui crée déjà l'onglet « À propos » et touche au menu et au service worker. Elle s'appuie sur le cycle de vie standard des service workers, sans dépendance.
## Choix et compromis
- **Un bandeau plutôt qu'une mise à jour silencieuse au prochain lancement** : c'est ce que Pierre demande, et le joueur garde la main en pleine partie.
- **Pas de vérification périodique** : les vérifications de mise à jour du navigateur, plus la ligne du menu, suffisent pour une app hors ligne.
## Risques et déploiement
Documentation seule. À l'implémentation, la version qui introduit ce mécanisme sera encore installée par l'ancien service worker, qui s'active seul. Le bandeau n'apparaîtra qu'à partir de la version suivante.
## Comment vérifier
```
make lint && make test
```
## Hors périmètre
L'implémentation, avec le reste de 0e.5.
Generated with Claude Code https://claude.com/claude-code
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Pourquoi
Le 2026-11-09, Pierre a demandé « un bouton (ou autre) pour mettre à jour l'app (service worker) de manière forcée quand il y a un changement ».
Aujourd'hui, une nouvelle version publiée n'arrive sur le téléphone qu'au hasard des rechargements. Le joueur ne sait pas quelle version il utilise.
web/sw.jsappelleskipWaiting()dès l'installation et efface l'ancien cache. Une page déjà ouverte garde alors son ancien code, alors que les fichiers qu'elle pourrait encore demander ont disparu. C'est une source d'erreurs difficiles à reproduire.Quoi
Le plan
docs/plans/2026-11-03-accueil-tutoriel-aide.md(0e.5) reçoit un point 5, « Mise à jour de l'application » :skipWaiting), puis la page se recharge aucontrollerchange, et la partie reprend où elle en était.registration.update()).version.json) s'affiche dans « À propos ».La ligne 0e.5 de la feuille de route mentionne aussi cette mise à jour.
Comment
Cette fonction rejoint 0e.5, qui crée déjà l'onglet « À propos » et touche au menu et au service worker. Elle s'appuie sur le cycle de vie standard des service workers, sans dépendance.
Choix et compromis
Risques et déploiement
Documentation seule. À l'implémentation, la version qui introduit ce mécanisme sera encore installée par l'ancien service worker, qui s'active seul. Le bandeau n'apparaîtra qu'à partir de la version suivante.
Comment vérifier
Hors périmètre
L'implémentation, avec le reste de 0e.5.
Generated with Claude Code https://claude.com/claude-code