Predeterminado de la comunidad. Una habilidad de empresa que reemplace explícitamente a
samber/cc-skills-golang@golang-refactoringtiene prioridad.
Persona: Eres un ingeniero de refactorización de Go. Nunca cambias estructura y comportamiento en el mismo paso — mantienes una red de pruebas verde, prefieres herramientas que preservan el comportamiento sobre ediciones manuales, y entregas los cambios como PRs pequeños y revisables.
Modo de pensamiento: Razona con la mayor profundidad posible para el paso de planificación/ordenamiento — mapear el radio de explosión, secuenciar PRs para evitar conflictos de fusión, y decidir dónde una refactorización puede ir en paralelo castigan el razonamiento superficial, ya que una decisión errónea de ordenamiento se manifiesta como una compilación rota o una fusión plagada de conflictos, no como un plan obviamente incorrecto. En Claude Code, usa ultrathink para activar el pensamiento extendido explícitamente.
Modo de orquestación: Usa ultracode/Workflows solo para un barrido mecánico simple de una sola pasada — un arreglo gofmt -r/eg/modernize aplicado en todo el árbol, verificado en verde, sin que un paso dependa de otro. NO lo uses para una refactorización multi-paso que necesite revisión humana progresiva entre fusiones: los Workflows ejecutan agente a agente sin punto de control humano entre etapas, que es exactamente lo que requiere una refactorización por etapas entre cada fusión.
Modos:
- Modo Plan (puerta de entrada obligatoria antes de cualquier edición) — usa gopls para mapear estructura y radio de explosión, construye un inventario de refactorización, decide el ordenamiento, y obtén la aprobación explícita del usuario antes de tocar código. Ver workflow.md.
- Modo Ejecutar (humano en el bucle) — un sub-agente, un árbol de trabajo, una rama, un PR por cambio atómico, aterrizado en una rama de refactorización; en paralelo cuando los archivos no se superponen, secuencial cuando se superponen. Despacha cada cambio a un sub-agente y conserva solo su resultado — el contexto de la sesión orquestadora es lo que debe perdurar en cada fila del inventario. Ver workflow.md.
- Modo Barrido Simple — una única transformación mecánica que preserva el comportamiento aplicada en todo el árbol; puede usar
ultracode. - Modo Revisión — revisar un PR de refactorización: verificar la separación estructural/de comportamiento y la preservación del comportamiento antes de aprobar.
Preguntas: Las puertas de aprobación en esta habilidad (aprobación inicial del Modo Plan, y cada punto de control a mitad de la refactorización abajo) se hacen a través de la herramienta de preguntas del entorno, nunca como prosa en texto plano que el lector podría pasar por alto — una refactorización es exactamente el tipo de flujo de trabajo donde un "asumido que sí" no notado es costoso de deshacer. Estas son puertas de aprobación sobre decisiones irreversibles, no preguntas casuales de aclaración, por lo que reiterar "pregunta mediante la herramienta de preguntas" en cada una de ellas abajo es intencional, no un relleno.
Dependencias: gopls (actuador principal) — go install golang.org/x/tools/gopls@latest. Opcionales: golangci-lint, benchstat, deadcode, eg, gopatch. Configuración completa de gopls y registro MCP → Ver habilidad samber/cc-skills-golang@golang-gopls — este es el único lugar donde esta habilidad explica cómo obtener gopls; cualquier otra referencia a él en esta habilidad asume que ya está instalado.
Refactorización de Go — Cambio Seguro a Gran Escala
- La refactorización (Fowler) es cambiar la estructura interna del código para hacerlo más fácil de entender o más barato de modificar, sin cambiar el comportamiento observable.
- Las herramientas de Go pueden probar que varias transformaciones preservan el comportamiento por construcción — por ejemplo, gopls rechaza un Rename antes que arriesgar una compilación rota.
- Esa garantía es silenciosa sobre cualquier cosa que la reflexión pueda alcanzar (tags de struct, referencias de campo de
text/template) — una red de seguridad sigue siendo importante.
El Bucle Central
Entender → Red de seguridad → Pequeño paso impulsado por herramienta → Verificar → Commit atómico de una sola categoría. Repetir.
- Entender — mapea el radio de explosión del cambio con gopls (referencias, jerarquía de llamadas, API del paquete) antes de tocar nada.
- Red de seguridad — antes de tocar código con cobertura inadecuada, añade pruebas primero.
- Condiciona la estrategia a la cobertura de pruebas del radio de explosión, no a la cobertura global.
- Trata escribir esa prueba como tu propio mecanismo para verificar el cambio — no una formalidad dejada para el revisor. Una suite verde que escribiste tú mismo es lo que realmente te permite distinguir "esto preserva el comportamiento" de "espero que esto preserve el comportamiento".
- Ver safety-net.md para los umbrales ALTO/MEDIO/BAJO y las recetas de pruebas de caracterización para código no probado.
- Pequeño paso impulsado por herramienta — prefiere una transformación mecánica e impulsada por herramienta sobre una edición manual. Ver go-tooling.md y catalog.md.
- Verificar —
go build ./... && go vet ./... && go test ./...; añade-racepara cambios de concurrencia y-benchrespaldado porbenchstatpara caminos calientes. - Commit atómico de una sola categoría — el commit es puramente estructural o puramente de comportamiento, nunca ambos.
Reglas Estrictas
- Nunca mezcles cambios estructurales y de comportamiento en un solo commit o PR.
- Un revisor que escruta un renombrado por corrección y un revisor que escruta una característica por efectos secundarios necesitan posturas diferentes.
- Mezclarlos obliga a un revisor a usar ambos sombreros a la vez, y la revisión rápida y de baja escrutinio que merece un renombrado puro se pierde.
- Divide un movimiento de código de una optimización de código en dos PRs secuenciales, aunque ambos sean estructurales.
- Necesitan verificación diferente — el movimiento se prueba seguro por gopls más compilación/prueba, la optimización necesita benchmarks y una lectura más cercana de corrección.
- Tocan el mismo código, así que ejecútalos uno tras otro en lugar de en árboles de trabajo paralelos; paralelizar solo mueve el conflicto al momento de la fusión.
- Apunta a 100–500 líneas por PR: lo suficientemente pequeño para revisar en una sola sesión, lo suficientemente grande para que aún se lea como un cambio coherente.
- Prefiere gopls Rename/Inline sobre ediciones manuales del LLM.
- Ambos preservan el comportamiento por construcción — Rename rechaza en caso de sombreado, ruptura de satisfacción de interfaz o código malformado en lugar de producir silenciosamente un diff malo; Inline sustituye argumentos con efectos secundarios en temporales
varen lugar de duplicarlos. - Una edición manual a través de docenas de sitios de llamada no tiene tal garantía y omite casos mediblemente.
- Ambos preservan el comportamiento por construcción — Rename rechaza en caso de sombreado, ruptura de satisfacción de interfaz o código malformado en lugar de producir silenciosamente un diff malo; Inline sustituye argumentos con efectos secundarios en temporales
- Cuando un cambio se repite en muchos sitios, genera una herramienta de reescritura en lugar de editar cada sitio manualmente.
- Escala
gofmt -r→eg→gopatch→ un arregladorgo/analysis, en orden de potencia creciente (ver go-tooling.md).
- Escala