Testing

Tests

OpenClaw dispose de trois suites Vitest (unitĂ©/intĂ©gration, e2e, live) et d’un petit ensemble de runners Docker. Ce document est un guide « comment nous testons » :

  • Ce que couvre chaque suite (et ce qu’elle ne couvre dĂ©libĂ©rĂ©ment pas).
  • Quelles commandes exĂ©cuter pour les workflows courants (local, prĂ©-push, dĂ©bogage).
  • Comment les tests live dĂ©couvrent les identifiants et sĂ©lectionnent les modĂšles/fournisseurs.
  • Comment ajouter des rĂ©gressions pour les problĂšmes rĂ©els de modĂšles/fournisseurs.

Démarrage rapide

La plupart du temps :

  • Gate complet (attendu avant push) : pnpm build && pnpm check && pnpm check:test-types && pnpm test
  • ExĂ©cution plus rapide de toute la suite en local sur une machine confortable : pnpm test:max
  • Boucle de surveillance Vitest directe : pnpm test:watch
  • Le ciblage direct de fichiers route dĂ©sormais aussi les chemins d’extension/canal : pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts
  • PrĂ©fĂ©rez d’abord les exĂ©cutions ciblĂ©es lorsque vous itĂ©rez sur un seul Ă©chec.
  • Site QA adossĂ© Ă  Docker : pnpm qa:lab:up
  • Voie QA adossĂ©e Ă  une VM Linux : pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline

Lorsque vous touchez aux tests ou souhaitez davantage de confiance :

  • Gate de couverture : pnpm test:coverage
  • Suite E2E : pnpm test:e2e

Répertoires temporaires de test

PrĂ©fĂ©rez les helpers partagĂ©s dans test/helpers/temp-dir.ts pour les rĂ©pertoires temporaires dĂ©tenus par les tests. Ils rendent la propriĂ©tĂ© explicite et gardent le nettoyage dans le mĂȘme cycle de vie de test :

