doctor y seguir
instalando, cargando, actualizando y desinstalando plugins desde todos los orígenes admitidos.
Para el mapa más amplio del ejecutor de pruebas, consulta Pruebas. Para claves de proveedores
en vivo y suites que tocan la red, consulta Pruebas en vivo.
Qué protegemos
- Un tarball de paquete está completo, tiene un
dist/postinstall-inventory.jsonválido y no depende de archivos del repositorio sin empaquetar. - Un usuario puede pasar de un paquete publicado anterior al paquete candidato sin perder configuración, agentes, sesiones, espacios de trabajo, listas de permitidos de plugins ni configuración de canales.
openclaw doctor --fix --non-interactivees responsable de las rutas de limpieza y reparación heredadas. El inicio no debe incorporar migraciones de compatibilidad ocultas para estado de plugins obsoleto.- Las instalaciones de plugins funcionan desde directorios locales, repositorios git, paquetes npm y la ruta de registro de ClawHub.
- Las dependencias npm de plugins se instalan en un proyecto npm gestionado por plugin,
se escanean antes de confiar en ellas y se eliminan mediante
npm uninstalldurante la desinstalación del plugin para que las dependencias elevadas no permanezcan. - La actualización de plugins no hace nada cuando nada cambió: los registros de instalación, el origen resuelto, el diseño de dependencias instaladas y el estado habilitado permanecen intactos.
Prueba local durante el desarrollo
Empieza con alcance limitado:release:check ejecuta comprobaciones de deriva de configuración/docs/API (esquema de configuración, línea base de docs de configuración,
línea base y exportaciones de la API del SDK de plugins, versiones/inventario de plugins),
escribe el inventario dist del paquete, ejecuta npm pack --dry-run, rechaza archivos
empaquetados prohibidos, instala el tarball en un prefijo temporal, ejecuta postinstall y
hace una prueba smoke de los puntos de entrada de canales incluidos.
Carriles Docker
Los carriles Docker son la prueba a nivel de producto. Instalan o actualizan un paquete real dentro de contenedores Linux y verifican el comportamiento mediante comandos de CLI, inicio del Gateway, sondeos HTTP, estado RPC y estado del sistema de archivos. Usa carriles enfocados mientras iteras:test:docker:pluginscubre la prueba smoke de instalación de plugins, instalaciones desde carpeta local, comportamiento de omisión de actualización de carpetas locales, carpetas locales con dependencias preinstaladas, instalaciones de paquetesfile:, instalaciones git con ejecución de CLI, actualizaciones de refs móviles git, instalaciones desde registro npm con dependencias transitivas elevadas, no-ops de actualización npm, rechazo de metadatos de paquete npm mal formados, instalaciones de fixtures locales de ClawHub y no-ops de actualización, comportamiento de actualización de marketplace y habilitación/inspección del paquete Claude. DefineOPENCLAW_PLUGINS_E2E_CLAWHUB=0para mantener el bloque de ClawHub hermético/sin conexión.test:docker:plugin-lifecycle-matrixinstala el paquete candidato en un contenedor vacío, ejecuta un plugin npm mediante instalación, inspección, deshabilitación, habilitación, actualización explícita, degradación explícita y desinstalación después de eliminar el código del plugin. Registra métricas de RSS y CPU por fase.test:docker:plugin-updatevalida que un plugin instalado sin cambios no se reinstale ni pierda metadatos de instalación duranteopenclaw plugins update.test:docker:upgrade-survivorinstala el tarball candidato sobre un fixture de usuario antiguo sucio, ejecuta actualización de paquete más doctor no interactivo, luego inicia un Gateway loopback y comprueba la preservación del estado.test:docker:published-upgrade-survivorprimero instala una línea base publicada, la configura mediante una recetaopenclaw config setintegrada, la actualiza al tarball candidato, ejecuta doctor, comprueba la limpieza heredada, inicia el Gateway y sondea/healthz,/readyzy el estado RPC.test:docker:update-restart-authinstala el paquete candidato, inicia un Gateway gestionado con autenticación por token, desdefine las variables de entorno de autenticación del Gateway del llamador paraopenclaw update --yes --jsony exige que el comando de actualización candidato reinicie el Gateway antes de los sondeos normales.test:docker:update-migrationes el carril de actualización publicada con mucha limpieza. Parte de un estado de usuario configurado al estilo Discord/Telegram, ejecuta doctor de línea base para que las dependencias de plugins configurados tengan ocasión de materializarse, siembra residuos heredados de dependencias de plugins para un plugin empaquetado configurado, actualiza al tarball candidato y exige que doctor posterior a la actualización elimine las raíces de dependencias heredadas.
base, acpx-openclaw-tools-bridge, feishu-channel,
bootstrap-persona, channel-post-core-restore, plugin-deps-cleanup,
configured-plugin-installs, stale-source-plugin-shadow, tilde-log-path
y versioned-runtime-deps. En ejecuciones agregadas, OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues
(alias far-reaching) se expande a todos los escenarios, incluida la
migración de instalación de plugins configurados.
La migración completa de actualización está separada intencionalmente de la CI de versión completa. Usa el
flujo de trabajo manual Update Migration cuando la pregunta de la versión sea “¿puede cada
versión estable publicada desde 2026.4.23 en adelante actualizarse a este candidato y
limpiar residuos de dependencias de plugins?”:
Aceptación de paquetes
La Aceptación de paquetes es la compuerta de paquetes nativa de GitHub. Resuelve un paquete candidato en un tarballpackage-under-test, registra la versión y SHA-256, y luego
ejecuta carriles Docker E2E reutilizables contra ese tarball exacto. La referencia del arnés de flujo de trabajo
está separada de la referencia de origen del paquete, por lo que la lógica de prueba actual puede validar
versiones confiables anteriores.
Orígenes candidatos:
source=npm: validaopenclaw@extended-stable,openclaw@beta,openclaw@latesto una versión publicada exacta.source=ref: empaqueta una rama, etiqueta o commit confiable con el arnés actual seleccionado.source=url: valida un tarball HTTPS público conpackage_sha256requerido. Esta ruta rechaza credenciales en URL, puertos HTTPS no predeterminados, nombres de host o resultados DNS/IP privados/internos, espacio IP de uso especial y redirecciones inseguras.source=trusted-url: valida un tarball HTTPS conpackage_sha256ytrusted_source_idrequeridos contra la política propiedad de mantenedores en.github/package-trusted-sources.json. Usa esto para espejos empresariales/privados en lugar de debilitarsource=urlcon un interruptor allow-private a nivel de entrada. La autenticación Bearer, cuando la política la configura, usa el secreto fijoOPENCLAW_TRUSTED_PACKAGE_TOKEN.source=artifact: reutiliza un tarball subido por otra ejecución de Actions.
source=artifact de forma predeterminada, creado a partir del
SHA de versión resuelto. Para prueba posterior a la publicación, pasa
package_acceptance_package_spec=openclaw@YYYY.M.PATCH para que la misma matriz de actualización
apunte al paquete npm enviado.
Las comprobaciones de versión llaman a Aceptación de paquetes con el conjunto de paquete/actualización/reinicio/plugin:
release_profile=stable y
full), también pasan:
last-stable-4 se resuelve a las cuatro versiones estables de OpenClaw más recientes
publicadas en npm. La aceptación de paquetes de versión fija 2026.4.23 como el primer límite de
compatibilidad de actualización de plugins, 2026.5.2 como un límite de cambios de arquitectura de plugins y
2026.4.15 como una línea base anterior de actualización publicada 2026.4.1x; el resolutor
deduplica pines que ya están en las cuatro últimas. Para cobertura exhaustiva de migración de
actualización publicada, usa all-since-2026.4.23 en el flujo de trabajo Update Migration
separado en lugar de la CI de versión completa. release-history sigue
disponible para muestreo manual más amplio cuando también quieres el ancla heredada anterior a esa fecha.
Cuando se seleccionan varias líneas base de superviviente de actualización publicada, el flujo de trabajo Docker
reutilizable divide cada línea base en su propio job de ejecutor dirigido. Cada
fragmento de línea base sigue ejecutando el conjunto de escenarios seleccionado, pero los logs y artefactos permanecen
por línea base y el tiempo total queda acotado por el fragmento más lento en lugar de un job
serial grande.
Ejecuta un perfil de paquete manualmente al validar un candidato antes de la versión:
package_spec=openclaw@extended-stable. Aceptación de paquetes resuelve ese
selector a un tarball exacto antes de que se ejecuten los carriles Docker.
Usa suite_profile=product cuando la pregunta de la versión incluya canales MCP,
limpieza de cron/subagente, búsqueda web de OpenAI u OpenWebUI. Usa suite_profile=full
solo cuando necesites cobertura completa de ruta de versión Docker.
Valor predeterminado de versión
Para candidatos de versión, la pila de prueba predeterminada es:pnpm check:changedypnpm test:changedpara regresiones a nivel de origen.pnpm release:checkpara integridad del artefacto de paquete.- Perfil
packagede Aceptación de paquetes o los carriles de paquetes personalizados de comprobación de versión para contratos de instalación/actualización/reinicio/plugin. - Comprobaciones de versión entre sistemas operativos para instalador, onboarding y comportamiento de plataforma específicos del sistema operativo.
- Suites en vivo solo cuando la superficie cambiada toca comportamiento de proveedor o servicio alojado.
Compatibilidad heredada
La tolerancia de compatibilidad es estrecha y limitada en el tiempo:- Los paquetes hasta
2026.4.25, incluido2026.4.25-beta.*, pueden tolerar huecos de metadatos de paquete ya enviados en Aceptación de paquetes. - El paquete publicado
2026.4.26puede advertir por archivos de marca de metadatos de compilación local ya enviados. - Los paquetes posteriores deben cumplir los contratos modernos. Los mismos huecos fallan en lugar de advertir u omitirse.
upgrade-survivor, published-upgrade-survivor o
update-restart-auth cuando el comando de actualización sea responsable del reinicio.
Agregar cobertura
Al cambiar comportamiento de actualización o plugins, agrega cobertura en la capa más baja que pueda fallar por la razón correcta:- Lógica pura de rutas o metadatos: prueba unitaria junto al código fuente.
- Inventario del paquete o comportamiento de archivos empaquetados: prueba
package-dist-inventoryo de verificación de tarball. - Comportamiento de instalación/actualización de la CLI: aserción de carril de Docker o fixture.
- Comportamiento de migración de una versión publicada: escenario
published-upgrade-survivor. - Comportamiento de reinicio propiedad de la actualización:
update-restart-auth. - Comportamiento de origen de registro/paquete: fixture de
test:docker:pluginso servidor fixture de ClawHub. - Comportamiento de diseño de dependencias o limpieza: afirma tanto la ejecución
en tiempo de ejecución como el límite del sistema de archivos. Las dependencias
de npm pueden estar elevadas dentro del proyecto npm gestionado del Plugin, por
lo que las pruebas deben demostrar que ese proyecto se escanea/limpia en lugar
de asumir solo el árbol
node_moduleslocal del paquete del Plugin.
Triaje de fallos
Empieza con la identidad del artefacto:- Resumen de
resolve_packagede Aceptación de paquetes: origen, versión, SHA-256 y nombre del artefacto. - Artefactos de Docker:
.artifacts/docker-tests/**/summary.json,failures.json, registros de carril y comandos de repetición. - Resumen de supervivencia de actualización:
.artifacts/upgrade-survivor/summary.json, incluidas la versión base, la versión candidata, el escenario, los tiempos de fase y la cobertura de recetas de configuración.