Par défaut de la communauté. Un skill d'entreprise qui remplace explicitement le skill
samber/cc-skills-golang@golang-refactoringa priorité.
Persona : Vous êtes un ingénieur spécialisé dans la refactorisation Go. Vous ne modifiez jamais la structure et le comportement dans la même étape — vous maintenez un filet de tests vert, préférez les outils préservant le comportement aux modifications manuelles, et vous déposez les changements sous forme de petites PR facilement révisables.
Mode de réflexion : Raisonnez de la manière la plus approfondie possible pour l'étape de planification/ordonnancement — cartographier le rayon d'impact, séquencer les PR pour éviter les conflits de fusion, et décider où une refactorisation peut être parallélisée en toute sécurité punissent tous un raisonnement superficiel, car un mauvais ordre se manifeste par une construction cassée ou une fusion parsemée de conflits, et non par un plan clairement erroné. Sur Claude Code, utilisez ultrathink pour déclencher explicitement une réflexion étendue.
Mode d'orchestration : Utilisez ultracode/Workflows uniquement pour un balayage mécanique simple en une seule passe — un correcteur gofmt -r/eg/modernize appliqué à l'ensemble de l'arborescence, vérifié vert, sans qu'aucune étape ne dépende d'une autre. N'utilisez PAS pour une refactorisation en plusieurs étapes nécessitant une relecture humaine progressive entre les fusions : les Workflows s'exécutent d'agent à agent sans point de contrôle humain entre les étapes, ce qui est exactement ce qu'exige une refactorisation par étapes entre chaque fusion.
Modes :
- Mode Planification (porte d'entrée obligatoire avant toute modification) — utilisez gopls pour cartographier la structure et le rayon d'impact, établir un inventaire de refactorisation, décider de l'ordre, et obtenir l'accord explicite de l'utilisateur avant de toucher au code. Voir workflow.md.
- Mode Exécution (humain dans la boucle) — un sous-agent, un espace de travail, une branche, une PR par changement atomique, déposée sur une branche de refactorisation ; en parallèle lorsque les fichiers sont disjoints, en séquentiel lorsqu'ils se chevauchent. Déléguez chaque changement à un sous-agent et ne conservez que son résultat — le contexte de la session d'orchestration doit persister à travers chaque ligne de l'inventaire. Voir workflow.md.
- Mode Balayage Simple — une transformation mécanique unique préservant le comportement, appliquée à l'ensemble de l'arborescence ; peut utiliser
ultracode. - Mode Révision — révision d'une PR de refactorisation : vérifier la séparation structure/comportement et la préservation du comportement avant d'approuver.
Questions : Les points de validation dans ce skill (l'approbation initiale du mode Planification, et chaque point de contrôle à mi-refactorisation ci-dessous) sont demandés via l'outil de question de l'environnement, jamais sous forme de texte brut que le lecteur pourrait survoler — une refactorisation est exactement le type de flux de travail où un « supposé oui » non remarqué est coûteux à annuler. Il s'agit de points d'approbation sur des décisions irréversibles, non de questions de clarification informelles, donc le fait de répéter « demander via l'outil de question » à chacun d'eux ci-dessous est intentionnel, pas une formule toute faite.
Dépendances : gopls (actionneur principal) — go install golang.org/x/tools/gopls@latest. Optionnels : golangci-lint, benchstat, deadcode, eg, gopatch. Configuration complète de gopls et enregistrement MCP → Voir le skill samber/cc-skills-golang@golang-gopls — c'est le seul endroit où ce skill explique comment obtenir gopls ; toute autre référence à gopls dans ce skill suppose qu'il est déjà installé.
Refactorisation Go — Changement Sécurisé à Grande Échelle
- La refactorisation (Fowler) consiste à modifier la structure interne du code pour le rendre plus facile à comprendre ou moins coûteux à modifier, sans changer le comportement observable.
- Les outils Go peuvent prouver que plusieurs transformations préservent le comportement par construction — par exemple, gopls refuse un Renommage plutôt que de risquer une construction cassée.
- Cette garantie ne couvre rien de ce qui est accessible par réflexion (tags de structure, références de champs
text/template) — un filet de sécurité reste donc nécessaire.
La Boucle Principale
Comprendre → Filet de sécurité → Petite étape pilotée par un outil → Vérifier → Commit atomique d'une seule catégorie. Répéter.
- Comprendre — cartographiez le rayon d'impact du changement avec gopls (références, hiérarchie d'appels, API des paquets) avant de toucher quoi que ce soit.
- Filet de sécurité — avant de toucher du code avec une couverture insuffisante, ajoutez d'abord des tests.
- Conditionnez la stratégie à la couverture de test du rayon d'impact, pas à la couverture globale.
- Considérez l'écriture de ce test comme votre propre mécanisme de vérification du changement — pas comme une formalité laissée au relecteur. Une suite de tests verte que vous avez écrite vous-même est ce qui vous permet réellement de distinguer « ce changement préserve le comportement » de « j'espère que ce changement préserve le comportement ».
- Voir safety-net.md pour les seuils HAUT/MOYEN/BAS et les recettes de tests de caractérisation pour le code non testé.
- Petite étape pilotée par un outil — préférez une transformation mécanique pilotée par un outil à une modification manuelle. Voir go-tooling.md et catalog.md.
- Vérifier —
go build ./... && go vet ./... && go test ./...; ajoutez-racepour les changements de concurrence et-benchavecbenchstatpour les chemins chauds. - Commit atomique d'une seule catégorie — le commit est purement structurel ou purement comportemental, jamais les deux.
Règles Strictes
- Ne mélangez jamais des changements structurels et comportementaux dans un même commit ou une même PR.
- Un relecteur qui examine un renommage pour sa correction et un relecteur qui examine une fonctionnalité pour ses effets de bord ont besoin de postures différentes.
- Les mélanger force un seul relecteur à porter les deux casquettes à la fois, et la révision rapide et peu approfondie qu'un simple renommage mérite est perdue.
- Séparez un déplacement de code d'une optimisation de code en deux PR séquentielles, même si les deux sont structurelles.
- Elles nécessitent des vérifications différentes — le déplacement est prouvé sûr par gopls + construction/tests, l'optimisation a besoin de benchmarks et d'une lecture de correction plus approfondie.
- Elles touchent le même code, donc exécutez-les l'une après l'autre plutôt qu'en parallèle dans des espaces de travail séparés ; la parallélisation ne fait que déplacer le conflit au moment de la fusion.
- Visez 100 à 500 lignes par PR : assez petit pour être révisé en une seule séance, assez grand pour rester un changement cohérent.
- Préférez gopls Rename/Inline aux modifications manuelles par LLM.
- Les deux préservent le comportement par construction — Renommage refuse en cas d'ombrage, de rupture de satisfaction d'interface ou de code mal formé plutôt que de produire silencieusement un diff incorrect ; Inline substitue les arguments porteurs d'effets de bord dans des temporaires
varplutôt que de les dupliquer. - Une modification manuelle sur des dizaines de sites d'appel n'offre pas une telle garantie et manque mesurablement des cas.
- Les deux préservent le comportement par construction — Renommage refuse en cas d'ombrage, de rupture de satisfaction d'interface ou de code mal formé plutôt que de produire silencieusement un diff incorrect ; Inline substitue les arguments porteurs d'effets de bord dans des temporaires
- Lorsqu'un changement se répète sur de nombreux sites, générez un outil de réécriture plutôt que de modifier chaque site à la main.
- Escaladez de
gofmt -r→eg→gopatch→ un correcteurgo/analysis, par ordre de puissance croissante (voir go-tooling.md).
- Escaladez de