ts
  const tempDirs = useAutoCleanupTempDirTracker(afterEach); it("uses a temp workspace", () => {  const workspace = tempDirs.make("openclaw-example-");  // use workspace});

useAutoCleanupTempDirTracker(afterEach) n’expose volontairement aucune mĂ©thode de nettoyage manuel ; Vitest possĂšde le nettoyage aprĂšs chaque test. Les helpers de plus bas niveau existants restent disponibles pour les tests qui n’ont pas encore migrĂ©, mais les tests nouveaux et migrĂ©s doivent utiliser le tracker Ă  nettoyage automatique. Évitez les nouveaux usages manuels de makeTempDir, cleanupTempDirs ou createTempDirTracker, ainsi que les nouveaux appels nus Ă  fs.mkdtemp* dans les tests, sauf si un cas vĂ©rifie explicitement le comportement brut des rĂ©pertoires temporaires. Ajoutez un commentaire d’autorisation auditable avec une raison concrĂšte lorsqu’un test a intentionnellement besoin d’un rĂ©pertoire temporaire nu :

ts
// openclaw-temp-dir: allow verifies raw fs cleanup behaviorconst workspace = fs.mkdtempSync(prefix);

Pour la visibilitĂ© de migration, node scripts/report-test-temp-creations.mjs signale les nouvelles crĂ©ations nues de rĂ©pertoires temporaires et les nouveaux usages manuels des helpers partagĂ©s dans les lignes ajoutĂ©es du diff, sans bloquer les styles de nettoyage existants. Sa portĂ©e de fichiers suit volontairement la mĂȘme classification de chemins de test que scripts/changed-lanes.mjs au lieu de maintenir une heuristique sĂ©parĂ©e de noms de fichiers de helpers de test, tout en ignorant l’implĂ©mentation du helper partagĂ© elle-mĂȘme. check:changed exĂ©cute ce rapport pour les chemins de test modifiĂ©s comme signal CI en avertissement uniquement ; les constats sont des annotations d’avertissement GitHub, pas des Ă©checs.

Lors du débogage de vrais fournisseurs/modÚles (nécessite de vrais identifiants) :

  • Suite live (modĂšles + sondes d’outils/images Gateway) : pnpm test:live
  • Cibler silencieusement un seul fichier live : pnpm test:live -- src/agents/models.profiles.live.test.ts
  • Rapports de performance runtime : dĂ©clenchez OpenClaw Performance avec live_openai_candidate=true pour un vrai tour d’agent openai/gpt-5.5 ou deep_profile=true pour les artefacts CPU/heap/trace Kova. Les exĂ©cutions planifiĂ©es quotidiennes publient les artefacts des voies mock-provider, deep-profile et GPT 5.5 vers openclaw/clawgrit-reports lorsque CLAWGRIT_REPORTS_TOKEN est configurĂ©. Le rapport mock-provider inclut aussi les chiffres de dĂ©marrage Gateway au niveau source, de mĂ©moire, de pression Plugin, de boucle hello rĂ©pĂ©tĂ©e avec faux modĂšle et de dĂ©marrage CLI.
  • Balayage live des modĂšles Docker : pnpm test:docker:live-models
    • Chaque modĂšle sĂ©lectionnĂ© exĂ©cute dĂ©sormais un tour texte plus une petite sonde de type lecture de fichier. Les modĂšles dont les mĂ©tadonnĂ©es annoncent une entrĂ©e image exĂ©cutent aussi un minuscule tour image. DĂ©sactivez les sondes supplĂ©mentaires avec OPENCLAW_LIVE_MODEL_FILE_PROBE=0 ou OPENCLAW_LIVE_MODEL_IMAGE_PROBE=0 lorsque vous isolez des Ă©checs fournisseur.
    • Couverture CI : les workflows quotidiens OpenClaw Scheduled Live And E2E Checks et manuels OpenClaw Release Checks appellent tous deux le workflow live/E2E rĂ©utilisable avec include_live_suites: true, ce qui inclut des jobs de matrice live Docker sĂ©parĂ©s par fournisseur.
    • Pour des relances CI ciblĂ©es, dĂ©clenchez OpenClaw Live And E2E Checks (Reusable) avec include_live_suites: true et live_models_only: true.
    • Ajoutez les nouveaux secrets fournisseur Ă  fort signal dans scripts/ci-hydrate-live-auth.sh ainsi que .github/workflows/openclaw-live-and-e2e-checks-reusable.yml et ses appelants planifiĂ©s/release.
  • Smoke de discussion liĂ©e Codex native : pnpm test:docker:live-codex-bind
    • ExĂ©cute une voie live Docker contre le chemin app-server Codex, lie un DM Slack synthĂ©tique avec /codex bind, exerce /codex fast et /codex permissions, puis vĂ©rifie qu’une rĂ©ponse simple et qu’une piĂšce jointe image passent par la liaison de Plugin native au lieu d’ACP.
  • Smoke du harnais app-server Codex : pnpm test:docker:live-codex-harness
    • ExĂ©cute des tours d’agent Gateway via le harnais app-server Codex dĂ©tenu par le Plugin, vĂ©rifie /codex status et /codex models, et exerce par dĂ©faut les sondes image, MCP cron, sous-agent et Guardian. DĂ©sactivez la sonde sous-agent avec OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0 lorsque vous isolez d’autres Ă©checs app-server Codex. Pour une vĂ©rification ciblĂ©e du sous-agent, dĂ©sactivez les autres sondes : 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. Cela quitte aprĂšs la sonde sous-agent sauf si OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0 est dĂ©fini.
  • Smoke d’installation Codex Ă  la demande : pnpm test:docker:codex-on-demand
    • Installe le tarball OpenClaw empaquetĂ© dans Docker, exĂ©cute l’onboarding avec clĂ© API OpenAI, et vĂ©rifie que le Plugin Codex ainsi que la dĂ©pendance @openai/codex ont Ă©tĂ© tĂ©lĂ©chargĂ©s Ă  la demande dans la racine du projet npm gĂ©rĂ©.
  • Smoke de dĂ©pendance d’outil de Plugin live : pnpm test:docker:live-plugin-tool
    • EmpaquĂšte un Plugin fixture avec une vraie dĂ©pendance slugify, l’installe via npm-pack:, vĂ©rifie la dĂ©pendance sous la racine du projet npm gĂ©rĂ©, puis demande Ă  un modĂšle OpenAI live d’appeler l’outil Plugin et de renvoyer le slug masquĂ©.
  • Smoke de commande de secours Crestodian : pnpm test:live:crestodian-rescue-channel
    • VĂ©rification opt-in de ceinture et bretelles pour la surface de commande de secours du canal de messages. Elle exerce /crestodian status, met en file un changement de modĂšle persistant, rĂ©pond /crestodian yes, et vĂ©rifie le chemin d’écriture audit/config.
  • Smoke Docker du planificateur Crestodian : pnpm test:docker:crestodian-planner
    • ExĂ©cute Crestodian dans un conteneur sans config avec une fausse CLI Claude sur PATH et vĂ©rifie que le fallback de planificateur flou se traduit par une Ă©criture de config typĂ©e auditĂ©e.
  • Smoke Docker de premier lancement Crestodian : pnpm test:docker:crestodian-first-run
    • DĂ©marre depuis un rĂ©pertoire d’état OpenClaw vide, vĂ©rifie le point d’entrĂ©e Crestodian d’onboarding moderne, applique les Ă©critures setup/modĂšle/agent/Plugin Discord + SecretRef, valide la config et vĂ©rifie les entrĂ©es d’audit. Le mĂȘme chemin de configuration Ring 0 est aussi couvert dans QA Lab par pnpm openclaw qa suite --scenario crestodian-ring-zero-setup.
  • Smoke de coĂ»t Moonshot/Kimi : avec MOONSHOT_API_KEY dĂ©fini, exĂ©cutez openclaw models list --provider moonshot --json, puis exĂ©cutez un openclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --json isolĂ© contre moonshot/kimi-k2.6. VĂ©rifiez que le JSON indique Moonshot/K2.6 et que le transcript assistant stocke usage.cost normalisĂ©.

Runners propres Ă  QA

Ces commandes se trouvent à cÎté des suites de tests principales lorsque vous avez besoin du réalisme de QA-lab :

CI exĂ©cute QA Lab dans des workflows dĂ©diĂ©s. La paritĂ© agentique est imbriquĂ©e sous QA-Lab - All Lanes et la validation de release, pas dans un workflow PR autonome. La validation large doit utiliser Full Release Validation avec rerun_group=qa-parity ou le groupe QA des checks de release. Les checks de release stables/par dĂ©faut gardent le soak live/Docker exhaustif derriĂšre run_release_soak=true ; le profil full force le soak. QA-Lab - All Lanes s’exĂ©cute chaque nuit sur main et depuis un dĂ©clenchement manuel avec la voie de paritĂ© mock, la voie Matrix live, la voie Telegram live gĂ©rĂ©e par Convex et la voie Discord live gĂ©rĂ©e par Convex comme jobs parallĂšles. Les checks QA planifiĂ©s et de release passent explicitement Matrix --profile fast, tandis que l’entrĂ©e par dĂ©faut de la CLI Matrix et du workflow manuel reste all ; le dĂ©clenchement manuel peut fragmenter all en jobs transport, media, e2ee-smoke, e2ee-deep et e2ee-cli. OpenClaw Release Checks exĂ©cute la paritĂ© ainsi que les voies Matrix rapide et Telegram avant l’approbation de release, en utilisant mock-openai/gpt-5.5 pour les checks de transport de release afin qu’ils restent dĂ©terministes et Ă©vitent le dĂ©marrage normal des Plugins fournisseur. Ces Gateways de transport live dĂ©sactivent la recherche mĂ©moire ; le comportement mĂ©moire reste couvert par les suites de paritĂ© QA.

Les fragments media live de release complĂšte utilisent ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04, qui possĂšde dĂ©jĂ  ffmpeg et ffprobe. Les fragments live Docker modĂšle/backend utilisent l’image partagĂ©e ghcr.io/openclaw/openclaw-live-test:<sha> construite une fois par commit sĂ©lectionnĂ©, puis la tirent avec OPENCLAW_SKIP_DOCKER_BUILD=1 au lieu de reconstruire dans chaque fragment.

  • pnpm openclaw qa suite
    • ExĂ©cute les scĂ©narios QA adossĂ©s au dĂ©pĂŽt directement sur l’hĂŽte.
    • Écrit les artefacts de premier niveau qa-evidence.json, qa-suite-summary.json et qa-suite-report.md pour l’ensemble de scĂ©narios sĂ©lectionnĂ©, y compris les sĂ©lections de scĂ©narios Ă  flux mixtes, Vitest et Playwright.
    • Lorsqu’il est lancĂ© par pnpm openclaw qa run --qa-profile <profile>, intĂšgre la fiche d’évaluation du profil de taxonomie sĂ©lectionnĂ© dans le mĂȘme qa-evidence.json. smoke-ci Ă©crit des preuves allĂ©gĂ©es, ce qui dĂ©finit evidenceMode: "slim" et omet execution pour chaque entrĂ©e. release couvre la tranche organisĂ©e de prĂ©paration Ă  la publication ; all sĂ©lectionne chaque catĂ©gorie de maturitĂ© active et est destinĂ© aux lancements explicites du workflow Profile Evidence QA lorsqu’un artefact de fiche d’évaluation complet est nĂ©cessaire.
    • ExĂ©cute par dĂ©faut plusieurs scĂ©narios sĂ©lectionnĂ©s en parallĂšle avec des workers gateway isolĂ©s. qa-channel utilise par dĂ©faut une concurrence de 4 (bornĂ©e par le nombre de scĂ©narios sĂ©lectionnĂ©s). Utilisez --concurrency <count> pour ajuster le nombre de workers, ou --concurrency 1 pour l’ancienne voie sĂ©rie.
    • Se termine avec un code non nul lorsqu’un scĂ©nario Ă©choue. Utilisez --allow-failures lorsque vous voulez des artefacts sans code de sortie d’échec.
    • Prend en charge les modes fournisseur live-frontier, mock-openai et aimock. aimock dĂ©marre un serveur fournisseur local adossĂ© Ă  AIMock pour la couverture expĂ©rimentale par fixture et mock de protocole, sans remplacer la voie mock-openai consciente des scĂ©narios.
  • pnpm openclaw qa coverage --match <query>
    • Recherche dans les ID de scĂ©narios, les titres, les surfaces, les ID de couverture, les rĂ©fĂ©rences de docs, les rĂ©fĂ©rences de code, les plugins et les exigences de fournisseur, puis affiche les cibles de suite correspondantes.
    • Utilisez ceci avant une exĂ©cution QA Lab lorsque vous connaissez le comportement ou le chemin de fichier touchĂ©, mais pas le plus petit scĂ©nario. C’est seulement indicatif ; choisissez tout de mĂȘme la preuve mock, live, Multipass, Matrix ou de transport d’aprĂšs le comportement modifiĂ©.
  • pnpm test:plugins:kitchen-sink-live
    • ExĂ©cute l’épreuve complĂšte live du Plugin OpenAI Kitchen Sink via QA Lab. Elle installe le paquet Kitchen Sink externe, vĂ©rifie l’inventaire de surface du SDK de plugin, sonde /healthz et /readyz, enregistre les preuves CPU/RSS du gateway, exĂ©cute un tour OpenAI live et vĂ©rifie les diagnostics adversariaux. NĂ©cessite une authentification OpenAI live telle que OPENAI_API_KEY. Dans les sessions Testbox hydratĂ©es, elle source automatiquement le profil live-auth Testbox lorsque l’aide openclaw-testbox-env est prĂ©sente.
  • pnpm test:gateway:cpu-scenarios
    • ExĂ©cute le banc de dĂ©marrage du gateway plus un petit paquet de scĂ©narios QA Lab mock (channel-chat-baseline, memory-failure-fallback, gateway-restart-inflight-run) et Ă©crit un rĂ©sumĂ© combinĂ© des observations CPU sous .artifacts/gateway-cpu-scenarios/.
    • Ne signale par dĂ©faut que les observations de CPU chaud soutenues (--cpu-core-warn plus --hot-wall-warn-ms), afin que les brĂšves pointes de dĂ©marrage soient enregistrĂ©es comme mĂ©triques sans ressembler Ă  la rĂ©gression de gateway bloquĂ© pendant plusieurs minutes.
    • Utilise les artefacts dist construits ; exĂ©cutez d’abord une build lorsque le checkout ne dispose pas dĂ©jĂ  d’une sortie runtime fraĂźche.
  • pnpm openclaw qa suite --runner multipass
    • ExĂ©cute la mĂȘme suite QA dans une VM Linux Multipass jetable.
    • Conserve le mĂȘme comportement de sĂ©lection de scĂ©narios que qa suite sur l’hĂŽte.
    • RĂ©utilise les mĂȘmes indicateurs de sĂ©lection de fournisseur/modĂšle que qa suite.
    • Les exĂ©cutions live transmettent les entrĂ©es d’authentification QA prises en charge qui sont pratiques pour l’invitĂ© : clĂ©s de fournisseur basĂ©es sur l’environnement, chemin de config du fournisseur live QA et CODEX_HOME lorsqu’il est prĂ©sent.
    • Les rĂ©pertoires de sortie doivent rester sous la racine du dĂ©pĂŽt afin que l’invitĂ© puisse réécrire via l’espace de travail montĂ©.
    • Écrit le rapport QA normal + le rĂ©sumĂ© ainsi que les journaux Multipass sous .artifacts/qa-e2e/....
  • pnpm qa:lab:up
    • DĂ©marre le site QA adossĂ© Ă  Docker pour le travail QA de style opĂ©rateur.
  • pnpm test:docker:npm-onboard-channel-agent
    • Construit une archive npm Ă  partir du checkout courant, l’installe globalement dans Docker, exĂ©cute l’onboarding non interactif par clĂ© API OpenAI, configure Telegram par dĂ©faut, vĂ©rifie que le runtime du plugin empaquetĂ© se charge sans rĂ©paration de dĂ©pendance au dĂ©marrage, exĂ©cute doctor et lance un tour d’agent local contre un endpoint OpenAI mockĂ©.
    • Utilisez OPENCLAW_NPM_ONBOARD_CHANNEL=discord pour exĂ©cuter la mĂȘme voie d’installation empaquetĂ©e avec Discord.
  • pnpm test:docker:session-runtime-context
    • ExĂ©cute un smoke Docker dĂ©terministe de l’app construite pour les transcriptions de contexte runtime intĂ©grĂ©. Il vĂ©rifie que le contexte runtime OpenClaw masquĂ© est persistĂ© comme un message personnalisĂ© non affichĂ© au lieu de fuiter dans le tour utilisateur visible, puis ensemence un JSONL de session cassĂ©e affectĂ©e et vĂ©rifie que openclaw doctor --fix le réécrit vers la branche active avec une sauvegarde.
  • pnpm test:docker:npm-telegram-live
    • Installe un candidat de paquet OpenClaw dans Docker, exĂ©cute l’onboarding de paquet installĂ©, configure Telegram via la CLI installĂ©e, puis rĂ©utilise la voie QA Telegram live avec ce paquet installĂ© comme Gateway SUT.
    • Le wrapper ne monte que la source du harness qa-lab depuis le checkout ; le paquet installĂ© possĂšde dist, openclaw/plugin-sdk et le runtime du plugin groupĂ©, afin que la voie ne mĂ©lange pas les plugins du checkout courant dans le paquet testĂ©.
    • Par dĂ©faut, OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@beta ; dĂ©finissez OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgz ou OPENCLAW_CURRENT_PACKAGE_TGZ pour tester une archive locale rĂ©solue au lieu d’installer depuis le registre.
    • Émet par dĂ©faut une mesure rĂ©pĂ©tĂ©e du RTT dans qa-evidence.json avec OPENCLAW_NPM_TELEGRAM_RTT_SAMPLES=20. Remplacez OPENCLAW_NPM_TELEGRAM_RTT_SAMPLES, OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MS ou OPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURES pour ajuster l’exĂ©cution RTT. OPENCLAW_NPM_TELEGRAM_RTT_CHECKS accepte une liste d’ID de contrĂŽles QA Telegram sĂ©parĂ©s par des virgules Ă  Ă©chantillonner ; lorsqu’il n’est pas dĂ©fini, le contrĂŽle compatible RTT par dĂ©faut est telegram-mentioned-message-reply.
    • Utilise les mĂȘmes identifiants env Telegram ou la mĂȘme source d’identifiants Convex que pnpm openclaw qa telegram. Pour l’automatisation CI/publication, dĂ©finissez OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex plus OPENCLAW_QA_CONVEX_SITE_URL et un secret de rĂŽle. Si OPENCLAW_QA_CONVEX_SITE_URL et un secret de rĂŽle Convex sont prĂ©sents en CI, le wrapper Docker sĂ©lectionne Convex automatiquement.
    • Le wrapper valide les variables d’environnement d’identifiants Telegram ou Convex sur l’hĂŽte avant le travail de build/installation Docker. DĂ©finissez OPENCLAW_NPM_TELEGRAM_SKIP_CREDENTIAL_PREFLIGHT=1 uniquement lorsque vous dĂ©boguez dĂ©libĂ©rĂ©ment la configuration prĂ©alable aux identifiants.
    • OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainer remplace le OPENCLAW_QA_CREDENTIAL_ROLE partagĂ© pour cette voie uniquement. Lorsque les identifiants Convex sont sĂ©lectionnĂ©s et qu’aucun rĂŽle n’est dĂ©fini, le wrapper utilise ci en CI et maintainer hors CI.
    • GitHub Actions expose cette voie comme le workflow mainteneur manuel NPM Telegram Beta E2E. Il ne s’exĂ©cute pas au merge. Le workflow utilise l’environnement qa-live-shared et les baux d’identifiants CI Convex.
  • GitHub Actions expose aussi Package Acceptance pour la preuve produit en exĂ©cution annexe contre un paquet candidat. Il accepte une rĂ©fĂ©rence de confiance, une spec npm publiĂ©e, une URL HTTPS d’archive plus SHA-256, ou un artefact d’archive d’une autre exĂ©cution, tĂ©lĂ©verse le openclaw-current.tgz normalisĂ© comme package-under-test, puis exĂ©cute le planificateur Docker E2E existant avec des profils de voie smoke, package, product, full ou custom. DĂ©finissez telegram_mode=mock-openai ou live-frontier pour exĂ©cuter le workflow QA Telegram contre le mĂȘme artefact package-under-test.
    • DerniĂšre preuve produit beta :
bash
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
  • La preuve par URL exacte d’archive exige un condensat et utilise la politique de sĂ©curitĂ© des URL publiques :
bash
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
  • Les miroirs d’archives d’entreprise/privĂ©s utilisent une politique explicite de source de confiance :
bash
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=package

source=trusted-url lit .github/package-trusted-sources.json depuis la rĂ©fĂ©rence de workflow de confiance et n’accepte pas d’identifiants d’URL ni de contournement de rĂ©seau privĂ© via entrĂ©e de workflow. Si la politique nommĂ©e dĂ©clare une authentification bearer, configurez le secret fixe OPENCLAW_TRUSTED_PACKAGE_TOKEN.

  • La preuve par artefact tĂ©lĂ©charge un artefact d’archive depuis une autre exĂ©cution Actions :
bash
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

    • EmpaquĂšte et installe la build OpenClaw courante dans Docker, dĂ©marre le Gateway avec OpenAI configurĂ©, puis active les plugins/canaux groupĂ©s via des modifications de config.
    • VĂ©rifie que la dĂ©couverte de configuration laisse les plugins tĂ©lĂ©chargeables non configurĂ©s absents, que la premiĂšre rĂ©paration doctor configurĂ©e installe explicitement chaque plugin tĂ©lĂ©chargeable manquant, et qu’un second redĂ©marrage n’exĂ©cute pas de rĂ©paration de dĂ©pendance masquĂ©e.
    • Installe aussi une ancienne baseline npm connue, active Telegram avant d’exĂ©cuter openclaw update --tag <candidate>, et vĂ©rifie que le doctor post-mise Ă  jour du candidat nettoie les dĂ©bris de dĂ©pendances de plugin hĂ©ritĂ©es sans rĂ©paration postinstall cĂŽtĂ© harness.
  • pnpm test:parallels:npm-update

    • ExĂ©cute le smoke natif de mise Ă  jour d’installation empaquetĂ©e sur les invitĂ©s Parallels. Chaque plateforme sĂ©lectionnĂ©e installe d’abord le paquet baseline demandĂ©, puis exĂ©cute la commande openclaw update installĂ©e dans le mĂȘme invitĂ© et vĂ©rifie la version installĂ©e, l’état de mise Ă  jour, la disponibilitĂ© du gateway et un tour d’agent local.

    • Utilisez --platform macos, --platform windows ou --platform linux pendant l’itĂ©ration sur un invitĂ©. Utilisez --json pour le chemin de l’artefact de rĂ©sumĂ© et l’état de chaque voie.

    • La voie OpenAI utilise openai/gpt-5.5 par dĂ©faut pour la preuve de tour d’agent live. Passez --model <provider/model> ou dĂ©finissez OPENCLAW_PARALLELS_OPENAI_MODEL lorsque vous validez dĂ©libĂ©rĂ©ment un autre modĂšle OpenAI.

    • Enveloppez les longues exĂ©cutions locales dans un timeout hĂŽte afin que les blocages de transport Parallels ne puissent pas consommer le reste de la fenĂȘtre de test :

      bash
      timeout --foreground 150m pnpm test:parallels:npm-update -- --jsontimeout --foreground 90m pnpm test:parallels:npm-update -- --platform windows --json
    • Le script Ă©crit les journaux de voie imbriquĂ©s sous /tmp/openclaw-parallels-npm-update.*. Inspectez windows-update.log, macos-update.log ou linux-update.log avant de supposer que le wrapper externe est bloquĂ©.

    • La mise Ă  jour Windows peut passer 10 Ă  15 minutes dans le doctor post-mise Ă  jour et le travail de mise Ă  jour des paquets sur un invitĂ© froid ; cela reste sain lorsque le journal de dĂ©bogage npm imbriquĂ© progresse.

    • N’exĂ©cutez pas ce wrapper agrĂ©gĂ© en parallĂšle avec les voies smoke Parallels macOS, Windows ou Linux individuelles. Elles partagent l’état de VM et peuvent entrer en collision sur la restauration de snapshot, le service de paquets ou l’état du gateway invitĂ©.

    • La preuve post-mise Ă  jour exĂ©cute la surface normale de plugin groupĂ©, car les façades de capacitĂ© telles que la parole, la gĂ©nĂ©ration d’images et la comprĂ©hension des mĂ©dias sont chargĂ©es via les API runtime groupĂ©es, mĂȘme lorsque le tour d’agent lui-mĂȘme ne vĂ©rifie qu’une rĂ©ponse texte simple.

  • pnpm openclaw qa aimock

    • DĂ©marre uniquement le serveur fournisseur AIMock local pour les tests de fumĂ©e directs du protocole.
  • pnpm openclaw qa matrix

    • ExĂ©cute la voie QA live Matrix avec un homeserver Tuwunel jetable adossĂ© Ă  Docker. Checkout source uniquement - les installations packagĂ©es n’incluent pas qa-lab.
    • CLI complĂšte, catalogue de profils/scĂ©narios, variables d’environnement et disposition des artefacts : QA Matrix.
  • pnpm openclaw qa telegram

    • ExĂ©cute la voie QA live Telegram avec un vrai groupe privĂ© Ă  l’aide des jetons de bot pilote et SUT fournis par l’environnement.
    • NĂ©cessite OPENCLAW_QA_TELEGRAM_GROUP_ID, OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN et OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN. L’id du groupe doit ĂȘtre l’id numĂ©rique du chat Telegram.
    • Prend en charge --credential-source convex pour des identifiants mutualisĂ©s partagĂ©s. Utilisez le mode env par dĂ©faut, ou dĂ©finissez OPENCLAW_QA_CREDENTIAL_SOURCE=convex pour opter pour les baux mutualisĂ©s.
    • Les valeurs par dĂ©faut couvrent le canari, le filtrage des mentions, l’adressage des commandes, /status, les rĂ©ponses mentionnĂ©es de bot Ă  bot et les rĂ©ponses aux commandes natives du noyau. Les valeurs par dĂ©faut mock-openai couvrent aussi les rĂ©gressions dĂ©terministes de chaĂźne de rĂ©ponses et de streaming du message final Telegram. Utilisez --list-scenarios pour les sondes facultatives comme session_status.
    • Se termine avec un code non nul lorsqu’un scĂ©nario Ă©choue. Utilisez --allow-failures lorsque vous voulez des artefacts sans code de sortie d’échec.
    • NĂ©cessite deux bots distincts dans le mĂȘme groupe privĂ©, avec le bot SUT exposant un nom d’utilisateur Telegram.
    • Pour une observation stable de bot Ă  bot, activez Bot-to-Bot Communication Mode dans @BotFather pour les deux bots et assurez-vous que le bot pilote peut observer le trafic de bots du groupe.
    • Écrit un rapport QA Telegram, un rĂ©sumĂ© et qa-evidence.json sous .artifacts/qa-e2e/.... Les scĂ©narios avec rĂ©ponse incluent le RTT depuis la requĂȘte d’envoi du pilote jusqu’à la rĂ©ponse SUT observĂ©e.

Mantis Telegram Live est l’enveloppe de preuve de PR autour de cette voie. Elle exĂ©cute la rĂ©fĂ©rence candidate avec des identifiants Telegram louĂ©s via Convex, affiche le paquet de rapport/preuve QA caviardĂ© dans un navigateur de bureau Crabbox, enregistre une preuve MP4, gĂ©nĂšre un GIF recadrĂ© sur le mouvement, tĂ©lĂ©verse le paquet d’artefacts et publie la preuve de PR en ligne via la Mantis GitHub App lorsque pr_number est dĂ©fini. Les mainteneurs peuvent la dĂ©marrer depuis l’interface Actions via Mantis Scenario (scenario_id: telegram-live) ou directement depuis un commentaire de pull request :

text
@openclaw-mantis telegram@openclaw-mantis telegram scenario=telegram-status-command@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-reply

Mantis Telegram Desktop Proof est l’enveloppe agentique native Telegram Desktop avant/aprĂšs pour la preuve visuelle de PR. DĂ©marrez-la depuis l’interface Actions avec des instructions libres, via Mantis Scenario (scenario_id: telegram-desktop-proof), ou depuis un commentaire de PR :

text
@openclaw-mantis telegram desktop proof

L’agent Mantis lit la PR, dĂ©cide quel comportement visible dans Telegram prouve le changement, exĂ©cute la voie de preuve Crabbox Telegram Desktop utilisateur rĂ©el sur les rĂ©fĂ©rences de base et candidate, itĂšre jusqu’à ce que les GIF natifs soient utiles, Ă©crit un manifeste motionPreview appariĂ© et publie le mĂȘme tableau de GIF Ă  2 colonnes via la Mantis GitHub App lorsque pr_number est dĂ©fini.

  • pnpm openclaw qa mantis telegram-desktop-builder
    • Loue ou rĂ©utilise un bureau Linux Crabbox, installe Telegram Desktop natif, configure OpenClaw avec un jeton de bot SUT Telegram louĂ©, dĂ©marre le Gateway et enregistre des preuves capture d’écran/MP4 depuis le bureau VNC visible.
    • Utilise par dĂ©faut --credential-source convex afin que les workflows n’aient besoin que du secret du courtier Convex. Utilisez --credential-source env avec les mĂȘmes variables OPENCLAW_QA_TELEGRAM_* que pnpm openclaw qa telegram.
    • Telegram Desktop a toujours besoin d’une connexion/d’un profil utilisateur. Le jeton de bot configure uniquement OpenClaw. Utilisez --telegram-profile-archive-env <name> pour une archive de profil .tgz en base64, ou utilisez --keep-lease et connectez-vous manuellement via VNC une fois.
    • Écrit mantis-telegram-desktop-builder-report.md, mantis-telegram-desktop-builder-summary.json, telegram-desktop-builder.png et telegram-desktop-builder.mp4 sous le rĂ©pertoire de sortie.

Les voies de transport live partagent un contrat standard unique afin que les nouveaux transports ne divergent pas ; la matrice de couverture par voie se trouve dans vue d’ensemble QA → Couverture du transport live. qa-channel est la suite synthĂ©tique large et ne fait pas partie de cette matrice.

Identifiants Telegram partagés via Convex (v1)

Lorsque --credential-source convex (ou OPENCLAW_QA_CREDENTIAL_SOURCE=convex) est activĂ© pour la QA de transport live, le labo QA acquiert un bail exclusif depuis un pool adossĂ© Ă  Convex, envoie des Heartbeat pour ce bail pendant l’exĂ©cution de la voie et libĂšre le bail Ă  l’arrĂȘt. Le nom de la section est antĂ©rieur Ă  la prise en charge de Discord, Slack et WhatsApp ; le contrat de bail est partagĂ© entre les types.

Échafaudage de projet Convex de rĂ©fĂ©rence :

  • qa/convex-credential-broker/

Variables d’environnement requises :

  • OPENCLAW_QA_CONVEX_SITE_URL (par exemple https://your-deployment.convex.site)
  • Un secret pour le rĂŽle sĂ©lectionnĂ© :
    • OPENCLAW_QA_CONVEX_SECRET_MAINTAINER pour maintainer
    • OPENCLAW_QA_CONVEX_SECRET_CI pour ci
  • SĂ©lection du rĂŽle d’identifiants :
    • CLI : --credential-role maintainer|ci
    • Valeur par dĂ©faut de l’environnement : OPENCLAW_QA_CREDENTIAL_ROLE (par dĂ©faut ci en CI, sinon maintainer)

Variables d’environnement facultatives :

  • OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS (par dĂ©faut 1200000)
  • OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS (par dĂ©faut 30000)
  • OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS (par dĂ©faut 90000)
  • OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS (par dĂ©faut 15000)
  • OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX (par dĂ©faut /qa-credentials/v1)
  • OPENCLAW_QA_CREDENTIAL_OWNER_ID (id de trace facultatif)
  • OPENCLAW_QA_ALLOW_INSECURE_HTTP=1 autorise les URL Convex http:// en local loopback pour le dĂ©veloppement local uniquement.

OPENCLAW_QA_CONVEX_SITE_URL doit utiliser https:// en fonctionnement normal.

Les commandes d’administration mainteneur (ajout/suppression/liste du pool) nĂ©cessitent spĂ©cifiquement OPENCLAW_QA_CONVEX_SECRET_MAINTAINER.

Assistants CLI pour les mainteneurs :

bash
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>

Utilisez doctor avant les exĂ©cutions live pour vĂ©rifier l’URL du site Convex, les secrets du courtier, le prĂ©fixe de point de terminaison, le dĂ©lai d’expiration HTTP et l’accessibilitĂ© admin/liste sans afficher les valeurs secrĂštes. Utilisez --json pour une sortie lisible par machine dans les scripts et les utilitaires CI.

Contrat de point de terminaison par défaut (OPENCLAW_QA_CONVEX_SITE_URL + /qa-credentials/v1) :

  • POST /acquire
    • RequĂȘte : { kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs }
    • SuccĂšs : { status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? }
    • ÉpuisĂ©/rĂ©essayable : { status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }
  • POST /payload-chunk
    • RequĂȘte : { kind, ownerId, actorRole, credentialId, leaseToken, index }
    • SuccĂšs : { status: "ok", index, data }
  • POST /heartbeat
    • RequĂȘte : { kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs }
    • SuccĂšs : { status: "ok" } (ou 2xx vide)
  • POST /release
    • RequĂȘte : { kind, ownerId, actorRole, credentialId, leaseToken }
    • SuccĂšs : { status: "ok" } (ou 2xx vide)
  • POST /admin/add (secret mainteneur uniquement)
    • RequĂȘte : { kind, actorId, payload, note?, status? }
    • SuccĂšs : { status: "ok", credential }
  • POST /admin/remove (secret mainteneur uniquement)
    • RequĂȘte : { credentialId, actorId }
    • SuccĂšs : { status: "ok", changed, credential }
    • Garde de bail actif : { status: "error", code: "LEASE_ACTIVE", ... }
  • POST /admin/list (secret mainteneur uniquement)
    • RequĂȘte : { kind?, status?, includePayload?, limit? }
    • SuccĂšs : { status: "ok", credentials, count }

Forme du payload pour le type Telegram :

  • { groupId: string, driverToken: string, sutToken: string }
  • groupId doit ĂȘtre une chaĂźne d’id de chat Telegram numĂ©rique.
  • admin/add valide cette forme pour kind: "telegram" et rejette les payloads mal formĂ©s.

Forme du payload pour le type utilisateur réel Telegram :

  • { groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }
  • groupId, testerUserId et telegramApiId doivent ĂȘtre des chaĂźnes numĂ©riques.
  • tdlibArchiveSha256 et desktopTdataArchiveSha256 doivent ĂȘtre des chaĂźnes hexadĂ©cimales SHA-256.
  • kind: "telegram-user" est rĂ©servĂ© au workflow de preuve Mantis Telegram Desktop. Les voies gĂ©nĂ©riques du QA Lab ne doivent pas l’acquĂ©rir.

Payloads multicanaux validés par le courtier :

  • Discord : { guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string, voiceChannelId?: string }
  • WhatsApp : { driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }

Les voies Slack peuvent aussi louer depuis le pool, mais la validation du payload Slack rĂ©side actuellement dans l’exĂ©cuteur QA Slack plutĂŽt que dans le courtier. Utilisez { channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string } pour les lignes Slack.

Ajouter un canal Ă  la QA

L’architecture et les noms des assistants de scĂ©nario pour les nouveaux adaptateurs de canal se trouvent dans vue d’ensemble QA → Ajouter un canal. Le seuil minimal : implĂ©menter l’exĂ©cuteur de transport sur la couture hĂŽte partagĂ©e qa-lab, dĂ©clarer qaRunners dans le manifeste du Plugin, monter comme openclaw qa <runner> et rĂ©diger des scĂ©narios sous qa/scenarios/.

Suites de tests (ce qui s’exĂ©cute oĂč)

Considérez les suites comme un « réalisme croissant » (et une instabilité/un coût croissants) :

Unitaire / intégration (par défaut)

  • Commande : pnpm test
  • Config : les exĂ©cutions non ciblĂ©es utilisent l’ensemble de shards vitest.full-*.config.ts et peuvent dĂ©velopper les shards multiprojets en configs par projet pour la planification parallĂšle
  • Fichiers : inventaires core/unit sous src/**/*.test.ts, packages/**/*.test.ts et test/**/*.test.ts ; les tests unitaires d’UI s’exĂ©cutent dans le shard dĂ©diĂ© unit-ui
  • PortĂ©e :
    • Tests unitaires purs
    • Tests d’intĂ©gration en processus (authentification du Gateway, routage, outillage, parsing, config)
    • RĂ©gressions dĂ©terministes pour les bogues connus
  • Attentes :
    • S’exĂ©cute en CI
    • Aucune clĂ© rĂ©elle requise
    • Doit ĂȘtre rapide et stable
    • Les tests de rĂ©solveur et de chargeur de surface publique doivent prouver le comportement de fallback large de api.js et runtime-api.js avec de petites fixtures de Plugin gĂ©nĂ©rĂ©es, et non avec les API source de vrais plugins groupĂ©s. Les chargements de vraies API de Plugin appartiennent aux suites de contrat/intĂ©gration appartenant aux plugins.

Politique des dépendances natives :

  • Les installations de test par dĂ©faut ignorent les builds natifs facultatifs opus Discord. La voix Discord utilise libopus-wasm groupĂ©, et @discordjs/opus reste dĂ©sactivĂ© dans allowBuilds afin que les tests locaux et les voies Testbox ne compilent pas l’addon natif.
  • Comparez les performances d’opus natif dans le dĂ©pĂŽt de benchmark libopus-wasm, et non dans les boucles d’installation/test OpenClaw par dĂ©faut. Ne dĂ©finissez pas @discordjs/opus sur true dans le allowBuilds par dĂ©faut ; cela fait compiler du code natif Ă  des boucles d’installation/test sans rapport.
Projects, shards, and scoped lanes
  • Les exĂ©cutions non ciblĂ©es de pnpm test lancent douze configurations de shards plus petites (core-unit-fast, core-unit-src, core-unit-security, core-unit-ui, core-unit-support, core-support-boundary, core-contracts, core-bundled, core-runtime, agentic, auto-reply, extensions) au lieu d’un unique processus natif gĂ©ant de projet racine. Cela rĂ©duit le RSS maximal sur les machines chargĂ©es et Ă©vite que le travail auto-reply/extension affame des suites sans rapport.
  • pnpm test --watch utilise toujours le graphe de projet racine natif vitest.config.ts, car une boucle de surveillance multi-shards n’est pas pratique.
  • pnpm test, pnpm test:watch et pnpm test:perf:imports acheminent d’abord les cibles explicites de fichier/rĂ©pertoire via des voies Ă  portĂ©e limitĂ©e, de sorte que pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts Ă©vite de payer le coĂ»t de dĂ©marrage complet du projet racine.
  • pnpm test:changed Ă©tend par dĂ©faut les chemins git modifiĂ©s en voies Ă  portĂ©e limitĂ©e peu coĂ»teuses : modifications directes de tests, fichiers frĂšres *.test.ts, mappages sources explicites et dĂ©pendants locaux du graphe d’importation. Les modifications de config/setup/package ne lancent pas de tests larges sauf si vous utilisez explicitement OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed.
  • pnpm check:changed est la porte de vĂ©rification locale intelligente normale pour les travaux ciblĂ©s. Elle classe le diff en core, tests core, extensions, tests d’extension, apps, docs, mĂ©tadonnĂ©es de release, outillage Docker live et outillage, puis exĂ©cute les commandes de typecheck, lint et garde correspondantes. Elle n’exĂ©cute pas les tests Vitest ; appelez pnpm test:changed ou pnpm test <target> explicite pour la preuve par test. Les incrĂ©ments de version limitĂ©s aux mĂ©tadonnĂ©es de release exĂ©cutent des vĂ©rifications ciblĂ©es de version/config/dĂ©pendances racine, avec une garde qui rejette les changements de package en dehors du champ de version de premier niveau.
  • Les modifications du harnais Docker ACP live exĂ©cutent des vĂ©rifications ciblĂ©es : syntaxe shell pour les scripts d’authentification Docker live et dry-run du planificateur Docker live. Les changements de package.json ne sont inclus que lorsque le diff se limite Ă  scripts["test:docker:live-*"] ; les modifications de dĂ©pendances, d’exports, de version et d’autres surfaces de package utilisent toujours les gardes plus larges.
  • Les tests unitaires lĂ©gers en importation provenant des agents, commandes, plugins, helpers auto-reply, plugin-sdk et zones similaires de purs utilitaires passent par la voie unit-fast, qui ignore test/setup-openclaw-runtime.ts ; les fichiers avec Ă©tat ou lourds en runtime restent sur les voies existantes.
  • Certains fichiers sources helper de plugin-sdk et commands mappent Ă©galement les exĂ©cutions en mode modifiĂ© vers des tests frĂšres explicites dans ces voies lĂ©gĂšres, afin que les modifications de helpers Ă©vitent de relancer toute la suite lourde de ce rĂ©pertoire.
  • auto-reply dispose de buckets dĂ©diĂ©s pour les helpers core de premier niveau, les tests d’intĂ©gration reply.* de premier niveau et le sous-arbre src/auto-reply/reply/**. La CI divise en outre le sous-arbre reply en shards agent-runner, dispatch et commands/state-routing afin qu’un bucket lourd en importations ne possĂšde pas toute la queue Node.
  • La CI normale PR/main ignore intentionnellement le balayage par lots des extensions et le shard agentic-plugins rĂ©servĂ© aux releases. Full Release Validation dĂ©clenche le workflow enfant sĂ©parĂ© Plugin Prerelease pour ces suites lourdes en plugins/extensions sur les release candidates.
Couverture de l’exĂ©cuteur intĂ©grĂ©
  • Lorsque vous modifiez les entrĂ©es de dĂ©couverte des outils de message ou le contexte runtime de Compaction, conservez les deux niveaux de couverture.
  • Ajoutez des rĂ©gressions helper ciblĂ©es pour les frontiĂšres de routage pur et de normalisation.
  • Gardez les suites d’intĂ©gration de l’exĂ©cuteur intĂ©grĂ© en bon Ă©tat : src/agents/embedded-agent-runner/compact.hooks.test.ts, src/agents/embedded-agent-runner/run.overflow-compaction.test.ts et src/agents/embedded-agent-runner/run.overflow-compaction.loop.test.ts.
  • Ces suites vĂ©rifient que les identifiants Ă  portĂ©e limitĂ©e et le comportement de Compaction circulent toujours par les vrais chemins run.ts / compact.ts ; les tests uniquement sur les helpers ne remplacent pas suffisamment ces chemins d’intĂ©gration.
Valeurs par dĂ©faut du pool Vitest et de l’isolation
  • La config Vitest de base utilise threads par dĂ©faut.
  • La config Vitest partagĂ©e fixe isolate: false et utilise l’exĂ©cuteur non isolĂ© dans les projets racine, e2e et configs live.
  • La voie UI racine conserve sa configuration jsdom et son optimiseur, mais s’exĂ©cute Ă©galement sur l’exĂ©cuteur non isolĂ© partagĂ©.
  • Chaque shard pnpm test hĂ©rite des mĂȘmes valeurs par dĂ©faut threads + isolate: false depuis la config Vitest partagĂ©e.
  • scripts/run-vitest.mjs ajoute --no-maglev par dĂ©faut pour les processus Node enfants de Vitest afin de rĂ©duire le churn de compilation V8 pendant les grandes exĂ©cutions locales. DĂ©finissez OPENCLAW_VITEST_ENABLE_MAGLEV=1 pour comparer avec le comportement V8 d’origine.
  • scripts/run-vitest.mjs termine les exĂ©cutions Vitest explicites hors surveillance aprĂšs 5 minutes sans sortie stdout ni stderr. DĂ©finissez OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=0 pour dĂ©sactiver la surveillance lors d’une investigation intentionnellement silencieuse.
Itération locale rapide
  • pnpm changed:lanes affiche les voies architecturales qu’un diff dĂ©clenche.
  • Le hook pre-commit ne fait que du formatage. Il remet en stage les fichiers formatĂ©s et n’exĂ©cute pas lint, typecheck ni tests.
  • ExĂ©cutez explicitement pnpm check:changed avant la remise ou le push lorsque vous avez besoin de la porte de vĂ©rification locale intelligente.
  • pnpm test:changed passe par dĂ©faut par des voies Ă  portĂ©e limitĂ©e peu coĂ»teuses. Utilisez OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed uniquement lorsque l’agent dĂ©cide qu’une modification de harnais, config, package ou contrat a vraiment besoin d’une couverture Vitest plus large.
  • pnpm test:max et pnpm test:changed:max conservent le mĂȘme comportement de routage, simplement avec un plafond de workers plus Ă©levĂ©.
  • L’auto-scaling local des workers est intentionnellement conservateur et rĂ©duit la charge lorsque la moyenne de charge de l’hĂŽte est dĂ©jĂ  Ă©levĂ©e, de sorte que plusieurs exĂ©cutions Vitest concurrentes causent moins de dĂ©gĂąts par dĂ©faut.
  • La config Vitest de base marque les projets/fichiers de config comme forceRerunTriggers afin que les rĂ©exĂ©cutions en mode modifiĂ© restent correctes lorsque le cĂąblage des tests change.
  • La config garde OPENCLAW_VITEST_FS_MODULE_CACHE activĂ© sur les hĂŽtes pris en charge ; dĂ©finissez OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path si vous voulez un emplacement de cache explicite pour le profilage direct.
Débogage des performances
  • pnpm test:perf:imports active le rapport de durĂ©e d’importation de Vitest ainsi que la sortie de dĂ©composition des importations.
  • pnpm test:perf:imports:changed limite la mĂȘme vue de profilage aux fichiers modifiĂ©s depuis origin/main.
  • Les donnĂ©es de durĂ©e des shards sont Ă©crites dans .artifacts/vitest-shard-timings.json. Les exĂ©cutions avec configuration complĂšte utilisent le chemin de configuration comme clĂ© ; les shards CI Ă  motif d’inclusion ajoutent le nom du shard afin que les shards filtrĂ©s puissent ĂȘtre suivis sĂ©parĂ©ment.
  • Lorsqu’un test chaud passe encore la majeure partie de son temps dans les importations de dĂ©marrage, gardez les dĂ©pendances lourdes derriĂšre une interface locale Ă©troite *.runtime.ts et moquez directement cette interface au lieu d’importer en profondeur des helpers d’exĂ©cution uniquement pour les transmettre Ă  vi.mock(...).
  • pnpm test:perf:changed:bench -- --ref <git-ref> compare le test:changed routĂ© au chemin natif du projet racine pour ce diff validĂ© et affiche le temps Ă©coulĂ© ainsi que le RSS maximal sur macOS.
  • pnpm test:perf:changed:bench -- --worktree mesure l’arbre de travail sale actuel en routant la liste des fichiers modifiĂ©s via scripts/test-projects.mjs et la configuration Vitest racine.
  • pnpm test:perf:profile:main Ă©crit un profil CPU du thread principal pour les surcoĂ»ts de dĂ©marrage et de transformation Vitest/Vite.
  • pnpm test:perf:profile:runner Ă©crit des profils CPU+tas du runner pour la suite unitaire avec le parallĂ©lisme par fichier dĂ©sactivĂ©.

Stabilité (gateway)

  • Commande : pnpm test:stability:gateway
  • Configuration : vitest.gateway.config.ts, forcĂ©e Ă  un seul worker
  • PortĂ©e :
    • DĂ©marre un Gateway loopback rĂ©el avec les diagnostics activĂ©s par dĂ©faut
    • Envoie une activitĂ© synthĂ©tique de messages gateway, de mĂ©moire et de grandes charges utiles via le chemin d’évĂ©nements de diagnostic
    • Interroge diagnostics.stability via le RPC WS du Gateway
    • Couvre les helpers de persistance du bundle de stabilitĂ© des diagnostics
    • VĂ©rifie que l’enregistreur reste bornĂ©, que les Ă©chantillons RSS synthĂ©tiques restent sous le budget de pression et que les profondeurs de file par session reviennent Ă  zĂ©ro
  • Attentes :
    • Compatible CI et sans clĂ©
    • Voie Ă©troite pour le suivi des rĂ©gressions de stabilitĂ©, pas un substitut Ă  la suite Gateway complĂšte

E2E (agrégat du dépÎt)

  • Commande : pnpm test:e2e
  • PortĂ©e :
    • ExĂ©cute la voie E2E de smoke du gateway
    • ExĂ©cute la voie E2E navigateur mockĂ©e de Control UI
  • Attentes :
    • Compatible CI et sans clĂ©
    • NĂ©cessite l’installation de Playwright Chromium

E2E (smoke du gateway)

  • Commande : pnpm test:e2e:gateway
  • Configuration : vitest.e2e.config.ts
  • Fichiers : src/**/*.e2e.test.ts, test/**/*.e2e.test.ts et tests E2E de plugins groupĂ©s sous extensions/
  • Valeurs par dĂ©faut Ă  l’exĂ©cution :
    • Utilise les threads Vitest avec isolate: false, comme le reste du dĂ©pĂŽt.
    • Utilise des workers adaptatifs (CI : jusqu’à 2, local : 1 par dĂ©faut).
    • S’exĂ©cute en mode silencieux par dĂ©faut pour rĂ©duire le surcoĂ»t d’E/S console.
  • Surcharges utiles :
    • OPENCLAW_E2E_WORKERS=<n> pour forcer le nombre de workers (plafonnĂ© Ă  16).
    • OPENCLAW_E2E_VERBOSE=1 pour rĂ©activer la sortie console dĂ©taillĂ©e.
  • PortĂ©e :
    • Comportement de bout en bout du gateway multi-instance
    • Surfaces WebSocket/HTTP, appairage de nƓuds et rĂ©seau plus lourd
  • Attentes :
    • S’exĂ©cute en CI (lorsqu’activĂ© dans le pipeline)
    • Aucune clĂ© rĂ©elle requise
    • Plus de piĂšces mobiles que les tests unitaires (peut ĂȘtre plus lent)

E2E (navigateur mocké de Control UI)

  • Commande : pnpm test:ui:e2e
  • Configuration : test/vitest/vitest.ui-e2e.config.ts
  • Fichiers : ui/src/**/*.e2e.test.ts
  • PortĂ©e :
    • DĂ©marre la Control UI Vite
    • Pilote une vraie page Chromium via Playwright
    • Remplace le WebSocket du Gateway par des mocks dĂ©terministes dans le navigateur
  • Attentes :
    • S’exĂ©cute en CI dans le cadre de pnpm test:e2e
    • Aucun vrai Gateway, agent ni clĂ© de fournisseur requis
    • La dĂ©pendance navigateur doit ĂȘtre prĂ©sente (pnpm --dir ui exec playwright install chromium)

E2E : smoke du backend OpenShell

  • Commande : pnpm test:e2e:openshell
  • Fichier : extensions/openshell/src/backend.e2e.test.ts
  • PortĂ©e :
    • RĂ©utilise un gateway OpenShell local actif
    • CrĂ©e un bac Ă  sable Ă  partir d’un Dockerfile local temporaire
    • Exerce le backend OpenShell d’OpenClaw via un vrai sandbox ssh-config + exĂ©cution SSH
    • VĂ©rifie le comportement du systĂšme de fichiers canonique distant via le pont fs du bac Ă  sable
  • Attentes :
    • Sur adhĂ©sion uniquement ; ne fait pas partie de l’exĂ©cution pnpm test:e2e par dĂ©faut
    • NĂ©cessite une CLI locale openshell ainsi qu’un dĂ©mon Docker fonctionnel
    • NĂ©cessite un gateway OpenShell local actif et sa source de configuration
    • Utilise des HOME / XDG_CONFIG_HOME isolĂ©s, puis dĂ©truit le bac Ă  sable de test
  • Surcharges utiles :
    • OPENCLAW_E2E_OPENSHELL=1 pour activer le test lors de l’exĂ©cution manuelle de la suite e2e plus large
    • OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell pour pointer vers un binaire CLI ou script wrapper non par dĂ©faut
    • OPENCLAW_E2E_OPENSHELL_CONFIG_HOME=/path/to/config pour exposer la configuration du gateway enregistrĂ© au test isolĂ©
    • OPENCLAW_E2E_OPENSHELL_HOST_IP=172.18.0.1 pour remplacer l’IP du gateway Docker utilisĂ©e par la fixture de politique d’hĂŽte

Live (fournisseurs réels + modÚles réels)

  • Commande : pnpm test:live
  • Config : vitest.live.config.ts
  • Fichiers : src/**/*.live.test.ts, test/**/*.live.test.ts, et les tests live de plugins groupĂ©s sous extensions/
  • Valeur par dĂ©faut : activĂ© par pnpm test:live (dĂ©finit OPENCLAW_LIVE_TEST=1)
  • PortĂ©e :
    • « Ce fournisseur/modĂšle fonctionne-t-il rĂ©ellement aujourd’hui avec de vrais identifiants ? »
    • DĂ©tecter les changements de format des fournisseurs, les particularitĂ©s d’appel d’outils, les problĂšmes d’authentification et le comportement des limites de dĂ©bit
  • Attentes :
    • Non stable en CI par conception (rĂ©seaux rĂ©els, politiques rĂ©elles des fournisseurs, quotas, pannes)
    • CoĂ»te de l’argent / utilise les limites de dĂ©bit
    • PrĂ©fĂ©rer exĂ©cuter des sous-ensembles restreints plutĂŽt que « tout »
  • Les exĂ©cutions live utilisent les clĂ©s d’API dĂ©jĂ  exportĂ©es et les profils d’authentification prĂ©parĂ©s.
  • Par dĂ©faut, les exĂ©cutions live isolent toujours HOME et copient le matĂ©riel de configuration/authentification dans un rĂ©pertoire personnel de test temporaire afin que les fixtures unitaires ne puissent pas modifier votre vrai ~/.openclaw.
  • DĂ©finissez OPENCLAW_LIVE_USE_REAL_HOME=1 uniquement lorsque vous avez intentionnellement besoin que les tests live utilisent votre vrai rĂ©pertoire personnel.
  • pnpm test:live utilise par dĂ©faut un mode plus silencieux : il conserve la sortie de progression [live] ... et coupe les journaux d’amorçage du Gateway ainsi que le bruit Bonjour. DĂ©finissez OPENCLAW_LIVE_TEST_QUIET=0 si vous voulez rĂ©cupĂ©rer les journaux de dĂ©marrage complets.
  • Rotation des clĂ©s d’API (spĂ©cifique au fournisseur) : dĂ©finissez *_API_KEYS avec un format sĂ©parĂ© par virgules/points-virgules ou *_API_KEY_1, *_API_KEY_2 (par exemple OPENAI_API_KEYS, ANTHROPIC_API_KEYS, GEMINI_API_KEYS) ou une substitution par test live via OPENCLAW_LIVE_*_KEY ; les tests rĂ©essaient en cas de rĂ©ponses de limite de dĂ©bit.
  • Sortie de progression/Heartbeat :
    • Les suites live Ă©mettent maintenant des lignes de progression vers stderr afin que les longs appels fournisseur soient visiblement actifs mĂȘme lorsque la capture de console de Vitest est silencieuse.
    • vitest.live.config.ts dĂ©sactive l’interception de console de Vitest afin que les lignes de progression fournisseur/Gateway soient diffusĂ©es immĂ©diatement pendant les exĂ©cutions live.
    • Ajustez les Heartbeats de modĂšle direct avec OPENCLAW_LIVE_HEARTBEAT_MS.
    • Ajustez les Heartbeats de Gateway/sonde avec OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS.

Quelle suite dois-je exécuter ?

Utilisez ce tableau de décision :

  • Modification de logique/tests : exĂ©cutez pnpm test (et pnpm test:coverage si vous avez beaucoup changĂ©)
  • Modification du rĂ©seau Gateway / protocole WS / appairage : ajoutez pnpm test:e2e
  • DĂ©bogage de « mon bot est hors service » / Ă©checs spĂ©cifiques au fournisseur / appel d’outils : exĂ©cutez un pnpm test:live restreint

Tests live (touchant au réseau)

Pour la matrice de modĂšles live, les smokes de backend CLI, les smokes ACP, le harnais de serveur d’application Codex, et tous les tests live de fournisseurs mĂ©dia (Deepgram, BytePlus, ComfyUI, image, musique, vidĂ©o, harnais mĂ©dia) - ainsi que la gestion des identifiants pour les exĂ©cutions live - consultez Tester les suites live. Pour la checklist dĂ©diĂ©e aux mises Ă  jour et Ă  la validation des plugins, consultez Tester les mises Ă  jour et les plugins.

Exécuteurs Docker (vérifications facultatives « fonctionne sous Linux »)

Ces exécuteurs Docker se divisent en deux catégories :

  • ExĂ©cuteurs de modĂšles live : test:docker:live-models et test:docker:live-gateway n’exĂ©cutent que leur fichier live correspondant aux clĂ©s de profil dans l’image Docker du dĂ©pĂŽt (src/agents/models.profiles.live.test.ts et src/gateway/gateway-models.profiles.live.test.ts), en montant votre rĂ©pertoire de configuration local, votre espace de travail et un fichier d’environnement de profil facultatif. Les points d’entrĂ©e locaux correspondants sont test:live:models-profiles et test:live:gateway-profiles.
  • Les exĂ©cuteurs live Docker conservent leurs propres plafonds pratiques si nĂ©cessaire : test:docker:live-models utilise par dĂ©faut l’ensemble organisĂ© et pris en charge Ă  fort signal, et test:docker:live-gateway utilise par dĂ©faut OPENCLAW_LIVE_GATEWAY_SMOKE=1, OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8, OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000, et OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000. DĂ©finissez OPENCLAW_LIVE_MAX_MODELS ou les variables d’environnement du Gateway lorsque vous voulez explicitement un plafond plus petit ou une analyse plus large.
  • test:docker:all construit l’image Docker live une seule fois via test:docker:live-build, empaquette OpenClaw une seule fois comme archive npm avec scripts/package-openclaw-for-docker.mjs, puis construit/rĂ©utilise deux images scripts/e2e/Dockerfile. L’image nue est uniquement l’exĂ©cuteur Node/Git pour les voies installation/mise Ă  jour/dĂ©pendances de plugin ; ces voies montent l’archive prĂ©construite. L’image fonctionnelle installe la mĂȘme archive dans /app pour les voies de fonctionnalitĂ© de l’application construite. Les dĂ©finitions des voies Docker se trouvent dans scripts/lib/docker-e2e-scenarios.mjs ; la logique du planificateur se trouve dans scripts/lib/docker-e2e-plan.mjs ; scripts/test-docker-all.mjs exĂ©cute le plan sĂ©lectionnĂ©. L’agrĂ©gat utilise un planificateur local pondĂ©rĂ© : OPENCLAW_DOCKER_ALL_PARALLELISM contrĂŽle les emplacements de processus, tandis que les plafonds de ressources empĂȘchent les voies live lourdes, d’installation npm et multiservices de toutes dĂ©marrer en mĂȘme temps. Si une seule voie est plus lourde que les plafonds actifs, le planificateur peut quand mĂȘme la dĂ©marrer lorsque le pool est vide, puis la maintient seule en cours d’exĂ©cution jusqu’à ce que de la capacitĂ© redevienne disponible. Les valeurs par dĂ©faut sont 10 emplacements, OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9, OPENCLAW_DOCKER_ALL_NPM_LIMIT=5, et OPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7 ; ajustez OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT ou OPENCLAW_DOCKER_ALL_DOCKER_LIMIT uniquement lorsque l’hĂŽte Docker dispose de plus de marge. L’exĂ©cuteur effectue un prĂ©vol Docker par dĂ©faut, supprime les conteneurs E2E OpenClaw obsolĂštes, affiche l’état toutes les 30 secondes, stocke les durĂ©es des voies rĂ©ussies dans .artifacts/docker-tests/lane-timings.json, et utilise ces durĂ©es pour dĂ©marrer les voies plus longues en premier lors des exĂ©cutions ultĂ©rieures. Utilisez OPENCLAW_DOCKER_ALL_DRY_RUN=1 pour afficher le manifeste pondĂ©rĂ© des voies sans construire ni exĂ©cuter Docker, ou node scripts/test-docker-all.mjs --plan-json pour afficher le plan CI des voies sĂ©lectionnĂ©es, les besoins en paquet/image et les identifiants.
  • Package Acceptance est la barriĂšre de paquet native GitHub pour « cette archive installable fonctionne-t-elle comme un produit ? ». Elle rĂ©sout un paquet candidat depuis source=npm, source=ref, source=url, ou source=artifact, le tĂ©lĂ©verse comme package-under-test, puis exĂ©cute les voies Docker E2E rĂ©utilisables contre cette archive exacte au lieu de rĂ©empaqueter la rĂ©fĂ©rence sĂ©lectionnĂ©e. Les profils sont ordonnĂ©s par Ă©tendue : smoke, package, product, et full. Consultez Tester les mises Ă  jour et les plugins pour le contrat de paquet/mise Ă  jour/plugin, la matrice de survivance de mise Ă  niveau publiĂ©e, les valeurs par dĂ©faut de publication et le triage des Ă©checs.
  • Les vĂ©rifications de construction et de publication exĂ©cutent scripts/check-cli-bootstrap-imports.mjs aprĂšs tsdown. Le garde parcourt le graphe construit statique depuis dist/entry.js et dist/cli/run-main.js et Ă©choue si le dĂ©marrage avant rĂ©partition importe des dĂ©pendances de paquet comme Commander, l’interface de prompt, undici ou la journalisation avant la rĂ©partition de commande ; il maintient aussi le segment groupĂ© d’exĂ©cution du Gateway sous le budget et rejette les imports statiques de chemins froids connus du Gateway. Le smoke de CLI empaquetĂ©e couvre aussi l’aide racine, l’aide d’onboard, l’aide de doctor, l’état, le schĂ©ma de configuration et une commande de liste de modĂšles.
  • La compatibilitĂ© hĂ©ritĂ©e de Package Acceptance est plafonnĂ©e Ă  2026.4.25 (2026.4.25-beta.* inclus). Jusqu’à cette limite, le harnais tolĂšre uniquement les lacunes de mĂ©tadonnĂ©es de paquet livrĂ© : entrĂ©es d’inventaire QA privĂ©es omises, gateway install --wrapper manquant, fichiers de correctifs manquants dans la fixture git dĂ©rivĂ©e de l’archive, update.channel persistant manquant, emplacements hĂ©ritĂ©s des enregistrements d’installation de plugin, persistance manquante des enregistrements d’installation marketplace, et migration des mĂ©tadonnĂ©es de configuration pendant plugins update. Pour les paquets aprĂšs 2026.4.25, ces chemins sont des Ă©checs stricts.
  • ExĂ©cuteurs de smoke de conteneur : 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-matrix, et test:docker:config-reload dĂ©marrent un ou plusieurs conteneurs rĂ©els et vĂ©rifient des chemins d’intĂ©gration de plus haut niveau.
  • Les voies Docker/Bash E2E qui installent l’archive OpenClaw empaquetĂ©e via scripts/lib/openclaw-e2e-instance.sh plafonnent npm install Ă  OPENCLAW_E2E_NPM_INSTALL_TIMEOUT (par dĂ©faut 600s ; dĂ©finissez 0 pour dĂ©sactiver l’enveloppe Ă  des fins de dĂ©bogage).

Les exĂ©cuteurs Docker de modĂšles live montent Ă©galement en bind uniquement les rĂ©pertoires d’authentification CLI nĂ©cessaires (ou tous ceux pris en charge lorsque l’exĂ©cution n’est pas restreinte), puis les copient dans le rĂ©pertoire personnel du conteneur avant l’exĂ©cution afin que l’OAuth de CLI externe puisse actualiser les jetons sans modifier le stockage d’authentification de l’hĂŽte :

  • ModĂšles directs : pnpm test:docker:live-models (script : scripts/test-live-models-docker.sh)

  • Smoke de bind ACP : pnpm test:docker:live-acp-bind (script : scripts/test-live-acp-bind-docker.sh ; couvre Claude, Codex et Gemini par dĂ©faut, avec une couverture stricte de Droid/OpenCode via pnpm test:docker:live-acp-bind:droid et pnpm test:docker:live-acp-bind:opencode)

  • Smoke de backend CLI : pnpm test:docker:live-cli-backend (script : scripts/test-live-cli-backend-docker.sh)

  • Smoke du harnais de serveur d’application Codex : pnpm test:docker:live-codex-harness (script : scripts/test-live-codex-harness-docker.sh)

  • Gateway + agent de dĂ©veloppement : pnpm test:docker:live-gateway (script : scripts/test-live-gateway-models-docker.sh)

  • Smokes d’observabilitĂ© : pnpm qa:otel:smoke, pnpm qa:prometheus:smoke, et pnpm qa:observability:smoke sont des voies QA privĂ©es de checkout source. Elles ne font intentionnellement pas partie des voies de publication Docker de paquet, car l’archive npm omet QA Lab.

  • Smoke live Open WebUI : pnpm test:docker:openwebui (script : scripts/e2e/openwebui-docker.sh)

  • Assistant d’intĂ©gration (TTY, Ă©chafaudage complet) : pnpm test:docker:onboard (script : scripts/e2e/onboard-docker.sh)

  • Smoke d’intĂ©gration/canal/agent avec archive npm : pnpm test:docker:npm-onboard-channel-agent installe globalement l’archive OpenClaw empaquetĂ©e dans Docker, configure OpenAI via une intĂ©gration par rĂ©fĂ©rence d’environnement ainsi que Telegram par dĂ©faut, exĂ©cute doctor, et exĂ©cute un tour d’agent OpenAI simulĂ©. RĂ©utilisez une archive prĂ©construite avec OPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz, ignorez la reconstruction hĂŽte avec OPENCLAW_NPM_ONBOARD_HOST_BUILD=0, ou changez de canal avec OPENCLAW_NPM_ONBOARD_CHANNEL=discord ou OPENCLAW_NPM_ONBOARD_CHANNEL=slack.

  • Smoke test du parcours utilisateur de release : pnpm test:docker:release-user-journey installe globalement le tarball OpenClaw empaquetĂ© dans un home Docker propre, exĂ©cute l’onboarding, configure un provider OpenAI simulĂ©, exĂ©cute un tour d’agent, installe/dĂ©sinstalle des plugins externes, configure ClickClack avec une fixture locale, vĂ©rifie la messagerie sortante/entrante, redĂ©marre Gateway, puis exĂ©cute doctor.

  • Smoke test de l’onboarding typĂ© de release : pnpm test:docker:release-typed-onboarding installe le tarball empaquetĂ©, pilote openclaw onboard via un vrai TTY, configure OpenAI comme provider rĂ©fĂ©rencĂ© par variable d’environnement, vĂ©rifie qu’aucune clĂ© brute n’est persistĂ©e, puis exĂ©cute un tour d’agent simulĂ©.

  • Smoke test mĂ©dia/mĂ©moire de release : pnpm test:docker:release-media-memory installe le tarball empaquetĂ©, vĂ©rifie la comprĂ©hension d’image depuis une piĂšce jointe PNG, la sortie de gĂ©nĂ©ration d’images compatible OpenAI, le rappel de recherche mĂ©moire, ainsi que la survie du rappel aprĂšs redĂ©marrage de Gateway.

  • Smoke test du parcours utilisateur de mise Ă  niveau de release : pnpm test:docker:release-upgrade-user-journey installe par dĂ©faut la plus rĂ©cente base publiĂ©e antĂ©rieure au tarball candidat, configure l’état provider/plugin/ClickClack sur le package publiĂ©, met Ă  niveau vers le tarball candidat, puis rĂ©exĂ©cute le parcours principal agent/plugin/canal. S’il n’existe aucune base publiĂ©e plus ancienne, il rĂ©utilise la version candidate. Remplacez la base avec OPENCLAW_RELEASE_UPGRADE_BASELINE_SPEC=openclaw@<version>.

  • Smoke test de la marketplace de plugins de release : pnpm test:docker:release-plugin-marketplace installe depuis une marketplace fixture locale, met Ă  jour le plugin installĂ©, le dĂ©sinstalle, puis vĂ©rifie que la CLI du plugin disparaĂźt avec les mĂ©tadonnĂ©es d’installation Ă©laguĂ©es.

  • Smoke test d’installation de Skill : pnpm test:docker:skill-install installe globalement le tarball OpenClaw empaquetĂ© dans Docker, dĂ©sactive les installations d’archives tĂ©lĂ©versĂ©es dans la configuration, rĂ©sout le slug de Skill ClawHub actif actuel depuis la recherche, l’installe avec openclaw skills install, puis vĂ©rifie la Skill installĂ©e ainsi que les mĂ©tadonnĂ©es d’origine/verrou .clawhub.

  • Smoke test de bascule de canal de mise Ă  jour : pnpm test:docker:update-channel-switch installe globalement le tarball OpenClaw empaquetĂ© dans Docker, bascule du package stable vers le git dev, vĂ©rifie le canal persistĂ© et le fonctionnement post-mise Ă  jour des plugins, puis rebascule vers le package stable et vĂ©rifie l’état de mise Ă  jour.

  • Smoke test de survie aprĂšs mise Ă  niveau : pnpm test:docker:upgrade-survivor installe le tarball OpenClaw empaquetĂ© par-dessus une fixture sale d’ancien utilisateur avec agents, configuration de canal, listes d’autorisation de plugins, Ă©tat obsolĂšte de dĂ©pendances de plugins, et fichiers d’espace de travail/session existants. Il exĂ©cute la mise Ă  jour du package et doctor non interactif sans provider actif ni clĂ©s de canal, puis dĂ©marre un Gateway local loopback et vĂ©rifie la prĂ©servation de la configuration/de l’état ainsi que les budgets de dĂ©marrage/Ă©tat.

  • Smoke test de survie aprĂšs mise Ă  niveau publiĂ©e : pnpm test:docker:published-upgrade-survivor installe openclaw@latest par dĂ©faut, injecte des fichiers rĂ©alistes d’utilisateur existant, configure cette base avec une recette de commandes intĂ©grĂ©e, valide la configuration rĂ©sultante, met Ă  jour cette installation publiĂ©e vers le tarball candidat, exĂ©cute doctor non interactif, Ă©crit .artifacts/upgrade-survivor/summary.json, puis dĂ©marre un Gateway local loopback et vĂ©rifie les intentions configurĂ©es, la prĂ©servation de l’état, le dĂ©marrage, /healthz, /readyz, et les budgets d’état RPC. Remplacez une base avec OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, demandez au planificateur agrĂ©gĂ© d’étendre les bases locales exactes avec OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS, par exemple openclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15, et d’étendre les fixtures en forme d’issues avec OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS, par exemple reported-issues ; l’ensemble reported-issues inclut configured-plugin-installs pour la rĂ©paration automatique de l’installation de plugins OpenClaw externes. Package Acceptance expose ces Ă©lĂ©ments sous published_upgrade_survivor_baseline, published_upgrade_survivor_baselines, et published_upgrade_survivor_scenarios, rĂ©sout les jetons de base mĂ©ta tels que last-stable-4 ou all-since-2026.4.23, et Full Release Validation Ă©tend la porte package de release-soak Ă  last-stable-4 2026.4.23 2026.5.2 2026.4.15 plus reported-issues.

  • Smoke test du contexte d’exĂ©cution de session : pnpm test:docker:session-runtime-context vĂ©rifie la persistance du transcript de contexte d’exĂ©cution masquĂ© ainsi que la rĂ©paration par doctor des branches dupliquĂ©es affectĂ©es de réécriture de prompt.

  • Smoke test d’installation globale Bun : bash scripts/e2e/bun-global-install-smoke.sh empaquette l’arbre courant, l’installe avec bun install -g dans un home isolĂ©, puis vĂ©rifie que openclaw infer image providers --json renvoie les providers d’image groupĂ©s au lieu de rester bloquĂ©. RĂ©utilisez un tarball prĂ©construit avec OPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz, ignorez la construction hĂŽte avec OPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0, ou copiez dist/ depuis une image Docker construite avec OPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local.

  • Smoke test Docker de l’installateur : bash scripts/test-install-sh-docker.sh partage un seul cache npm entre ses conteneurs root, update et direct-npm. Le smoke test de mise Ă  jour utilise par dĂ©faut npm latest comme base stable avant la mise Ă  niveau vers le tarball candidat. Remplacez localement avec OPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22, ou avec l’entrĂ©e update_baseline_version du workflow Install Smoke sur GitHub. Les vĂ©rifications d’installateur non-root conservent un cache npm isolĂ© afin que les entrĂ©es de cache possĂ©dĂ©es par root ne masquent pas le comportement d’installation local Ă  l’utilisateur. DĂ©finissez OPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cache pour rĂ©utiliser le cache root/update/direct-npm lors des rĂ©exĂ©cutions locales.

  • Install Smoke CI ignore la mise Ă  jour globale direct-npm dupliquĂ©e avec OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1 ; exĂ©cutez le script localement sans cette variable d’environnement quand la couverture directe de npm install -g est nĂ©cessaire.

  • Smoke test CLI de suppression d’agents avec espace de travail partagĂ© : pnpm test:docker:agents-delete-shared-workspace (script : scripts/e2e/agents-delete-shared-workspace-docker.sh) construit par dĂ©faut l’image Dockerfile racine, injecte deux agents avec un espace de travail dans un home de conteneur isolĂ©, exĂ©cute agents delete --json, puis vĂ©rifie un JSON valide et le comportement de conservation de l’espace de travail. RĂ©utilisez l’image install-smoke avec OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1.

  • RĂ©seau Gateway (deux conteneurs, authentification WS + santĂ©) : pnpm test:docker:gateway-network (script : scripts/e2e/gateway-network-docker.sh)

  • Smoke test d’instantanĂ© CDP navigateur : pnpm test:docker:browser-cdp-snapshot (script : scripts/e2e/browser-cdp-snapshot-docker.sh) construit l’image E2E source plus une couche Chromium, dĂ©marre Chromium avec CDP brut, exĂ©cute browser doctor --deep, puis vĂ©rifie que les instantanĂ©s de rĂŽle CDP couvrent les URL de liens, les Ă©lĂ©ments cliquables promus par le curseur, les refs d’iframe et les mĂ©tadonnĂ©es de frame.

  • RĂ©gression OpenAI Responses web_search avec raisonnement minimal : pnpm test:docker:openai-web-search-minimal (script : scripts/e2e/openai-web-search-minimal-docker.sh) exĂ©cute un serveur OpenAI simulĂ© via Gateway, vĂ©rifie que web_search augmente reasoning.effort de minimal Ă  low, puis force le rejet du schĂ©ma provider et vĂ©rifie que le dĂ©tail brut apparaĂźt dans les journaux Gateway.

  • Pont de canal MCP (Gateway injectĂ© + pont stdio + smoke test raw Claude notification-frame) : pnpm test:docker:mcp-channels (script : scripts/e2e/mcp-channels-docker.sh)

  • Outils MCP du bundle OpenClaw (serveur MCP stdio rĂ©el + smoke test d’autorisation/refus de profil OpenClaw intĂ©grĂ©) : pnpm test:docker:agent-bundle-mcp-tools (script : scripts/e2e/agent-bundle-mcp-tools-docker.sh)

  • Nettoyage Cron/subagent MCP (Gateway rĂ©el + nettoyage d’enfant MCP stdio aprĂšs exĂ©cutions cron isolĂ©es et subagent ponctuelles) : pnpm test:docker:cron-mcp-cleanup (script : scripts/e2e/cron-mcp-cleanup-docker.sh)

  • Plugins (smoke test d’installation/mise Ă  jour pour chemin local, file:, registre npm avec dĂ©pendances hissĂ©es, mĂ©tadonnĂ©es de package npm mal formĂ©es, refs git mobiles, ClawHub kitchen-sink, mises Ă  jour de marketplace, et activation/inspection du bundle Claude) : pnpm test:docker:plugins (script : scripts/e2e/plugins-docker.sh) DĂ©finissez OPENCLAW_PLUGINS_E2E_CLAWHUB=0 pour ignorer le bloc ClawHub, ou remplacez la paire package/runtime kitchen-sink par dĂ©faut avec OPENCLAW_PLUGINS_E2E_CLAWHUB_SPEC et OPENCLAW_PLUGINS_E2E_CLAWHUB_ID. Sans OPENCLAW_CLAWHUB_URL/CLAWHUB_URL, le test utilise un serveur fixture ClawHub local hermĂ©tique.

  • Smoke test de mise Ă  jour inchangĂ©e de plugin : pnpm test:docker:plugin-update (script : scripts/e2e/plugin-update-unchanged-docker.sh)

  • Smoke test de matrice de cycle de vie de plugin : pnpm test:docker:plugin-lifecycle-matrix installe le tarball OpenClaw empaquetĂ© dans un conteneur nu, installe un plugin npm, bascule activation/dĂ©sactivation, le met Ă  niveau et le rĂ©trograde via un registre npm local, supprime le code installĂ©, puis vĂ©rifie que la dĂ©sinstallation supprime toujours l’état obsolĂšte tout en journalisant les mĂ©triques RSS/CPU pour chaque phase du cycle de vie.

  • Smoke test de mĂ©tadonnĂ©es de rechargement de configuration : pnpm test:docker:config-reload (script : scripts/e2e/config-reload-source-docker.sh)

  • Plugins : pnpm test:docker:plugins couvre les smoke tests d’installation/mise Ă  jour pour chemin local, file:, registre npm avec dĂ©pendances hissĂ©es, refs git mobiles, fixtures ClawHub, mises Ă  jour de marketplace, et activation/inspection du bundle Claude. pnpm test:docker:plugin-update couvre le comportement de mise Ă  jour inchangĂ©e pour les plugins installĂ©s. pnpm test:docker:plugin-lifecycle-matrix couvre l’installation de plugin npm suivie en ressources, l’activation, la dĂ©sactivation, la mise Ă  niveau, la rĂ©trogradation, et la dĂ©sinstallation avec code manquant.

Pour prĂ©construire et rĂ©utiliser manuellement l’image fonctionnelle partagĂ©e :

bash
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-channels

Les remplacements d’image propres Ă  une suite, tels que OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE, restent prioritaires lorsqu’ils sont dĂ©finis. Quand OPENCLAW_SKIP_DOCKER_BUILD=1 pointe vers une image partagĂ©e distante, les scripts la rĂ©cupĂšrent si elle n’est pas dĂ©jĂ  locale. Les tests Docker QR et d’installateur conservent leurs propres Dockerfiles, car ils valident le comportement de package/d’installation plutĂŽt que l’exĂ©cution applicative construite partagĂ©e.

Les exĂ©cuteurs Docker Ă  modĂšle live montent aussi le checkout actuel en lecture seule et le prĂ©parent dans un rĂ©pertoire de travail temporaire Ă  l’intĂ©rieur du conteneur. Cela garde l’image runtime lĂ©gĂšre tout en exĂ©cutant Vitest sur votre source/configuration locale exacte. L’étape de prĂ©paration ignore les grands caches locaux uniquement et les sorties de build d’applications comme .pnpm-store, .worktrees, __openclaw_vitest__, ainsi que les rĂ©pertoires de sortie .build locaux Ă  l’application ou Gradle, afin que les exĂ©cutions live Docker ne passent pas des minutes Ă  copier des artefacts spĂ©cifiques Ă  la machine. Ils dĂ©finissent aussi OPENCLAW_SKIP_CHANNELS=1 afin que les sondes live de Gateway ne dĂ©marrent pas de vĂ©ritables workers de canaux Telegram/Discord/etc. dans le conteneur. test:docker:live-models exĂ©cute toujours pnpm test:live, donc transmettez aussi OPENCLAW_LIVE_GATEWAY_* lorsque vous devez restreindre ou exclure la couverture live de Gateway de cette voie Docker. test:docker:openwebui est un smoke test de compatibilitĂ© de plus haut niveau : il dĂ©marre un conteneur Gateway OpenClaw avec les points de terminaison HTTP compatibles OpenAI activĂ©s, dĂ©marre un conteneur Open WebUI Ă©pinglĂ© contre ce Gateway, se connecte via Open WebUI, vĂ©rifie que /api/models expose openclaw/default, puis envoie une vraie requĂȘte de chat via le proxy /api/chat/completions d’Open WebUI. DĂ©finissez OPENWEBUI_SMOKE_MODE=models pour les vĂ©rifications CI du chemin de release qui doivent s’arrĂȘter aprĂšs la connexion Ă  Open WebUI et la dĂ©couverte du modĂšle, sans attendre une complĂ©tion de modĂšle live. La premiĂšre exĂ©cution peut ĂȘtre sensiblement plus lente, car Docker peut devoir extraire l’image Open WebUI et Open WebUI peut devoir terminer sa propre configuration de dĂ©marrage Ă  froid. Cette voie attend une clĂ© de modĂšle live utilisable. Fournissez-la via l’environnement du processus, des profils d’authentification prĂ©parĂ©s, ou un OPENCLAW_PROFILE_FILE explicite. Les exĂ©cutions rĂ©ussies affichent une petite charge utile JSON comme { "ok": true, "model": "openclaw/default", ... }. test:docker:mcp-channels est intentionnellement dĂ©terministe et ne nĂ©cessite pas de vrai compte Telegram, Discord ou iMessage. Il dĂ©marre un conteneur Gateway prĂ©rempli, dĂ©marre un second conteneur qui lance openclaw mcp serve, puis vĂ©rifie la dĂ©couverte de conversations routĂ©es, la lecture de transcriptions, les mĂ©tadonnĂ©es de piĂšces jointes, le comportement de la file d’évĂ©nements live, le routage d’envoi sortant, ainsi que les notifications de canal et de permissions de style Claude via le vrai pont MCP stdio. La vĂ©rification des notifications inspecte directement les trames MCP stdio brutes afin que le smoke test valide ce que le pont Ă©met rĂ©ellement, et pas seulement ce qu’un SDK client spĂ©cifique expose par hasard. test:docker:agent-bundle-mcp-tools est dĂ©terministe et ne nĂ©cessite pas de clĂ© de modĂšle live. Il construit l’image Docker du dĂ©pĂŽt, dĂ©marre un vrai serveur de sonde MCP stdio dans le conteneur, matĂ©rialise ce serveur via le runtime MCP du bundle OpenClaw embarquĂ©, exĂ©cute l’outil, puis vĂ©rifie que coding et messaging conservent les outils bundle-mcp, tandis que minimal et tools.deny: ["bundle-mcp"] les filtrent. test:docker:cron-mcp-cleanup est dĂ©terministe et ne nĂ©cessite pas de clĂ© de modĂšle live. Il dĂ©marre un Gateway prĂ©rempli avec un vrai serveur de sonde MCP stdio, exĂ©cute un tour cron isolĂ© et un tour enfant ponctuel sessions_spawn, puis vĂ©rifie que le processus enfant MCP se termine aprĂšs chaque exĂ©cution.

Smoke test manuel ACP de thread en langage naturel (hors CI) :

  • bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...
  • Conservez ce script pour les workflows de rĂ©gression/dĂ©bogage. Il peut ĂȘtre de nouveau nĂ©cessaire pour la validation du routage de threads ACP, donc ne le supprimez pas.

Variables d’environnement utiles :

  • OPENCLAW_CONFIG_DIR=... (par dĂ©faut : ~/.openclaw) montĂ© sur /home/node/.openclaw
  • OPENCLAW_WORKSPACE_DIR=... (par dĂ©faut : ~/.openclaw/workspace) montĂ© sur /home/node/.openclaw/workspace
  • OPENCLAW_PROFILE_FILE=... montĂ© et sourcĂ© avant d’exĂ©cuter les tests
  • OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1 pour vĂ©rifier uniquement les variables d’environnement sourcĂ©es depuis OPENCLAW_PROFILE_FILE, en utilisant des rĂ©pertoires de configuration/espace de travail temporaires et aucun montage d’authentification CLI externe
  • OPENCLAW_DOCKER_CLI_TOOLS_DIR=... (par dĂ©faut : ~/.cache/openclaw/docker-cli-tools) montĂ© sur /home/node/.npm-global pour les installations CLI mises en cache dans Docker
  • Les rĂ©pertoires/fichiers d’authentification CLI externes sous $HOME sont montĂ©s en lecture seule sous /host-auth..., puis copiĂ©s dans /home/node/... avant le dĂ©marrage des tests
    • RĂ©pertoires par dĂ©faut : .minimax
    • Fichiers par dĂ©faut : ~/.codex/auth.json, ~/.codex/config.toml, .claude.json, ~/.claude/.credentials.json, ~/.claude/settings.json, ~/.claude/settings.local.json
    • Les exĂ©cutions restreintes Ă  un fournisseur ne montent que les rĂ©pertoires/fichiers nĂ©cessaires dĂ©duits de OPENCLAW_LIVE_PROVIDERS / OPENCLAW_LIVE_GATEWAY_PROVIDERS
    • Remplacez manuellement avec OPENCLAW_DOCKER_AUTH_DIRS=all, OPENCLAW_DOCKER_AUTH_DIRS=none, ou une liste sĂ©parĂ©e par des virgules comme OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex
  • OPENCLAW_LIVE_GATEWAY_MODELS=... / OPENCLAW_LIVE_MODELS=... pour restreindre l’exĂ©cution
  • OPENCLAW_LIVE_GATEWAY_PROVIDERS=... / OPENCLAW_LIVE_PROVIDERS=... pour filtrer les fournisseurs dans le conteneur
  • OPENCLAW_SKIP_DOCKER_BUILD=1 pour rĂ©utiliser une image openclaw:local-live existante lors de rĂ©exĂ©cutions qui ne nĂ©cessitent pas de reconstruction
  • OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 pour garantir que les identifiants proviennent du magasin de profils (et non de l’environnement)
  • OPENCLAW_OPENWEBUI_MODEL=... pour choisir le modĂšle exposĂ© par le Gateway pour le smoke test Open WebUI
  • OPENCLAW_OPENWEBUI_PROMPT=... pour remplacer le prompt de vĂ©rification de nonce utilisĂ© par le smoke test Open WebUI
  • OPENWEBUI_IMAGE=... pour remplacer le tag d’image Open WebUI Ă©pinglĂ©

Vérification de cohérence des docs

Exécutez les vérifications de docs aprÚs les modifications de documentation : pnpm check:docs. Exécutez la validation complÚte des ancres Mintlify lorsque vous devez aussi vérifier les titres dans la page : pnpm docs:check-links:anchors.

Régression hors ligne (compatible CI)

Ce sont des régressions de « vrai pipeline » sans vrais fournisseurs :

  • Appel d’outils Gateway (OpenAI simulĂ©, vrai Gateway + boucle agent) : src/gateway/gateway.test.ts (cas : "runs a mock OpenAI tool call end-to-end via gateway agent loop")
  • Assistant Gateway (WS wizard.start/wizard.next, Ă©crit la configuration + auth appliquĂ©e) : src/gateway/gateway.test.ts (cas : "runs wizard over ws and writes auth token config")

Évaluations de fiabilitĂ© d’agent (Skills)

Nous avons dĂ©jĂ  quelques tests compatibles CI qui se comportent comme des « Ă©valuations de fiabilitĂ© d’agent » :

  • Appel d’outils simulĂ© via le vrai Gateway + boucle agent (src/gateway/gateway.test.ts).
  • Flux d’assistant de bout en bout qui valident le cĂąblage de session et les effets de configuration (src/gateway/gateway.test.ts).

Ce qui manque encore pour les Skills (voir Skills) :

  • Prise de dĂ©cision : lorsque les Skills sont listĂ©s dans le prompt, l’agent choisit-il la bonne compĂ©tence (ou Ă©vite-t-il celles qui ne sont pas pertinentes) ?
  • ConformitĂ© : l’agent lit-il SKILL.md avant utilisation et suit-il les Ă©tapes/arguments requis ?
  • Contrats de workflow : scĂ©narios multi-tours qui vĂ©rifient l’ordre des outils, le transfert de l’historique de session et les limites du bac Ă  sable.

Les futures évaluations doivent rester déterministes en priorité :

  • Un exĂ©cuteur de scĂ©narios utilisant des fournisseurs simulĂ©s pour vĂ©rifier les appels d’outils + leur ordre, les lectures de fichiers de Skills et le cĂąblage de session.
  • Une petite suite de scĂ©narios centrĂ©s sur les Skills (utiliser vs Ă©viter, garde-fous, injection de prompt).
  • Des Ă©valuations live optionnelles (opt-in, gardĂ©es par l’environnement) seulement aprĂšs la mise en place de la suite compatible CI.

Tests de contrat (forme des plugins et des canaux)

Les tests de contrat vĂ©rifient que chaque Plugin et canal enregistrĂ© se conforme Ă  son contrat d’interface. Ils parcourent tous les Plugins dĂ©couverts et exĂ©cutent une suite d’assertions de forme et de comportement. La voie unitaire par dĂ©faut pnpm test ignore intentionnellement ces fichiers de smoke test et de jonction partagĂ©e ; exĂ©cutez explicitement les commandes de contrat lorsque vous touchez aux surfaces partagĂ©es de canal ou de fournisseur.

Commandes

  • Tous les contrats : pnpm test:contracts
  • Contrats de canaux uniquement : pnpm test:contracts:channels
  • Contrats de fournisseurs uniquement : pnpm test:contracts:plugins

Contrats de canaux

Situés dans src/channels/plugins/contracts/*.contract.test.ts :

  • plugin - Forme de base du Plugin (id, nom, capacitĂ©s)
  • setup - Contrat de l’assistant de configuration
  • session-binding - Comportement de liaison de session
  • outbound-payload - Structure de charge utile de message
  • inbound - Gestion des messages entrants
  • actions - Gestionnaires d’actions de canal
  • threading - Gestion des identifiants de thread
  • directory - API d’annuaire/liste
  • group-policy - Application de la politique de groupe

Contrats d’état des fournisseurs

Situés dans src/plugins/contracts/*.contract.test.ts.

  • status - Sondes d’état des canaux
  • registry - Forme du registre de Plugins

Contrats de fournisseurs

Situés dans src/plugins/contracts/*.contract.test.ts :

  • auth - Contrat du flux d’authentification
  • auth-choice - Choix/sĂ©lection d’authentification
  • catalog - API de catalogue de modĂšles
  • discovery - DĂ©couverte de Plugins
  • loader - Chargement de Plugins
  • runtime - Runtime de fournisseur
  • shape - Forme/interface du Plugin
  • wizard - Assistant de configuration

Quand les exécuter

  • AprĂšs modification des exports ou sous-chemins de plugin-sdk
  • AprĂšs ajout ou modification d’un Plugin de canal ou de fournisseur
  • AprĂšs refactorisation de l’enregistrement ou de la dĂ©couverte de Plugins

Les tests de contrat s’exĂ©cutent en CI et ne nĂ©cessitent pas de vraies clĂ©s API.

Ajouter des régressions (conseils)

Lorsque vous corrigez un problÚme de fournisseur/modÚle découvert en live :

  • Ajoutez une rĂ©gression compatible CI si possible (fournisseur simulĂ©/stub, ou capture de la transformation exacte de la forme de requĂȘte)
  • Si c’est intrinsĂšquement live uniquement (limites de dĂ©bit, politiques d’authentification), gardez le test live restreint et opt-in via des variables d’environnement
  • PrĂ©fĂ©rez cibler la plus petite couche qui dĂ©tecte le bug :
    • bug de conversion/relecture de requĂȘte fournisseur → test direct des modĂšles
    • bug de pipeline session/historique/outils Gateway → smoke test Gateway live ou test Gateway simulĂ© compatible CI
  • Garde-fou de traversĂ©e SecretRef :
    • src/secrets/exec-secret-ref-id-parity.test.ts dĂ©rive une cible Ă©chantillonnĂ©e par classe SecretRef depuis les mĂ©tadonnĂ©es de registre (listSecretTargetRegistryEntries()), puis affirme que les ids exec Ă  segment de traversĂ©e sont rejetĂ©s.
    • Si vous ajoutez une nouvelle famille de cibles SecretRef includeInPlan dans src/secrets/target-registry-data.ts, mettez Ă  jour classifyTargetClass dans ce test. Le test Ă©choue intentionnellement sur les ids de cible non classifiĂ©s afin que les nouvelles classes ne puissent pas ĂȘtre ignorĂ©es silencieusement.

Connexe

Was this useful?
On this page

On this page