Skip to content

Releases: CodeByHaamza/personadle

v2.3.3 — le bouton Rejouer revient en Classique

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 30 Sep 06:22
a30e7b7

Correctif d'urgence. La 2.3.2 avait fait disparaître le bouton Rejouer à la fin d'une partie de Classique — gagnée ou perdue, en normal comme en Expert. Il n'y avait plus aucun moyen d'en relancer une sans recharger la page.

Ce qui s'était passé

Le correctif hidden de la 2.3.2 a rendu vraie une ligne qui ne faisait rien depuis des mois : modeClassique.js ajoutait .hidden à .input-row en fin de partie, et le bouton Rejouer vit dans cette rangée.

Deux aggravations : rien ne retirait jamais la classe, donc le blocage durait jusqu'au rechargement complet ; et aucun des cinq autres modes ne masque sa rangée — Classique était le seul, par du code mort.

Pourquoi ça n'avait pas été vu

Le rayon d'action de la règle avait é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 chargement : la régression était hors de portée de la mesure.

Une règle CSS globale doit être éprouvée sur les états de l'application, pas seulement sur ses pages au chargement.

Le correctif

Les trois lignes retirées, sans effet fonctionnel : les contrôles étaient déjà neutralisés juste au-dessus. Classique se comporte de nouveau comme les cinq autres modes.

tests-e2e/classic_replay_button.spec.js joue désormais une partie jusqu'au bout et vérifie que Rejouer est visible, réellement cliquable (elementFromPoint — un bouton « visible » peut être recouvert), et qu'un clic relance bien une partie.

CACHE_VERSION v105 → v106.

v2.3.2 — Classique en mobile, doublons invisibles, Discord à 39 voix

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 27 Sep 10:07
36e00d6

Correctifs visibles par un joueur

Classique sur téléphone — Indice et Abandon côte à côte au lieu d'être empilés : le champ de réponse remonte de 170 px (894 → 724 px à 390 px de large). Le correctif de la 2.3.1 n'en avait réglé que 46 ; Classique était devenu le mode où il fallait scroller le plus loin pour répondre, c'est maintenant celui où le champ est le plus haut.

Deux éléments se peignaient alors qu'ils étaient marqués cachés. [hidden] n'est display: none que dans la feuille du navigateur, et n'importe quelle règle d'auteur posant un display la bat :

  • le bouton « Supprimer mon compte » en double en bas de la page profil, sous 480 px — il n'appartient qu'aux ⚙ Paramètres ;
  • une pastille de notification vide collée à l'icône Amis, sur les huit pages et à toutes les largeurs.

Discord

  • Le quotidien passe de 8 à 39 voix : tout le cast principal, 3 répliques chacune, en français et en anglais.
  • Le récap du dimanche montre les portraits du podium et les trois amitiés les plus fortes.
  • Les deux crons savent poster dans un salon forum, avec repli automatique dans les deux sens.

Sous le capot

  • CACHE_VERSION v104 → v105 — seuls les joueurs déjà venus étaient concernés.
  • Aucune migration : la base de production était déjà à la 055. schema:check-prod passé avant le merge, aucune dérive.
  • 1548 tests Vitest · 407 PHPUnit · 325 E2E, dont 38 nouveaux qui interdisent la classe entière du bug hidden sur 9 pages × 4 largeurs.

Le rayon d'action du correctif CSS a été mesuré page par page sur la production avant de l'écrire : 9 éléments concernés, et les 9 étaient ces deux bugs.

v2.3.1 — correctifs de la 2.3

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 25 Sep 21:22
b584859

Quatre bugs remontés le soir de la sortie de la 2.3. Aucune migration SQL — rien à faire côté base.

🎖️ Les déblocages sont tranchés par le serveur

Un joueur recevait l'animation de Memento Vivere, Memento Mori et du titre Déjà Vu sans avoir rempli la condition, puis ne pouvait pas les équiper.

Deux causes se combinaient. La carte locale des personnages trouvés comptait les défis entre amis, que le serveur n'enregistre délibérément jamais — quatre modes sur cinq les comptaient. Et le client s'accordait le badge, jouait l'animation, puis jetait le refus du serveur.

La condition locale ne fait désormais que proposer : c'est le serveur qui accorde. Un refus retire le badge ; une simple coupure réseau, elle, ne coûte rien — un badge réellement gagné n'est jamais perdu pour une mauvaise connexion.

