Habilidades de Matt Pocock
Análisis de código: el pequeño sincronizador de versiones de skills
Sigue sync-plugin-version.mjs por comprobación, actualización protegida y rechazo de campos anidados con seis fixtures desechables ejecutados.
Qué aprenderás
- Sigue las lecturas antes de la escritura
- Añade casos adversos al camino favorable
- Delimita lo que la prueba no demuestra
Antes de empezar
- Conceptos básicos de repositorios, incidencias y pruebas
- Distinguir instrucciones y permisos
Elige una adopción y sigue sus archivos, límites de autoridad y evidencia.
Conclusiones clave
- La comprobación no escribe aunque las versiones difieran.
- La primera coincidencia textual se valida después como versión superior.
- La consistencia local no demuestra distribución ni despliegue.
Sigue las lecturas antes de la escritura
El script localiza el repositorio respecto a su propio archivo, lee package.json y .claude-plugin/plugin.json, y analiza ambos documentos. package.json proporciona la versión deseada. Si coincide, termina correctamente sin reescribir el plugin. Con la opción de comprobación, una diferencia devuelve fallo y conserva los bytes originales.
En modo de actualización sustituye mediante expresión regular el primer campo textual version; después analiza el candidato y verifica su versión superior. Solo entonces escribe. Esto conserva el formato de la estructura esperada, pero no lo convierte en una biblioteca general de edición estructural de JSON.
Añade casos adversos al camino favorable
La sonda editorial verificó el identificador Git del script fijado antes de copiarlo a seis directorios de prueba nuevos. Versiones iguales pasaron sin escribir; la comprobación rechazó una diferencia sin modificarla; la actualización cambió únicamente el texto esperado, y otra ejecución con versiones iguales permaneció estable. No fue necesario instalar paquetes ni publicar nada.
Dos casos adicionales exploraron límites. La ausencia de version impidió la escritura. Un campo version anidado anterior al superior recibió la primera sustitución textual; la validación posterior del campo superior falló y evitó escribir. Es una limitación observada con una protección, no evidencia de compatibilidad con cualquier estructura de manifiesto.
Delimita lo que la prueba no demuestra
La prueba observa códigos de salida y bytes exactos usando documentos esperados escritos independientemente. No genera su expectativa repitiendo la misma sustitución. Por eso los casos de diferencia y campo anidado pueden detectar una regresión real. Esta serie conserva los identificadores de fuente y los resultados de la sonda.
Sincronizar archivos localmente no publica un paquete, mueve el commit de un mercado ni actualiza instalaciones. El script tampoco aporta una transacción atómica de publicación entre múltiples archivos. Mantén separadas consistencia local, orquestación de lanzamiento y verificación de distribución; el siguiente capítulo explica cómo evaluar el flujo mayor sin inventar mediciones.
Pasos de implementación
- 1
Fija y verifica el script exacto.
- 2
Prepara documentos esperados independientes para cada rama.
- 3
Añade casos sin campo y con campo anidado anterior.
- 4
Comprueba códigos de salida y bytes sin publicar una versión real.
Ejemplo para copiar
{
"executedScript": "scripts/sync-plugin-version.mjs",
"fixtureCases": 6,
"mismatchCheck": {"exitCode": 1, "fileChanged": false},
"nestedFirstVersion": {"exitCode": 1, "fileChanged": false},
"packagePublished": false,
"marketplaceUpdated": false
}Preguntas frecuentes
¿Por qué no reescribir todo el objeto JSON?
La implementación conserva el formato cambiando un campo textual. Esa decisión también introduce el límite de primera coincidencia probado aquí.
¿Se ejecutó el script original?
Sí, tras verificar su hash, contra seis fixtures locales desechables. No se ejecutaron habilidades, instaladores, publicaciones ni operaciones sobre incidencias.
Fuentes
- package.jsonFuente verificada 2026-09-08
- .claude-plugin/plugin.jsonFuente verificada 2026-09-08
- scripts/sync-plugin-version.mjsFuente verificada 2026-09-08