Testing
Testen: updates en plugins
Dit is de specifieke checklist voor update- en Plugin-validatie. Het doel is
eenvoudig: bewijzen dat het installeerbare pakket echte gebruikersstatus kan
bijwerken, verouderde legacy-status via doctor kan repareren, en nog steeds
plugins uit de ondersteunde bronnen kan installeren, laden, bijwerken en
verwijderen.
Voor de bredere kaart van testrunners, zie Testen. Voor live provider-sleutels en suites die het netwerk raken, zie Live testen.
Wat we beschermen
Update- en Plugin-tests beschermen deze contracten:
- Een pakkettarball is compleet, heeft een geldige
dist/postinstall-inventory.json, en is niet afhankelijk van uitgepakte repobestanden. - Een gebruiker kan van een ouder gepubliceerd pakket naar het kandidaatpakket overstappen zonder config, agents, sessies, workspaces, Plugin-allowlists of kanaalconfig te verliezen.
openclaw doctor --fix --non-interactiveis eigenaar van legacy-opruiming en reparatiepaden. Startup mag geen verborgen compatibiliteitsmigraties krijgen voor verouderde Plugin-status.- Plugin-installaties werken vanuit lokale mappen, git-repo's, npm-pakketten en het registerpad van ClawHub.
- npm-afhankelijkheden van Plugins worden geïnstalleerd in de beheerde npm-root, vóór trust gescand, en tijdens deïnstallatie via npm verwijderd zodat gehesen afhankelijkheden niet blijven hangen.
- Plugin-update is stabiel wanneer er niets is gewijzigd: installatierecords, opgeloste bron, geïnstalleerde afhankelijkheidslayout en ingeschakelde status blijven intact.
Lokaal bewijs tijdens ontwikkeling
Begin smal:
pnpm changed:lanes --json
pnpm check:changed
pnpm test:changed
Voer voor wijzigingen aan Plugin-installatie, deïnstallatie, afhankelijkheden of pakket-inventaris ook de gerichte tests uit die de bewerkte overgang afdekken:
pnpm test src/plugins/uninstall.test.ts src/infra/package-dist-inventory.test.ts test/scripts/package-acceptance-workflow.test.ts
Voordat een pakket-Docker-lane een tarball gebruikt, bewijs je het pakketartefact:
pnpm release:check
release:check voert driftcontroles voor config/docs/API uit, schrijft de
pakketdist-inventaris, voert npm pack --dry-run uit, weigert verboden
ingepakte bestanden, installeert de tarball in een tijdelijke prefix, voert
postinstall uit en rooktest gebundelde kanaal-entrypoints.
Docker-lanes
De Docker-lanes zijn het bewijs op productniveau. Ze installeren of updaten een echt pakket in Linux-containers en controleren gedrag via CLI-opdrachten, Gateway-startup, HTTP-probes, RPC-status en bestandssysteemstatus.
Gebruik gerichte lanes tijdens iteratie:
pnpm test:docker:plugins
pnpm test:docker:plugin-lifecycle-matrix
pnpm test:docker:plugin-update
pnpm test:docker:upgrade-survivor
pnpm test:docker:published-upgrade-survivor
pnpm test:docker:update-restart-auth
pnpm test:docker:update-migration
Belangrijke lanes:
test:docker:pluginsvalideert rooktests voor Plugin-installatie, lokale mapinstallaties, oversla-gedrag bij lokale mapupdates, lokale mappen met vooraf geïnstalleerde afhankelijkheden,file:-pakketinstallaties, git-installaties met CLI-uitvoering, git-updates voor bewegende refs, npm-registerinstallaties met gehesen transitieve afhankelijkheden, npm-update-no-ops, lokale ClawHub-fixture-installaties en update-no-ops, marketplace-updategedrag en Claude-bundel inschakelen/inspecteren. StelOPENCLAW_PLUGINS_E2E_CLAWHUB=0in om het ClawHub-blok hermetisch/offline te houden.test:docker:plugin-lifecycle-matrixinstalleert het kandidaatpakket in een kale container, voert een npm-Plugin door installatie, inspectie, uitschakelen, inschakelen, expliciete upgrade, expliciete downgrade en deïnstallatie na het verwijderen van de Plugin-code. Het logt RSS- en CPU-metrics voor elke fase.test:docker:plugin-updatevalideert dat een ongewijzigde geïnstalleerde Plugin niet opnieuw installeert of installatiemetadata verliest tijdensopenclaw plugins update.test:docker:upgrade-survivorinstalleert de kandidaat-tarball over een vuile oude-gebruiker-fixture, voert pakketupdate plus niet-interactieve doctor uit, start daarna een local loopback-Gateway en controleert statusbehoud.test:docker:published-upgrade-survivorinstalleert eerst een gepubliceerde baseline, configureert die via een ingebakkenopenclaw config set-recept, werkt die bij naar de kandidaat-tarball, voert doctor uit, controleert legacy-opruiming, start de Gateway en probet/healthz,/readyzen RPC-status.test:docker:update-restart-authinstalleert het kandidaatpakket, start een beheerde token-auth Gateway, unset de auth-env van de caller-Gateway vooropenclaw update --yes --json, en vereist dat de kandidaat-updateopdracht de Gateway herstart vóór de normale probes.test:docker:update-migrationis de opruimingszware published-update-lane. Deze begint vanuit een geconfigureerde gebruikersstatus in Discord/Telegram-stijl, voert baseline doctor uit zodat geconfigureerde Plugin-afhankelijkheden een kans krijgen om te ontstaan, seedt legacy-Plugin-afhankelijkheidsresten voor een geconfigureerde verpakte Plugin, werkt bij naar de kandidaat-tarball, en vereist dat post-update doctor de legacy afhankelijkheidsroots verwijdert.
Nuttige published-upgrade-survivor-varianten:
[email protected] \
OPENCLAW_UPGRADE_SURVIVOR_SCENARIO=versioned-runtime-deps \
pnpm test:docker:published-upgrade-survivor
OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC=openclaw@latest \
OPENCLAW_UPGRADE_SURVIVOR_SCENARIO=bootstrap-persona \
pnpm test:docker:published-upgrade-survivor
Beschikbare scenario's zijn base, feishu-channel, bootstrap-persona,
plugin-deps-cleanup, configured-plugin-installs,
stale-source-plugin-shadow, tilde-log-path en versioned-runtime-deps. In geaggregeerde runs
breidt OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues uit naar alle
gerapporteerde issue-vormige scenario's, inclusief de geconfigureerde
Plugin-installatiemigratie.
Volledige updatemigratie is bewust gescheiden van Full Release CI. Gebruik de
handmatige workflow Update Migration wanneer de releasevraag is: "kan elke
gepubliceerde stabiele release vanaf 2026.4.23 bijwerken naar deze kandidaat en
Plugin-afhankelijkheidsresten opruimen?":
gh workflow run update-migration.yml \
--ref main \
-f workflow_ref=main \
-f package_ref=main \
-f baselines=all-since-2026.4.23 \
-f scenarios=plugin-deps-cleanup
Pakketacceptatie
Pakketacceptatie is de GitHub-native pakketgate. Deze lost één kandidaatpakket
op naar een package-under-test-tarball, legt versie en SHA-256 vast, en voert
daarna herbruikbare Docker-E2E-lanes uit tegen exact die tarball. De workflow-harness-ref
staat los van de pakketbron-ref, zodat huidige testlogica oudere vertrouwde
releases kan valideren.
Kandidaatbronnen:
source=npm: valideeropenclaw@beta,openclaw@latestof een exacte gepubliceerde versie.source=ref: pak een vertrouwde branch, tag of commit in met de geselecteerde huidige harness.source=url: valideer een HTTPS-tarball met verplichtepackage_sha256.source=artifact: hergebruik een tarball die door een andere Actions-run is geüpload.
Full Release Validation gebruikt standaard source=artifact, gebouwd vanuit de
opgeloste release-SHA. Geef voor post-publish-bewijs
[email protected] mee, zodat dezelfde
upgradematrix in plaats daarvan het verzonden npm-pakket target.
Releasecontroles roepen Pakketacceptatie aan met de pakket/update/herstart/Plugin-set:
doctor-switch update-channel-switch update-corrupt-plugin upgrade-survivor published-upgrade-survivor update-restart-auth plugins-offline plugin-update
Wanneer release-soak is ingeschakeld, geven ze ook door:
published_upgrade_survivor_baselines=last-stable-4 2026.4.23 2026.5.2 2026.4.15
published_upgrade_survivor_scenarios=reported-issues
telegram_mode=mock-openai
Dit houdt pakketmigratie, wisselen van updatekanaal, tolerantie voor corrupte beheerde Plugins, opruiming van verouderde Plugin-afhankelijkheden, offline Plugin-dekking, Plugin-updategedrag en Telegram-pakket-QA op hetzelfde opgeloste artefact, zonder dat de standaard releasepakketgate elke gepubliceerde release doorloopt.
last-stable-4 lost op naar de vier nieuwste stabiele npm-gepubliceerde
OpenClaw-releases. Releasepakketacceptatie pint 2026.4.23 als de eerste
compatibiliteitsgrens voor Plugin-updates, 2026.5.2 als grens voor churn in de
Plugin-architectuur, en 2026.4.15 als een oudere published-update-baseline van
2026.4.1x; de resolver dedupliceert pins die al in de nieuwste vier zitten. Voor
uitputtende dekking van gepubliceerde updatemigratie gebruik je
all-since-2026.4.23 in de afzonderlijke Update Migration-workflow in plaats van
Full Release CI. release-history blijft beschikbaar voor handmatige bredere
sampling wanneer je ook het legacy-anker van vóór de datum wilt.
Wanneer meerdere published-upgrade-survivor-baselines zijn geselecteerd, shardt de herbruikbare Docker-workflow elke baseline in een eigen gerichte runner-job. Elke baseline-shard voert nog steeds de geselecteerde scenarioset uit, maar logs en artefacten blijven per baseline en de wandkloktijd wordt begrensd door de traagste shard in plaats van één grote seriële job.
Voer handmatig een pakketprofiel uit wanneer je vóór release een kandidaat valideert:
gh workflow run package-acceptance.yml \
--ref main \
-f workflow_ref=main \
-f source=npm \
-f package_spec=openclaw@beta \
-f suite_profile=package \
-f published_upgrade_survivor_baselines="last-stable-4 2026.4.23 2026.5.2 2026.4.15" \
-f published_upgrade_survivor_scenarios=reported-issues \
-f telegram_mode=mock-openai
Gebruik suite_profile=product wanneer de releasevraag MCP-kanalen,
cron/subagent-opruiming, OpenAI-webzoekopdrachten of OpenWebUI omvat. Gebruik
suite_profile=full alleen wanneer je volledige Docker-dekking van het
releasepad nodig hebt.
Release-standaard
Voor releasekandidaten is de standaard bewijsstack:
pnpm check:changedenpnpm test:changedvoor regressies op bronniveau.pnpm release:checkvoor integriteit van pakketartefacten.- Pakketacceptatie met het
package-profiel of de aangepaste release-check-pakketlanes voor install/update/herstart/Plugin-contracten. - Cross-OS-releasecontroles voor OS-specifieke installer-, onboarding- en platformgedrag.
- Live suites alleen wanneer het gewijzigde oppervlak provider- of hosted-service-gedrag raakt.
Op maintainer-machines moeten brede gates en Docker/pakket-productbewijs in Testbox draaien, tenzij expliciet lokaal bewijs wordt gedaan.
Legacy-compatibiliteit
Compatibiliteitstolerantie is smal en tijdgebonden:
- Pakketten tot en met
2026.4.25, inclusief2026.4.25-beta.*, mogen al verzonden hiaten in pakketmetadata in Pakketacceptatie tolereren. - Het gepubliceerde pakket
2026.4.26mag waarschuwen voor al verzonden stampbestanden met lokale buildmetadata. - Latere pakketten moeten aan moderne contracten voldoen. Dezelfde hiaten falen in plaats van te waarschuwen of over te slaan.
Voeg geen nieuwe startupmigraties toe voor deze oude vormen. Voeg een doctor-reparatie
toe of breid die uit, en bewijs die daarna met upgrade-survivor,
published-upgrade-survivor of update-restart-auth wanneer de updateopdracht
eigenaar is van de herstart.
Dekking toevoegen
Wanneer je update- of Plugin-gedrag wijzigt, voeg je dekking toe op de laagste laag die om de juiste reden kan falen:
- Pure pad- of metadatalogica: unit-test naast de bron.
- Pakket-inventaris of packed-file-gedrag:
package-dist-inventoryof tarball-checkertest. - CLI-install/updategedrag: Docker-lane-assertie of fixture.
- Migratiegedrag van gepubliceerde releases:
published-upgrade-survivor-scenario. - Update-eigen herstartgedrag:
update-restart-auth. - Register-/pakketbrongedrag:
test:docker:plugins-fixture of ClawHub-fixture-server. - Afhankelijkheidslayout of opruimgedrag: assert zowel runtime-uitvoering als de
bestandssysteemgrens. npm-afhankelijkheden kunnen onder de beheerde npm-root
worden gehesen, dus tests moeten bewijzen dat de root wordt gescand/opgeruimd
in plaats van uit te gaan van een pakketlokale
node_modules-boom.
Houd nieuwe Docker-fixtures standaard hermetisch. Gebruik lokale fixture-registers en neppakketten, tenzij live registergedrag het punt van de test is.
Fouttriage
Begin met de artefactidentiteit:
- Samenvatting van Pakketacceptatie
resolve_package: bron, versie, SHA-256 en artefactnaam. - Docker-artefacten:
.artifacts/docker-tests/**/summary.json,failures.json, lane-logboeken en rerun-opdrachten. - Samenvatting van upgrade-survivor:
.artifacts/upgrade-survivor/summary.json, inclusief baselineversie, kandidaatversie, scenario, fasetimings en receptstappen.
Geef de voorkeur aan het opnieuw uitvoeren van de exacte mislukte lane met hetzelfde pakketartefact boven het opnieuw uitvoeren van de volledige releaseparaplu.