Pruebas de Plugins de Pre-Lanzamiento de OpenClaw
Usa esta habilidad cuando el usuario solicite confianza en el lanzamiento de plugins, barridos de ciclo de vida de plugins, prueba de artefactos de paquete de plugins, o "¿qué más deberíamos probar antes del lanzamiento?". Complementa a openclaw-testing; usa también esa habilidad al elegir el runner seguro más barato o al depurar una línea fallida.
Objetivo
Demostrar el sistema de plugins como una superficie de producto, no solo como pruebas de código fuente:
- ciclo de vida de plugins empaquetados: instalar, inspeccionar, habilitar, deshabilitar, desinstalar
- comportamiento de artefactos de paquete desde un
HOMElimpio - validación e idempotencia de doctor/fix/config
- descubrimiento de config y config round-trip
- visibilidad y diagnósticos de estado/log
- inicio/arranque de gateway con instantáneas de metadatos de plugins
- compatibilidad con SDK público para plugins externos reales
- sondas de proveedor/canal semi-activas solo cuando existan credenciales seguras
Primeras Comprobaciones
Desde la raíz del repositorio de OpenClaw:
pnpm docs:list
git status --short --branch
pnpm changed:lanes --json
Sigue openclaw-testing para la propiedad de dependencias y la elección de prueba local o remota.
Elección del Runner
Preferir este orden:
- Aceptación de Paquete de GitHub para pruebas de producto de paquete instalable.
- Worker Linux dedicado actual para pruebas confiables de fuente/paquete/Docker cuando tenga las dependencias y capacidades requeridas.
- Testbox
ci-build-artifacts-testbox.ymlcuando las líneas de Docker/paquete necesitendist,dist-runtimey cachés de paquete sembrados. - Testbox
ci-check-testbox.ymlpara comprobaciones de código fuente, Vitest dirigido, comprobaciones de límite de paquete o líneas de Docker enfocadas. - Comandos dirigidos solo en estación de trabajo para sondas pequeñas de formato/estático/unidad.
Evita largas ejecuciones de Docker de paquete desde un árbol de trabajo disperso desactualizado. Si la sincronización de Testbox reporta cientos de archivos cambiados o comienza a eliminar entradas de paquete, detente y prepara una caja nueva desde main actual, o cambia a Aceptación de Paquete.
Línea Base Existente
Ejecuta o verifica estos antes de inventar nueva cobertura:
OPENCLAW_TESTBOX=1 pnpm check:changed
pnpm run test:extensions:package-boundary:canary
pnpm run test:extensions:package-boundary:compile
pnpm test:docker:plugins
OPENCLAW_PLUGINS_E2E_CLAWHUB=0 pnpm test:docker:plugins
pnpm test:docker:plugin-update
Para pruebas completas de instalación/desinstalación empaquetadas, fragmenta el barrido empaquetado:
OPENCLAW_BUNDLED_PLUGIN_SWEEP_TOTAL=8 \
OPENCLAW_BUNDLED_PLUGIN_SWEEP_INDEX=<0-7> \
pnpm test:docker:bundled-plugin-install-uninstall
Este ejemplo particiona el inventario de plugins del paquete seleccionado en fragmentos 0-7. Los plugins de QA privados son solo en modo fuente a menos que un paquete los incluya explícitamente.
Matriz de Confianza
Usa esta matriz para la aprobación previa al lanzamiento. Registra aprobado/fallido, URL de ejecución/ID de Testbox, SHA/versión del paquete y razón de salteo de live.
| Superficie | Prueba | Runner preferido |
|---|---|---|
| Artefacto de paquete | Aceptación de Paquete suite_profile=package o líneas personalizadas | GitHub Actions |
| Ciclo de vida empaquetado | Fragmentado test:docker:bundled-plugin-install-uninstall | Testbox o Docker de lanzamiento |
| Plugins externos | test:docker:plugins y plugins-offline | Testbox/aceptación de paquete |
| Actualización sin operación | test:docker:plugin-update | Testbox/aceptación de paquete |
| Doctor/fix | configs erróneas sembradas + doctor --fix --non-interactive | nuevo arnés Docker/Testbox |
| Config round-trip | config set/get, inspeccionar, doctor, recargar, hash diff | nuevo arnés Docker/Testbox |
| Arranque de gateway | HOME limpio, grupos de plugins habilitados/deshabilitados, JSON de estado | nuevo arnés Docker/Testbox |
| Compatibilidad con SDK | directorio, tgz y file: plugins externos usando subrutas SDK | test:docker:plugins más nuevo smoke |
| Semi-activo | sondas de proveedor/canal redactadas solo para env presente | Líneas live de Testbox |
Plan de Aceptación de Paquete
La Validación Completa de Lanzamiento posee la calificación final de candidato con Q=C y los tarballs exactos de publicación. Usa Aceptación de Paquete independiente para diagnósticos o confianza posterior a la publicación, no como reemplazo de la calificación de candidato:
gh workflow run package-acceptance.yml \
--repo openclaw/openclaw \
--ref main \
-f workflow_ref=main \
-f source=ref \
-f package_ref=<branch-or-sha> \
-f suite_profile=custom \
-f docker_lanes='plugins-offline plugin-update doctor-switch update-channel-switch config-reload mcp-channels npm-onboard-channel-agent' \
-f telegram_mode=mock-openai
Usa source=npm -f package_spec=openclaw@beta para pruebas de beta publicado. Estas ejecuciones independientes de diagnóstico/confianza pueden usar el código de arnés actual de confianza; la calificación de candidato debe retener el arnés congelado del candidato.
Para la publicación compartida de extended-stable, requiere la Validación Completa de Lanzamiento de destino exacto desde el arnés release-ci/* propiedad del candidato admitido en Q=C, con herramientas de admisión y publicación separadas. Los productores directos de rama canónica o main no satisfacen al editor protegido. La Aceptación de Paquete es un smoke de selector posterior a la publicación:
gh workflow run package-acceptance.yml \
--repo openclaw/openclaw \
--ref main \
-f workflow_ref=main \
-f source=npm \
-f package_spec=openclaw@extended-stable \
-f suite_profile=package \
-f telegram_mode=mock-openai
Registra la versión resuelta. Aún verifica cada paquete y selector en el inventario all-publishable de la etiqueta; un smoke no es una lectura de registro.
Cualificación de Artefacto npm de Plugin
Para un candidato a publicación, la Validación Completa de Lanzamiento posee la cualificación del artefacto npm del plugin. Proporciona su selección de publicación en el despacho; el padre de todos los grupos invoca plugin-npm-release.yml en modo solo artefacto contra el SHA de Lanzamiento exacto, requiere una lectura correcta del tarball y registra el descriptor agregado inmutable en publicationArtifacts.pluginNpm. La Preparación del Lanzamiento y la publicación deben adoptar ese descriptor exacto en lugar de reempaquetar plugins.
Usa un pre-vuelo de flujo de trabajo de confianza independiente solo para un diagnóstico enfocado o una reparación de plugin seleccionado que esté fuera de un candidato de publicación regular:
release_sha="$(git rev-parse origin/release/2026.7.1)"
gh workflow run plugin-npm-release.yml \
--repo openclaw/openclaw \
--ref main \
-f preflight_only=true \
-f publish_scope=selected \
-f plugins=@openclaw/meta-provider \
-f ref="${release_sha}" \
-f npm_dist_tag=default
No pases release_publish_run_id. Requiere que el flujo de trabajo termine verify_plugin_npm_preflight exitosamente. Registra la URL de ejecución, SHA del flujo de trabajo y SHA de la fuente. El flujo de trabajo primero crea el artefacto de preparación/lectura plugin-npm-package-source-<source-sha>-<extension-id> que contiene npm-pack.json, preflight-manifest.json y el tarball. Luego sube el artefacto de consumidor final plugin-npm-package-<extension-id>-<version>-<route>-<run-id>-<attempt> que contiene el tarball y plugin-publication-manifest.json.
Registra el nombre del artefacto final y el resumen por separado. El manifiesto usa openclaw.plugin-publication-artifact/v1 y registra el SHA objetivo, hashes del manifiesto del paquete, ruta y política de publicación, y hashes e inventario del tarball. Esta prueba independiente es solo de validación; no autoriza ni prepara la publicación y no puede reemplazar el descriptor vinculado al manifiesto de la Validación Completa de Lanzamiento. El inventario de artefactos, en lugar del árbol fuente desempaquetado, es el límite de seguridad y contenido del paquete: los fixtures solo de fuente son irrelevantes. Las rutas de prueba y fixture propiedad del paquete fuera de los activos de ejecución y habilidad enviados fallan la cualificación; el tiempo de ejecución enviado permanece escaneado por seguridad. Los node_modules empaquetados se quedan con evidencia de dependencia en lugar de política de código fuente del plugin. La comprobación OIDC separada trusted_publisher_preflight=true requiere una etiqueta de despacho protegida release-publish/<tooling-sha12>-<epoch> y se ejecuta en npm-publish. La publicación real también requiere esa etiqueta de herramientas; un despacho humano directo espera su trabajo de aprobación npm-release antes de publicar.
Para una versión ya publicada, requiere que dist.integrity y dist.shasum de npm coincidan con el tarball verificado. Trata solo dist-tags faltantes o demostrablemente más antiguos como reparables; selectores más nuevos o no comparables son un bloqueador.
Plan de Nuevo Arnés de Testbox
Si se necesita más certeza, agrega o ejecuta una línea de Docker plugin-lifecycle-matrix que use un tarball de paquete y listas de plugins fragmentadas. Por plugin:
- Comienza con un
HOMElimpio. - Captura
plugins list --json. plugins install <id>.plugins inspect <id> --json.plugins disable <id>, luego afirma visibilidad deshabilitada.plugins enable <id>, excepto plugins que requieren config sin config.plugins registry --refresh.doctor --non-interactive.plugins uninstall <id> --force.- Afirma que el valor
plugins.entriesdel plugin es exactamente{ enabled: false }, mientras que sus entradas allow/deny, registro de instalación, directorio administrado y rutas de carga de tiempo de ejecución empaquetadas han desaparecido. Usa las expectativas de desinstalación calificadas por fuente del arnés existente para objetivos históricos. - Afirma que los diagnósticos no contienen
level: "error"y que la salida redacta valores que parecen secretos.
Mantén memory-lancedb especial: requiere config. Primero afirma que la instalación no lo habilita sin config incrustada, luego ejecuta un segundo caso configurado.
Matriz de Doctor/Fix
Siembra estados incorrectos y requiere que doctor --fix --non-interactive los repare, luego ejecuta doctor nuevamente y requiere idempotencia:
plugins.allowobsoletoplugins.entriesobsoleto- config de canal obsoleto para plugin de canal faltante
plugins.entries.<id>.configinválido- ruta empaquetada empaquetada en
plugins.load.paths plugins.installsheredado- config de canal/plugin deshabilitado que no debe preparar dependencias de tiempo de ejecución
- árbol de paquete global propiedad de root que debe permanecer sin modificar
Matriz de Arranque de Gateway
Inicia OpenClaw empaquetado en Docker con estado limpio:
- plugins de proveedor habilitados, sin credenciales: listo con advertencias, sin bloqueo
- plugins de canal configurados como deshabilitados: sin dependencias de tiempo de ejecución preparadas
- plugins de activación de inicio habilitados: listo y reflejado en estado
- config de plugin único inválido: plugin incorrecto saltado/puesto en cuarentena, otros permanecen
Afirma:
- gateway alcanza estado listo
openclaw status --jsonincluye diagnósticos de pluginsopenclaw plugins inspect --all --jsones analizable- el árbol del paquete no se muta
- los registros no contienen tokens sin procesar
Representantes de Config Round-Trip
Usa familias de plugins representativas en lugar de cada plugin para config round-trip profundo:
- proveedores:
openai,anthropic,mistral,openrouter - canales:
telegram,discord,slack,whatsapp - memoria:
memory-lancedb - característica/tiempo de ejecución:
browser,acpx,tokenjuice
Para cada representante:
- Escribe config a través de CLI cuando sea posible.
- Léela de vuelta a través de
config geto JSON. - Ejecuta
plugins inspect. - Ejecuta
doctor --non-interactive. - Desencadena la recarga de config del gateway si corresponde.
- Compara el hash de config antes/después de comandos sin operación.
Smoke de SDK Externo
En una línea de Docker de paquete, crea pequeños plugins externos e instálalos desde:
- directorio local
.tgz- especificación npm
file:
Cubre formas CJS y ESM, más al menos un plugin que importe subrutas enfocadas de openclaw/plugin-sdk/*. Afirma que plugins inspect ve su herramienta, método de gateway, comando CLI o servicio.
Reglas de Sondas Semi-Activas
Antes del trabajo semi-activo, busca las env permitidas en Testbox y genera una matriz de disponibilidad redactada: presente/ausente solo, nunca valores.
Solo ejecuta sondas para credenciales que existan. Prefiere sondas de autenticación/catálogo/estado sobre enviar mensajes visibles para el usuario. Si una sonda podría contactar a un usuario, canal o espacio de trabajo externo, detente y pregunta al usuario.
Reporte
Reporta en esta forma:
paquete/ref:
ids de tbx / urls de ejecución:
matriz:
ciclo de vida empaquetado:
aceptación de paquete:
doctor/fix:
arranque de gateway:
config round-trip:
sdk externo:
semi-activo:
fallos:
salteos:
próxima brecha de mayor valor:
Di claramente cuando un fallo sea daño de sincronización/env de Testbox en lugar de comportamiento del producto, y pruébalo con una re-ejecución limpia o una comparación con main actual.