Plan 0e.5 : mise à jour de l'application en un toucher #39

Manually merged
pierre merged 1 commits from maj-application into main 2026-11-09 12:46:31 +00:00
Owner

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

## 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
pierre added 1 commit 2026-11-09 12:45:30 +00:00
pierre manually merged commit b40b28d25b into main 2026-11-09 12:46:31 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: pierre/Ustagammon#39