Skip to content

fix: le bouton Rejouer avait disparu de Classique (hotfix 2.3.3) - #224

Merged
CodeByHaamza merged 1 commit into
mainfrom
hotfix/rejouer_classique
Sep 30, 2026
Merged

CodeByHaamza merged 1 commit into
mainfrom
hotfix/rejouer_classique

Conversation

@CodeByHaamza

Copy link
Copy Markdown
Owner

Blocage de jeu en production, introduit par la 2.3.2. D'où un hotfix/* vers main plutôt que le passage par develop (CLAUDE.md §4).

Le symptôme

En Classique, gagné ou perdu, normal ou Expert : plus aucun moyen de relancer une partie sans recharger la page.

La cause — c'est le correctif hidden de la 2.3.2

modeClassique.js ajoutait .hidden à .input-row dans ses trois fins de partie. Or #resetButton — le bouton Rejouer — vit dans cette rangée.

Tant que .hidden n'était défini nulle part globalement, ces lignes ne faisaient rien et personne ne les avait remarquées depuis des mois. La règle [hidden], .hidden { display: none !important } livrée en 2.3.2 les a rendues vraies.

Deux aggravations :

  • rien ne retire jamais la classe → une fois masquée, la rangée ne revient pas de la partie ;
  • aucun des cinq autres modes ne masque sa rangée. Classique était le seul, et seulement par du code mort.

Pourquoi la vérification de la 2.3.2 ne l'a pas vu

Le rayon d'action de la règle avait pourtant été mesuré page par page sur la production avant de l'écrire — mais sur des pages fraîchement chargées. L'état « partie terminée » n'est jamais atteint par un simple goto : la régression était hors de portée de la mesure.

C'est une lacune de méthode, pas de malchance. Une règle CSS globale doit être éprouvée sur les états de l'application, pas seulement sur ses pages au chargement — c'est exactement ce que le nouveau test fait.

Le correctif

Les trois lignes retirées. Sans effet fonctionnel : le code neutralise déjà les contrôles juste au-dessus (textbar.disabled, pointer-events: none sur Valider, Give Up grisé). Masquer la rangée en plus n'apportait rien et coûtait le Rejouer. Classique se comporte de nouveau comme les cinq autres modes.

Vérifications

  • tests-e2e/classic_replay_button.spec.js — nouveau. Joue une partie jusqu'à l'abandon, puis vérifie que Rejouer est visible, réellement cliquable (elementFromPoint : un bouton « visible » peut être recouvert ou à zéro pixel), et qu'un clic relance bien une partie. Deux largeurs plus le parcours complet.
  • 1548 tests Vitest verts.
  • CACHE_VERSION v105 → v106.

Hors périmètre, volontairement

prod_smoke.sh (la passe nocturne du serveur maison, posée aujourd'hui) a trouvé un débordement horizontal de 14 px sur la page profil à 390 px et 13 px à 480 px. Réel, antérieur, sans rapport — traité séparément pour que ce lot ne contienne que la régression.

Régression de la 2.3.2, causée par le correctif hidden lui-même.

modeClassique.js ajoutait .hidden à .input-row dans ses trois fins de partie, et
#resetButton — le bouton Rejouer — vit dans cette rangée. Tant que .hidden
n'était défini nulle part globalement, ces lignes ne faisaient rien et personne
ne les avait remarquées ; la règle globale de la 2.3.2 les a rendues vraies.

Deux aggravations : rien ne retire jamais la classe, donc le joueur restait
bloqué jusqu'au rechargement complet de la page ; et aucun des cinq autres modes
ne masque sa rangée de saisie — Classique était le seul, par du code mort.

Les trois lignes sont retirées, sans effet fonctionnel : le code neutralise déjà
les contrôles juste au-dessus (textbar.disabled, pointer-events sur Valider, Give
Up grisé). Les masquer en plus n'apportait rien et coûtait le Rejouer.

La vérification de la 2.3.2 avait mesuré le rayon d'action page par page sur la
production, mais sur des pages fraîchement chargées : l'état « partie terminée »
n'est jamais atteint par un simple goto. Une règle CSS globale doit être éprouvée
sur les états de l'application, pas seulement sur ses pages au chargement — d'où
le nouveau test, qui joue une partie jusqu'au bout et vérifie que Rejouer est
visible, réellement cliquable, et qu'un clic relance bien une partie.
@CodeByHaamza
CodeByHaamza merged commit a30e7b7 into main Sep 30, 2026
4 checks passed
@CodeByHaamza
CodeByHaamza deleted the hotfix/rejouer_classique branch September 30, 2026 06:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant