Du patrimoine à la stabilité : le parcours technique de Phalcon Kit sur PHP 8.4
TL;DR :
Après dix ans en production et l’alimentation de centaines d’applications réelles, Phalcon Kit atteint enfin une version moderne et stable, construite sur PHP 8.4 et les dernières dépendances.Cette mise à jour n’avait pas pour objectif d’ajouter des fonctionnalités, mais de faire preuve de discipline d’ingénierie : refactoriser du code historique, dompter des milliers d’alertes d’analyse statique, et trouver l’équilibre entre les bonnes pratiques modernes et une maintenabilité pragmatique.
Le résultat : un framework stable, sécurisé, scalable, performant et pleinement aligné avec le PHP moderne, sans casser l’écosystème qui en dépend.
Introduction
Phalcon Kit n’est ni un framework de jouet ni une expérimentation de week-end, c’est la fondation de centaines de systèmes en production, certains gérant des centaines de milliers d’utilisateurs par jour.
Maintenir une base de code aussi durable est une responsabilité : chaque décision impacte la stabilité, la sécurité et la maintenabilité à long terme de nombreux projets bâtis au-dessus.
En 2025, PHP 8.4 a introduit de nouvelles fonctionnalités de typage, des hiérarchies d’exceptions affinées et une sémantique de langage plus stricte. Parallèlement, l’écosystème des outils a mûri : Psalm, PhpStan, Qodana, SonarQube et PHPUnit sont devenus les standards de facto pour la qualité de code statique et dynamique.
L’objectif de ce cycle de modernisation était simple dans son intention mais complexe dans son exécution :
- Livrer une version stable et prête pour la production de Phalcon Kit qui tire pleinement parti de PHP 8.4.
- Déprécier les comportements historiques dangereux hérités de l’ère pré-typée.
- Et établir une base de maintenance durable pour les années à venir.
1. Définir « stable » dans le contexte de Phalcon Kit
Dans la plupart des frameworks, une « version stable » signifie « ça compile et les tests passent ».
Pour Phalcon Kit, cela signifie quelque chose de plus profond : un engagement envers la sécurité, la prédictibilité et la compatibilité à long terme pour tous les projets dépendants.
Une version stable de Phalcon Kit implique :
- Une maintenance continue : corrections régulières pour les vulnérabilités et les évolutions de PHP.
- La dépréciation des comportements obsolètes qui ne sont plus alignés avec les standards actuels.
- L’application de la cohérence dans la gestion des erreurs, les versions de dépendances et les configurations par défaut.
- La confiance que tout projet mettant à niveau vers cette version gagnera en performance et en fiabilité, sans risque accru de régression.
La stabilité, dans ce sens, est un contrat :
Si votre projet fonctionne sur Phalcon Kit aujourd’hui, il fonctionnera encore demain, simplement plus vite, plus sûrement et plus proprement.
2. Intégration continue et tests à la pointe
La modernisation ne consiste pas seulement à écrire un meilleur code ; il s’agit de construire un processus répétable et transparent qui garantit la qualité à chaque commit.
Pour Phalcon Kit, cela signifiait adopter pleinement l’Intégration Continue via GitHub Actions.
L’idée était simple : si le framework est toujours testé contre la dernière version stable de PHP, le code est forcé d’évoluer au même rythme que le langage lui‑même.
Cette approche garantit que toute personne construisant sur Phalcon Kit restera également à jour, sécurisée et performante par défaut.
La stratégie du « latest only »
Au lieu de maintenir des matrices de compatibilité pour plusieurs versions de PHP, le projet cible désormais uniquement la dernière version stable de PHP, actuellement la 8.4.
Cela simplifie le flux de travail et évite la fragmentation des versions au sein des projets en aval.
En procédant ainsi :
- Le pipeline CI devient plus rapide et plus lisible.
- Tous les projets dépendants sont encouragés à rester à jour.
- Les correctifs de sécurité et les nouvelles améliorations du langage se propagent immédiatement.
- Le framework reste aligné avec la syntaxe et les règles de typage les plus modernes.
En pratique, cette décision élimine la dette technique au niveau de l’écosystème.
Elle signifie aussi que chaque contributeur, package et module bénéficie automatiquement des dernières améliorations de performance et de sécurité de PHP.
GitHub Actions comme colonne vertébrale
Le pipeline met en place un environnement de test reproductible où chaque exécution installe les dépendances, lance les vérifications de qualité de code et exécute l’ensemble de la suite de tests.
Voici la définition principale du workflow sur Github :
https://github.com/phalcon-kit/core/blob/master/.github/workflows/main.yml
Ce pipeline s’exécute à chaque push ou pull request, offrant un retour immédiat sur la couverture de code, les avertissements d’analyse statique et les régressions potentielles.
Ce n’est pas seulement un gardien, c’est une boucle de feedback permanente qui impose de la discipline sur tout le cycle de développement.
Pérenniser par l’automatisation
En testant exclusivement avec la dernière version de PHP, le framework évolue naturellement avec l’écosystème.
Quand PHP 8.5 arrivera, le pipeline cassera là où c’est nécessaire, exposant les incompatibilités tôt plutôt que des années plus tard.
Cette posture proactive garantit que Phalcon Kit ne se retrouvera jamais coincé dans un fossé de versions legacy.
En résumé, l’automatisation impose l’évolution.
Le pipeline CI ne se contente pas de construire le logiciel, il construit la confiance.
3. La philosophie d’une rigueur équilibrée
Lorsqu’on intègre des outils modernes d’analyse statique dans une base de code âgée d’une décennie, la tentation est de pousser chaque réglage au niveau de « rigueur maximale ».
Sur le papier, cela semble une bonne idée. En pratique, cela peut détruire la productivité et créer un bruit qui masque ce qui importe vraiment.
Phalcon Kit se situe dans cet espace délicat entre héritage et modernité.
Le code précède les propriétés typées, les types union et la plupart des bonnes pratiques actuelles de PHP.
Lancer Psalm, PhpStan, Qodana et SonarQube à leur niveau de sensibilité maximal a produit des milliers d’alertes, dont beaucoup étaient purement académiques ou sans pertinence dans des contextes réels.
Quand la rigueur devient contre‑productive
Les analyseurs statiques excellent à mettre en lumière les incohérences, mais ils ne distinguent pas toujours les bugs significatifs des décisions de conception historiques.
Par exemple, une règle stricte peut se plaindre d’un type nullable qui ne peut jamais être null en pratique, ou d’une clé de tableau mixed qui fait partie d’un schéma de configuration flexible.
Si chacun de ces avertissements devait être « corrigé », cela se traduirait par une quasi‑réécriture de la base de code, mettant en péril la stabilité sans valeur ajoutée réelle.
Refactoriser un système fonctionnel uniquement pour satisfaire un outil n’est pas de la modernisation ; c’est de l’agitation.
L’idée clé était que la rigueur doit servir la maintenabilité, pas l’idéologie.
Trouver le bon équilibre
L’objectif est devenu de définir un niveau d’analyse qui :
- Imposait la sécurité de typage et des valeurs de retour cohérentes.
- Signalait les bugs potentiels et les schémas risqués.
- Laissait la flexibilité légitime là où l’héritage la justifie.
- Orientait l’attention des développeurs sur la logique réelle, pas sur des avertissements cosmétiques.
Cela signifiait accepter que tous les outils ne seraient pas d’accord, et c’est très bien ainsi.
Psalm et PhpStan ont des interprétations différentes des génériques.
SonarQube et Qodana peuvent signaler des incohérences de style qui n’ont aucun impact à l’exécution.
Le but n’était pas l’alignement parfait, mais la clarté.
Impact réel plutôt que perfection théorique
En calibrant la rigueur, le framework est passé de dizaines de milliers d’avertissements à quelques centaines gérables.
Parmi ceux‑ci, plus de 3 000 changements ont été effectués, et environ 100 corrections ont traité de vrais bugs de niveau production, des erreurs de logique, des null non gérés et des incompatibilités de types pouvant provoquer des problèmes de données silencieux.
C’est à ce stade que l’analyse statique devient précieuse : lorsqu’elle expose un comportement caché plutôt que d’imposer une formalité arbitraire.
La philosophie qui en découle
Phalcon Kit utilise désormais les analyseurs statiques non comme des juges, mais comme des guides.
Ils définissent un périmètre sûr à l’intérieur duquel les développeurs peuvent travailler sereinement, tout en laissant de la place à des décisions pragmatiques dans les zones héritées.
Le framework ne vise pas zéro avertissement ; il vise zéro surprise.
4. Naviguer dans le défi Phalcon PHP
L’un des aspects les plus complexes de la maintenance de Phalcon Kit est son intégration profonde avec le framework Phalcon.
Phalcon est unique dans l’écosystème PHP : il est écrit en Zephir, compilé en C, et chargé directement en tant qu’extension PHP.
Cette conception était révolutionnaire à l’époque ; elle offrait des performances quasi natives en contournant l’interpréteur PHP et en s’exécutant directement en C.
Cet avantage, toutefois, a aujourd’hui moins de poids.
Avec OPcache et la compilation JIT entièrement intégrés aux versions modernes de PHP, l’écart de performance entre les extensions en C et les frameworks en userland optimisés s’est considérablement réduit.
Aujourd’hui, la différence est souvent marginale sur des charges de travail réelles, tandis que les compromis en matière de maintenabilité restent significatifs.
L’architecture de Phalcon fournit toujours une bonne efficacité, mais elle s’accompagne d’une limitation majeure : les développeurs ne peuvent pas facilement modifier ou corriger ses internes lorsque quelque chose se comporte mal.
Chaque correction ou amélioration nécessite de contourner du code compilé, de s’appuyer sur des stubs ou d’introduire des couches de compatibilité en PHP userland.
Dans le contexte de Phalcon Kit, cela signifiait équilibrer vitesse brute, flexibilité et maintenabilité à long terme.
Quand le framework devient la limitation
Au cours des dernières années, la feuille de route de Phalcon a considérablement ralenti.
La version 6, le refactoring attendu de longue date, entièrement réécrit en PHP, a été repoussée plusieurs fois.
Des contributeurs clés, y compris ceux qui maintenaient Zephir, sont partis.
Cette réalité a créé de l’incertitude dans la communauté, en particulier pour les équipes dépendant de Phalcon en production.
Malgré ces défis, Phalcon Kit reste construit sur Phalcon 5.9.x, la dernière version stable basée sur le C.
À ce stade, la stabilité l’emporte sur la nouveauté.
Plutôt que d’attendre une version réécrite, il était logique de consolider la fondation éprouvée et de la renforcer là où nécessaire.
Le problème de désynchronisation des stubs
Parce que Phalcon est compilé, ses définitions de types et signatures à l’exécution ne sont pas toujours parfaitement alignées avec les stubs d’IDE fournis dans son dépôt.
Les analyseurs statiques comme Psalm et PhpStan s’appuient fortement sur ces stubs pour déduire les types, ce qui signifie que tout désalignement peut produire de fausses erreurs, ou pire, masquer des erreurs réelles.
Pour surmonter cela, un petit mécanisme de patch a été introduit directement dans l’arbre des dépendances de Phalcon Kit.
Ce mécanisme remplace ou complète les stubs de Phalcon par des indications de type et des définitions d’interfaces corrigées, rapprochant la couche d’analyse de la réalité.
Les fichiers de patch remplacent des signatures de types obsolètes, les améliorent pour PHP 8.4+, ajustent les paramètres nullable et imposent des types de retour manquants afin que les analyseurs, les tests et le runtime soient tous d’accord.
Contourner une barrière compilée
Le plus grand défi est que la nature compilée de Phalcon signifie qu’il n’existe aucun moyen simple d’étendre ou de surcharger dynamiquement ses internes.
La plupart des corrections nécessitent des stratégies indirectes : wrapping, extension, ou monkey‑patching des comportements via des traits et l’injection par DI.
Cela ajoute une couche de complexité lorsqu’on tente de moderniser sans introduire de régressions.
Malgré tout, cette couche de patch s’est révélée être un compromis élégant.
Elle a permis une couverture complète par l’analyse statique tout en restant compatible avec la version stable actuelle.
Regard vers l’avenir
L’avenir de Phalcon est incertain, mais ses performances restent inégalées.
Phalcon Kit continuera d’utiliser la version 5.9.x jusqu’à ce que Phalcon 6, basé sur PHP, devienne suffisamment stable pour justifier une migration.
À ce moment‑là, un plan de transition soigneux pourra garantir la rétro‑compatibilité tout en supprimant la dépendance aux extensions compilées.
Parfois, la modernisation ne consiste pas à remplacer la fondation ; elle consiste à la stabiliser assez longtemps pour que l’écosystème rattrape son retard.
5. Conflits d’analyse statique et découverte de vrais bugs
Lorsque plusieurs outils d’analyse statique tournent côte à côte, ils sont rarement d’accord sur tout.
Chacun a sa propre philosophie, son ensemble de règles et son interprétation de ce que signifie « code propre ».
Exécuter Psalm, PhpStan, Qodana et SonarQube ensemble était un choix délibéré, en sachant que chevauchements et contradictions seraient inévitables.
Le bruit avant le signal
Au départ, les résultats étaient écrasants.
Des milliers d’avertissements sont apparus dans toute la base de code, beaucoup redondants, certains contradictoires, et un grand nombre sans pertinence pratique.
Les outils se disputaient sur des points tels que des types de retour nullable, des conditions redondantes ou des docblocks manquants sans conséquence à l’exécution.
Mais voici le paradoxe : pour trouver de vrais problèmes, il faut d’abord éliminer le bruit.
Corriger les problèmes superficiels a révélé des problèmes plus profonds qui se cachaient dessous.
Chaque cycle de nettoyage réduisait le bruit statique, facilitant l’identification des erreurs significatives.
Le processus est devenu itératif :
- Corriger les incohérences évidentes et stylistiques.
- Relancer l’analyse et isoler les schémas récurrents.
- Enquêter sur toute anomalie persistante signalée par plusieurs outils.
- Écrire des tests de régression pour chaque bug confirmé.
Au moment où la base de code s’est stabilisée, plus de 3 000 corrections avaient été appliquées, et au moins 100 d’entre elles étaient de véritables bugs impactant la production.
Quand les outils statiques ne sont pas d’accord, le développeur tranche
Différents analyseurs pointent souvent la même ligne de code avec des interprétations différentes.
Par exemple, Psalm peut marquer une valeur comme « possiblement nulle » alors que PhpStan l’infère comme « toujours initialisée ».
SonarQube peut qualifier la même expression de faille logique potentielle.
Plutôt que d’essayer de satisfaire chaque outil, le focus s’est déplacé vers le jugement du développeur.
Chaque cas signalé a été revu manuellement, et des règles ont été sélectivement désactivées lorsqu’elles créaient des faux positifs ou des rapports redondants.
L’objectif n’était pas de faire taire les avertissements, mais de faire en sorte que chaque avertissement restant soit significatif.
Bugs cachés mis au jour
Quelques exemples de problèmes réels détectés durant ce processus :
- Variables non initialisées dans des cas extrêmes de traitement récursif de données.
- Coercition de type silencieuse où des chaînes numériques étaient traitées comme des entiers.
- Comportements dépréciés encore déclenchés sous le moteur plus strict de PHP 8.4.
- Mauvaise gestion du null dans des factories de modèles pouvant entraîner des incohérences dans l’ORM.
Ce n’étaient pas des problèmes théoriques.
C’étaient des bugs pouvant faire planter des systèmes de production ou générer une corruption de données subtile dans certaines conditions.
La valeur de l’itération
Ce parcours a montré que l’analyse statique relève moins de la correction instantanée que du raffinement progressif.
Chaque outil a apporté un éclairage particulier :
- Psalm a excellé dans la précision du typage et la vérification de l’héritage.
- PhpStan a fourni une application cohérente des contraintes architecturales.
- Qodana a mis en évidence des problèmes de maintenabilité et de duplication.
- SonarQube a ajouté des métriques à long terme comme les code smells, la couverture et la complexité cognitive.
Ensemble, ils ont créé un écosystème de feedback plutôt qu’une simple liste de contrôle.
6. Refactoriser avec les pratiques modernes de PHP 8.4
Une fois le bruit de l’analyse statique réduit, la véritable modernisation a pu commencer.
L’objectif n’était pas de tout réécrire, mais de faire en sorte que le framework s’aligne naturellement avec le langage de conception de PHP 8.4, tout en préservant sa stabilité et son identité.
Adopter la syntaxe moderne et le typage
PHP 8.4 a introduit plusieurs fonctionnalités qui améliorent grandement la clarté et la robustesse.
Phalcon Kit en a tiré parti dès que possible :
- Constantes de classe typées, garantissant que les valeurs de configuration sont toujours du type attendu.
- Propriétés readonly, verrouillant les états internes qui ne doivent jamais changer après la construction.
- Types intersection et union, remplaçant les types mixed ou les tableaux non documentés.
- Hiérarchies d’exceptions améliorées, offrant un contrôle plus clair sur la gestion des erreurs.
- Syntaxe des callables de première classe, utilisée dans les dispatchers internes d’événements et les définitions de dépendances.
Ces mises à jour ont renforcé les contrats internes du code, supprimé les ambiguïtés et rendu l’intention explicite.
Chaque changement a été guidé par le principe de rendre la maintenance future plus sûre, et pas seulement plus propre.
Refactoriser sans casser l’héritage
Refactoriser un framework dont dépendent des centaines de systèmes en production exige de la précision.
Chaque changement, même une déclaration de type, comporte le risque d’introduire des incompatibilités subtiles.
Pour gérer cela, les nouvelles fonctionnalités ont été introduites de manière incrémentale, toujours validées par la suite de tests complète et par des projets d’intégration en conditions réelles sur des environnements de staging.
Les comportements historiques n’ont pas été supprimés brutalement ; ils ont été dépréciés progressivement.
Les développeurs s’appuyant sur d’anciennes méthodes reçoivent désormais des avertissements clairs, leur laissant le temps de migrer avant la prochaine version majeure.
Une meilleure gestion des erreurs et du debugging
Avec un typage plus strict et des exceptions plus structurées, le debugging est devenu nettement plus simple.
Auparavant, de nombreux cas limites aboutissaient à des échecs silencieux ou à des erreurs d’exécution vagues.
En imposant des types explicites et une hiérarchie plus claire des exceptions, ces problèmes apparaissent désormais immédiatement en environnement de développement.
Exemple typique de modernisation :
// Avant
public function findUser($id) {
return User::findFirstById($id);
}
// Après
public function findUser(int $id): ?User
{
return User::findFirstById($id) ?: null;
} La différence semble faible, mais à l’échelle de milliers de méthodes, ces améliorations incrémentales se cumulent pour former un système plus prévisible et plus sûr.
Documentation et cohérence
La modernisation ne s’est pas arrêtée au code lui‑même.
Tous les docblocks, les indications de paramètres et les types de retour ont été synchronisés dans tout le framework.
Cette cohérence permet aux IDE, aux analyseurs et aux développeurs de partager la même compréhension de la base de code, réduisant la confusion et le temps d’onboarding.
Le PHP moderne ne se résume pas à une nouvelle syntaxe. Il s’agit de communiquer l’intention, d’imposer la cohérence et de prévenir l’incertitude avant qu’elle ne survienne.
7. Une documentation plus intelligente avec l’aide de l’IA
Maintenir une documentation cohérente sur un framework de grande taille est l’une des tâches de maintenance les plus difficiles.
Avec le temps, des centaines de classes, traits et interfaces évoluent, et la documentation accuse souvent un retard.
Durant cette phase de modernisation, des outils d’IA ont été introduits pour aider à tout remettre en phase.
Automatiser le travail fastidieux
La majeure partie du travail de documentation était répétitive : mise à jour des commentaires PHPDoc, alignement des types de paramètres et vérification que les types de retour correspondent aux signatures réelles.
En intégrant des assistants basés sur l’IA dans le flux de travail, ces tâches ont été en grande partie automatisées.
Les outils ont scanné le code, inféré l’intention et proposé des mises à jour de documentation directement dans les pull requests.
Au lieu de passer des heures à écrire des docblocks de boilerplate, le temps a été investi dans la relecture et l’amélioration de la clarté.
Cette approche a permis à la documentation de rester précise, détaillée et cohérente à travers des milliers de fichiers.
Aligner la documentation avec l’analyse statique
Des docblocks précis ne profitent pas qu’aux développeurs ; ils rendent aussi l’analyse statique plus fiable.
Psalm, PhpStan et les IDE dépendent tous de ces annotations pour interpréter le contexte.
Lorsque la documentation ne correspond pas aux types réels, les analyseurs génèrent des faux positifs ou manquent des problèmes réels.
En régénérant et en validant chaque entrée PHPDoc à l’aide d’une analyse assistée par IA, Phalcon Kit a atteint un alignement parfait entre documentation, annotations et réalité du code.
Cela a amélioré à la fois l’expérience développeur et le contrôle de qualité automatisé.
Écrire pour les humains, pas seulement pour les outils
Tandis que l’automatisation gérait la structure, la relecture humaine garantissait la lisibilité.
Les descriptions ont été réécrites pour refléter les schémas d’usage réels, clarifier les comportements hérités et expliquer les dépréciations.
Des exemples et des résumés ont été ajoutés là où ils pouvaient aider de futurs contributeurs à comprendre l’intention de conception.
Le résultat est une base de code qui se documente presque naturellement.
Les développeurs peuvent y naviguer sans basculer en permanence entre le code et des références externes.
L’IA a géré la répétition, les humains ont géré le raisonnement.
Ensemble, ils ont redonné vie à la documentation.
8. Leçons apprises et perspectives
Amener un framework vieux de dix ans dans l’ère PHP 8.4 a été plus qu’une mise à jour technique.
Ce fut un exercice d’équilibre, de patience et de respect pour l’histoire d’un système qui alimente encore aujourd’hui de nombreux environnements de production.
Ce qui a bien fonctionné
- La modernisation incrémentale s’est révélée bien plus fiable que les refontes radicales.
La mise à jour de petites parties de manière contrôlée a garanti une stabilité continue et renforcé la confiance. - L’automatisation et l’analyse statique ont servi de filet de sécurité plutôt que de contrainte.
Une fois réglées avec la bonne sensibilité, elles sont devenues des guides pour de meilleures décisions de conception. - La documentation assistée par IA a permis d’énormes gains de temps tout en préservant la clarté.
Elle a aidé à aligner l’intention du code, les annotations et la lisibilité d’une manière que les mises à jour manuelles atteignent rarement. - L’application cohérente du CI a créé un rythme de développement durable, où chaque commit validait l’ensemble du framework par rapport à la dernière version de PHP.
Ce qui a moins bien fonctionné
- Les conflits entre outils comme Psalm, PhpStan et SonarQube produisaient souvent des résultats contradictoires ou bruyants.
Une curation manuelle restait nécessaire pour identifier ce qui comptait vraiment. - Les règles statiques strictes poussaient parfois à des changements sans réelle valeur, en particulier autour de modèles hérités volontairement flexibles.
La solution a été d’accepter une certaine imperfection lorsqu’elle servait la maintenabilité. - Les limites du framework dans Phalcon ont rappelé à quel point les écosystèmes compilés peuvent être fragiles lorsque la dynamique communautaire ralentit.
Le mécanisme de patch fonctionnait, mais il a souligné l’importance de la portabilité et de l’ouverture.
Un framework en mode maintenance
Avec cette modernisation terminée, Phalcon Kit passe en mode maintenance. Il continuera de recevoir des mises à jour pour la stabilité, la compatibilité et la sécurité, mais aucune nouvelle fonctionnalité majeure n’est prévue tant que l’écosystème Phalcon n’aura pas mûri ou n’aura pas basculé vers sa réécriture en PHP. Cela garantit que les centaines de projets qui en dépendent resteront stables et pris en charge pendant des années.
Dans le même temps, l’attention se tourne vers le prochain chapitre : une nouvelle stack basée sur Go, conçue à partir de zéro pour la haute disponibilité, la scalabilité et les services distribués. Cette nouvelle direction s’appuie sur tout ce qui a été appris en maintenant un framework PHP complexe, mais sans les contraintes de l’héritage.
L’expérience a prouvé que la modernisation ne signifie pas toujours réinvention.
Parfois, le meilleur résultat consiste à amener un ancien système à sa forme la plus propre et la plus stable, puis à le laisser reposer avec dignité.
Réflexions finales
Phalcon a peut-être perdu une partie de sa dynamique communautaire, mais ses performances et son architecture restent parmi les plus efficaces de l’histoire de PHP.
Phalcon Kit demeure un témoignage vivant de cet héritage, une base affinée, sécurisée et performante qui continue d’alimenter de vrais systèmes à grande échelle.
Le parcours de ce projet montre que la longévité du code ne tient pas seulement à la vitesse ou à la syntaxe. Il s’agit de discipline, d’adaptation, et de savoir quand moderniser et quand s’arrêter. C’est cela, le véritable art de la maintenance logicielle.
1 novembre 2025 par Julien Turbide
