Le principe de réversibilité comme filet de sécurité
Le chantier S.O.A.P. s'est déroulé en quatre phases sur deux semaines. À chaque étape, la règle absolue était la réversibilité : si la phase suivante révèle un problème, le retour en arrière doit être possible en moins de dix minutes. Cette contrainte n'est pas un luxe — c'est ce qui rend l'audace possible quand on opère en production sans filet.
Voici le séquençage opérationnel que vous pouvez adapter à votre propre contexte :
- Phase 1 — Inventaire et cartographie : lister exhaustivement tous les fichiers qui stockent des données métier (agents, workflows, configurations, profils). Pour CodeMyShop : 30 fichiers
.mdd'agents, 11 workflows, 47 scriptspublish_*.py. Aucune suppression à ce stade — uniquement observation. - Phase 2 — Migration des données : créer les tables
ps_ac_*correspondantes et migrer le contenu des fichiers vers la base. Les fichiers restent en place comme fallback le temps de valider que la lecture DB fonctionne en production. - Phase 3 — Bascule du code : modifier les points de lecture (API, utils, scripts) pour consommer la base plutôt que les fichiers. Déployer progressivement, composant par composant. Valider en production avant de passer au suivant.
- Phase 4 — Suppression : une fois la validation complète sur l'ensemble des composants, supprimer les fichiers devenus obsolètes. C'est cette phase qui a produit le commit
113 files changed, 20349 deletions.
Les outils techniques du chantier
Chaque table ps_ac_* est créée par un module PrestaShop via son sql/install.sql — jamais par du SQL brut. Toute modification de schéma passe par un upgrade hook versionné. Cette discipline garantit que l'état de la base est toujours reconstructible depuis le code du module, sans intervention manuelle sur le serveur.
Pour les scripts Python, le pattern Facade a remplacé la prolifération de publish_*.py one-shot : un point d'entrée unique par domaine (ac_publisher_engine.py), paramétré par des enregistrements en base plutôt que par des fichiers de configuration.