Ce qui ne va pas dans le code â par module, pas par dĂ©veloppeur
1041 commits · 40 modules · 20/04/2026
â Retour Ă l'indexSur 3 modules analysĂ©s, 0 ont des problĂšmes d'architecture, 0 des problĂšmes de pratiques dĂ©veloppeur, et 3 un mĂ©lange des deux. 3 module(s) nĂ©cessitent une action immĂ©diate (prioritĂ© critique) et 0 sont en prioritĂ© haute. 22 module(s) crĂ©ent de la dette technique sans jamais la rĂ©duire â c'est un problĂšme structurel, pas individuel. 2 module(s) ont une friction architecturale significative (temps rĂ©el > 1.5x temps estimĂ©).
Score de souffrance = (10 - qualité) + complexité + (dette/10) + (concerns/5). Plus c'est haut, plus le module est à l'agonie.
| Module | Commits | Qualité | Complexité | Dette nette | Concerns | Souffrance | Top problÚmes |
|---|---|---|---|---|---|---|---|
| dashboard | 371 | 4.1/10 | 4.1/10 | +2127.9h | 23543 | 4922.3 | Magic numbers 100/-100 sans constante CENTS_TO_EURO Incohérence i18n dropZoneActive singulier vs dropZone plurie |
| apps/backend | 256 | 4.1/10 | 4.3/10 | +1724h | 15158 | 3204.9 | Magic numbers 100/-100 sans constante CENTS_TO_EURO Sécurité JWT affaiblie : jsonwebtoken ^9.0.2 non verrouillé, |
| other | 128 | 3.1/10 | 2.6/10 | +335.3h | 7680 | 1571.5 | VERSIONNEMENT NON-SEMVER: v04.03.2025-001 ne distingue pas l TESTS NĂGATIFS ABSENTS (1h dette) : Pas de test null/Boolean |
| backend | 103 | 3.8/10 | 4.8/10 | +1079.5h | 6659 | 1440.9 | Aucun test automatisĂ© pour les nouveaux champs de prĂ©fĂ©rence ZĂRO fichier de test sur 7 fichiers modifiĂ©s avec opĂ©rations |
| file-server | 62 | 3.7/10 | 4.5/10 | +499.3h | 4285 | 908.3 | res.status(200) implicite - comportement fragile si middlewa Sécurité JWT affaiblie : jsonwebtoken ^9.0.2 non verrouillé, |
| copro | 33 | 3.9/10 | 4.2/10 | +248.3h | 2038 | 433.5 | Fonction privĂ©e _createTicket non testable en isolation sans ĂLEVĂ : Absence de tests aux limites temporelles (J-5 exact, |
| cron | 24 | 3.9/10 | 4.5/10 | +202.9h | 1490 | 319.4 | ZĂRO fichier de test sur 7 fichiers modifiĂ©s avec opĂ©rations utils.js : ParamĂštre 'mode' sans validation ni enum - valeur |
| root | 5 | 3.8/10 | 5/10 | +65.4h | 368 | 81.4 | SĂCURITĂ NON TESTĂE : clientSecret loggĂ© en clair via writeT Aucune fonctionnalitĂ© mĂ©tier rĂ©elle livrĂ©e - seules des rout |
| docker-compose.bory-staging.yml | 5 | 4.7/10 | 3.1/10 | +16.2h | 352 | 72.3 | Aucun test de cohĂ©rence config entre docker-compose.bory-sta RISQUE CRITIQUE - Saut 7.1â8.3 sur staging sans analyse des |
| docker-compose.install.yml | 4 | 3.1/10 | 4.9/10 | +43h | 297 | 65.7 | handler.ts shouldReport() : instanceof HTTPError exclut TOUT CRITIQUE - Perte de données potentielle : Aucun test automat |
| docker-compose.yml | 4 | 3.1/10 | 4.9/10 | +43h | 297 | 65.7 | handler.ts shouldReport() : instanceof HTTPError exclut TOUT CRITIQUE - Perte de données potentielle : Aucun test automat |
| collab | 6 | 3.1/10 | 2.6/10 | +12.7h | 292 | 61.6 | Incohérence de formatage entre les fichiers : '250MO' sans e Erreurs typographiques existantes non corrigées : 'depasser' |
| workflows | 4 | 5/10 | 4.5/10 | +65.8h | 266 | 59.8 | Aucune fonctionnalité métier réelle livrée - seules des rout Suppression de l'ancien backend sans migration visible de la |
| docker-compose.bory-production.yml | 4 | 4.7/10 | 3.4/10 | +18.6h | 279 | 58 | CRITIQUE SĂCURITAIRE: JWT_ENABLED=false en production expose Saut de version 7.1â8.3 non documentĂ©: absence d'analyse des |
| package.json | 3 | 3.7/10 | 6.3/10 | +54.6h | 220 | 52.1 | SĂCURITĂ NON TESTĂE : clientSecret loggĂ© en clair via writeT Risque RGPD critique : clientSecret loggĂ© en clair dans writ |
| dasboard | 2 | 3/10 | 4.3/10 | +15.7h | 145 | 32.5 | CRITIQUE : Aucun diff visible - impossible de vérifier si le Hotfix déployé sans preuve de couverture de tests - risque d |
| upload | 2 | 0.6/10 | 1.3/10 | +2.2h | 133 | 31.2 | Aucun diff visible - impossible de vérifier si les changemen Les messages d'erreur 'plus clairs' nécessitent validation u |
| docker-compose.dev.yml | 2 | 4.7/10 | 3.6/10 | +6.3h | 144 | 29.7 | RISQUE CRITIQUE - Saut 7.1â8.3 sur staging sans analyse des INSUFFISANCE DE TESTS - 'VĂ©rifier le bon fonctionnement' ne |
| settings.json | 2 | 5.8/10 | 4.1/10 | +4.5h | 114 | 23.3 | SĂCURITĂ CRITIQUE : La suppression de authorized_keys doit ĂȘ Scripts deploy.sh et deploy-dev.sh rĂ©fĂ©rencent le projet 'Ig |
Quand un module a 3+ commits en 7 jours, c'est pas le dev qui est lent â c'est le code qui rĂ©siste.
Sources = modules qui crĂ©ent de la dette sans jamais la rĂ©duire. Sinks = modules oĂč les devs nettoient activement. Si un module est Source, c'est l'archi le problĂšme.
| Module | Commits | Dette créée | Dette réduite | Dette nette | Ratio | Concerns dette |
|---|---|---|---|---|---|---|
| dasboard Source | 2 | +16.1h | 0.4h | +15.7h | 36.7x | Un bug de déduplication touche la logique de rendu des colle PROCESSUS : Hotfix mergé sans revue architecturale complÚte |
| api Source | 1 | +10.7h | 0.4h | +10.2h | 24.2x | COUPLAGE TEMPOREL CACHà : Le code du régulateur ne semble pa Couplage temporel non résolu architecturalement : la correct |
| collab Source | 6 | +13.4h | 0.7h | +12.7h | 19.6x | Erreurs typographiques existantes non corrigées : 'depasser' Duplication de 3 fichiers locale quasi-identiques sans facto |
| package.json Source | 3 | +58.6h | 4.1h | +54.6h | 14.3x | Chaßnage optionnel profond (ppe?.data?.attributes?.regie?.da Rapport valeur/dette défavorable : 5h valeur métier créée vs |
| root Source | 5 | +70.4h | 5h | +65.4h | 14.1x | Aucun test fonctionnel ou d'intégration n'existe - dette cri Absence de tests automatisés reconnue mais assumée comme det |
| docker-compose.clb.yml Source | 1 | +29.5h | 3h | +26.5h | 10x | Absence de tests automatisés (1.5/10) : seule vérification m syncProperty.ts à 266 lignes avec 5 responsabilités (orchest |
| docker-compose.default.yml Source | 1 | +29.5h | 3h | +26.5h | 10x | Absence de tests automatisés (1.5/10) : seule vérification m syncProperty.ts à 266 lignes avec 5 responsabilités (orchest |
| docker-compose.import.yml Source | 1 | +29.5h | 3h | +26.5h | 10x | Absence de tests automatisés (1.5/10) : seule vérification m syncProperty.ts à 266 lignes avec 5 responsabilités (orchest |
| other Source | 128 | +373.7h | 38.4h | +335.3h | 9.7x | TESTS NĂGATIFS ABSENTS (1h dette) : Pas de test null/Boolean ĂCART TEMPS 200% NON EXPLIQUĂ : 1.5h rĂ©el vs 0.5h idĂ©al pour |
| cron Source | 24 | +231h | 28h | +202.9h | 8.2x | Absence de stratégie de migration pour les données Strapi hi Dette technique de 10h : gestion d'erreur transactionnelle ( |
| apps/backend Source | 256 | +1996.6h | 272.6h | +1724h | 7.3x | handler.ts shouldReport() : instanceof HTTPError exclut TOUT Absence de typage TypeScript pour onlyOfficeKey - risque de |
| dashboard Source | 371 | +2478h | 350h | +2127.9h | 7.1x | JSDoc obsolÚte (@param fileName) induira en erreur tout déve handler.ts shouldReport() : instanceof HTTPError exclut TOUT |
| backend Source | 103 | +1262.4h | 182.9h | +1079.5h | 6.9x | Dette technique de 10h : gestion d'erreur transactionnelle ( Violation DRY : 4 noms catégories hardcodés en double - refa |
| copro Source | 33 | +292.2h | 43.9h | +248.3h | 6.7x | Fonction privée _createTicket non testable en isolation sans CRITIQUE : describe.skip dans 02.test.js réduit la couvertur |
| file-server Source | 62 | +588.7h | 89.5h | +499.3h | 6.6x | COUPLAGE IMPLICITE : La validation 'files' dans step1.tsx dé Commentaire obsolÚte step1.tsx ligne ~107 : "'file' is requi |
| Module | Commits | Dette créée | Dette réduite | Dette nette | Ratio | Concerns dette |
|---|---|---|---|---|---|---|
| docker-compose.bory-staging-auto.yml Sink | 1 | 11.3h | 12.3h | -1h | 0.9x | CRITIQUE - apt-key dĂ©prĂ©ciĂ© dans les anciens file-server/Doc MODĂRĂ - 4 TODO dans dashboard/Dockerfile.dev non adressĂ©s : |
| docker-compose.deployment.yml Sink | 1 | 11.3h | 12.3h | -1h | 0.9x | CRITIQUE - apt-key dĂ©prĂ©ciĂ© dans les anciens file-server/Doc MODĂRĂ - 4 TODO dans dashboard/Dockerfile.dev non adressĂ©s : |
Quand temps rĂ©el / temps idĂ©al > 1.5x, c'est pas le dev qui est lent â c'est le code qui rĂ©siste. Ratio > 2x = architecture problĂ©matique.
| Module | Commits | Friction | Hors budget | Temps perdu | Qualité | Complexité | Concerns friction |
|---|---|---|---|---|---|---|---|
| dashboard->developpement | 1 | 1.8x | 1/1 | 1.1h | 1.8/10 | 2.2/10 | HOTFIX = DĂFAILLANCE PROCESSUS : Un bug de requĂȘte en produc TICKET #2619 NON ACCESSIBLE : Impossible de vĂ©rifier si la c |
| upload | 2 | 1.54x | 1/2 | 1h | 0.6/10 | 1.3/10 | La refactorisation sans spécifications métier documentées ri Approche de test uniquement manuelle - aucun test automatisé |
| other | 128 | 1.22x | 43/128 | 21.6h | 3.1/10 | 2.6/10 | VERSIONNEMENT NON-SEMVER: v04.03.2025-001 ne distingue pas l TESTS NĂGATIFS ABSENTS (1h dette) : Pas de test null/Boolean |
| docker-compose.clb.yml | 1 | 1.06x | 0/1 | 0h | 3.8/10 | 6.3/10 | Champs dupliqués contradictoires dans Propriete (propriete.d Absence totale de tests automatisés (1/10) pour une intégrat |
| docker-compose.default.yml | 1 | 1.06x | 0/1 | 0h | 3.8/10 | 6.3/10 | Champs dupliqués contradictoires dans Propriete (propriete.d Absence totale de tests automatisés (1/10) pour une intégrat |
| docker-compose.import.yml | 1 | 1.06x | 0/1 | 0h | 3.8/10 | 6.3/10 | Champs dupliqués contradictoires dans Propriete (propriete.d Absence totale de tests automatisés (1/10) pour une intégrat |
| package.json | 3 | 1x | 0/3 | 0h | 3.7/10 | 6.3/10 | Risque RGPD critique : clientSecret loggé en clair dans writ Aucun test automatisé pour le nouveau flux importLogId en am |
| collab | 6 | 0.9x | 2/6 | 2h | 3.1/10 | 2.6/10 | Erreurs typographiques existantes non corrigées : 'depasser' TestCoverage critique (3/10) : approche déclarée couvre 2 sc |
| workflows | 4 | 0.9x | 0/4 | 0h | 5/10 | 4.5/10 | Suppression de l'ancien backend sans migration visible de la Le middleware strapi_auth_middleware gĂšre l'authentification |
| root | 5 | 0.84x | 0/5 | 0h | 3.8/10 | 5/10 | Suppression de l'ancien backend sans migration visible de la Le middleware strapi_auth_middleware gĂšre l'authentification |
| copro | 33 | 0.78x | 0/33 | 0h | 3.9/10 | 4.2/10 | CRITIQUE : describe.skip dans 02.test.js réduit la couvertur CRITIQUE : NewRouteGuard.jsx ajoute 3 branches décisionnelle |
| backend | 103 | 0.76x | 1/103 | 3h | 3.8/10 | 4.8/10 | ZĂRO fichier de test sur 7 fichiers modifiĂ©s avec opĂ©rations validateDistributionKeySchema.ts modifiĂ© sans tests de rĂ©gre |
| settings.json | 2 | 0.75x | 0/2 | 0h | 5.8/10 | 4.1/10 | Suppression de tests/db/healthcheck.sh (script MariaDB 31 li Aucune preuve dans ce commit d'une migration vers un nouveau |
| docker-compose.bory-staging-auto.yml | 1 | 0.75x | 0/1 | 0h | 5.5/10 | 4.5/10 | Risque critique sur file-server : le Dockerfile.dev supprimé docker-compose.deployment.yml entiÚrement supprimé (143 lign |
| docker-compose.deployment.yml | 1 | 0.75x | 0/1 | 0h | 5.5/10 | 4.5/10 | Risque critique sur file-server : le Dockerfile.dev supprimé docker-compose.deployment.yml entiÚrement supprimé (143 lign |
| file-server | 62 | 0.74x | 3/62 | 9.2h | 3.7/10 | 4.5/10 | res.status(200) implicite - comportement fragile si middlewa Absence de tests automatisés avec cette correction : Aucun t |
| dashboard | 371 | 0.73x | 15/371 | 17.5h | 4.1/10 | 4.1/10 | VIOLATION SRP MAJEURE : getDocumentsList gĂšre 5 responsabili COUPLAGE DIRECT : L'import de Regie dans l'action serveur co |
| api | 1 | 0.7x | 0/1 | 0h | 1.6/10 | 4.3/10 | RISQUE DE CONFORMITĂ FISCALE : Les acomptes provisionnels so LACUNES DE TESTS DE RĂGRESSION : L'absence de tests de bout |
| apps/backend | 256 | 0.69x | 15/256 | 12.4h | 4.1/10 | 4.3/10 | Type AgStrapiResponse dupliquĂ© contrĂŽleur:lignes18-55/gĂ©nĂ©ra Champs Propriete stringâstring|null sans fallback dans gĂ©nĂ©r |
| docker-compose.bory-staging.yml | 5 | 0.68x | 1/5 | 0.1h | 4.7/10 | 3.1/10 | RISQUE CRITIQUE - Saut 7.1â8.3 sur staging sans analyse des INSUFFISANCE DE TESTS - 'VĂ©rifier le bon fonctionnement' ne |
Pour chaque module: le point de bascule oĂč la dette est devenue problĂ©matique, combien de commits ont Ă©tĂ© coincĂ©s aprĂšs, et combien de temps aurait Ă©tĂ© Ă©conomisĂ© par un refactor fait au bon moment.
Pour chaque module critique: pourquoi il va mal, si c'est l'architecture ou les devs, et quoi faire.
Le module dashboard souffre d'un cercle vicieux oĂč chaque modification crĂ©e plus de dette qu'elle n'en rĂ©sout (ratio 7.1x), alimentĂ© par des violations SRP majeures et un couplage direct qui contourne la couche service. Les 368 commits bloquĂ©s aprĂšs le tipping point et les 11 cascades de correctifs montrent que l'architecture monolithique et le manque de tests empĂȘchent toute Ă©volution sans rĂ©gression, tandis que les pratiques dĂ©veloppeur (magic numbers, fuites de donnĂ©es, JSDoc obsolĂšte) aggravent la situation.
Ce module est pris dans une spirale de dette irrĂ©versible : avec un ratio de crĂ©ation de dette de 7.3x et 253/256 commits bloquĂ©s aprĂšs le tipping point, il ne rĂ©duit jamais sa dette. La cause profonde est un cercle vicieux entre dĂ©fauts architecturaux (violation DRY sur AgStrapiResponse, formulaire monolithique 516 lignes, traitement indiffĂ©renciĂ© des APIs aux profils radicalement diffĂ©rents) et pratiques dĂ©veloppeur dĂ©faillantes (zĂ©ro test automatisĂ©, absence de typage TypeScript sur les clĂ©s critiques, dĂ©pendances non verrouillĂ©es). L'absence totale de tests rend tout refactor risquĂ©, ce qui empĂȘche de rĂ©duire la dette existante.
Ce module est en Ă©tat de dĂ©gradation avancĂ©e car il cumule des lacunes structurelles (aucune infrastructure de test, artefacts de conflits de fusion non rĂ©solus) et des pratiques de dĂ©veloppement dĂ©faillantes (versionnement non-SEMVER, commits non descriptifs, traçabilitĂ© nulle). Avec 127/128 commits bloquĂ©s aprĂšs le tipping point et un ratio de crĂ©ation de dette de 9.7x, le module ne rĂ©duit jamais sa dette â chaque merge apporte de nouveaux problĂšmes sans validation automatisĂ©e, crĂ©ant un cycle de cascades de correctifs (11 bursts) et de rĂ©gressions silencieuses.
GĂ©nĂ©rĂ© par CodeWave le 20/04/2026 â 1041 commits · 40 modules