Testing
Testen
OpenClaw heeft drie Vitest-suites (unit/integratie, e2e, live) plus Docker- runners. Deze pagina beschrijft wat elke suite omvat, welke opdracht je voor een bepaalde workflow uitvoert, hoe livetests inloggegevens vinden en hoe je regressietests toevoegt voor praktijkproblemen met providers/modellen.
Snel aan de slag
Op de meeste dagen:
- Volledige controle (verwacht vóór pushen):
pnpm build && pnpm check && pnpm check:test-types && pnpm test - Snellere lokale uitvoering van de volledige suite op een ruim bemeten machine:
pnpm test:max - Directe Vitest-watchlus:
pnpm test:watch - Directe bestandsselectie routeert ook plugin-/kanaalpaden:
pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts - Geef bij het itereren op één fout eerst de voorkeur aan gerichte uitvoeringen.
- Door Docker ondersteunde QA-site:
pnpm qa:lab:up - Door een Linux-VM ondersteunde QA-lane:
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
Wanneer je tests wijzigt of extra zekerheid wilt:
- Informatief V8-dekkingsrapport:
pnpm test:coverage - E2E-suite:
pnpm test:e2e
Tijdelijke testmappen
Gebruik de gedeelde helpers in test/helpers/temp-dir.ts voor tijdelijke mappen
die eigendom zijn van tests, zodat het eigendom expliciet is en opschoning
binnen de testlevenscyclus blijft:
const tempDirs = useAutoCleanupTempDirTracker(afterEach); it("uses a temp workspace", () => { const workspace = tempDirs.make("openclaw-example-"); // use workspace});useAutoCleanupTempDirTracker(afterEach) biedt bewust geen handmatige
opschoningsmethode: Vitest beheert de opschoning na elke test. Oudere helpers
op lager niveau (makeTempDir, cleanupTempDirs, createTempDirTracker)
bestaan nog voor tests die niet zijn gemigreerd; vermijd nieuw gebruik ervan
en vermijd nieuwe directe aanroepen van fs.mkdtemp*, tenzij een test
expliciet het onbewerkte gedrag van tijdelijke mappen verifieert. Wanneer een
direct aangemaakte tijdelijke map echt nodig is, voeg je een controleerbare
toestemmingsopmerking met een reden toe:
// openclaw-temp-dir: allow verifies raw fs cleanup behaviorconst workspace = fs.mkdtempSync(prefix);node scripts/report-test-temp-creations.mjs rapporteert nieuwe directe
aanmaak van tijdelijke mappen en nieuw handmatig gebruik van de gedeelde
helper in toegevoegde diffregels, zonder bestaande opschoningsstijlen te
blokkeren. Het volgt dezelfde classificatie van testpaden als
scripts/changed-lanes.mjs en slaat de implementatie van de gedeelde helper
zelf over. check:changed voert dit rapport voor gewijzigde testpaden uit als
CI-signaal dat alleen waarschuwt (GitHub-waarschuwingsannotaties, geen fouten).
Live- en Docker/Parallels-workflows
Bij het debuggen van echte providers/modellen (vereist echte inloggegevens):
- Livesuite (modellen + Gateway-tool-/afbeeldingsprobes):
pnpm test:live - Eén livebestand stil gericht uitvoeren:
pnpm test:live -- src/agents/models.profiles.live.test.ts - Rapporten over runtimeprestaties: start
OpenClaw Performancemetlive_openai_candidate=truevoor een echte agentbeurt metopenai/gpt-5.6-lunaofdeep_profile=truevoor Kova-artefacten voor CPU/heap/tracering. Dagelijks geplande uitvoeringen publiceren rapporten voor de mockprovider-, deep-profile- en GPT-5.6 Luna-lanes naaropenclaw/clawgrit-reportsvanuit een afzonderlijke publicatietaak die artefacten verwerkt; ontbrekende of ongeldige authenticatie voor publicatie laat geplande uitvoeringen en uitvoeringen metprofile=releasemislukken. Handmatige uitvoeringen die geen release betreffen, behouden de GitHub-artefacten en behandelen rapportpublicatie als adviserend. Het mockproviderrapport bevat ook broncijfers voor het opstarten van de Gateway, geheugen, pluginbelasting, herhaalde hello-lussen met nepmodellen en het opstarten van de CLI. - Docker-sweep van live modellen:
pnpm test:docker:live-models- Elk geselecteerd model voert een tekstbeurt uit plus een kleine probe die
lijkt op het lezen van een bestand. Modellen waarvan de metadata
image-invoer vermeldt, voeren ook een kleine afbeeldingsbeurt uit. Schakel de extra probes uit metOPENCLAW_LIVE_MODEL_FILE_PROBE=0ofOPENCLAW_LIVE_MODEL_IMAGE_PROBE=0wanneer je providerfouten isoleert. - CI-dekking: zowel de dagelijkse
OpenClaw Scheduled Live And E2E Checksals de handmatigeOpenClaw Release Checksroepen de herbruikbare live-/E2E-workflow aan metinclude_live_suites: true, inclusief Docker-matrixtaken voor live modellen, opgesplitst per provider. - Start voor gerichte CI-heruitvoeringen
OpenClaw Live And E2E Checks (Reusable)metinclude_live_suites: trueenlive_models_only: true. - Voeg nieuwe providergeheimen met hoge signaalwaarde toe aan
scripts/ci-hydrate-live-auth.shplus.github/workflows/openclaw-live-and-e2e-checks-reusable.ymlen de geplande/release-aanroepers daarvan.
- Elk geselecteerd model voert een tekstbeurt uit plus een kleine probe die
lijkt op het lezen van een bestand. Modellen waarvan de metadata
- Native Codex-smoketest voor gekoppelde chat:
pnpm test:docker:live-codex-bind- Voert een Docker-livelane uit tegen het app-serverpad van Codex, koppelt een
synthetisch Slack-privébericht met
/codex bind, oefent/codex fasten/codex permissions, en verifieert vervolgens dat een gewoon antwoord en een afbeeldingsbijlage via de native pluginkoppeling worden gerouteerd in plaats van via ACP.
- Voert een Docker-livelane uit tegen het app-serverpad van Codex, koppelt een
synthetisch Slack-privébericht met
- Smoketest voor het Codex-app-serverharnas:
pnpm test:docker:live-codex-harness- Voert Gateway-agentbeurten uit via het harnas van de Codex-app-server dat
eigendom is van de plugin, verifieert
/codex statusen/codex models, en voert standaard probes uit voor afbeeldingen, cron-MCP, subagents en Guardian. Schakel de subagentprobe uit metOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0wanneer je andere fouten isoleert. Schakel voor een gerichte subagentcontrole de andere probes uit:OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 pnpm test:docker:live-codex-harness. Dit stopt na de subagentprobe, tenzijOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0is ingesteld.
- Voert Gateway-agentbeurten uit via het harnas van de Codex-app-server dat
eigendom is van de plugin, verifieert
- Codex-smoketest voor installatie op aanvraag:
pnpm test:docker:codex-on-demand- Installeert het verpakte OpenClaw-tarball in Docker, voert onboarding met
een OpenAI-API-sleutel uit en verifieert dat de Codex-plugin plus de
afhankelijkheid
@openai/codexop aanvraag naar de hoofdmap van het beheerde npm-project zijn gedownload.
- Installeert het verpakte OpenClaw-tarball in Docker, voert onboarding met
een OpenAI-API-sleutel uit en verifieert dat de Codex-plugin plus de
afhankelijkheid
- Live-smoketest voor afhankelijkheid van een plugintool:
pnpm test:docker:live-plugin-tool- Verpakt een fixtureplugin met een echte
slugify-afhankelijkheid, installeert deze vianpm-pack:, verifieert de afhankelijkheid onder de hoofdmap van het beheerde npm-project en vraagt vervolgens een live OpenAI-model om de plugintool aan te roepen en de verborgen slug terug te geven.
- Verpakt een fixtureplugin met een echte
- Smoketest voor de Crestodian-reddingsopdracht:
pnpm test:live:crestodian-rescue-channel- Optionele extra controle voor het oppervlak van de reddingsopdracht in het
berichtkanaal. Voert
/crestodian statusuit, zet een blijvende modelwijziging in de wachtrij, antwoordt met/crestodian yesen verifieert het schrijfpad voor audit/configuratie.
- Optionele extra controle voor het oppervlak van de reddingsopdracht in het
berichtkanaal. Voert
- Docker-smoketest voor de eerste uitvoering van Crestodian:
pnpm test:docker:crestodian-first-run- Begint met een lege OpenClaw-statusmap en bewijst eerst dat de verpakte
CLI
openclaw crestodianveilig weigert zonder inferentie. Vervolgens test en activeert deze nep-Claude via de verpakte activeringsmodule. Pas daarna bereikt een onnauwkeurig geformuleerd verzoek via de verpakte CLI de planner en wordt het omgezet in getypeerde configuratie, gevolgd door eenmalige bewerkingen voor model, agent, Discord-plugin en SecretRef. De test valideert configuratie- en auditvermeldingen. Dit is ondersteunend bewijs voor controles/bewerkingen, geen bewijs voor interactieve onboarding of voor een Crestodian-agent/tool/goedkeuringsproces. Dezelfde lane is in QA Lab beschikbaar viapnpm openclaw qa suite --scenario crestodian-ring-zero-setup.
- Begint met een lege OpenClaw-statusmap en bewijst eerst dat de verpakte
CLI
- Moonshot/Kimi-kostensmoketest: voer met ingestelde
MOONSHOT_API_KEYopenclaw models list --provider moonshot --jsonuit en voer vervolgens een geïsoleerdeopenclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --jsonuit tegenmoonshot/kimi-k2.6. Controleer of de JSON Moonshot/K2.6 rapporteert en het transcript van de assistent genormaliseerdeusage.costopslaat.
QA-specifieke runners
Deze opdrachten staan naast de hoofdtestsuites wanneer je het realisme van QA Lab nodig hebt.
CI voert QA Lab uit in speciale workflows. Pariteit voor agents valt onder
QA-Lab - All Lanes en releasevalidatie, niet onder een zelfstandige
PR-workflow. Gebruik voor brede validatie Full Release Validation met
rerun_group=qa-parity of de QA-groep van de releasecontroles. Stabiele/standaard
releasecontroles houden uitgebreide live-/Docker-duurtests achter
run_release_soak=true; het profiel full schakelt duurtests verplicht in.
QA-Lab - All Lanes wordt elke nacht op main en via handmatige uitvoering
gestart, met de mockpariteitslane, live Matrix-lane, door Convex beheerde live
Telegram-lane en door Convex beheerde live Discord-lane als parallelle taken.
Geplande QA- en releasecontroles geven voor Matrix expliciet --profile fast
door, terwijl de standaardwaarde voor de Matrix-CLI en de invoer van de
handmatige workflow all blijft; handmatige uitvoering kan all opsplitsen
in de taken transport, media, e2ee-smoke, e2ee-deep en e2ee-cli.
OpenClaw Release Checks voert vóór releasegoedkeuring pariteit plus de snelle
Matrix- en Telegram-lanes uit en gebruikt mock-openai/gpt-5.6-luna voor
transportcontroles van releases, zodat deze deterministisch blijven en het
normale opstarten van providerplugins vermijden. Deze live transport-Gateways
schakelen geheugenzoekopdrachten uit; geheugengedrag blijft gedekt door de
QA-pariteitssuites.
Live-mediashards voor volledige releases gebruiken
ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04, waarin ffmpeg en
ffprobe al aanwezig zijn. Docker-shards voor live modellen/backends gebruiken
de gedeelde image ghcr.io/openclaw/openclaw-live-test:<sha>, die eenmaal per
geselecteerde commit wordt gebouwd, en halen deze vervolgens op met
OPENCLAW_SKIP_DOCKER_BUILD=1 in plaats van deze in elke shard opnieuw te bouwen.
pnpm openclaw qa suite- Voert repositoryondersteunde QA-scenario's rechtstreeks op de host uit.
- Schrijft de artefacten
qa-evidence.json,qa-suite-summary.jsonenqa-suite-report.mdop het hoogste niveau voor de geselecteerde scenarioset, inclusief selecties van scenario's voor gemengde stromen, Vitest en Playwright. - Bij aanroep via
pnpm openclaw qa run --qa-profile <profile>wordt de scorekaart van het geselecteerde taxonomieprofiel in dezelfdeqa-evidence.jsonopgenomen.smoke-cischrijft beknopt bewijs (evidenceMode: "slim", geenexecutionper vermelding).releaseomvat de samengestelde selectie voor releasegereedheid;allselecteert elke actieve volwassenheidscategorie en is gericht op expliciete workflowaanroepen van QA-profielbewijs wanneer een volledig scorekaartartefact nodig is. - Voert standaard meerdere geselecteerde scenario's parallel uit met geïsoleerde
Gateway-workers.
qa-channelgebruikt standaard gelijktijdigheid 4 (begrensd door het aantal geselecteerde scenario's). Gebruik--concurrency <count>om het aantal workers af te stemmen, of--concurrency 1voor het oudere seriële traject. - Sluit af met een niet-nulcode wanneer een scenario mislukt. Gebruik
--allow-failuresvoor artefacten zonder een afsluitcode die een fout aangeeft. - Ondersteunt de providermodi
live-frontier,mock-openaienaimock.aimockstart een lokale, door AIMock ondersteunde providerserver voor experimentele dekking van fixtures en protocolmocks, zonder het scenariobewustemock-openai-traject te vervangen.
pnpm openclaw qa coverage --match <query>- Doorzoekt scenario-ID's, titels, oppervlakken, dekkings-ID's, documentatiereferenties, codereferenties, plugins en providervereisten en toont vervolgens overeenkomende suitedoelen.
- Gebruik dit vóór een QA Lab-uitvoering wanneer u het gewijzigde gedrag of bestandspad kent, maar niet het kleinste scenario. Dit is alleen adviserend: kies nog steeds bewijs via een mock, live-uitvoering, Multipass, Matrix of transport op basis van het gedrag dat wordt gewijzigd.
pnpm test:plugins:kitchen-sink-live- Voert de live OpenAI Kitchen Sink-pluginproef uit via QA Lab.
Installeert het externe Kitchen Sink-pakket, verifieert de inventaris van het
plugin-SDK-oppervlak, test
/healthzen/readyz, registreert bewijs voor CPU/RSS van de Gateway, voert een live OpenAI-beurt uit en controleert vijandige diagnostiek. Vereist live OpenAI-authenticatie, zoalsOPENAI_API_KEY. In gehydrateerde Testbox-sessies wordt automatisch het Testbox-profiel voor live-authenticatie ingeladen wanneer de helperopenclaw-testbox-envaanwezig is.
- Voert de live OpenAI Kitchen Sink-pluginproef uit via QA Lab.
Installeert het externe Kitchen Sink-pakket, verifieert de inventaris van het
plugin-SDK-oppervlak, test
pnpm test:gateway:cpu-scenarios- Voert de opstartbenchmark van de Gateway uit, plus een klein pakket
mockscenario's van QA Lab (
channel-chat-baseline,memory-failure-fallback,gateway-restart-inflight-run) en schrijft een gecombineerde samenvatting van CPU-waarnemingen onder.artifacts/gateway-cpu-scenarios/. - Markeert standaard alleen aanhoudende waarnemingen van hoge CPU-belasting
(
--cpu-core-warn, standaard0.9;--hot-wall-warn-ms, standaard30000), zodat korte pieken tijdens het opstarten als metingen worden geregistreerd zonder te lijken op de regressie waarbij de Gateway minutenlang de CPU volledig belast. - Wordt uitgevoerd met gebouwde
dist-artefacten; voer eerst een build uit wanneer de checkout nog geen recente runtime-uitvoer bevat.
- Voert de opstartbenchmark van de Gateway uit, plus een klein pakket
mockscenario's van QA Lab (
pnpm openclaw qa suite --runner multipass- Voert dezelfde QA-suite uit binnen een tijdelijke Multipass Linux-VM, met
dezelfde vlaggen voor scenarioselectie, provider en model als
qa suite. - Live-uitvoeringen sturen de QA-authenticatie-invoer door die bruikbaar is
voor de gast: providerkeys uit omgevingsvariabelen, het configuratiepad van
de live QA-provider en
CODEX_HOMEindien aanwezig. - Uitvoermappen moeten onder de hoofdmap van de repository blijven, zodat de gast via de gekoppelde werkruimte kan terugschrijven.
- Schrijft het normale QA-rapport en de samenvatting, plus Multipass-logboeken,
onder
.artifacts/qa-e2e/....
- Voert dezelfde QA-suite uit binnen een tijdelijke Multipass Linux-VM, met
dezelfde vlaggen voor scenarioselectie, provider en model als
pnpm qa:lab:up- Start de door Docker ondersteunde QA-site voor QA-werk door operators.
pnpm test:docker:npm-onboard-channel-agent- Bouwt een npm-tarball vanuit de huidige checkout, installeert deze globaal in Docker, voert niet-interactieve onboarding met een OpenAI-API-key uit, configureert standaard Telegram, verifieert dat de runtime van de verpakte plugin wordt geladen zonder herstel van afhankelijkheden tijdens het opstarten, voert doctor uit en voert één lokale agentbeurt uit tegen een gemockt OpenAI-eindpunt.
- Gebruik
OPENCLAW_NPM_ONBOARD_CHANNEL=discordom hetzelfde traject voor verpakte installatie met Discord uit te voeren.
pnpm test:docker:session-runtime-context- Voert een deterministische Docker-smoketest van de gebouwde app uit voor
transcripties van ingebedde runtimecontext. Verifieert dat verborgen
OpenClaw-runtimecontext behouden blijft als een niet-weergegeven aangepast
bericht in plaats van in de zichtbare gebruikersbeurt terecht te komen,
initialiseert vervolgens een getroffen, defecte sessie-JSONL en verifieert
dat
openclaw doctor --fixdeze met een back-up herschrijft naar de actieve vertakking.
- Voert een deterministische Docker-smoketest van de gebouwde app uit voor
transcripties van ingebedde runtimecontext. Verifieert dat verborgen
OpenClaw-runtimecontext behouden blijft als een niet-weergegeven aangepast
bericht in plaats van in de zichtbare gebruikersbeurt terecht te komen,
initialiseert vervolgens een getroffen, defecte sessie-JSONL en verifieert
dat
pnpm test:docker:npm-telegram-live- Installeert een kandidaat-OpenClaw-pakket in Docker, voert onboarding voor het geïnstalleerde pakket uit, configureert Telegram via de geïnstalleerde CLI en hergebruikt vervolgens het live Telegram-QA-traject met dat geïnstalleerde pakket als de te testen Gateway.
- De wrapper koppelt alleen de broncode van het
qa-lab-harnas vanuit de checkout; het geïnstalleerde pakket beheertdist,openclaw/plugin-sdken de runtime van gebundelde plugins, zodat het traject geen plugins uit de huidige checkout vermengt met het geteste pakket. - Standaard wordt
OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@betagebruikt; stelOPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgzofOPENCLAW_CURRENT_PACKAGE_TGZin om in plaats van installatie vanuit het register een opgeloste lokale tarball te testen. - Schrijft standaard herhaalde RTT-tijdmetingen naar
qa-evidence.jsonmetOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES=20. OverschrijfOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES,OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MSofOPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURESom de uitvoering af te stemmen.OPENCLAW_NPM_TELEGRAM_RTT_CHECKSaccepteert een door komma's gescheiden lijst met ID's van Telegram-QA-controles om te bemonsteren; wanneer deze niet is ingesteld, is de standaard RTT-geschikte controletelegram-mentioned-message-reply. - Gebruikt dezelfde Telegram-inloggegevens uit omgevingsvariabelen of
Convex-inloggegevensbron als
pnpm openclaw qa telegram. Stel voor CI-/releaseautomatiseringOPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convexin, samen metOPENCLAW_QA_CONVEX_SITE_URLen een rolgeheim. AlsOPENCLAW_QA_CONVEX_SITE_URLen een Convex-rolgeheim aanwezig zijn in CI, selecteert de Docker-wrapper automatisch Convex. - De wrapper valideert de omgevingsvariabelen met Telegram- of
Convex-inloggegevens op de host voordat Docker met bouwen/installeren begint.
Stel
OPENCLAW_NPM_TELEGRAM_SKIP_CREDENTIAL_PREFLIGHT=1alleen in wanneer u doelbewust de installatie vóór het instellen van inloggegevens debugt. OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintaineroverschrijft alleen voor dit traject de gedeeldeOPENCLAW_QA_CREDENTIAL_ROLE. Wanneer Convex-inloggegevens zijn geselecteerd en geen rol is ingesteld, gebruikt de wrappercibinnen CI enmaintainerbuiten CI.- GitHub Actions biedt dit traject aan als de handmatige maintainerworkflow
NPM Telegram Beta E2E. Deze wordt niet uitgevoerd bij samenvoegen. De workflow gebruikt de omgevingqa-live-shareden leases voor Convex-CI-inloggegevens.
- GitHub Actions biedt ook
Package Acceptancevoor afzonderlijk uitgevoerd productbewijs tegen één kandidaatpakket. De workflow accepteert een Git-ref, gepubliceerde npm-specificatie, HTTPS-tarball-URL plus SHA-256, beleid voor vertrouwde URL's of een tarballartefact uit een andere uitvoering (source=ref|npm|url|trusted-url|artifact), uploadt het genormaliseerdeopenclaw-current.tgzalspackage-under-testen voert vervolgens de bestaande Docker-E2E-planner uit met de trajectprofielensmoke,package,product,fullofcustom. Steltelegram_mode=mock-openaioflive-frontierin om de Telegram-QA-workflow tegen hetzelfdepackage-under-test-artefact uit te voeren.- Productbewijs voor de nieuwste bèta:
gh workflow run package-acceptance.yml --ref main \ -f source=npm \ -f package_spec=openclaw@beta \ -f suite_profile=product \ -f telegram_mode=mock-openai- Bewijs met een exacte tarball-URL vereist een digest en gebruikt het veiligheidsbeleid voor openbare URL's:
gh workflow run package-acceptance.yml --ref main \ -f source=url \ -f package_url=https://registry.npmjs.org/openclaw/-/openclaw-VERSION.tgz \ -f package_sha256=<sha256> \ -f suite_profile=package- Tarballmirrors voor ondernemingen of privégebruik gebruiken een expliciet beleid voor vertrouwde bronnen:
gh workflow run package-acceptance.yml --ref main \ -f source=trusted-url \ -f trusted_source_id=enterprise-artifactory \ -f package_url=https://packages.example.internal:8443/artifactory/openclaw/openclaw-VERSION.tgz \ -f package_sha256=<sha256> \ -f suite_profile=packagesource=trusted-url leest .github/package-trusted-sources.json uit de
vertrouwde workflowref en accepteert geen inloggegevens in URL's of een via
workflowinvoer opgegeven omzeiling voor privénetwerken. Als het genoemde beleid
bearer-authenticatie voorschrijft, configureert u het vaste geheim
OPENCLAW_TRUSTED_PACKAGE_TOKEN.
- Artefactbewijs downloadt een tarballartefact uit een andere Actions-uitvoering:
gh workflow run package-acceptance.yml --ref main \ -f source=artifact \ -f artifact_run_id=<run-id> \ -f artifact_name=<artifact-name> \ -f suite_profile=smoke-
pnpm test:docker:plugins- Verpakt en installeert de huidige OpenClaw-build in Docker, start de Gateway met geconfigureerde OpenAI en schakelt vervolgens gebundelde kanalen/plugins in via configuratiewijzigingen.
- Verifieert dat installatiedetectie niet-geconfigureerde downloadbare plugins afwezig laat, dat het eerste geconfigureerde herstel door doctor elke ontbrekende downloadbare plugin expliciet installeert en dat een tweede herstart geen verborgen herstel van afhankelijkheden uitvoert.
- Installeert ook een bekende oudere npm-basisversie, schakelt Telegram in
vóór uitvoering van
openclaw update --tag <candidate>en verifieert dat doctor na de update van de kandidaat verouderde resten van pluginafhankelijkheden opruimt zonder herstel via postinstall aan de kant van het harnas.
-
pnpm test:parallels:npm-update-
Voert de native smoketest voor updates van verpakte installaties uit op Parallels-gasten. Elk geselecteerd platform installeert eerst het gevraagde basispakket, voert vervolgens de geïnstalleerde opdracht
openclaw updateuit in dezelfde gast en verifieert de geïnstalleerde versie, updatestatus, gereedheid van de Gateway en één lokale agentbeurt. -
Gebruik
--platform macos,--platform windowsof--platform linuxtijdens iteraties op één gast. Gebruik--jsonvoor het pad van het samenvattingsartefact en de status per traject. -
Het OpenAI-traject gebruikt standaard
openai/gpt-5.6-lunavoor het bewijs van de live agentbeurt. Geef--model <provider/model>door of stelOPENCLAW_PARALLELS_OPENAI_MODELin om een ander OpenAI-model te valideren. -
Omwikkel lange lokale uitvoeringen met een time-out op de host, zodat vastlopers in het Parallels-transport niet de rest van het testvenster kunnen verbruiken:
bash timeout --foreground 150m pnpm test:parallels:npm-update -- --jsontimeout --foreground 90m pnpm test:parallels:npm-update -- --platform windows --json -
Het script schrijft geneste trajectlogboeken onder
/tmp/openclaw-parallels-npm-update.*. Inspecteerwindows-update.log,macos-update.logoflinux-update.logvoordat u aanneemt dat de buitenste wrapper is vastgelopen. -
Een Windows-update kan op een koude gast 10 tot 15 minuten besteden aan doctor na de update en aan het bijwerken van pakketten; dit is nog steeds normaal zolang het geneste npm-debuglogboek voortgang vertoont.
-
Voer deze verzamelwrapper niet parallel uit met afzonderlijke Parallels-smoketrajecten voor macOS, Windows of Linux. Ze delen VM-status en kunnen botsen bij het herstellen van momentopnamen, het aanbieden van pakketten of de Gateway-status van de gast.
-
Het bewijs na de update voert het normale oppervlak van gebundelde plugins uit, omdat capaciteitsfacades zoals spraak, afbeeldingsgeneratie en mediabegrip via gebundelde runtime-API's worden geladen, zelfs wanneer de agentbeurt zelf alleen een eenvoudige tekstreactie controleert.
-
-
pnpm openclaw qa aimock- Start alleen de lokale AIMock-providerserver voor directe protocolrooktests.
-
pnpm openclaw qa matrix- Voert de live QA-lane voor Matrix uit op een tijdelijke, door Docker ondersteunde Tuwunel-homeserver. Alleen voor broncodecheck-outs; verpakte installaties bevatten
qa-labniet. - Volledige CLI, profiel-/scenariocatalogus, omgevingsvariabelen en artefactindeling: Matrix-QA.
- Voert de live QA-lane voor Matrix uit op een tijdelijke, door Docker ondersteunde Tuwunel-homeserver. Alleen voor broncodecheck-outs; verpakte installaties bevatten
-
pnpm openclaw qa telegram- Voert de live QA-lane voor Telegram uit in een echte privégroep met de bot-tokens voor het stuurprogramma en het te testen systeem uit de omgeving.
- Vereist
OPENCLAW_QA_TELEGRAM_GROUP_ID,OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKENenOPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN. De groeps-id moet de numerieke Telegram-chat-id zijn. - Ondersteunt
--credential-source convexvoor gedeelde referenties uit een pool. Gebruik standaard de omgevingsmodus of stelOPENCLAW_QA_CREDENTIAL_SOURCE=convexin om leases uit de pool te gebruiken. - De standaardinstellingen omvatten canary-controle, vermeldingstoegang, opdrachtadressering,
/status, vermelde antwoorden tussen bots en antwoorden op ingebouwde kernopdrachten. De standaardinstellingen vanmock-openaiomvatten ook deterministische regressies voor antwoordketens en het streamen van definitieve Telegram-berichten. Gebruik--list-scenariosvoor optionele controles zoalssession_status. - Sluit af met een niet-nulcode wanneer een scenario mislukt. Gebruik
--allow-failuresvoor artefacten zonder een afsluitcode die een fout aangeeft. - Vereist twee verschillende bots in dezelfde privégroep, waarbij de bot van het te testen systeem een Telegram-gebruikersnaam heeft.
- Schakel voor stabiele waarneming tussen bots de Bot-to-Bot Communication Mode
in
@BotFathervoor beide bots in en zorg dat de stuurprogrammabot botverkeer in de groep kan waarnemen. - Schrijft een Telegram-QA-rapport, samenvatting en
qa-evidence.jsonnaar.artifacts/qa-e2e/.... Antwoordscenario's bevatten de retourtijd vanaf het verzendverzoek van het stuurprogramma tot het waargenomen antwoord van het te testen systeem.
Mantis Telegram Live is de PR-bewijswrapper rond deze lane. Deze voert
de kandidaatref uit met via Convex geleasete Telegram-referenties, geeft de
geredigeerde QA-rapport-/bewijsbundel weer in een Crabbox-desktopbrowser, neemt MP4-bewijs
op, genereert een op beweging bijgesneden GIF, uploadt de artefactbundel en
plaatst inline PR-bewijs via de Mantis GitHub App wanneer pr_number is
ingesteld. Beheerders kunnen deze vanuit de Actions-UI starten via Mantis Scenario
(scenario_id: telegram-live) of rechtstreeks vanuit een opmerking bij een pull request:
@openclaw-mantis telegram@openclaw-mantis telegram scenario=telegram-status-command@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-replyMantis Telegram Desktop Proof is de agentgestuurde wrapper met systeemeigen Telegram Desktop
voor visueel voor-en-na-bewijs van een PR. Start deze vanuit de Actions-UI met
vrije instructions, via Mantis Scenario (scenario_id: telegram-desktop-proof) of vanuit een PR-opmerking:
@openclaw-mantis telegram desktop proofDe Mantis-agent leest de PR, bepaalt welk in Telegram zichtbaar gedrag de
wijziging bewijst, voert de Crabbox-bewijslane voor Telegram Desktop met een echte gebruiker uit op
basis- en kandidaatrefs, itereert totdat de systeemeigen GIF's bruikbaar zijn,
schrijft een gekoppeld motionPreview-manifest en plaatst via de Mantis GitHub App
dezelfde GIF-tabel met twee kolommen wanneer pr_number is ingesteld.
pnpm openclaw qa mantis telegram-desktop-builder- Leaset of hergebruikt een Crabbox Linux-desktop, installeert het systeemeigen Telegram Desktop, configureert OpenClaw met een geleaset Telegram-bot-token voor het te testen systeem, start de Gateway en neemt schermafbeeldings-/MP4-bewijs op van het zichtbare VNC-bureaublad.
- Gebruikt standaard
--credential-source convex, zodat werkstromen alleen het geheim van de Convex-broker nodig hebben. Gebruik--credential-source envmet dezelfdeOPENCLAW_QA_TELEGRAM_*-variabelen alspnpm openclaw qa telegram. - Telegram Desktop heeft nog steeds een gebruikersaanmelding/-profiel nodig. Het bot-token
configureert alleen OpenClaw. Gebruik
--telegram-profile-archive-env <name>voor een base64-.tgz-profielarchief of gebruik--keep-leaseen meld u eenmaal handmatig aan via VNC. - Schrijft
mantis-telegram-desktop-builder-report.md,mantis-telegram-desktop-builder-summary.json,telegram-desktop-builder.pngentelegram-desktop-builder.mp4naar de uitvoermap.
Live transportlanes delen één standaardcontract, zodat nieuwe transporten niet
uiteenlopen; de dekkingsmatrix per lane staat in
QA-overzicht - Dekking van live transporten.
qa-channel is de brede synthetische suite en maakt geen deel uit van die matrix.
Gedeelde Telegram-referenties via Convex (v1)
Wanneer --credential-source convex (of OPENCLAW_QA_CREDENTIAL_SOURCE=convex)
is ingeschakeld voor live transport-QA, verkrijgt het QA-lab een exclusieve lease uit een
door Convex ondersteunde pool, stuurt het tijdens de uitvoering van de lane Heartbeats voor die lease en
geeft het de lease vrij bij afsluiten. De sectienaam dateert van vóór ondersteuning voor Discord, Slack en
WhatsApp; het leasecontract wordt tussen de typen gedeeld.
Referentiesjabloon voor het Convex-project: qa/convex-credential-broker/
Vereiste omgevingsvariabelen:
OPENCLAW_QA_CONVEX_SITE_URL(bijvoorbeeldhttps://your-deployment.convex.site)- Eén geheim voor de geselecteerde rol:
OPENCLAW_QA_CONVEX_SECRET_MAINTAINERvoormaintainerOPENCLAW_QA_CONVEX_SECRET_CIvoorci
- Selectie van referentierol:
- CLI:
--credential-role maintainer|ci - Standaardwaarde uit omgeving:
OPENCLAW_QA_CREDENTIAL_ROLE(standaardciin CI, andersmaintainer)
- CLI:
Optionele omgevingsvariabelen:
OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS(standaard1200000)OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS(standaard30000)OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS(standaard90000)OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS(standaard15000)OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX(standaard/qa-credentials/v1)OPENCLAW_QA_CREDENTIAL_OWNER_ID(optionele tracerings-id)OPENCLAW_QA_ALLOW_INSECURE_HTTP=1staat Convex-URL's met local loopback viahttp://toe voor uitsluitend lokale ontwikkeling.
OPENCLAW_QA_CONVEX_SITE_URL moet bij normaal gebruik https:// gebruiken.
Beheeropdrachten voor beheerders (toevoegen aan/verwijderen uit/weergeven van pool) vereisen specifiek
OPENCLAW_QA_CONVEX_SECRET_MAINTAINER.
CLI-hulpprogramma's voor beheerders:
pnpm openclaw qa credentials doctorpnpm openclaw qa credentials add --kind telegram --payload-file qa/telegram-credential.jsonpnpm openclaw qa credentials list --kind telegrampnpm openclaw qa credentials remove --credential-id <credential-id>Gebruik doctor vóór live uitvoeringen om de Convex-site-URL, brokergeheimen,
het eindpuntvoorvoegsel, de HTTP-time-out en de bereikbaarheid van beheer/weergave te controleren zonder
geheime waarden af te drukken. Gebruik --json voor machineleesbare uitvoer in scripts en CI-
hulpprogramma's.
Standaard eindpuntcontract (OPENCLAW_QA_CONVEX_SITE_URL + /qa-credentials/v1).
Verzoeken verifiëren zich met een Authorization: Bearer <role secret>-header;
de onderstaande berichtlichamen laten die header weg:
POST /acquire- Verzoek:
{ kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs } - Geslaagd:
{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? } - Uitgeput/opnieuw te proberen:
{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }
- Verzoek:
POST /payload-chunk- Verzoek:
{ kind, ownerId, actorRole, credentialId, leaseToken, index } - Geslaagd:
{ status: "ok", index, data }
- Verzoek:
POST /heartbeat- Verzoek:
{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs } - Geslaagd:
{ status: "ok" }(of lege2xx)
- Verzoek:
POST /release- Verzoek:
{ kind, ownerId, actorRole, credentialId, leaseToken } - Geslaagd:
{ status: "ok" }(of lege2xx)
- Verzoek:
POST /admin/add(alleen beheerdersgeheim)- Verzoek:
{ kind, actorId, payload, note?, status? } - Geslaagd:
{ status: "ok", credential }
- Verzoek:
POST /admin/remove(alleen beheerdersgeheim)- Verzoek:
{ credentialId, actorId } - Geslaagd:
{ status: "ok", changed, credential } - Beveiliging tegen actieve lease:
{ status: "error", code: "LEASE_ACTIVE", ... }
- Verzoek:
POST /admin/list(alleen beheerdersgeheim)- Verzoek:
{ kind?, status?, includePayload?, limit? } - Geslaagd:
{ status: "ok", credentials, count }
- Verzoek:
Structuur van de payload voor het Telegram-type:
{ groupId: string, driverToken: string, sutToken: string }groupIdmoet een tekenreeks met een numerieke Telegram-chat-id zijn.admin/addvalideert deze structuur voorkind: "telegram"en weigert onjuist gevormde payloads.
Structuur van de payload voor het Telegram-type met echte gebruiker:
{ groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }groupId,testerUserIdentelegramApiIdmoeten numerieke tekenreeksen zijn.tdlibArchiveSha256endesktopTdataArchiveSha256moeten hexadecimale SHA-256-tekenreeksen zijn.kind: "telegram-user"is gereserveerd voor de Mantis-werkstroom voor Telegram Desktop-bewijs. Algemene QA-lablanes mogen dit type niet verkrijgen.
Door de broker gevalideerde payloads voor meerdere kanalen:
- Discord:
{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string, voiceChannelId?: string } - WhatsApp:
{ driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }
Slack-lanes kunnen ook uit de pool leasen, maar de validatie van Slack-payloads
bevindt zich momenteel in de Slack-QA-runner in plaats van in de broker. Gebruik
{ channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string }
voor Slack-rijen.
Een kanaal aan QA toevoegen
De architectuur en namen van scenariohulpprogramma's voor nieuwe kanaaladapters staan in
QA-overzicht - Een kanaal toevoegen.
De minimumvereisten: implementeer de transportrunner op de gedeelde qa-lab-host-
naad, voeg een adapterFactory toe voor gedeelde scenario's, declareer qaRunners in het
Plugin-manifest, koppel deze als openclaw qa <runner> en schrijf scenario's onder
qa/scenarios/.
Testsuites (wat waar wordt uitgevoerd)
Beschouw de suites als een reeks met „toenemend realisme” (en toenemende instabiliteit/kosten).
Unit-/integratietests (standaard)
- Opdracht:
pnpm test - Configuratie: niet-gerichte uitvoeringen gebruiken de shardset
vitest.full-*.config.tsen kunnen shards met meerdere projecten uitbreiden naar configuraties per project voor parallelle planning - Bestanden: kern-/unitinventarissen onder
src/**/*.test.ts,packages/**/*.test.tsentest/**/*.test.ts; UI-unittests worden uitgevoerd in de afzonderlijkeunit-ui-shard - Bereik:
- Zuivere unittests
- Integratietests binnen het proces (Gateway-authenticatie, routering, hulpmiddelen, parsering, configuratie)
- Deterministische regressietests voor bekende fouten
- Verwachtingen:
- Wordt uitgevoerd in CI
- Geen echte sleutels vereist
- Moet snel en stabiel zijn
- Tests voor resolvers en loaders van openbare oppervlakken moeten breed terugvalgedrag voor
api.jsenruntime-api.jsaantonen met gegenereerde minimale Plugin-fixtures, niet met echte bron-API's van gebundelde Plugins. Het laden van echte Plugin-API's hoort thuis in contractsuites/integratiesuites van de betreffende Plugin.
Beleid voor systeemeigen afhankelijkheden:
- Standaard testinstallaties slaan optionele systeemeigen Discord-opusbuilds over. Discord-
spraak gebruikt de gebundelde
libopus-wasmen@discordjs/opusblijft uitgeschakeld inallowBuilds, zodat lokale tests en Testbox-lanes de systeemeigen add-on niet compileren. - Vergelijk de prestaties van systeemeigen opus in de benchmarkrepository van
libopus-wasm, niet in de standaard installatie-/testlussen van OpenClaw. Stel@discordjs/opusniet in optruein de standaardwaarde vanallowBuilds; daardoor compileren niet-gerelateerde installatie-/testlussen systeemeigen code.
Projecten, shards en afgebakende lanes
- Niet-doelgerichte uitvoeringen van
pnpm testgebruiken dertien kleinere shardconfiguraties (core-unit-fast,core-unit-src,core-unit-security,core-unit-ui,core-unit-support,core-support-boundary,core-tooling,core-contracts,core-bundled,core-runtime,agentic,auto-reply,extensions) in plaats van één gigantisch native hoofdprojectproces. Dit verlaagt het maximale RSS-gebruik op zwaarbelaste machines en voorkomt dat auto-reply-/Plugin-werk niet-gerelateerde suites verdringt. pnpm test --watchgebruikt nog steeds de nativevitest.config.ts-projectgraaf van het hoofdproject, omdat een watch-lus met meerdere shards niet praktisch is.pnpm test,pnpm test:watchenpnpm test:perf:importsleiden expliciete bestands-/mapdoelen eerst door afgebakende lanes, zodatpnpm test extensions/discord/src/monitor/message-handler.preflight.test.tsniet de volledige opstartkosten van het hoofdproject hoeft te dragen.pnpm test:changedbreidt gewijzigde git-paden standaard uit naar goedkope afgebakende lanes: directe testbewerkingen, naastgelegen*.test.ts-bestanden, expliciete bronkoppelingen en afhankelijke onderdelen uit de lokale importgraaf. Bewerkingen aan configuratie, installatie of pakketten voeren tests niet breed uit, tenzij u explicietOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedgebruikt.pnpm check:changedis de normale slimme lokale controlepoort voor beperkt werk. Deze classificeert de diff in kern, kerntests, plugins, plugintests, apps, documentatie, releasemetagegevens, live Docker-hulpmiddelen en tooling, en voert vervolgens de bijbehorende typecontrole-, lint- en bewakingsopdrachten uit. Vitest-tests worden niet uitgevoerd; roeppnpm test:changedof explicietpnpm test <target>aan als testbewijs. Versieverhogingen die uitsluitend releasemetagegevens wijzigen, voeren gerichte controles van versies, configuratie en hoofdafhankelijkheden uit, met een bewaking die pakketwijzigingen buiten het versieveld op het hoogste niveau afwijst.- Bewerkingen aan de live Docker ACP-harnas voeren gerichte controles uit: shellsyntaxis voor de live Docker-authenticatiescripts en een proefuitvoering van de live Docker-planner. Wijzigingen in
package.jsonworden alleen meegenomen wanneer de diff beperkt is totscripts["test:docker:live-*"]; bewerkingen van afhankelijkheden, exports, versies en andere pakketoppervlakken gebruiken nog steeds de bredere bewakingen. - Importarme unittests van agents, opdrachten, plugins, auto-reply-helpers,
plugin-sdken vergelijkbare gebieden met pure hulpprogramma's worden door de laneunit-fastgeleid, dietest/setup-openclaw-runtime.tsoverslaat; bestanden met veel status- of runtimegebruik blijven op de bestaande lanes. - Geselecteerde bronbestanden met helpers uit
plugin-sdkencommandskoppelen uitvoeringen in gewijzigde modus ook aan expliciete naastgelegen tests in die lichte lanes, zodat helperbewerkingen niet de volledige zware suite voor die map opnieuw uitvoeren. auto-replyheeft speciale groepen voor kernhelpers op het hoogste niveau, integratietests vanreply.*op het hoogste niveau en de substructuursrc/auto-reply/reply/**. CI splitst de reply-substructuur verder op in shards voor agent-runner, dispatch en opdracht-/statusroutering, zodat één importzware groep niet de volledige Node-staart beheert.- Normale CI voor PR/main slaat bewust de batchsweep voor gebundelde plugins en de uitsluitend voor releases bedoelde shard
agentic-pluginsover. Volledige releasevalidatie start voor deze Plugin-zware suites bij releasekandidaten de afzonderlijke onderliggende workflowPlugin Prerelease.
Dekking van de ingebedde runner
- Wanneer u invoer voor de detectie van berichttools of de runtimecontext van Compaction wijzigt, moet u beide dekkingsniveaus behouden.
- Voeg gerichte helperregressietests toe voor zuivere routerings- en normalisatiegrenzen.
- Houd de integratiesuites van de ingebedde runner gezond:
src/agents/embedded-agent-runner/compact.hooks.test.ts,src/agents/embedded-agent-runner/run.overflow-compaction.test.tsensrc/agents/embedded-agent-runner/run.overflow-compaction.loop.test.ts. - Deze suites verifiëren dat afgebakende id's en Compaction-gedrag nog steeds
door de echte paden
run.ts/compact.tsstromen; tests die alleen helpers testen, zijn geen voldoende vervanging voor die integratiepaden.
Standaardwaarden voor Vitest-pool en -isolatie
- De basisconfiguratie van Vitest gebruikt standaard
threads. - De gedeelde Vitest-configuratie stelt
isolate: falsevast en gebruikt de niet-geïsoleerde runner in de hoofdprojecten en de e2e- en liveconfiguraties. - De UI-lane van het hoofdproject behoudt de
jsdom-installatie en optimalisator, maar gebruikt eveneens de gedeelde niet-geïsoleerde runner. - Elke
pnpm test-shard neemt dezelfde standaardwaardenthreads+isolate: falseover van de gedeelde Vitest-configuratie. scripts/run-vitest.mjsvoegt standaard--no-maglevtoe voor onderliggende Node-processen van Vitest om V8-compilatieverloop tijdens grote lokale uitvoeringen te beperken. StelOPENCLAW_VITEST_ENABLE_MAGLEV=1in om te vergelijken met standaard V8-gedrag.scripts/run-vitest.mjsbeëindigt expliciete Vitest-uitvoeringen buiten de watch-modus na 5 minuten zonder uitvoer naar stdout of stderr. StelOPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=0in om de bewaking uit te schakelen voor een bewust stil onderzoek.
Snelle lokale iteratie
pnpm changed:lanestoont welke architecturale lanes door een diff worden geactiveerd.- De pre-commithaak voert alleen formattering uit. Deze voegt geformatteerde bestanden opnieuw toe aan de staging en voert geen lint, typecontrole of tests uit.
- Voer
pnpm check:changedexpliciet uit vóór overdracht of push wanneer u de slimme lokale controlepoort nodig hebt. pnpm test:changedrouteert standaard via goedkope afgebakende lanes. GebruikOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedalleen wanneer de agent bepaalt dat een bewerking aan het harnas, de configuratie, een pakket of een contract werkelijk bredere Vitest-dekking nodig heeft.pnpm test:maxenpnpm test:changed:maxbehouden hetzelfde routeringsgedrag, maar met een hogere limiet voor workers.- Automatische schaling van lokale workers is bewust conservatief en schaalt terug wanneer het gemiddelde belastingsniveau van de host al hoog is, zodat meerdere gelijktijdige Vitest-uitvoeringen standaard minder schade aanrichten.
- De basisconfiguratie van Vitest markeert de projecten/configuratiebestanden als
forceRerunTriggers, zodat heruitvoeringen in gewijzigde modus correct blijven wanneer de testbedrading verandert. - De configuratie houdt
OPENCLAW_VITEST_FS_MODULE_CACHEingeschakeld op ondersteunde hosts; stelOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/pathin voor één expliciete cachelocatie voor directe profilering.
Prestatieproblemen opsporen
pnpm test:perf:importsschakelt Vitest-rapportage van importduur en uitvoer met een uitsplitsing van imports in.pnpm test:perf:imports:changedbeperkt dezelfde profileringsweergave tot bestanden die sindsorigin/mainzijn gewijzigd.- Timinggegevens van shards worden naar
.artifacts/vitest-shard-timings.jsongeschreven. Uitvoeringen van volledige configuraties gebruiken het configuratiepad als sleutel; CI-shards met opnamepatronen voegen de shardnaam toe, zodat gefilterde shards afzonderlijk kunnen worden gevolgd. - Wanneer één zware test nog steeds het grootste deel van de tijd besteedt aan imports tijdens het opstarten,
houdt u zware afhankelijkheden achter een smalle lokale
*.runtime.ts-grens en mockt u die grens rechtstreeks in plaats van runtimehelpers diep te importeren om ze alleen door te geven aanvi.mock(...). pnpm test:perf:changed:bench -- --ref <git-ref>vergelijkt de gerouteerdetest:changedmet het native hoofdprojectpad voor die vastgelegde diff en toont de verstreken tijd plus het maximale RSS-gebruik op macOS.pnpm test:perf:changed:bench -- --worktreemeet de prestaties van de huidige onopgeslagen werkstructuur door de lijst met gewijzigde bestanden te routeren viascripts/test-projects.mjsen de Vitest-configuratie van het hoofdproject.pnpm test:perf:profile:mainschrijft een CPU-profiel van de hoofdthread voor de opstart- en transformatieoverhead van Vitest/Vite.pnpm test:perf:profile:runnerschrijft CPU- en heap-profielen van de runner voor de unitsuite met bestandsparallellisme uitgeschakeld.
Stabiliteit (Gateway)
- Opdracht:
pnpm test:stability:gateway - Configuratie:
test/vitest/vitest.gateway.config.ts,test/vitest/vitest.logging.config.tsentest/vitest/vitest.infra.config.ts, elk geforceerd tot één worker - Bereik:
- Start een echte local loopback Gateway waarbij diagnostiek standaard is ingeschakeld
- Stuurt synthetische Gateway-berichten, geheugenactiviteit en verwerking van grote payloads door het diagnostische gebeurtenispad
- Vraagt
diagnostics.stabilityop via de Gateway WS RPC - Dekt helpers voor het persistent opslaan van diagnostische stabiliteitsbundels
- Controleert dat de recorder begrensd blijft, synthetische RSS-metingen onder het drukbudget blijven en wachtrijdieptes per sessie weer tot nul afnemen
- Verwachtingen:
- Veilig voor CI en zonder sleutels
- Smalle lane voor opvolging van stabiliteitsregressies, geen vervanging voor de volledige Gateway-suite
E2E (repo-aggregaat)
- Opdracht:
pnpm test:e2e - Bereik:
- Voert de E2E-lane voor de Gateway-rooktest uit
- Voert de E2E-lane voor de browser met gemockte Control UI uit
- Verwachtingen:
- Veilig voor CI en zonder sleutels
- Vereist dat Playwright Chromium is geïnstalleerd
E2E (Gateway-rooktest)
- Opdracht:
pnpm test:e2e:gateway - Configuratie:
test/vitest/vitest.e2e.config.ts - Bestanden:
src/**/*.e2e.test.ts,test/**/*.e2e.test.tsen E2E-tests van gebundelde plugins onderextensions/ - Standaardwaarden voor runtime:
- Gebruikt Vitest
threadsmetisolate: false, overeenkomstig de rest van de repo. - Gebruikt adaptieve workers (CI: maximaal 2, lokaal: standaard 1).
- Draait standaard in stille modus om overhead van console-I/O te verminderen.
- Gebruikt Vitest
- Nuttige overschrijvingen:
OPENCLAW_E2E_WORKERS=<n>om het aantal workers af te dwingen (beperkt tot 16).OPENCLAW_E2E_VERBOSE=1om uitgebreide console-uitvoer opnieuw in te schakelen.
- Bereik:
- End-to-endgedrag van de Gateway met meerdere instanties
- WebSocket-/HTTP-oppervlakken, Node-koppeling en zwaarder netwerkverkeer
- Verwachtingen:
- Wordt uitgevoerd in CI (wanneer ingeschakeld in de pijplijn)
- Geen echte sleutels vereist
- Meer bewegende onderdelen dan unittests (kan langzamer zijn)
E2E (gemockte browser voor Control UI)
- Opdracht:
pnpm test:ui:e2e - Configuratie:
test/vitest/vitest.ui-e2e.config.ts - Bestanden:
ui/src/**/*.e2e.test.ts - Bereik:
- Start de Vite Control UI
- Stuurt een echte Chromium-pagina aan via Playwright
- Vervangt de Gateway-WebSocket door deterministische mocks in de browser
- Verwachtingen:
- Wordt in CI uitgevoerd als onderdeel van
pnpm test:e2e - Geen echte Gateway, agents of providersleutels vereist
- Browserafhankelijkheid moet aanwezig zijn (
pnpm --dir ui exec playwright install chromium)
- Wordt in CI uitgevoerd als onderdeel van
E2E: rooktest voor OpenShell-backend
- Opdracht:
pnpm test:e2e:openshell - Bestand:
extensions/openshell/src/backend.e2e.test.ts - Bereik:
- Hergebruikt een actieve lokale OpenShell Gateway
- Maakt een sandbox op basis van een tijdelijk lokaal Dockerfile
- Test de OpenShell-backend van OpenClaw via echte
sandbox ssh-config+ SSH-uitvoering - Verifieert op de externe omgeving gebaseerde canonieke bestandssysteemwerking via de bestandssysteembrug van de sandbox
- Verwachtingen:
- Alleen na expliciete inschakeling; geen onderdeel van de standaarduitvoering van
pnpm test:e2e - Vereist een lokale
openshell-CLI plus een werkende Docker-daemon - Vereist een actieve lokale OpenShell Gateway en de bijbehorende configuratiebron
- Gebruikt geïsoleerde
HOME/XDG_CONFIG_HOMEen vernietigt daarna de testsandbox
- Alleen na expliciete inschakeling; geen onderdeel van de standaarduitvoering van
- Nuttige overschrijvingen:
OPENCLAW_E2E_OPENSHELL=1om de test in te schakelen wanneer de bredere e2e-suite handmatig wordt uitgevoerdOPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshellom naar een niet-standaard CLI-binair bestand of wrapperscript te verwijzenOPENCLAW_E2E_OPENSHELL_CONFIG_HOME=/path/to/configom de geregistreerde Gateway-configuratie beschikbaar te maken voor de geïsoleerde testOPENCLAW_E2E_OPENSHELL_HOST_IP=172.18.0.1om het IP-adres van de Docker Gateway te overschrijven dat door de hostbeleidsfixture wordt gebruikt
Live (echte providers + echte modellen)
- Opdracht:
pnpm test:live - Configuratie:
test/vitest/vitest.live.config.ts - Bestanden:
src/**/*.live.test.ts,test/**/*.live.test.tsen live-tests voor meegeleverde plugins onderextensions/ - Standaard: ingeschakeld door
pnpm test:live(steltOPENCLAW_LIVE_TEST=1in) - Bereik:
- "Werkt deze provider/dit model vandaag daadwerkelijk met echte referenties?"
- Detecteer wijzigingen in providerindelingen, eigenaardigheden bij het aanroepen van tools, authenticatieproblemen en gedrag rond snelheidslimieten
- Verwachtingen:
- Ontworpen om niet CI-stabiel te zijn (echte netwerken, echt providerbeleid, quota, storingen)
- Kost geld / gebruikt snelheidslimieten
- Voer bij voorkeur beperkte subsets uit in plaats van "alles"
- Live-uitvoeringen gebruiken reeds geëxporteerde API-sleutels en voorbereide authenticatieprofielen.
- Standaard isoleren live-uitvoeringen nog steeds
HOMEen kopiëren ze configuratie- en authenticatiemateriaal naar een tijdelijke testthuismap, zodat eenheidsfixtures je echte~/.openclawniet kunnen wijzigen. - Stel
OPENCLAW_LIVE_USE_REAL_HOME=1alleen in wanneer je bewust wilt dat live-tests je echte thuismap gebruiken. pnpm test:livegebruikt standaard een stillere modus: de voortgangsuitvoer[live] ...blijft zichtbaar en opstartlogboeken van de Gateway en Bonjour-berichten worden gedempt. StelOPENCLAW_LIVE_TEST_QUIET=0in als je de volledige opstartlogboeken weer wilt zien.- Rotatie van API-sleutels (providerspecifiek): stel
*_API_KEYSin met een komma-/puntkomma-indeling of gebruik*_API_KEY_1,*_API_KEY_2(bijvoorbeeldOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS), of gebruik per live-uitvoering een overschrijving viaOPENCLAW_LIVE_*_KEY; tests proberen het opnieuw bij antwoorden wegens snelheidslimieten. - Voortgangs-/Heartbeat-uitvoer:
- Live-testsuites schrijven voortgangsregels naar stderr, zodat langdurige provideraanroepen zichtbaar actief blijven, zelfs wanneer de consolevastlegging van Vitest stil is.
test/vitest/vitest.live.config.tsschakelt de consoleonderschepping van Vitest uit, zodat voortgangsregels van providers/de Gateway tijdens live-uitvoeringen direct worden doorgestuurd.- Stem Heartbeats voor rechtstreekse modellen af met
OPENCLAW_LIVE_HEARTBEAT_MS. - Stem Heartbeats voor de Gateway/controles af met
OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS.
Welke testsuite moet ik uitvoeren?
Gebruik deze beslissingstabel:
- Logica/tests bewerken: voer
pnpm testuit (enpnpm test:coverageals je veel hebt gewijzigd) - Netwerken van de Gateway / het WS-protocol / koppeling wijzigen: voeg
pnpm test:e2etoe - Problemen opsporen bij "mijn bot werkt niet" / providerspecifieke fouten / het aanroepen van tools: voer een beperkte
pnpm test:liveuit
Live-tests (met netwerktoegang)
Voor de livemodelmatrix, snelle controles van CLI-backends, snelle ACP-controles, de Codex-appserverharnas en alle live-tests voor mediaproviders (Deepgram, BytePlus, ComfyUI, afbeeldingen, muziek, video, mediaharnas), plus de verwerking van referenties voor live-uitvoeringen:
- zie Live-testsuites testen. Zie voor de specifieke controlelijst voor updates en pluginvalidatie Updates en plugins testen.
Docker-uitvoeringen (optionele controles op "werkt onder Linux")
Deze Docker-uitvoeringen zijn verdeeld in twee categorieën:
- Uitvoeringen voor livemodellen:
test:docker:live-modelsentest:docker:live-gatewayvoeren alleen het bijbehorende live-bestand met profielsleutels uit binnen de Docker-installatiekopie van de repository (src/agents/models.profiles.live.test.tsensrc/gateway/gateway-models.profiles.live.test.ts), waarbij je lokale configuratiemap, werkruimte en optionele profielomgevingsbestand worden gekoppeld. De bijbehorende lokale toegangspunten zijntest:live:models-profilesentest:live:gateway-profiles. - Docker-live-uitvoeringen behouden waar nodig hun eigen praktische limieten:
test:docker:live-modelsgebruikt standaard de samengestelde, ondersteunde set met veel informatieve waarde, entest:docker:live-gatewaygebruikt standaardOPENCLAW_LIVE_GATEWAY_SMOKE=1,OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8,OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000enOPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000. StelOPENCLAW_LIVE_MAX_MODELSof de omgevingsvariabelen van de Gateway in wanneer je expliciet een lagere limiet of grotere scan wilt. test:docker:allbouwt de live-Docker-installatiekopie eenmaal viatest:docker:live-build, verpakt OpenClaw eenmaal als npm-tarball viascripts/package-openclaw-for-docker.mjsen bouwt/hergebruikt vervolgens tweescripts/e2e/Dockerfile-installatiekopieën. De kale installatiekopie is alleen de Node/Git-uitvoerder voor installatie-, update- en plugin-afhankelijkheidstrajecten; deze trajecten koppelen de vooraf gebouwde tarball. De functionele installatiekopie installeert dezelfde tarball in/appvoor trajecten voor de functionaliteit van de gebouwde toepassing. Definities van Docker-trajecten staan inscripts/lib/docker-e2e-scenarios.mjs; de plannerlogica staat inscripts/lib/docker-e2e-plan.mjs;scripts/test-docker-all.mjsvoert het geselecteerde plan uit. De gecombineerde uitvoering gebruikt een gewogen lokale planner:OPENCLAW_DOCKER_ALL_PARALLELISMbepaalt het aantal processlots, terwijl resourcelimieten voorkomen dat zware live-, npm-installatie- en multiservicetrajecten allemaal tegelijk starten. Als één traject zwaarder is dan de actieve limieten, kan de planner het toch starten wanneer de pool leeg is en laat deze het vervolgens alleen doorlopen totdat er weer capaciteit beschikbaar is. De standaardwaarden zijn 10 slots,OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9,OPENCLAW_DOCKER_ALL_NPM_LIMIT=5enOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7; pasOPENCLAW_DOCKER_ALL_WEIGHT_LIMITofOPENCLAW_DOCKER_ALL_DOCKER_LIMIT(en andere overschrijvingen vanOPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT) alleen aan wanneer de Docker-host meer capaciteit heeft. De uitvoerder voert standaard een Docker-voorcontrole uit, verwijdert verouderde OpenClaw E2E-containers, toont elke 30 seconden de status, slaat tijdmetingen van geslaagde trajecten op in.artifacts/docker-tests/lane-timings.jsonen gebruikt die tijdmetingen om bij latere uitvoeringen langere trajecten eerst te starten. GebruikOPENCLAW_DOCKER_ALL_DRY_RUN=1om het gewogen trajectmanifest af te drukken zonder Docker te bouwen of uit te voeren, ofnode scripts/test-docker-all.mjs --plan-jsonom het CI-plan af te drukken voor geselecteerde trajecten, pakket-/installatiekopiebehoeften en referenties.Package Acceptanceis de systeemeigen GitHub-pakketcontrole voor "werkt deze installeerbare tarball als product?" Deze bepaalt één kandidaatpakket uitsource=npm,source=ref,source=url,source=trusted-urlofsource=artifact, uploadt dit alspackage-under-testen voert vervolgens de herbruikbare Docker E2E-trajecten uit met precies die tarball, in plaats van de geselecteerde referentie opnieuw te verpakken. Profielen zijn geordend op omvang:smoke,package,productenfull(pluscustomvoor een expliciete trajectlijst). Zie Updates en plugins testen voor het pakket-/update-/plugincontract, de overlevingsmatrix voor gepubliceerde upgrades, standaardwaarden voor releases en fouttriage.- Bouw- en releasecontroles voeren na tsdown
scripts/check-cli-bootstrap-imports.mjsuit. De controle doorloopt de statisch gebouwde graaf vanafdist/entry.jsendist/cli/run-main.jsen mislukt als die opstartgraaf vóór de opdrachtdispatch statisch een extern pakket importeert (Commander, gebruikersinterfaces voor prompts, undici, logregistratie en vergelijkbare opstartintensieve afhankelijkheden tellen allemaal mee); daarnaast beperkt deze het meegebundelde uitvoeringssegment van de Gateway tot 70 KB en weigert deze statische imports van bekende zelden gebruikte Gateway-paden (control-ui-assets,diagnostic-stability-bundle,onboard-helpers,process-respawn,restart-sentinel,server-close,server-reload-handlers) vanuit dat segment.scripts/release-check.tsvoert afzonderlijk snelle tests uit op de verpakte CLI met--help,onboard --help,doctor --help,status --json --timeout 1,config schemaenmodels list --provider openai. - Verouderde compatibiliteit van Package Acceptance is begrensd op
2026.4.25(inclusief2026.4.25-beta.*). Tot en met die grens tolereert het harnas alleen hiaten in metadata van uitgebrachte pakketten: weggelaten vermeldingen in de persoonlijke QA-inventaris, ontbrekendegateway install --wrapper, ontbrekende patchbestanden in de uit de tarball afgeleide Git-fixture, ontbrekende opgeslagenupdate.channel, verouderde locaties van plugin-installatierecords, ontbrekende opslag van marketplace-installatierecords en migratie van configuratiemetadata tijdensplugins update. Voor pakketten na2026.4.25gelden deze paden als strikte fouten. - Uitvoerders voor snelle containertests:
test:docker:openwebui,test:docker:onboard,test:docker:npm-onboard-channel-agent,test:docker:release-user-journey,test:docker:release-typed-onboarding,test:docker:release-media-memory,test:docker:release-upgrade-user-journey,test:docker:release-plugin-marketplace,test:docker:skill-install,test:docker:update-channel-switch,test:docker:upgrade-survivor,test:docker:published-upgrade-survivor,test:docker:session-runtime-context,test:docker:agents-delete-shared-workspace,test:docker:gateway-network,test:docker:browser-cdp-snapshot,test:docker:mcp-channels,test:docker:agent-bundle-mcp-tools,test:docker:cron-mcp-cleanup,test:docker:plugins,test:docker:plugin-update,test:docker:plugin-lifecycle-matrixentest:docker:config-reloadstarten een of meer echte containers en verifiëren integratiepaden op hoger niveau. - Docker/Bash E2E-trajecten die de verpakte OpenClaw-tarball installeren via
scripts/lib/openclaw-e2e-instance.sh, begrenzennpm installmetOPENCLAW_E2E_NPM_INSTALL_TIMEOUT(standaard600s; stel0in om de omhulling uit te schakelen voor foutopsporing).
De Docker-uitvoeringen voor livemodellen koppelen bovendien alleen de benodigde CLI-authenticatiethuismappen (of alle ondersteunde mappen wanneer de uitvoering niet is beperkt) en kopiëren deze vervolgens vóór de uitvoering naar de thuismap van de container, zodat OAuth van externe CLI's tokens kan vernieuwen zonder de authenticatieopslag van de host te wijzigen:
-
Rechtstreekse modellen:
pnpm test:docker:live-models(script:scripts/test-live-models-docker.sh) -
Snelle ACP-bindingscontrole:
pnpm test:docker:live-acp-bind(script:scripts/test-live-acp-bind-docker.sh; omvat standaard Claude, Codex en Gemini, met strikte dekking voor Droid/OpenCode viapnpm test:docker:live-acp-bind:droidenpnpm test:docker:live-acp-bind:opencode) -
Snelle controle van de CLI-backend:
pnpm test:docker:live-cli-backend(script:scripts/test-live-cli-backend-docker.sh) -
Snelle controle van het Codex-appserverharnas:
pnpm test:docker:live-codex-harness(script:scripts/test-live-codex-harness-docker.sh) -
Gateway + ontwikkelagent:
pnpm test:docker:live-gateway(script:scripts/test-live-gateway-models-docker.sh) -
Snelle controles voor observeerbaarheid:
pnpm qa:otel:smoke,pnpm qa:prometheus:smokeenpnpm qa:observability:smokezijn persoonlijke QA-trajecten voor broncodecheck-outs. Ze maken bewust geen deel uit van Docker-releasetrajecten voor pakketten, omdat de npm-tarball QA Lab weglaat. -
Snelle live-controle van Open WebUI:
pnpm test:docker:openwebui(script:scripts/e2e/openwebui-docker.sh) -
Wizard voor eerste configuratie (TTY, volledige basisstructuur):
pnpm test:docker:onboard(script:scripts/e2e/onboard-docker.sh) -
Snelle controle van eerste configuratie/kanaal/agent met een npm-tarball:
pnpm test:docker:npm-onboard-channel-agentinstalleert de verpakte OpenClaw-tarball globaal in Docker, configureert OpenAI via eerste configuratie met een omgevingsverwijzing en standaard ook Telegram, voert doctor uit en voert één nagebootste OpenAI-agentbeurt uit. Hergebruik een vooraf gebouwde tarball metOPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz, sla de herbouw op de host over metOPENCLAW_NPM_ONBOARD_HOST_BUILD=0of wissel van kanaal metOPENCLAW_NPM_ONBOARD_CHANNEL=discordofOPENCLAW_NPM_ONBOARD_CHANNEL=slack. -
Smoke-test voor de gebruikersreis van een release:
pnpm test:docker:release-user-journeyinstalleert de verpakte OpenClaw-tarball globaal in een schone Docker-homemap, voert de onboarding uit, configureert een nagebootste OpenAI-provider, voert een agentbeurt uit, installeert en verwijdert externe plugins, configureert ClickClack met een lokale fixture, verifieert uitgaande en inkomende berichten, herstart de Gateway en voert doctor uit. -
Smoke-test voor getypeerde onboarding van een release:
pnpm test:docker:release-typed-onboardinginstalleert de verpakte tarball, doorlooptopenclaw onboardvia een echte TTY, configureert OpenAI als provider met een omgevingsvariabelereferentie, verifieert dat de onbewerkte sleutel niet wordt opgeslagen en voert een nagebootste agentbeurt uit. -
Smoke-test voor media/geheugen van een release:
pnpm test:docker:release-media-memoryinstalleert de verpakte tarball en verifieert beeldbegrip van een PNG-bijlage, uitvoer van OpenAI-compatibele beeldgeneratie, herinnering via geheugenzoekopdrachten en het behoud daarvan na een herstart van de Gateway. -
Smoke-test voor de gebruikersreis bij een release-upgrade:
pnpm test:docker:release-upgrade-user-journeyinstalleert standaard de nieuwste gepubliceerde basisversie die ouder is dan de kandidaat-tarball, configureert de status van de provider, plugin en ClickClack in het gepubliceerde pakket, voert een upgrade uit naar de kandidaat-tarball en doorloopt vervolgens opnieuw de kernreis voor agent, plugin en kanaal. Als er geen oudere gepubliceerde basisversie bestaat, wordt de kandidaatversie opnieuw gebruikt. Overschrijf de basisversie metOPENCLAW_RELEASE_UPGRADE_BASELINE_SPEC=openclaw@<version>. -
Smoke-test voor de pluginmarktplaats van een release:
pnpm test:docker:release-plugin-marketplaceinstalleert vanuit een lokale fixturemarktplaats, werkt de geïnstalleerde plugin bij, verwijdert deze en verifieert dat de plugin-CLI verdwijnt en de installatiemetadata wordt opgeschoond. -
Smoke-test voor de installatie van een Skill:
pnpm test:docker:skill-installinstalleert de verpakte OpenClaw-tarball globaal in Docker, schakelt installaties van geüploade archieven uit in de configuratie, bepaalt via zoeken de slug van de huidige live ClawHub-Skill, installeert deze metopenclaw skills installen verifieert de geïnstalleerde Skill plus de oorsprongs- en vergrendelingsmetadata van.clawhub. -
Smoke-test voor het wisselen van updatekanaal:
pnpm test:docker:update-channel-switchinstalleert de verpakte OpenClaw-tarball globaal in Docker, schakelt over van pakketkanaalstablenaar git-kanaaldev, verifieert het opgeslagen kanaal en de werking van de plugin na de update, schakelt vervolgens terug naar pakketkanaalstableen controleert de updatestatus. -
Smoke-test voor behoud na upgrades:
pnpm test:docker:upgrade-survivorinstalleert de verpakte OpenClaw-tarball over een vervuilde fixture van een bestaande gebruiker met agents, kanaalconfiguratie, plugin-toelatingslijsten, verouderde status van pluginafhankelijkheden en bestaande werkruimte- en sessiebestanden. De test voert zonder actieve provider- of kanaalsleutels een pakketupdate en niet-interactieve doctor uit, start vervolgens een Gateway via local loopback en controleert het behoud van configuratie en status, plus de budgetten voor opstarten en status. -
Smoke-test voor behoud na een gepubliceerde upgrade:
pnpm test:docker:published-upgrade-survivorinstalleert standaardopenclaw@latest, maakt realistische bestanden voor een bestaande gebruiker aan, configureert die basisversie met een ingebouwd opdrachtrecept, valideert de resulterende configuratie, werkt die gepubliceerde installatie bij naar de kandidaat-tarball, voert niet-interactieve doctor uit, schrijft.artifacts/upgrade-survivor/summary.jsonen start vervolgens een Gateway via local loopback om geconfigureerde intenties, statusbehoud, opstarten,/healthz,/readyzen RPC-statusbudgetten te controleren. Overschrijf één basisversie metOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, laat de overkoepelende planner exacte lokale basisversies uitbreiden metOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS, zoalsopenclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15, en breid probleemgerichte fixtures uit metOPENCLAW_UPGRADE_SURVIVOR_SCENARIOS, zoalsreported-issues; de verzameling gemelde problemen bevatconfigured-plugin-installsvoor automatisch herstel van de installatie van externe OpenClaw-plugins. Pakketacceptatie stelt deze beschikbaar alspublished_upgrade_survivor_baseline,published_upgrade_survivor_baselinesenpublished_upgrade_survivor_scenarios, zet metatokens voor basisversies zoalslast-stable-4ofall-since-2026.4.23om en breidt bij volledige releasevalidatie de langdurige pakketcontrole van de release uit naarlast-stable-4 2026.4.23 2026.5.2 2026.4.15plusreported-issues. -
Smoke-test voor sessieruntimecontext:
pnpm test:docker:session-runtime-contextverifieert het opslaan van verborgen runtimecontext in het transcript, plus herstel door doctor van getroffen dubbele vertakkingen voor het herschrijven van prompts. -
Smoke-test voor globale installatie met Bun:
bash scripts/e2e/bun-global-install-smoke.shverpakt de huidige bronstructuur, installeert deze metbun install -gin een geïsoleerde homemap en verifieert datopenclaw infer image providers --jsongebundelde beeldproviders retourneert in plaats van te blijven hangen. Gebruik een vooraf gebouwde tarball opnieuw metOPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz, sla de build op de host over metOPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0of kopieerdist/uit een gebouwde Docker-image metOPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local. -
Docker-smoke-test voor het installatieprogramma:
bash scripts/test-install-sh-docker.shdeelt één npm-cache tussen de containers voor root, updates en rechtstreekse npm-installaties. De smoke-test voor updates gebruikt standaard npmlatestals stabiele basisversie voordat een upgrade naar de kandidaat-tarball wordt uitgevoerd. Overschrijf dit lokaal metOPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22of op GitHub met de invoerupdate_baseline_versionvan de workflow voor de installatiesmoke-test. Controles van het installatieprogramma zonder rootrechten behouden een geïsoleerde npm-cache, zodat cachevermeldingen die eigendom zijn van root het gedrag van gebruikerslokale installaties niet verhullen. StelOPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cachein om de cache voor root, updates en rechtstreekse npm-installaties opnieuw te gebruiken bij lokale herhalingen. -
De CI voor installatiesmoke-tests slaat de dubbele rechtstreekse globale npm-update over met
OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1; voer het script lokaal zonder die omgevingsvariabele uit wanneer dekking van een rechtstreeksenpm install -gnodig is. -
CLI-smoke-test voor agents die een gedeelde werkruimte verwijderen:
pnpm test:docker:agents-delete-shared-workspace(script:scripts/e2e/agents-delete-shared-workspace-docker.sh) bouwt standaard de image uit het Dockerfile in de hoofdmap, maakt in een geïsoleerde container-homemap twee agents met één werkruimte aan, voertagents delete --jsonuit en verifieert geldige JSON plus het behoud van de werkruimte. Gebruik de image van de installatiesmoke-test opnieuw metOPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1. -
Gateway-netwerken en levenscyclus van de host:
pnpm test:docker:gateway-network(script:scripts/e2e/gateway-network-docker.sh) behoudt de LAN-smoke-test voor WebSocket-authenticatie en status met twee containers en gebruikt vervolgens Admin HTTP via local loopback om afscherming tijdens voorbereiding, toegang voor behouden besturing, herstel bij hervatting en een voorbereide stop/start in dezelfde container aan te tonen. De herstartcontrole moet zijn voltooid voordat de oorspronkelijke lease verloopt, verifieert dat de opschortingsstatus proceslokaal is terwijl de opgeslagen Gateway-configuratie en containeridentiteit behouden blijven, en produceert machineleesbare JSON met fasetijden. -
Smoke-test voor CDP-snapshots van de browser:
pnpm test:docker:browser-cdp-snapshot(script:scripts/e2e/browser-cdp-snapshot-docker.sh) bouwt de E2E-image uit de broncode plus een Chromium-laag, start Chromium met onbewerkte CDP, voertbrowser doctor --deepuit en verifieert dat CDP-rolsnapshots URL's van links, door de cursor als klikbaar aangemerkte elementen, iframe-verwijzingen en framemetadata omvatten. -
Regressietest voor minimale redeneerinspanning bij OpenAI Responses
web_search:pnpm test:docker:openai-web-search-minimal(script:scripts/e2e/openai-web-search-minimal-docker.sh) voert via de Gateway een nagebootste OpenAI-server uit, verifieert datweb_searchreasoning.effortverhoogt vanminimalnaarlow, forceert vervolgens een afwijzing door het providerschema en controleert of de onbewerkte details in de Gateway-logboeken verschijnen. -
MCP-kanaalbrug (vooraf gevulde Gateway + stdio-brug + smoke-test met onbewerkte Claude-meldingsframes):
pnpm test:docker:mcp-channels(script:scripts/e2e/mcp-channels-docker.sh) -
MCP-hulpmiddelen in de OpenClaw-bundel (echte stdio-MCP-server + smoke-test voor toestaan/weigeren met een ingebed OpenClaw-profiel):
pnpm test:docker:agent-bundle-mcp-tools(script:scripts/e2e/agent-bundle-mcp-tools-docker.sh) -
MCP-opruiming voor Cron/subagents (echte Gateway + beëindiging van onderliggende stdio-MCP-processen na geïsoleerde Cron-uitvoeringen en eenmalige subagentuitvoeringen):
pnpm test:docker:cron-mcp-cleanup(script:scripts/e2e/cron-mcp-cleanup-docker.sh) -
Plugins (smoke-test voor installatie/update via lokaal pad,
file:, npm-register met omhooggetilde afhankelijkheden, ongeldige metadata van npm-pakketten, veranderende git-verwijzingen, uitgebreide ClawHub-fixture, marktplaatsupdates en inschakelen/inspecteren van Claude-bundels):pnpm test:docker:plugins(script:scripts/e2e/plugins-docker.sh) StelOPENCLAW_PLUGINS_E2E_CLAWHUB=0in om het ClawHub-blok over te slaan, of overschrijf het standaardpaar van uitgebreid pakket en runtime metOPENCLAW_PLUGINS_E2E_CLAWHUB_SPECenOPENCLAW_PLUGINS_E2E_CLAWHUB_ID. ZonderOPENCLAW_CLAWHUB_URL/CLAWHUB_URLgebruikt de test een hermetische lokale ClawHub-fixtureserver. -
Smoke-test voor een ongewijzigde plugin-update:
pnpm test:docker:plugin-update(script:scripts/e2e/plugin-update-unchanged-docker.sh) -
Smoke-test voor de levenscyclusmatrix van plugins:
pnpm test:docker:plugin-lifecycle-matrixinstalleert de verpakte OpenClaw-tarball in een kale container, installeert een npm-plugin, schakelt deze in en uit, voert via een lokaal npm-register upgrades en downgrades uit, verwijdert de geïnstalleerde code en verifieert vervolgens dat verwijdering nog steeds de verouderde status opruimt, terwijl voor elke levenscyclusfase RSS- en CPU-metrieken worden vastgelegd. -
Smoke-test voor metadata bij het herladen van configuratie:
pnpm test:docker:config-reload(script:scripts/e2e/config-reload-source-docker.sh) -
Plugins:
pnpm test:docker:pluginsdekt smoke-tests voor installatie/update via een lokaal pad,file:, een npm-register met omhooggetilde afhankelijkheden, veranderende git-verwijzingen, ClawHub-fixtures, marktplaatsupdates en het inschakelen/inspecteren van Claude-bundels.pnpm test:docker:plugin-updatedekt ongewijzigd updategedrag voor geïnstalleerde plugins.pnpm test:docker:plugin-lifecycle-matrixdekt met resourcebewaking uitgevoerde installatie, inschakeling, uitschakeling, upgrade, downgrade en verwijdering bij ontbrekende code van npm-plugins.
Om de gedeelde functionele image handmatig vooraf te bouwen en opnieuw te gebruiken:
OPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local pnpm test:docker:e2e-buildOPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:mcp-channelsSuitespecifieke image-overschrijvingen zoals OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE hebben nog steeds voorrang wanneer ze zijn ingesteld. Wanneer OPENCLAW_SKIP_DOCKER_BUILD=1 naar een externe gedeelde image verwijst, halen de scripts deze op als de image nog niet lokaal aanwezig is. De Docker-tests voor QR en het installatieprogramma behouden hun eigen Dockerfiles, omdat ze het gedrag van pakketten en installaties valideren in plaats van de gedeelde runtime van de gebouwde app.
De Docker-runners voor live modellen koppelen de huidige checkout ook alleen-lezen aan
en plaatsen deze in een tijdelijke werkmap in de container. Zo blijft de
runtime-image klein, terwijl Vitest toch wordt uitgevoerd op exact uw lokale
broncode en configuratie. De voorbereidingsstap slaat grote uitsluitend lokale caches en builduitvoer
van apps over, zoals .pnpm-store, .worktrees, __openclaw_vitest__ en
app-lokale .build- of Gradle-uitvoermappen, zodat live Docker-uitvoeringen niet
minutenlang machinespecifieke artefacten kopiëren. Ze stellen ook
OPENCLAW_SKIP_CHANNELS=1 in, zodat live Gateway-controles geen echte
kanaalworkers voor Telegram/Discord/enzovoort in de container starten.
test:docker:live-models voert nog steeds pnpm test:live uit, dus geef ook
OPENCLAW_LIVE_GATEWAY_* door wanneer u de live Gateway-dekking in die
Docker-lane wilt beperken of uitsluiten.
test:docker:openwebui is een compatibiliteits-smoketest op een hoger niveau: deze start een
OpenClaw Gateway-container waarin de OpenAI-compatibele HTTP-eindpunten zijn ingeschakeld,
start een vastgezette Open WebUI-container die met die Gateway is verbonden, meldt zich aan via
Open WebUI, controleert of /api/models openclaw/default beschikbaar stelt en verzendt vervolgens een
echt chatverzoek via de proxy /api/chat/completions van Open WebUI. Stel
OPENWEBUI_SMOKE_MODE=models in voor CI-controles van het releasepad die moeten stoppen
na aanmelding bij Open WebUI en modeldetectie, zonder te wachten op de voltooiing door een live model.
De eerste uitvoering kan merkbaar langzamer zijn omdat Docker mogelijk de
Open WebUI-image moet ophalen en Open WebUI mogelijk de eigen
installatie voor een koude start moet voltooien. Deze lane verwacht een bruikbare sleutel voor een live model, aangeleverd via
de procesomgeving, voorbereide authenticatieprofielen of een expliciet
OPENCLAW_PROFILE_FILE. Geslaagde uitvoeringen tonen een kleine JSON-payload zoals
{ "ok": true, "model": "openclaw/default", ... }.
test:docker:mcp-channels is opzettelijk deterministisch en heeft geen
echt Telegram-, Discord- of iMessage-account nodig. Deze test start een vooraf gevulde Gateway-
container, start een tweede container die openclaw mcp serve uitvoert en
controleert vervolgens gerouteerde gespreksdetectie, het lezen van transcripties, metagegevens van
bijlagen, het gedrag van de live-gebeurteniswachtrij, routering van uitgaande verzendingen en Claude-achtige
kanaal- en machtigingsmeldingen via de echte stdio-MCP-brug. De
meldingscontrole inspecteert de onbewerkte stdio-MCP-frames rechtstreeks, zodat de smoketest
valideert wat de brug daadwerkelijk uitstuurt en niet alleen wat een specifieke client-SDK
toevallig beschikbaar stelt.
test:docker:agent-bundle-mcp-tools is deterministisch en heeft geen
sleutel voor een live model nodig. Deze test bouwt de Docker-image van de repo, start een echte stdio-MCP-
probeserver in de container, realiseert die server via de
ingebedde MCP-runtime van de OpenClaw-bundel, voert de tool uit en controleert vervolgens
of coding en messaging de bundle-mcp-tools behouden, terwijl minimal en
tools.deny: ["bundle-mcp"] ze uitfilteren.
test:docker:cron-mcp-cleanup is deterministisch en heeft geen sleutel voor een live
model nodig. Deze test start een vooraf gevulde Gateway met een echte stdio-MCP-probeserver,
voert een geïsoleerde Cron-beurt en een eenmalige onderliggende sessions_spawn-beurt uit en
controleert vervolgens of het onderliggende MCP-proces na elke uitvoering wordt afgesloten.
Handmatige ACP-smoketest voor threads in gewone taal (niet voor CI):
bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...- Bewaar dit script voor regressie- en foutopsporingsworkflows. Het kan opnieuw nodig zijn voor de validatie van ACP-threadroutering, dus verwijder het niet.
Nuttige omgevingsvariabelen:
OPENCLAW_CONFIG_DIR=...(standaard:~/.openclaw) gekoppeld aan/home/node/.openclawOPENCLAW_WORKSPACE_DIR=...(standaard:~/.openclaw/workspace) gekoppeld aan/home/node/.openclaw/workspaceOPENCLAW_PROFILE_FILE=...gekoppeld en ingelezen voordat tests worden uitgevoerdOPENCLAW_DOCKER_PROFILE_ENV_ONLY=1om alleen omgevingsvariabelen te controleren die uitOPENCLAW_PROFILE_FILEzijn ingelezen, met tijdelijke configuratie-/werkruimtemappen en zonder externe CLI-authenticatiekoppelingenOPENCLAW_DOCKER_CLI_TOOLS_DIR=...(standaard:~/.cache/openclaw/docker-cli-tools, tenzij de uitvoering al een door CI/beheer bepaalde gekoppelde map gebruikt) gekoppeld aan/home/node/.npm-globalvoor gecachete CLI-installaties in Docker- Externe mappen/bestanden voor CLI-authenticatie onder
$HOMEworden als alleen-lezen gekoppeld onder/host-auth...en vervolgens naar/home/node/...gekopieerd voordat tests starten- Standaardmappen (gebruikt wanneer de uitvoering niet tot specifieke providers is beperkt):
.factory,.gemini,.minimax - Standaardbestanden:
~/.codex/auth.json,~/.codex/config.toml,.claude.json,~/.claude/.credentials.json,~/.claude/settings.json,~/.claude/settings.local.json - Uitvoeringen die tot providers zijn beperkt, koppelen alleen de benodigde mappen/bestanden die zijn afgeleid uit
OPENCLAW_LIVE_PROVIDERS/OPENCLAW_LIVE_GATEWAY_PROVIDERS - Overschrijf dit handmatig met
OPENCLAW_DOCKER_AUTH_DIRS=all,OPENCLAW_DOCKER_AUTH_DIRS=noneof een door komma's gescheiden lijst zoalsOPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex
- Standaardmappen (gebruikt wanneer de uitvoering niet tot specifieke providers is beperkt):
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=...om de uitvoering te beperkenOPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=...om providers in de container te filterenOPENCLAW_SKIP_DOCKER_BUILD=1om een bestaandeopenclaw:local-live-image te hergebruiken voor nieuwe uitvoeringen waarvoor geen herbouw nodig isOPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1om te waarborgen dat aanmeldgegevens uit de profielopslag komen (niet uit de omgeving)OPENCLAW_OPENWEBUI_MODEL=...om het model te kiezen dat de Gateway voor de Open WebUI-smoketest beschikbaar steltOPENCLAW_OPENWEBUI_PROMPT=...om de prompt voor nonce-controle te overschrijven die door de Open WebUI-smoketest wordt gebruiktOPENWEBUI_IMAGE=...om de vastgezette tag van de Open WebUI-image te overschrijven
Documentatiecontrole
Voer na documentatiewijzigingen documentatiecontroles uit: pnpm check:docs.
Voer de volledige Mintlify-validatie van ankers uit wanneer u ook koppen binnen pagina's moet controleren: pnpm docs:check-links:anchors.
Offline regressie (veilig voor CI)
Dit zijn regressies van de „echte pijplijn” zonder echte providers:
- Toolaanroepen via de Gateway (nagebootste OpenAI, echte Gateway + agentlus):
src/gateway/gateway.test.ts(testgeval: „voert een nagebootste OpenAI-toolaanroep end-to-end uit via de agentlus van de Gateway”) - Gateway-wizard (WS
wizard.start/wizard.next, schrijft configuratie + dwingt authenticatie af):src/gateway/gateway.test.ts(testgeval: „voert de wizard uit via ws en schrijft de configuratie van het authenticatietoken”)
Evaluaties van agentbetrouwbaarheid (Skills)
We hebben al enkele CI-veilige tests die zich gedragen als „evaluaties van agentbetrouwbaarheid”:
- Nagebootste toolaanroepen via de echte Gateway + agentlus (
src/gateway/gateway.test.ts). - End-to-end wizardstromen die sessiekoppeling en configuratie-effecten valideren (
src/gateway/gateway.test.ts).
Wat nog ontbreekt voor Skills (zie Skills):
- Besluitvorming: wanneer Skills in de prompt worden vermeld, kiest de agent dan de juiste Skill (of vermijdt deze irrelevante Skills)?
- Naleving: leest de agent
SKILL.mdvóór gebruik en volgt deze de vereiste stappen/argumenten? - Workflowcontracten: scenario's met meerdere beurten die de toolvolgorde, het meenemen van de sessiegeschiedenis en sandboxgrenzen controleren.
Toekomstige evaluaties moeten eerst deterministisch blijven:
- Een scenariorunner die nagebootste providers gebruikt om toolaanroepen + volgorde, het lezen van Skill-bestanden en sessiekoppeling te controleren.
- Een kleine suite met op Skills gerichte scenario's (gebruiken versus vermijden, poortcontrole, promptinjectie).
- Optionele live-evaluaties (opt-in, gestuurd via omgevingsvariabelen), maar pas nadat de CI-veilige suite beschikbaar is.
Contracttests (vorm van plugins en kanalen)
Contracttests controleren of elke geregistreerde plugin en elk geregistreerd kanaal voldoet aan
het bijbehorende interfacecontract. Ze doorlopen alle gedetecteerde plugins en voeren een
suite met controles op vorm en gedrag uit. De standaard unit-lane van pnpm test
slaat deze gedeelde overgangs- en smoketestbestanden opzettelijk over; voer de contract-
opdrachten expliciet uit wanneer u gedeelde kanaal- of provideroppervlakken wijzigt.
Opdrachten
- Alle contracten:
pnpm test:contracts - Alleen kanaalcontracten:
pnpm test:contracts:channels - Alleen providercontracten:
pnpm test:contracts:plugins
Kanaalcontracten
Bevinden zich in src/channels/plugins/contracts/*.contract.test.ts. Huidige
hoofdcategorieën:
- kanaalcatalogus - metagegevens van kanaalcatalogusvermeldingen uit de bundel/registry
- plugin (gebaseerd op de registry, geshard) - basisvorm van pluginregistratie
- alleen-oppervlakken (gebaseerd op de registry, geshard) - vormcontroles per oppervlak voor
actions,setup,status,outbound,messaging,threading,directoryengateway - sessiekoppeling (gebaseerd op de registry) - gedrag van sessiekoppeling
- uitgaande-payload - structuur en normalisatie van berichtpayloads
- groepsbeleid (fallback) - afdwinging van het standaardgroepsbeleid per kanaal
- threads (gebaseerd op de registry, geshard) - verwerking van thread-id's
- map (gebaseerd op de registry, geshard) - API voor mappen/deelnemerslijsten
- registry en plugins-core.* - internals voor het kanaalpluginregister, de lader en autorisatie voor het schrijven van configuratie
Helpers voor het testharnas voor het vastleggen van inkomende dispatches en uitgaande payloads die door deze
suites worden gebruikt, zijn intern beschikbaar via src/plugin-sdk/channel-contract-testing.ts
(uitgesloten van npm, geen openbaar SDK-subpad); er is geen zelfstandig
bestand inbound.contract.test.ts in deze map.
Providercontracten
Bevinden zich in src/plugins/contracts/*.contract.test.ts. Huidige categorieën
omvatten:
- vorm - vorm van het pluginmanifest, de API en runtime-exports
- pluginregistratie (+ parallel) - gevallen voor manifestregistratie
- pakketmanifest - vereisten voor pakketmanifesten
- lader - gedrag bij het instellen/afbreken van de pluginlader
- registry - inhoud en zoekfunctionaliteit van de registry voor plugincontracten
- providers - gedeeld providergedrag voor gebundelde providers, plus providers voor zoeken op het web
- authenticatiekeuze - metagegevens van de authenticatiekeuze en installatiegedrag
- veroudering-providercatalogus - metagegevens van verouderde providercatalogi
- wizard.choice-resolution, wizard.model-picker, wizard.setup-options - contracten van de wizard voor providerinstallatie
- embedding-provider, memory-embedding-provider, web-fetch-provider, tts - mogelijkhedenpecifieke providercontracten
- session-actions, session-attachments, session-entry-projection - contracten voor sessiestatus in eigendom van plugins
- scheduled-turns - metagegevens en tijdstempelgrenzen voor geplande pluginbeurten
- host-hooks, run-context-lifecycle, runtime-import-side-effects, runtime-seams - contracten voor de levenscyclus en importgrenzen van pluginhosts/runtimes
- extension-runtime-dependencies - plaatsing van runtime-afhankelijkheden voor extensies
Wanneer uitvoeren
- Na het wijzigen van plugin-SDK-exports of subpaden
- Na het toevoegen of wijzigen van een kanaal- of providerplugin
- Na het herstructureren van pluginregistratie of -detectie
Contracttests worden uitgevoerd in CI en vereisen geen echte API-sleutels.
Regressies toevoegen (richtlijnen)
Wanneer u een live ontdekt provider-/modelprobleem oplost:
- Voeg indien mogelijk een CI-veilige regressie toe (nagebootste/gestubde provider of leg de exacte transformatie van de verzoekvorm vast)
- Als het probleem inherent alleen live optreedt (snelheidslimieten, authenticatiebeleid), houd de live-test dan beperkt en opt-in via omgevingsvariabelen
- Richt u bij voorkeur op de kleinste laag die de fout opvangt:
- fout bij conversie/herhaling van providerverzoeken -> directe modeltest
- fout in de sessie-/geschiedenis-/toolpijplijn van de Gateway -> live-smoketest van de Gateway of CI-veilige nagebootste Gateway-test
- Beveiliging voor het doorlopen van SecretRef:
src/secrets/exec-secret-ref-id-parity.test.tsleidt per SecretRef-klasse één bemonsterd doel af uit registrymetagegevens (listSecretTargetRegistryEntries()) en controleert vervolgens of exec-id's met doorloopsegmenten worden geweigerd.- Als u een nieuwe
includeInPlan-SecretRef-doelfamilie toevoegt insrc/secrets/target-registry-data.ts, werk danclassifyTargetClassin die test bij. De test faalt opzettelijk bij niet-geclassificeerde doel-id's, zodat nieuwe klassen niet ongemerkt kunnen worden overgeslagen.