Une passe « restylage seul » qui a révélé de vrais bugs
A restyle-only sweep surfaced a React Rules-of-Hooks violation: a useQuery sitting after an early `if (isLoading) return`, so hook order differed between renders.
Le filet avait un trou
Le test, le journal d'audit, le scanner, la CI — couvrant moins que je ne le supposais.
Un nettoyage de design multi-agents sur les quatre applications — 127 fichiers, environ 10k lignes, explicitement cadré comme « ne pas changer les fonctionnalités ». Il a fait surgir de vrais bugs fonctionnels cachés sous la dette cosmétique.
Une violation des Rules of Hooks dans le SchoolManagement.tsx du super-admin : un useQuery s'était retrouvé textuellement après un if (isLoading) return anticipé introduit plus tôt dans le même restylage, donc l'ordre des hooks différait entre le rendu en chargement et le rendu chargé. Déplacé au-dessus du return anticipé.
Deux appels React Query orphelins dans SchoolDetail.tsx qui déclenchaient de vraies requêtes réseau à chaque vue de page sans aucun consommateur nulle part dans l'application. Morts depuis bien avant cette session, et remarqués seulement parce qu'un passage de lint a signalé les variables inutilisées.
Six backdrops de modale inaccessibles dans le pattern queue-drawer du super-admin — <div onClick={close}> sans handler clavier. Le même pattern copié-collé dans six fichiers, corrigé une fois et propagé par correspondance de motif plutôt qu'en ouvrant chaque fichier à l'aveugle.
La leçon porte sur la classe, pas sur les trois bugs : même une passe de restylage pur a besoin d'un vrai passage de lint et de typecheck après. Ceux-là n'apparaissent que quand quelque chose vérifie réellement l'ordre des hooks ou la sémantique d'accessibilité — un humain qui regarde un diff n'en attrapera aucun.