⚔️ Un défi Expert ne se gagne plus tout seul

Accepter un défi remet le mode à zéro… mais seulement dans sa version normale. Un défi Expert retrouvait donc la partie Expert déjà gagnée du jour, et annonçait la victoire avant le premier essai. Les six modes étaient concernés.

✨ Les portraits animés de Kotone restent animés

Le recadrage passe par une étape qui ne garde qu'une image fixe, et elle ne laissait passer que les fichiers .gif. Ceux de Kotone sont des WebP animés : ils y entraient et en ressortaient figés, quand ceux de Makoto s'en échappaient.

📱 La page Classique démarre aussi haut que les autres

Seule page à porter deux badges en haut à droite, elle les empilait et réservait 46 px de plus que les cinq autres modes. Le bouton « Give up » sortait de l'écran sur téléphone. Il y rentre de nouveau.


Notes techniques

  • Chaque correctif a été temporairement retiré pour vérifier que ses tests échouaient bien sans lui.
  • 1548 tests Vitest (+23) · 379 PHPUnit · 283 E2E (+5).
  • CACHE_VERSION v103 → v104 : sans ce bump, les joueurs déjà venus garderaient l'ancien JavaScript en cache — exactement ceux que ces bugs touchaient.
  • Aucune donnée à réparer : la base était saine, c'est le client qui mentait.
  • Défaut connu et non traité ici : à 899 px exactement, la page Classique déborde horizontalement. Vérifié comme préexistant à ce lot.

v2.3.0 — Kotone Shiomi

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 25 Sep 17:54
69ba15f

La mise à jour Kotone Shiomi. 128 commits depuis la 2.2.8.

📖 Changelog joueur · 🔧 Changelog dev


🎀 Kotone Shiomi

Elle est arrivée dans Persona 5: The Phantom X en 5 étoiles, et son All-Out Attack rejoint le jeu — une seule entrée, rangée dans Persona 3 Portable, puisque c'est le jeu dont elle vient. Son portrait P5X remplace l'ancien partout : Classique, Émoji, lignes d'essai du mode Silhouette.

Deux autres tenues 5 étoiles du même jeu arrivent avec elle : Luce Notte et Soy Pioneer.

🤝 Le classement des amitiés

Une troisième dimension, qui ne classe pas des joueurs mais des liens — avec son propre podium. Et l'XP de Social Link ne se cache plus au rang 10 : le rang s'arrête là, l'XP continue.

🎖️ Les badges

  • Réordonnables au glisser, à la souris comme au doigt. Pendant le déplacement, la rangée se réorganise sous vos yeux : le badge tenu reste affiché, en transparence, exactement là où il tombera.
  • Un clic ouvre sa fiche, et un œil sur chaque badge de l'atelier permet de lire sa condition sans l'épingler — jusqu'ici, sur téléphone, il fallait le toucher pour savoir ce qu'il était.
  • Cinq nouveaux badges, dont Memento Vivere, Memento Mori, le second légendaire du jeu, et deux secrets.
  • Le titre Déjà Vu, de Persona 2: Innocent Sin.

🖼️ Galerie et musique

146 portraits de profil de plus (204 → 350) : vingt personnages qui n'en avaient aucun en ont enfin un. Un onglet Animés rassemble ceux qui bougent. Et « Sun », de Persona 3 Portable, porte le mode Musique à 100 morceaux.

⚡ Le jeu s'allège

Trois mesures relevées, pas estimées :

2.2 2.3
Ouvrir sa page de profil 125,6 Mo 13,5 Mo
Une partie d'All-Out Attack, au pire 80,2 Mo 3,2 Mo
Toutes les animations du mode 1 782 Mo 397 Mo

La qualité à l'écran ne bouge pas : les animations réencodées passent au format que les trois quarts du mode utilisaient déjà, et que le navigateur réduisait de toute façon à l'affichage.

🔧 Corrections

Huit fiches de lore du mode Personae Expert donnaient la réponse. Ouvrir le jeu sur un second appareil pouvait effacer les badges épinglés. La tranche d'âge 60+ s'affichait en rouge au lieu d'orange. Le bouton « Sauvegarder » des paramètres était hors champ.


