La Découverte
16 mars 2026Chapitre 5 — Le Jour des Trois Fronts
Sources :
audits/workflows/3-sprints-2026-03-17.md·toolkit/bact/patterns/workflow.yml·toolkit/bact/patterns/infra.yml· git log TetaRdPG, OriginsDigital, Clickerz (après 2026-03-16)
Le 17 mars 2026, pour la première fois, trois projets entrent en production le même après-midi.
Pas l’un après l’autre. En parallèle. Trois agents délégués lancés en fond de fenêtre, le coach en hyperviseur sur la session principale — et un humain qui n’intervient qu’aux gates. La structure coach-as-hypervisor n’était jusqu’ici qu’un pattern dans un fichier yml. Ce jour-là, elle est mise en terrain réel pour la première fois, sur trois fronts simultanés : Clickerz, OriginsDigital, TetaRdPG.
Ça se passe bien. Jusqu’à ce que ça coince.
Le premier problème surgit sur TetaRdPG. Le projet NestJS a été bootstrappé depuis un template — template dont la configuration TypeORM pointe vers PostgreSQL. Le VPS, lui, tourne MySQL. psql est introuvable. Les migrations échouent. L’agent délégué remonte un partial : il ne peut pas continuer sans que le drift soit corrigé. Retour code, patch manuel : type: 'postgres' devient type: 'mysql', le scheme de l’URL passe de postgresql:// à mysql://, mysql2 est installé, jsonb remplacé par json — parce que jsonb est un type PostgreSQL uniquement, et MySQL ne le connaît pas.
Le commit dit tout : fix(mysql): jsonb → json — type non supporté par MySQL. Puis fix(migrations): data-source.ts — 14 entities. Puis fix(security): revert synchronize:true → prod-safe. Trois commits de correction en cascade pour un drift qui aurait dû être détecté avant la délégation.
C’est là que la phrase arrive, directe : “j’aurais dû le forcer, mais heureusement coach a arrêté !”
Le coach avait signalé le risque de synchronize:true en production. L’instinct était de passer outre — aller vite, livrer. L’arrêt était légitime. Le revert a suivi. Ce n’est pas un détail : c’est exactement le rôle d’un hyperviseur.
Sur OriginsDigital, un autre incident, plus silencieux et plus grave. L’agent délégué loggue son contexte BACT brut dans l’output. MYSECRETS apparaît dans les logs. Criticité haute dans le rapport d’audit — une ligne qui ne ressemble pas aux autres : 1 incident — secrets loggués par subagent. Un pattern de sécurité manquant est identifié immédiatement : subagent-secrets-guard. À créer avant la prochaine session multi-workflow. Sans négociation.
Malgré les frictions, les trois sites passent en production. clickerz.tetardtek.com, origins.tetardtek.com, tetardpg.tetardtek.com — live, migrations passées, pm2 stable. Le step 4 — deploy SSH direct depuis la fenêtre coach — est le mode le plus fluide. Il n’a jamais échoué.
“3 projets déployés en prod en ~15 minutes.”
Ce qui reste après la session, c’est moins les livraisons que ce qu’elles ont produit comme savoir. Quatre patterns capturés dans le toolkit — pas depuis des articles, depuis des erreurs réelles : coach-as-hypervisor, agent-permissions-inheritance, typeorm-mysql-migration, typeorm-jsonb-to-json. Chacun a une date, un commit, un contexte. Chacun ne sera plus jamais un aller-retour.
“4 jours pour découvrir ça par la pratique, c’est le bon rythme.”
La phrase résume quelque chose de plus large. Le kernel n’a pas été construit depuis des spécifications. Il a été construit depuis des frictions — des blocages qui, une fois traversés, deviennent des règles. L’INIT du hyperviseur doit scanner les stacks avant de déléguer. Les subagents n’héritent pas du settings.json projet. Les cross-dependencies inter-projets doivent être détectées avant le step 1, pas pendant le step 3.
Ces règles n’existaient pas le matin du 17 mars. Elles existent ce soir.
Il y a une dernière chose que ce chapitre doit nommer. L’autonomy rate de la session est à 83% — en dessous de la cible de 90%. Mais les deux gates humains non planifiés ont tous les deux été légitimes : aucun n’était réflexe, aucun n’était de la friction inutile. Le parasite gate rate est à 0%.
“on réduit le gate:human sur des choses qui sont acquises, c’est ça l’apprentissage non ?”
Oui. C’est exactement ça. Un gate qui disparaît n’est pas un abandon de contrôle — c’est la preuve que la chose est acquise. Le brain apprend. L’humain recule là où le système a prouvé qu’il tient.
“comme ça c’est parfait !”
Ce qui a été construit
clickerz.tetardtek.com— sprint 1 : GDD, core economy TS, prestige, sauvegarde, deployorigins.tetardtek.com— sprint 3 : vision B2B, refonte Tailwind, LandingPage Pricing, deploytetardpg.tetardtek.com— sprint 3 : EconomyModule TetardCoin, TwitchModule EventSub, 36 tests, deploy- Première exécution complète du pattern
coach-as-hypervisorsur 3 workflows simultanés
Ce qui a été découvert (patterns)
| Pattern | Source | Fichier |
|---|---|---|
coach-as-hypervisor | 3 workflows parallèles — friction fenêtre séparée | toolkit/bact/patterns/workflow.yml |
agent-permissions-inheritance | subagent bloqué sur Write — même cause sur les 3 projets | toolkit/bact/patterns/workflow.yml |
cross-workflow-dep-scan | SuperOAuth dep non détectée avant step 3 OriginsDigital | toolkit/bact/patterns/workflow.yml |
typeorm-mysql-migration | type:'postgres' vs VPS MySQL — 2 retours code TetaRdPG | toolkit/bact/patterns/infra.yml |
typeorm-jsonb-to-json | DataTypeNotSupportedError MySQL — jsonb inconnu | toolkit/bact/patterns/infra.yml |
subagent-secrets-guard | MYSECRETS loggué dans output subagent — OriginsDigital | à créer : toolkit/security/ |
Citations
“j’aurais dû le forcer, mais heureusement coach a arrêté !”
“comme ça c’est parfait !”
“4 jours pour découvrir ça par la pratique, c’est le bon rythme”
“on réduit le gate:human sur des choses qui sont acquises, c’est ça l’apprentissage non ?”
“3 projets déployés en prod en ~15 minutes”