Saltar al contenido
Curso Claude Code en equipo: una sola forma de trabajar
12/29 Repo privado, onboarding y versiones Versión mala de un plugin de Claude Code: cómo volver atrás sin perder el changelog
Tu lectura Quedan 19 min
Lección 12 de 29 · Repo privado, onboarding y versiones

Versión mala de un plugin de Claude Code: cómo volver atrás sin perder el changelog

19 min de lectura Claude Code 2.1

Hola, bienvenido. En esta lección vamos a publicar una versión del plugin que rompe el hook de todo el equipo. Vamos a ver qué le pasa a quien la instala y cómo se retira. La vuelta atrás tiene una forma correcta y otra que parece más rápida y borra la historia del plugin, y vamos a ver por qué la segunda no vale.

Marta quiere que el hook que comprueba el repo sea más estricto en los repos que lo pidan. Con una variable nueva en el env del repo, TEAM_STRICT, doctor.sh comprobará además que nadie ha subido a git los archivos personales, .claude/settings.local.json y CLAUDE.local.md. Es un cambio pequeño, y tiene prisa.

Hasta ahora, cada pieza del repo del plugin ha hecho su trabajo: el changelog, los tests, el pre-push y los tags. Con una versión mala vamos a ver qué detiene cada una, qué deja pasar y qué le llega al equipo cuando alguien decide saltarse una barrera. Y vamos a terminar con una versión que corrige el error, con la entrada de la versión mala todavía en el changelog y un test nuevo para que el mismo error no vuelva a salir.

La 1.2.0: el modo estricto de doctor.sh

Vamos a añadir el cambio en claude-plugins/plugins/team/scripts/doctor.sh, justo antes de decidir si hay algo que avisar:

claude-plugins/plugins/team/scripts/doctor.sh Modificado +8
49 warn "el plugin team está en $installed y este repo pide $minimum o superior: actualízalo con claude plugin update team@cursosdesarrolloweb --scope project."
50fi
51
+if [ "$TEAM_STRICT" = 1 ]; then
+ for file in .claude/settings.local.json CLAUDE.local.md; do
+ if git ls-files --error-unmatch "$file" >/dev/null 2>&1; then
+ warn "$file es personal y está en git: sácalo con git rm --cached $file."
+ fi
+ done
+fi
+
60[ -n "$problems" ] || exit 0
61
62message="team doctor ha encontrado problemas en este repo:$problems"

Fíjate en la línea de minimum, unas líneas más arriba: TEAM_PLUGIN_MIN se lee con ${TEAM_PLUGIN_MIN:-}, que da un valor vacío si la variable no existe. TEAM_STRICT se lee sin valor por defecto. Con set -u, que el script tiene desde la primera versión, bash termina con error en cuanto lee una variable que no existe. Y TEAM_STRICT no existe en ningún repo del equipo, porque es nueva. Un repo que quiera el modo estricto tiene que añadir "TEAM_STRICT": "1" a su env, igual que hizo helpdesk con TEAM_PLUGIN_MIN, y los demás no tendrían que notar nada.

Vamos a añadir la entrada a claude-plugins/plugins/team/CHANGELOG.md:

claude-plugins/plugins/team/CHANGELOG.md Modificado +5
1# Changelog del plugin team
2
3Cada versión publicada tiene aquí su entrada, también la de una versión que haya que retirar. Ninguna entrada se borra.
4
+## 1.2.0
+
+- Modo estricto de `doctor.sh`: con `TEAM_STRICT` a `1` en el `env` del repo, avisa también si `.claude/settings.local.json` o `CLAUDE.local.md` están en git.
+- Qué tienes que hacer: actualizar con `claude plugin update team@cursosdesarrolloweb --scope project`. El modo estricto lo activa cada repo, si quiere.
+
10## 1.1.0
11
12- `doctor.sh` comprueba que `jq` está instalado antes de usarlo. Si falta, avisa con el comando para instalarlo, en vez de fallar al arrancar la sesión.

Y vamos a subir la versión en claude-plugins/plugins/team/.claude-plugin/plugin.json:

claude-plugins/plugins/team/.claude-plugin/plugin.json Modificado +1 −1
1{
2 "name": "team",
3 "description": "Cómo trabaja el equipo con Claude Code: las skills y los hooks comunes a todos los repos",
− "version": "1.1.0",
+ "version": "1.2.0",
5 "author": {
6 "name": "cursosdesarrolloweb"
7 }
8}
Lo que queda de esta lección
  1. 02validate no lo ve, tests/run.sh sí
  2. 03Lo que ve el equipo con la 1.2.0
  3. 04Volver atrás sin perder el changelog
  4. 05La fixture que lo habría parado
  5. 06La 1.2.1: retirar la 1.2.0
  6. 07El repo pide la 1.2.1
Sigue leyendo con tu suscripción El curso completo, con su proyecto final, el certificado y el foro, está incluido en la suscripción. Ver los planes