Notes techniques

  • Migrations 054 et 055 jouées en production avant ce tag — le schéma avant le code.
  • CACHE_VERSION v102 → v103 : les joueurs déjà venus reçoivent bien les nouveaux assets.
  • 80 animations All-Out Attack vérifiées identiques entre le dépôt et le CDN.
  • 1525 tests Vitest · 379 PHPUnit · 278 E2E.

PersonaDLE 2.2.8

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 19 Sep 22:33
acce125

20 septembre 2026.

  • Badges de dates pour toutes les années : Pâques (dimanche ou lundi, calculée), Saint-Valentin, Tanabata, Golden Week et le Jour Promis se gagnent en jouant aux bonnes dates, quelle que soit l'année — plus de code événement d'une année ni de drapeau lié à un appareil. Noms sans année.
  • Badges de série (Pyro Spark, Raphael, Surt…) : la série globale, celle que le profil affiche, compte.
  • Sous le capot : PHP 8.2 partout comme la prod ; un test exige que chaque titre et badge du catalogue soit accordé par le serveur au seuil exact ; la préprod reproduit exactement la base de production.

Migration 053 jouée en prod avant le déploiement.

PersonaDLE 2.2.7 — hotfix

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 19 Sep 21:25
1ca1645

19 septembre 2026, nuit — hotfix.

La 2.2.6 rendait la liste des titres indisponible (le menu retombait sur une vieille liste sans les nouveaux titres) : la condition du titre Don't Burn Out comparait une date formatée en texte, et sur la base de production les deux côtés n'avaient pas la même collation. Comparaison numérique désormais, et une condition qui plante ne peut plus faire tomber la liste — elle est journalisée et ignorée.

Aucune migration.

PersonaDLE 2.2.6

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 19 Sep 21:25
c887324

19 septembre 2026, nuit.

  • Le serveur accorde ce qui est dû. À chaque ouverture du profil, titres et badges dont la condition est remplie sont accordés automatiquement — jusqu'ici seul le client demandait, et il ne savait pas évaluer plusieurs conditions (perfects, nombre de titres, rang de Social Link, victoires Expert). Rattrapage effectué pour toute la communauté : 296 titres et 104 badges rendus à 152 joueurs.
  • Une victoire Expert est une victoire : les conditions génériques (25 perfects, 40 victoires en All-Out Attack…) comptent normal + Expert.
  • Préprod : pas de redirection https sur les IP privées.

⚠️ Cette version a introduit un 500 sur la liste des titres (voir 2.2.7, publiée dans l'heure).

PersonaDLE 2.2.5

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 19 Sep 18:35
1bdbff8

19 septembre 2026, nuit. Observabilité des crons : un appel avec une mauvaise clé et chaque post Discord réussi laissent désormais une trace dans les logs de l'admin — le quotidien Discord avait échoué en silence pendant dix jours sur une clé fausse. Aucune migration.

PersonaDLE 2.2.4

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 19 Sep 18:21
d7bb3f0

19 septembre 2026, nuit. Suite de la 2.2.3 : les joueurs qui avaient recadré leur portrait avant que le jeu ne retienne lequel c'est voient désormais, dans l'Atelier, un encart leur demandant de le re-choisir une fois — sans quoi leurs amis et le badge Same Energy ne savent pas qui ils portent. Six langues. Aucune migration.

PersonaDLE 2.2.3

Choose a tag to compare

@CodeByHaamza CodeByHaamza released this 19 Sep 17:32
8d93621

19 septembre 2026, soir.

  • Stats Mode Expert : elles ont enfin leur table (user_stats_expert, migration 051) — alimentée à chaque partie Expert, lue par le profil, corrigeable dans l'admin.
  • Badge Same Energy : il ne pouvait presque jamais tomber — recadrer son portrait effaçait « qui » on porte. Le portrait d'origine est désormais retenu (profiles.avatar_src, migration 052), et deux Chie manquantes comptent. Si vous aviez déjà recadré votre avatar, re-choisissez-le une fois dans l'Atelier.
  • « Copier pour Discord » réparé : la politique de sécurité des pages bloquait la copie pour tout le monde ; en repli, la carte se télécharge.
  • Discord : top 3 de la semaine chaque dimanche à 20 h (cron discord_weekly.php, voix Margaret).

📖 Changelog dev