Analyse le dépôt comme un développeur senior qui vient d'en hériter et qui sera appelé en cas de panne. Priorités : correct, sécurisé, résistant à la charge, testé, rapide, léger. Chaque ligne supplémentaire devra être lue, testée et corrigée un jour. Ceci est un rapport demandé par l'utilisateur, donc rédigez-le complètement.
1. Cartographie d'abord
- Analysez ce que l'utilisateur a mentionné (dossier, package ou dépôt). Sinon : tout le dépôt.
- Lisez le README, la configuration de build/déploiement, la liste des dépendances, les points d'entrée (main, routes, handlers, jobs, CLI), et les tests.
- Déterminez la charge attendue (une personne exécutant un script, ou plusieurs utilisateurs/processus simultanés). Évaluez l'échelle par rapport à cela et mentionnez les hypothèses.
- Parcourez le flux principal de bout en bout : données entrantes, stockées, sortantes. Lisez complètement les chemins d'entrée utilisateur, d'argent, d'authentification, d'écriture de données, de jobs en arrière-plan et d'état partagé entre processus.
- Pour les gros dépôts : approfondissez les parties les plus coûteuses en cas d'erreur, pas fichier par fichier. Mentionnez les parties non lues.
2. Recherchez
- Bugs : résultats erronés, plantages, cas limites oubliés (vide, zéro, dernier élément, arrondi, fuseau horaire), appelant ne correspondant pas au retour de la fonction, même règle appliquée différemment à deux endroits.
- Risques : failles de sécurité (injection, aléatoire faible, secret dans le code, entrée utilisateur sans validation), perte de données (erreur avalée, ordre d'écriture incorrect, sans transaction).
- Scalabilité : sûr pour un utilisateur, erroné pour plusieurs : race condition check-then-write, travail répété à chaque processus, mémoire/liste qui croît indéfiniment, requête par élément, O(n²) sur des entrées volumineuses, état par processus qui devrait être partagé.
- Tests manquants : logique risquée (branchement, analyseur, argent, sécurité, écriture de données) sans test qui échoue si la logique est cassée. Un bon test, pas une couverture.
- Vitesse : ralentissement majeur = problème. Optimisation mineure (travail répété dans une boucle chaude) = suggestion.
- Légèreté : code inutile ou qui devrait être plus petit.
- supprimer : code mort, options/flag/config inutilisés, fonctionnalités spéculatives
- réutiliser : deux helpers faisant la même chose (gardez-en un, mentionnez son chemin)
- stdlib/natif : déjà fourni par la bibliothèque standard ou la plateforme ; dépendance qui fait le travail en quelques lignes
- yagni : interface avec une seule implémentation, factory avec un seul produit, wrapper qui ne fait que passer l'appel
- fusionner : copies similaires qui doivent changer ensemble
- diviser : une seule fonction/classe avec plusieurs tâches non liées. Divisez par tâche, pas par nombre de lignes, et ne créez pas de helper qui ne fait que raccourcir la fonction.
3. Vérifiez avant de signaler
- Chaque constat a besoin d'un cas concret : "cette entrée/cette situation produit ce résultat erroné". Sans cas, ce n'est pas un constat.
- Avant de mentionner du code inutilisé, grep tout l'arbre, y compris les tests, fixtures, config, et les références chaînes/dynamiques.
- Les raccourcis marqués par un commentaire
shortcut:(ouponytail:ancien) qui mentionnent leurs limites sont une décision, pas un constat, sauf si la charge attendue les dépasse déjà. - Proposez la correction la plus petite qui fonctionne. Priorisez la suppression de code. N'ajoutez pas de couche, framework ou configuration inutiles.
- Pas de jugement de style, pas de "envisagez", pas d'inquiétudes vagues.
4. Sortie
Langue française simple : phrases courtes, mots courants. Expliquez les termes techniques lors de leur première utilisation. Le lecteur n'a peut-être jamais vu ce code.
Commencez par Fonction de ce dépôt : (2-3 phrases) et la charge assumée.
Ensuite, les constats en trois groupes, les plus importants d'abord, en sautant les groupes vides :
- À corriger impérativement : bugs, sécurité, perte de données, rupture sous la charge attendue.
- À corriger de préférence : code risqué sans test, lent réellement, duplication, fonctions mélangeant des tâches, code inutile.
- Bonus si fait : optimisations mineures, formulations plus courtes.
Numérotez consécutivement tous les groupes pour que l'utilisateur puisse dire "corrige 2 et 5". Maximum 20 constats ; mentionnez le nombre de constats ignorés. Chaque constat a quatre parties, chacune de 1 à 2 phrases courtes :
- Commande enregistrée le mauvais jour (
billing/close_day.py:L40-52)- Quoi : Le job de minuit ferme le jour et facture toutes les commandes du jour.
- Problème : "Aujourd'hui" est pris depuis l'heure du serveur (UTC). Une commande à 00h30 à Berlin est facturée le jour précédent.
- Correction : Calculez le jour une fois dans le fuseau horaire du magasin :
datetime.now(ZoneInfo("Europe/Berlin")).date(). - Si ignoré : Les commandes tardives ont une date erronée, la comptabilité les corrige manuellement.
Terminez par :
Verdict :une ligne : sain, ou ce qui doit être corrigé en premier.Lean : -<N> lignes, -<M> dépendances possibles.s'il y a des constats de légèreté.Non vérifié :les parties non lues ou non exécutables.
Aucun constat : Fonction de ce dépôt :, puis Sain. Rien à corriger. et une ligne sur ce qui a été vérifié.
Rapport unique, ne modifie pas le code.