doctor e ainda instalar, carregar, atualizar e desinstalar
Plugins das fontes compatíveis.
Para o mapa mais amplo do executor de testes, consulte Testes. Para chaves de provedores
ao vivo e suítes que acessam a rede, consulte Testes ao vivo.
O que protegemos
Os testes de atualização e Plugins protegem estes contratos:- Um tarball de pacote está completo, tem um
dist/postinstall-inventory.jsonválido e não depende de arquivos do repositório desempacotados. - Um usuário pode migrar de um pacote publicado mais antigo para o pacote candidato sem perder configuração, agentes, sessões, workspaces, allowlists de Plugins ou configuração de canais.
openclaw doctor --fix --non-interactiveé responsável por caminhos legados de limpeza e reparo. A inicialização não deve ganhar migrações de compatibilidade ocultas para estado obsoleto de Plugins.- Instalações de Plugins funcionam a partir de diretórios locais, repositórios git, pacotes npm e o caminho de registro do ClawHub.
- Dependências npm de Plugins são instaladas em um projeto npm gerenciado por Plugin, verificadas antes da confiança e removidas por meio do npm durante a desinstalação para que dependências içadas não permaneçam.
- A atualização de Plugins é estável quando nada mudou: registros de instalação, fonte resolvida, layout de dependências instaladas e estado habilitado permanecem intactos.
Prova local durante o desenvolvimento
Comece de forma estreita:release:check executa verificações de divergência de configuração/docs/API, grava o inventário
dist do pacote, executa npm pack --dry-run, rejeita arquivos empacotados proibidos, instala
o tarball em um prefixo temporário, executa o postinstall e faz smoke test dos entrypoints
dos canais agrupados.
Faixas Docker
As faixas Docker são a prova em nível de produto. Elas instalam ou atualizam um pacote real dentro de contêineres Linux e validam o comportamento por meio de comandos CLI, inicialização do Gateway, probes HTTP, status RPC e estado do sistema de arquivos. Use faixas focadas durante a iteração:test:docker:pluginsvalida smoke de instalação de Plugins, instalações de pastas locais, comportamento de pular atualização de pastas locais, pastas locais com dependências pré-instaladas, instalações de pacotesfile:, instalações git com execução de CLI, atualizações de refs móveis em git, instalações de registro npm com dependências transitivas içadas, no-ops de atualização npm, rejeição de metadados malformados de pacotes npm, instalações de fixture local do ClawHub e no-ops de atualização, comportamento de atualização do marketplace e habilitação/inspeção do pacote Claude. DefinaOPENCLAW_PLUGINS_E2E_CLAWHUB=0para manter o bloco ClawHub hermético/offline.test:docker:plugin-lifecycle-matrixinstala o pacote candidato em um contêiner vazio, executa um Plugin npm por instalação, inspeção, desabilitação, habilitação, upgrade explícito, downgrade explícito e desinstalação após excluir o código do Plugin. Ele registra métricas de RSS e CPU para cada fase.test:docker:plugin-updatevalida que um Plugin instalado inalterado não reinstala nem perde metadados de instalação duranteopenclaw plugins update.test:docker:upgrade-survivorinstala o tarball candidato sobre uma fixture suja de usuário antigo, executa atualização de pacote mais doctor não interativo, depois inicia um Gateway local loopback e verifica a preservação do estado.test:docker:published-upgrade-survivorprimeiro instala uma linha de base publicada, configura-a por meio de uma receitaopenclaw config setembutida, atualiza-a para o tarball candidato, executa doctor, verifica a limpeza legada, inicia o Gateway e sonda/healthz,/readyze status RPC.test:docker:update-restart-authinstala o pacote candidato, inicia um Gateway gerenciado com autenticação por token, remove as envs de autenticação de gateway do chamador paraopenclaw update --yes --jsone exige que o comando de atualização candidato reinicie o Gateway antes dos probes normais.test:docker:update-migrationé a faixa de atualização publicada com foco intenso em limpeza. Ela começa a partir de um estado de usuário configurado no estilo Discord/Telegram, executa o doctor de linha de base para que dependências de Plugins configurados tenham chance de se materializar, semeia resíduos legados de dependências de Plugins para um Plugin empacotado configurado, atualiza para o tarball candidato e exige que o doctor pós-atualização remova as raízes legadas de dependências.
base, feishu-channel, bootstrap-persona,
plugin-deps-cleanup, configured-plugin-installs,
stale-source-plugin-shadow, tilde-log-path e versioned-runtime-deps. Em execuções agregadas,
OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues expande para todos os cenários
com formato de problemas relatados, incluindo a migração de instalação de Plugin configurado.
A migração completa de atualização é intencionalmente separada do CI de lançamento completo. Use o
workflow manual Update Migration quando a pergunta de lançamento for “toda
versão estável publicada a partir de 2026.4.23 consegue atualizar para este candidato e
limpar resíduos de dependências de Plugins?”:
Aceitação de Pacote
A Aceitação de Pacote é o gate de pacote nativo do GitHub. Ela resolve um pacote candidato em um tarballpackage-under-test, registra versão e SHA-256, depois
executa faixas Docker E2E reutilizáveis contra esse tarball exato. A ref do harness
do workflow é separada da ref de origem do pacote, para que a lógica de teste atual possa validar
lançamentos confiáveis mais antigos.
Fontes candidatas:
source=npm: validaopenclaw@beta,openclaw@latestou uma versão publicada exata.source=ref: empacota uma branch, tag ou commit confiável com o harness atual selecionado.source=url: valida um tarball HTTPS público compackage_sha256obrigatório. Este caminho rejeita credenciais de URL, portas HTTPS não padrão, hostnames ou resultados DNS/IP privados/internos, espaço de IP de uso especial e redirecionamentos inseguros.source=trusted-url: valida um tarball HTTPS compackage_sha256etrusted_source_idobrigatórios contra a política mantida pelos mantenedores em.github/package-trusted-sources.json. Use isto para mirrors empresariais/privados em vez de enfraquecersource=urlcom uma opção de entrada para permitir privado. A autenticação bearer, quando configurada por política, usa o segredo fixoOPENCLAW_TRUSTED_PACKAGE_TOKEN.source=artifact: reutiliza um tarball enviado por outra execução de Actions.
source=artifact por padrão, criada a partir do
SHA de lançamento resolvido. Para prova pós-publicação, passe
package_acceptance_package_spec=openclaw@YYYY.M.PATCH para que a mesma matriz de upgrade
aponte para o pacote npm enviado.
As verificações de lançamento chamam a Aceitação de Pacote com o conjunto package/update/restart/plugin:
last-stable-4 resolve para as quatro versões estáveis mais recentes do OpenClaw
publicadas no npm. A aceitação de pacote de lançamento fixa 2026.4.23 como o primeiro limite
de compatibilidade de atualização de Plugins, 2026.5.2 como um limite de rotatividade da arquitetura
de Plugins e 2026.4.15 como uma linha de base mais antiga de atualização publicada de 2026.4.1x; o resolvedor
deduplica pins que já estão nas quatro mais recentes. Para cobertura exaustiva de migração
de atualização publicada, use all-since-2026.4.23 no workflow Update Migration
separado, em vez do CI de lançamento completo. release-history permanece
disponível para amostragem manual mais ampla quando você também quiser a âncora legada
anterior à data.
Quando várias linhas de base de survivor de upgrade publicado são selecionadas, o workflow Docker
reutilizável fragmenta cada linha de base em seu próprio job de runner direcionado. Cada
fragmento de linha de base ainda executa o conjunto de cenários selecionado, mas logs e artefatos ficam
por linha de base e o tempo total é limitado pelo fragmento mais lento, em vez de um grande
job serial.
Execute um perfil de pacote manualmente ao validar um candidato antes do lançamento:
suite_profile=product quando a pergunta de lançamento incluir canais MCP,
limpeza de cron/subagentes, busca web da OpenAI ou OpenWebUI. Use suite_profile=full
somente quando precisar de cobertura Docker completa do caminho de lançamento.
Padrão de lançamento
Para candidatos a lançamento, a pilha de prova padrão é:pnpm check:changedepnpm test:changedpara regressões no nível do código-fonte.pnpm release:checkpara integridade do artefato de pacote.- Perfil
packageda Aceitação de Pacote ou as faixas de pacote customizadas de release-check para contratos de instalação/atualização/reinicialização/Plugins. - Verificações de lançamento entre sistemas operacionais para comportamento específico de instalador, onboarding e plataforma por SO.
- Suítes ao vivo somente quando a superfície alterada toca comportamento de provedor ou serviço hospedado.
Compatibilidade legada
A tolerância de compatibilidade é estreita e limitada no tempo:- Pacotes até
2026.4.25, incluindo2026.4.25-beta.*, podem tolerar lacunas de metadados de pacote já enviadas na Aceitação de Pacote. - O pacote
2026.4.26publicado pode avisar sobre arquivos de carimbo de metadados de build local já enviados. - Pacotes posteriores devem satisfazer os contratos modernos. As mesmas lacunas falham em vez de avisar ou pular.
upgrade-survivor, published-upgrade-survivor ou
update-restart-auth quando o comando de atualização for responsável pela reinicialização.
Adicionando cobertura
Ao alterar comportamento de atualização ou Plugins, adicione cobertura na camada mais baixa que possa falhar pelo motivo correto:- Lógica pura de caminho ou metadados: teste unitário junto ao código-fonte.
- Inventário de pacote ou comportamento de arquivos empacotados: teste
package-dist-inventoryou verificador de tarball. - Comportamento de instalação/atualização da CLI: asserção da lane do Docker ou fixture.
- Comportamento de migração de versão publicada: cenário
published-upgrade-survivor. - Comportamento de reinicialização controlado por atualização:
update-restart-auth. - Comportamento de fonte de registro/pacote: fixture
test:docker:pluginsou servidor de fixture do ClawHub. - Comportamento de layout ou limpeza de dependências: valide tanto a execução em runtime
quanto o limite do sistema de arquivos. Dependências npm podem ser içadas dentro do
projeto npm gerenciado do Plugin, então os testes devem provar que esse projeto é verificado/limpo
em vez de pressupor apenas a árvore
node_moduleslocal ao pacote do Plugin.
Triagem de falhas
Comece pela identidade do artefato:- Resumo
resolve_packageda Aceitação de Pacote: fonte, versão, SHA-256 e nome do artefato. - Artefatos do Docker:
.artifacts/docker-tests/**/summary.json,failures.json, logs da lane e comandos de reexecução. - Resumo do sobrevivente de upgrade:
.artifacts/upgrade-survivor/summary.json, incluindo versão de baseline, versão candidata, cenário, tempos das fases e etapas da receita.