doctor e continuare a installare, caricare, aggiornare e disinstallare
plugin dalle sorgenti supportate.
Per la mappa più ampia del runner di test, vedi Testing. Per le chiavi dei provider live
e le suite che accedono alla rete, vedi Testing live.
Cosa proteggiamo
I test di aggiornamento e dei plugin proteggono questi contratti:- Un tarball di pacchetto è completo, ha un
dist/postinstall-inventory.jsonvalido e non dipende da file del repository non impacchettati. - Un utente può passare da un pacchetto pubblicato più vecchio al pacchetto candidato senza perdere configurazione, agenti, sessioni, workspace, allowlist dei plugin o configurazione dei canali.
openclaw doctor --fix --non-interactivepossiede i percorsi di pulizia e riparazione legacy. L’avvio non dovrebbe accumulare migrazioni di compatibilità nascoste per lo stato obsoleto dei plugin.- Le installazioni dei plugin funzionano da directory locali, repository git, pacchetti npm e dal percorso del registro ClawHub.
- Le dipendenze npm dei plugin vengono installate in un progetto npm gestito per ciascun plugin, analizzate prima dell’attendibilità e rimosse tramite npm durante la disinstallazione, in modo che le dipendenze hoistate non restino.
- L’aggiornamento dei plugin è stabile quando non è cambiato nulla: record di installazione, sorgente risolta, layout delle dipendenze installate e stato abilitato restano intatti.
Prova locale durante lo sviluppo
Inizia in modo mirato:release:check esegue controlli di deriva su configurazione/documentazione/API, scrive l’inventario dist
del pacchetto, esegue npm pack --dry-run, rifiuta file impacchettati vietati, installa
il tarball in un prefisso temporaneo, esegue postinstall ed effettua uno smoke test degli entrypoint dei canali
inclusi.
Lane Docker
Le lane Docker sono la prova a livello di prodotto. Installano o aggiornano un pacchetto reale dentro container Linux e verificano il comportamento tramite comandi CLI, avvio del Gateway, probe HTTP, stato RPC e stato del filesystem. Usa lane mirate durante l’iterazione:test:docker:pluginsvalida lo smoke test di installazione dei plugin, le installazioni da cartella locale, il comportamento di skip dell’aggiornamento da cartella locale, le cartelle locali con dipendenze preinstallate, le installazioni di pacchettifile:, le installazioni git con esecuzione CLI, gli aggiornamenti di riferimenti git mobili, le installazioni da registro npm con dipendenze transitive hoistate, i no-op dell’aggiornamento npm, il rifiuto di metadati di pacchetti npm malformati, le installazioni da fixture ClawHub locale e i no-op di aggiornamento, il comportamento di aggiornamento del marketplace e l’abilitazione/ispezione del bundle Claude. ImpostaOPENCLAW_PLUGINS_E2E_CLAWHUB=0per mantenere il blocco ClawHub ermetico/offline.test:docker:plugin-lifecycle-matrixinstalla il pacchetto candidato in un container vuoto, esegue un plugin npm attraverso installazione, ispezione, disabilitazione, abilitazione, upgrade esplicito, downgrade esplicito e disinstallazione dopo aver eliminato il codice del plugin. Registra metriche RSS e CPU per ogni fase.test:docker:plugin-updatevalida che un plugin installato invariato non venga reinstallato né perda metadati di installazione duranteopenclaw plugins update.test:docker:upgrade-survivorinstalla il tarball candidato sopra una fixture sporca di vecchio utente, esegue l’aggiornamento del pacchetto più il doctor non interattivo, quindi avvia un Gateway loopback e controlla la conservazione dello stato.test:docker:published-upgrade-survivorinstalla prima una baseline pubblicata, la configura tramite una ricettaopenclaw config setincorporata, la aggiorna al tarball candidato, esegue doctor, controlla la pulizia legacy, avvia il Gateway ed esegue probe su/healthz,/readyze stato RPC.test:docker:update-restart-authinstalla il pacchetto candidato, avvia un Gateway gestito con autenticazione token, rimuove le env di autenticazione Gateway del chiamante peropenclaw update --yes --jsone richiede che il comando di aggiornamento candidato riavvii il Gateway prima dei probe normali.test:docker:update-migrationè la lane di aggiornamento pubblicato con molta pulizia. Parte da uno stato utente configurato in stile Discord/Telegram, esegue il doctor della baseline in modo che le dipendenze dei plugin configurati abbiano la possibilità di materializzarsi, inserisce residui legacy delle dipendenze plugin per un plugin pacchettizzato configurato, aggiorna al tarball candidato e richiede al doctor post-aggiornamento di rimuovere le radici legacy delle dipendenze.
base, feishu-channel, bootstrap-persona,
plugin-deps-cleanup, configured-plugin-installs,
stale-source-plugin-shadow, tilde-log-path e versioned-runtime-deps. Nelle esecuzioni aggregate,
OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues si espande a tutti gli scenari con forma di
issue segnalata, inclusa la migrazione di installazione dei plugin configurati.
La migrazione completa degli aggiornamenti è intenzionalmente separata dalla CI di rilascio completo. Usa il
workflow manuale Update Migration quando la domanda di rilascio è “ogni
rilascio stabile pubblicato da 2026.4.23 in poi può aggiornarsi a questo candidato e
ripulire i residui delle dipendenze dei plugin?”:
Accettazione del pacchetto
L’Accettazione del pacchetto è il gate del pacchetto nativo di GitHub. Risolve un pacchetto candidato in un tarballpackage-under-test, registra versione e SHA-256, quindi
esegue lane Docker E2E riutilizzabili contro esattamente quel tarball. Il riferimento dell’harness del workflow
è separato dal riferimento della sorgente del pacchetto, quindi la logica di test corrente può validare
rilasci attendibili più vecchi.
Sorgenti candidate:
source=npm: validaopenclaw@beta,openclaw@latesto una versione pubblicata esatta.source=ref: impacchetta un branch, tag o commit attendibile con l’harness corrente selezionato.source=url: valida un tarball HTTPS pubblico conpackage_sha256obbligatorio. Questo percorso rifiuta credenziali URL, porte HTTPS non predefinite, nomi host o risultati DNS/IP privati/interni, spazio IP per usi speciali e redirect non sicuri.source=trusted-url: valida un tarball HTTPS conpackage_sha256etrusted_source_idobbligatori rispetto alla policy posseduta dai maintainer in.github/package-trusted-sources.json. Usa questo per mirror enterprise/privati invece di indeboliresource=urlcon uno switch allow-private a livello di input. L’autenticazione bearer, quando configurata dalla policy, usa il secret fissoOPENCLAW_TRUSTED_PACKAGE_TOKEN.source=artifact: riutilizza un tarball caricato da un’altra esecuzione di Actions.
source=artifact per impostazione predefinita, creato dallo
SHA di rilascio risolto. Per la prova post-pubblicazione, passa
package_acceptance_package_spec=openclaw@YYYY.M.PATCH così la stessa matrice di upgrade
punta invece al pacchetto npm rilasciato.
I controlli di rilascio chiamano l’Accettazione del pacchetto con il set package/update/restart/plugin:
last-stable-4 si risolve nei quattro rilasci stabili OpenClaw più recenti pubblicati su npm.
L’accettazione del pacchetto di rilascio fissa 2026.4.23 come primo limite di compatibilità
per l’aggiornamento dei plugin, 2026.5.2 come limite di churn dell’architettura plugin e
2026.4.15 come baseline di aggiornamento pubblicato più vecchia della serie 2026.4.1x; il resolver
deduplica i pin già presenti nei quattro più recenti. Per una copertura esaustiva della migrazione degli
aggiornamenti pubblicati, usa all-since-2026.4.23 nel workflow separato Update
Migration invece della CI di rilascio completo. release-history resta
disponibile per un campionamento manuale più ampio quando vuoi anche l’ancoraggio legacy precedente alla data.
Quando vengono selezionate più baseline survivor di upgrade pubblicato, il workflow Docker
riutilizzabile divide ogni baseline nel proprio job runner mirato. Ogni shard di
baseline esegue comunque il set di scenari selezionato, ma log e artefatti restano
per baseline e il tempo totale è limitato dallo shard più lento invece che da un grande
job seriale.
Esegui manualmente un profilo di pacchetto durante la validazione di un candidato prima del rilascio:
suite_profile=product quando la domanda di rilascio include canali MCP,
pulizia cron/subagent, ricerca web OpenAI o OpenWebUI. Usa suite_profile=full
solo quando serve la copertura Docker completa del percorso di rilascio.
Impostazione predefinita di rilascio
Per i candidati al rilascio, lo stack di prova predefinito è:pnpm check:changedepnpm test:changedper regressioni a livello sorgente.pnpm release:checkper l’integrità dell’artefatto del pacchetto.- Profilo
packagedi Accettazione del pacchetto o le lane personalizzate di pacchetto dei controlli di rilascio per i contratti install/update/restart/plugin. - Controlli di rilascio cross-OS per installer, onboarding e comportamento di piattaforma specifici del sistema operativo.
- Suite live solo quando la superficie modificata tocca il comportamento di provider o servizi ospitati.
Compatibilità legacy
La tolleranza di compatibilità è stretta e limitata nel tempo:- I pacchetti fino a
2026.4.25, inclusi2026.4.25-beta.*, possono tollerare lacune nei metadati del pacchetto già rilasciate nell’Accettazione del pacchetto. - Il pacchetto pubblicato
2026.4.26può avvisare per file di stamp dei metadati di build locale già rilasciati. - I pacchetti successivi devono soddisfare i contratti moderni. Le stesse lacune falliscono invece di generare avvisi o venire saltate.
upgrade-survivor, published-upgrade-survivor o
update-restart-auth quando il comando di aggiornamento possiede il riavvio.
Aggiungere copertura
Quando modifichi il comportamento di aggiornamento o dei plugin, aggiungi copertura al livello più basso che può fallire per il motivo corretto:- Logica di percorso puro o di metadati: test unitario accanto al sorgente.
- Comportamento dell’inventario del pacchetto o dei file impacchettati: test
package-dist-inventoryo checker del tarball. - Comportamento di installazione/aggiornamento della CLI: asserzione della lane Docker o fixture.
- Comportamento di migrazione di una release pubblicata: scenario
published-upgrade-survivor. - Comportamento di riavvio di proprietà dell’aggiornamento:
update-restart-auth. - Comportamento della sorgente del registro/pacchetto: fixture
test:docker:pluginso server fixture ClawHub. - Comportamento del layout delle dipendenze o della pulizia: asserisci sia
l’esecuzione runtime sia il confine del filesystem. Le dipendenze npm possono
essere hoistate all’interno del progetto npm gestito del plugin, quindi i test
devono dimostrare che quel progetto viene scansionato/pulito invece di
presupporre solo l’albero
node_moduleslocale del pacchetto del plugin.
Triage degli errori
Inizia dall’identità dell’artefatto:- Riepilogo
resolve_packagedi Package Acceptance: sorgente, versione, SHA-256 e nome dell’artefatto. - Artefatti Docker:
.artifacts/docker-tests/**/summary.json,failures.json, log delle lane e comandi di riesecuzione. - Riepilogo upgrade survivor:
.artifacts/upgrade-survivor/summary.json, incluse versione di baseline, versione candidata, scenario, tempistiche delle fasi e passaggi della ricetta.