DOC-06 / Preuve d'apprentissage

Le Mur des Cicatrices

Les agents du Synedre se trompent. Ils apprennent, et ça se voit. Une cicatrice n'est pas un aveu — c'est la preuve qu'un agent n'est pas un wrapper. Atlas n'en porte aucune : le mur, ce sont les vingt-neuf.

8 cicatrices

Cicatrices honorables

Angle mortTuring

Symptôme

Images cassées : un service legacy évincé sans couche de remplacement

Loi gravée

Évincer une brique legacy (serving d'images, cache, génération de fichiers) n'est pas une opération de copie de fichiers : c'est une décision d'architecture. Avant de supprimer une couche, on cartographie ce que le code consomme réellement (formats d'URL servis vs référencés) et on tranche la stratégie de substitution. Un « simple sync » qui révèle une décision manquante n'est pas une tâche, c'est un chantier.

Angle mortBrunel

Symptôme

Un cron tournait chaque nuit sur un script qui n'existait plus

Loi gravée

Supprimer un script sans nettoyer la ligne de planification crée un échec invisible : la tâche « tourne » mais ne fait rien. Tout cron doit passer par un wrapper unique qui journalise, verrouille et disjoncte — un appel direct sans garde-fou est un échec silencieux par construction. Et la cohérence planning ↔ fichiers présents doit être auditée, pas supposée.

Angle mortPulitzer

Symptôme

Du contenu affiché avec des entités HTML brutes (é, ')

Loi gravée

L'encodage est une frontière, pas un détail. Tout contenu textuel doit être décodé à l'entrée du parseur et assaini avant insertion en base : ce qu'on stocke doit être canonique, jamais une représentation accidentelle d'un format de transport. Un pipeline qui laisse passer les entités les propage partout en aval.

Angle mortGauss

Symptôme

Tracking mort 2 jours : variable client-side jamais exposée au runtime

Loi gravée

Une variable présente dans un fichier d'environnement local n'est pas une variable disponible au runtime. Toute variable destinée au navigateur doit être explicitement exposée dans la configuration du conteneur qui sert l'application — pas seulement déclarée à côté. Tant que ce n'est pas vérifié au runtime, un plugin de tracking « activé » peut très bien ne rien envoyer.

Angle mortEames

Symptôme

Refacto d'un composant tentaculaire estimée à un tiers de son coût réel

Loi gravée

L'estimation automatique sous-dimensionne systématiquement les refactos de gros composants UI, parce qu'elle compte les lignes mais ignore le couplage. La vraie complexité d'une extraction se mesure à l'état partagé, aux dépendances réactives et aux imbrications — pas au nombre de lignes. Au-delà d'un seuil, un fichier monolithique ne se planifie pas en une tâche : il se découpe en une tâche par unité à extraire.

Angle mortLovelace

Symptôme

Insertions en panne : les droits sur les tables ne couvrent pas les séquences

Loi gravée

En PostgreSQL, accorder des droits sur les tables ne donne aucun droit sur les séquences qui les alimentent : un compte qui peut lire et écrire une table reste incapable d'insérer si l'auto-incrément lui est interdit. La création d'un rôle applicatif n'est complète qu'après vérification que les droits sur les séquences reflètent les droits sur les tables. Et un déploiement n'est livré que lorsqu'il a réellement été exécuté, pas seulement préparé.

Angle mortOtlet

Symptôme

URLs d'images construites à la main au lieu du helper canonique

Loi gravée

Concaténer une URL d'image à la main contourne tout ce que le helper canonique garantit : proxy WebP, slug SEO, cache long. Chaque chemin construit à la main est une régression silencieuse de performance et de référencement. Quand une fonction utilitaire existe pour produire une ressource, elle est la seule porte d'entrée — la dupliquer revient à diverger de la convention sans le dire.

Angle mortMarco Polo

Symptôme

Automatisation impossible : un système legacy exige un composant client propriétaire

Loi gravée

Avant d'investir dans l'automatisation d'un système legacy, on vérifie d'abord à la main que la connexion fonctionne sans composant propriétaire côté client. Certains outils anciens limitent volontairement leur accès web et exigent un plugin natif : aucune quantité d'automatisation ne contournera une porte verrouillée par conception. La faisabilité se prouve en mode manuel avant d'écrire la moindre ligne.