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 :
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 :
// 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 Performanceaveclive_openai_candidate=truepour un vrai tour dâagentopenai/gpt-5.5oudeep_profile=truepour 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 versopenclaw/clawgrit-reportslorsqueCLAWGRIT_REPORTS_TOKENest 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
imageexécutent aussi un minuscule tour image. Désactivez les sondes supplémentaires avecOPENCLAW_LIVE_MODEL_FILE_PROBE=0ouOPENCLAW_LIVE_MODEL_IMAGE_PROBE=0lorsque vous isolez des échecs fournisseur. - Couverture CI : les workflows quotidiens
OpenClaw Scheduled Live And E2E Checkset manuelsOpenClaw Release Checksappellent tous deux le workflow live/E2E réutilisable avecinclude_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)avecinclude_live_suites: trueetlive_models_only: true. - Ajoutez les nouveaux secrets fournisseur Ă fort signal dans
scripts/ci-hydrate-live-auth.shainsi que.github/workflows/openclaw-live-and-e2e-checks-reusable.ymlet ses appelants planifiés/release.
- 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
- 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 fastet/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.
- Exécute une voie live Docker contre le chemin app-server Codex, lie un DM
Slack synthétique avec
- 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 statuset/codex models, et exerce par dĂ©faut les sondes image, MCP cron, sous-agent et Guardian. DĂ©sactivez la sonde sous-agent avecOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0lorsque 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 siOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0est dĂ©fini.
- ExĂ©cute des tours dâagent Gateway via le harnais app-server Codex dĂ©tenu par le Plugin,
vérifie
- 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/codexont été téléchargés à la demande dans la racine du projet npm géré.
- 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
- 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 vianpm-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Ă©.
- EmpaquÚte un Plugin fixture avec une vraie dépendance
- 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.
- Vérification opt-in de ceinture et bretelles pour la surface de commande de secours du canal de messages.
Elle exerce
- Smoke Docker du planificateur Crestodian :
pnpm test:docker:crestodian-planner- Exécute Crestodian dans un conteneur sans config avec une fausse CLI Claude sur
PATHet vérifie que le fallback de planificateur flou se traduit par une écriture de config typée auditée.
- Exécute Crestodian dans un conteneur sans config avec une fausse CLI Claude sur
- 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.
- 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
- Smoke de coût Moonshot/Kimi : avec
MOONSHOT_API_KEYdéfini, exécutezopenclaw models list --provider moonshot --json, puis exécutez unopenclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --jsonisolé contremoonshot/kimi-k2.6. Vérifiez que le JSON indique Moonshot/K2.6 et que le transcript assistant stockeusage.costnormalisé.
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.jsonetqa-suite-report.mdpour 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ĂȘmeqa-evidence.json.smoke-ciĂ©crit des preuves allĂ©gĂ©es, ce qui dĂ©finitevidenceMode: "slim"et ometexecutionpour chaque entrĂ©e.releasecouvre la tranche organisĂ©e de prĂ©paration Ă la publication ;allsĂ©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-channelutilise 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 1pour lâancienne voie sĂ©rie. - Se termine avec un code non nul lorsquâun scĂ©nario Ă©choue. Utilisez
--allow-failureslorsque vous voulez des artefacts sans code de sortie dâĂ©chec. - Prend en charge les modes fournisseur
live-frontier,mock-openaietaimock.aimockdémarre un serveur fournisseur local adossé à AIMock pour la couverture expérimentale par fixture et mock de protocole, sans remplacer la voiemock-openaiconsciente 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
/healthzet/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 queOPENAI_API_KEY. Dans les sessions Testbox hydratĂ©es, elle source automatiquement le profil live-auth Testbox lorsque lâaideopenclaw-testbox-envest prĂ©sente.
- 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
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-warnplus--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
distconstruits ; exĂ©cutez dâabord une build lorsque le checkout ne dispose pas dĂ©jĂ dâune sortie runtime fraĂźche.
- Exécute le banc de démarrage du gateway plus un petit paquet de scénarios QA Lab mock
(
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 suitesur 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_HOMElorsquâ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=discordpour 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 --fixle réécrit vers la branche active avec une sauvegarde.
- 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
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-labdepuis le checkout ; le paquet installé possÚdedist,openclaw/plugin-sdket 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Ă©finissezOPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgzouOPENCLAW_CURRENT_PACKAGE_TGZpour 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.jsonavecOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES=20. RemplacezOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES,OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MSouOPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURESpour ajuster lâexĂ©cution RTT.OPENCLAW_NPM_TELEGRAM_RTT_CHECKSaccepte 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 esttelegram-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Ă©finissezOPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convexplusOPENCLAW_QA_CONVEX_SITE_URLet un secret de rĂŽle. SiOPENCLAW_QA_CONVEX_SITE_URLet 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=1uniquement lorsque vous dĂ©boguez dĂ©libĂ©rĂ©ment la configuration prĂ©alable aux identifiants. OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainerremplace leOPENCLAW_QA_CREDENTIAL_ROLEpartagĂ© pour cette voie uniquement. Lorsque les identifiants Convex sont sĂ©lectionnĂ©s et quâaucun rĂŽle nâest dĂ©fini, le wrapper utilisecien CI etmaintainerhors 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âenvironnementqa-live-sharedet les baux dâidentifiants CI Convex.
- GitHub Actions expose aussi
Package Acceptancepour 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 leopenclaw-current.tgznormalisĂ© commepackage-under-test, puis exĂ©cute le planificateur Docker E2E existant avec des profils de voie smoke, package, product, full ou custom. DĂ©finisseztelegram_mode=mock-openaioulive-frontierpour exĂ©cuter le workflow QA Telegram contre le mĂȘme artefactpackage-under-test.- DerniĂšre preuve produit beta :
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 :
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 :
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 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 :
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 updateinstallĂ©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 windowsou--platform linuxpendant lâitĂ©ration sur un invitĂ©. Utilisez--jsonpour le chemin de lâartefact de rĂ©sumĂ© et lâĂ©tat de chaque voie. -
La voie OpenAI utilise
openai/gpt-5.5par dĂ©faut pour la preuve de tour dâagent live. Passez--model <provider/model>ou dĂ©finissezOPENCLAW_PARALLELS_OPENAI_MODELlorsque 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.*. Inspectezwindows-update.log,macos-update.logoulinux-update.logavant 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.
- ExĂ©cute la voie QA live Matrix avec un homeserver Tuwunel jetable adossĂ© Ă Docker. Checkout source uniquement - les installations packagĂ©es nâincluent pas
-
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_TOKENetOPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN. Lâid du groupe doit ĂȘtre lâid numĂ©rique du chat Telegram. - Prend en charge
--credential-source convexpour des identifiants mutualisĂ©s partagĂ©s. Utilisez le mode env par dĂ©faut, ou dĂ©finissezOPENCLAW_QA_CREDENTIAL_SOURCE=convexpour 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Ă©fautmock-openaicouvrent aussi les rĂ©gressions dĂ©terministes de chaĂźne de rĂ©ponses et de streaming du message final Telegram. Utilisez--list-scenariospour les sondes facultatives commesession_status. - Se termine avec un code non nul lorsquâun scĂ©nario Ă©choue. Utilisez
--allow-failureslorsque 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
@BotFatherpour 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.jsonsous.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 :
@openclaw-mantis telegram@openclaw-mantis telegram scenario=telegram-status-command@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-replyMantis 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 :
@openclaw-mantis telegram desktop proofLâ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 convexafin que les workflows nâaient besoin que du secret du courtier Convex. Utilisez--credential-source envavec les mĂȘmes variablesOPENCLAW_QA_TELEGRAM_*quepnpm 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.tgzen base64, ou utilisez--keep-leaseet connectez-vous manuellement via VNC une fois. - Ăcrit
mantis-telegram-desktop-builder-report.md,mantis-telegram-desktop-builder-summary.json,telegram-desktop-builder.pngettelegram-desktop-builder.mp4sous 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 exemplehttps://your-deployment.convex.site)- Un secret pour le rÎle sélectionné :
OPENCLAW_QA_CONVEX_SECRET_MAINTAINERpourmaintainerOPENCLAW_QA_CONVEX_SECRET_CIpourci
- 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éfautcien CI, sinonmaintainer)
- CLI :
Variables dâenvironnement facultatives :
OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS(par défaut1200000)OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS(par défaut30000)OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS(par défaut90000)OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS(par défaut15000)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=1autorise les URL Convexhttp://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 :
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", ... }
- RequĂȘte :
POST /payload-chunk- RequĂȘte :
{ kind, ownerId, actorRole, credentialId, leaseToken, index } - SuccĂšs :
{ status: "ok", index, data }
- RequĂȘte :
POST /heartbeat- RequĂȘte :
{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs } - SuccĂšs :
{ status: "ok" }(ou2xxvide)
- RequĂȘte :
POST /release- RequĂȘte :
{ kind, ownerId, actorRole, credentialId, leaseToken } - SuccĂšs :
{ status: "ok" }(ou2xxvide)
- RequĂȘte :
POST /admin/add(secret mainteneur uniquement)- RequĂȘte :
{ kind, actorId, payload, note?, status? } - SuccĂšs :
{ status: "ok", credential }
- RequĂȘte :
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", ... }
- RequĂȘte :
POST /admin/list(secret mainteneur uniquement)- RequĂȘte :
{ kind?, status?, includePayload?, limit? } - SuccĂšs :
{ status: "ok", credentials, count }
- RequĂȘte :
Forme du payload pour le type Telegram :
{ groupId: string, driverToken: string, sutToken: string }groupIddoit ĂȘtre une chaĂźne dâid de chat Telegram numĂ©rique.admin/addvalide cette forme pourkind: "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,testerUserIdettelegramApiIddoivent ĂȘtre des chaĂźnes numĂ©riques.tdlibArchiveSha256etdesktopTdataArchiveSha256doivent ĂȘ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.tset 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.tsettest/**/*.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.jsetruntime-api.jsavec 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-wasmgroupĂ©, et@discordjs/opusreste dĂ©sactivĂ© dansallowBuildsafin 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/opussurtruedans leallowBuildspar 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 testlancent 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 --watchutilise toujours le graphe de projet racine natifvitest.config.ts, car une boucle de surveillance multi-shards nâest pas pratique.pnpm test,pnpm test:watchetpnpm test:perf:importsacheminent dâabord les cibles explicites de fichier/rĂ©pertoire via des voies Ă portĂ©e limitĂ©e, de sorte quepnpm 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 explicitementOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed.pnpm check:changedest 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 ; appelezpnpm test:changedoupnpm 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.jsonne 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-sdket zones similaires de purs utilitaires passent par la voieunit-fast, qui ignoretest/setup-openclaw-runtime.ts; les fichiers avec état ou lourds en runtime restent sur les voies existantes. - Certains fichiers sources helper de
plugin-sdketcommandsmappent Ă©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-replydispose de buckets dĂ©diĂ©s pour les helpers core de premier niveau, les tests dâintĂ©grationreply.*de premier niveau et le sous-arbresrc/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-pluginsréservé aux releases. Full Release Validation déclenche le workflow enfant séparéPlugin Prereleasepour 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.tsetsrc/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
threadspar défaut. - La config Vitest partagée fixe
isolate: falseet utilise lâexĂ©cuteur non isolĂ© dans les projets racine, e2e et configs live. - La voie UI racine conserve sa configuration
jsdomet son optimiseur, mais sâexĂ©cute Ă©galement sur lâexĂ©cuteur non isolĂ© partagĂ©. - Chaque shard
pnpm testhĂ©rite des mĂȘmes valeurs par dĂ©fautthreads+isolate: falsedepuis la config Vitest partagĂ©e. scripts/run-vitest.mjsajoute--no-maglevpar 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Ă©finissezOPENCLAW_VITEST_ENABLE_MAGLEV=1pour comparer avec le comportement V8 dâorigine.scripts/run-vitest.mjstermine les exĂ©cutions Vitest explicites hors surveillance aprĂšs 5 minutes sans sortie stdout ni stderr. DĂ©finissezOPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=0pour dĂ©sactiver la surveillance lors dâune investigation intentionnellement silencieuse.
Itération locale rapide
pnpm changed:lanesaffiche 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:changedavant la remise ou le push lorsque vous avez besoin de la porte de vĂ©rification locale intelligente. pnpm test:changedpasse par dĂ©faut par des voies Ă portĂ©e limitĂ©e peu coĂ»teuses. UtilisezOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changeduniquement 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:maxetpnpm test:changed:maxconservent 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
forceRerunTriggersafin que les réexécutions en mode modifié restent correctes lorsque le cùblage des tests change. - La config garde
OPENCLAW_VITEST_FS_MODULE_CACHEactivé sur les hÎtes pris en charge ; définissezOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/pathsi vous voulez un emplacement de cache explicite pour le profilage direct.
Débogage des performances
pnpm test:perf:importsactive le rapport de durĂ©e dâimportation de Vitest ainsi que la sortie de dĂ©composition des importations.pnpm test:perf:imports:changedlimite la mĂȘme vue de profilage aux fichiers modifiĂ©s depuisorigin/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.tset 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 letest:changedroutĂ© 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 -- --worktreemesure lâarbre de travail sale actuel en routant la liste des fichiers modifiĂ©s viascripts/test-projects.mjset 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.stabilityvia 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.tset tests E2E de plugins groupĂ©s sousextensions/ - Valeurs par dĂ©faut Ă lâexĂ©cution :
- Utilise les
threadsVitest avecisolate: 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.
- Utilise les
- Surcharges utiles :
OPENCLAW_E2E_WORKERS=<n>pour forcer le nombre de workers (plafonné à 16).OPENCLAW_E2E_VERBOSE=1pour 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)
- SâexĂ©cute en CI dans le cadre de
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:e2epar défaut - Nécessite une CLI locale
openshellainsi quâun dĂ©mon Docker fonctionnel - NĂ©cessite un gateway OpenShell local actif et sa source de configuration
- Utilise des
HOME/XDG_CONFIG_HOMEisolés, puis détruit le bac à sable de test
- Sur adhĂ©sion uniquement ; ne fait pas partie de lâexĂ©cution
- Surcharges utiles :
OPENCLAW_E2E_OPENSHELL=1pour activer le test lors de lâexĂ©cution manuelle de la suite e2e plus largeOPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshellpour pointer vers un binaire CLI ou script wrapper non par dĂ©fautOPENCLAW_E2E_OPENSHELL_CONFIG_HOME=/path/to/configpour exposer la configuration du gateway enregistrĂ© au test isolĂ©OPENCLAW_E2E_OPENSHELL_HOST_IP=172.18.0.1pour 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 sousextensions/ - Valeur par défaut : activé par
pnpm test:live(définitOPENCLAW_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
HOMEet 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=1uniquement lorsque vous avez intentionnellement besoin que les tests live utilisent votre vrai rĂ©pertoire personnel. pnpm test:liveutilise 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Ă©finissezOPENCLAW_LIVE_TEST_QUIET=0si vous voulez rĂ©cupĂ©rer les journaux de dĂ©marrage complets.- Rotation des clĂ©s dâAPI (spĂ©cifique au fournisseur) : dĂ©finissez
*_API_KEYSavec un format séparé par virgules/points-virgules ou*_API_KEY_1,*_API_KEY_2(par exempleOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) ou une substitution par test live viaOPENCLAW_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.tsdĂ©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(etpnpm test:coveragesi 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:liverestreint
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-modelsettest:docker:live-gatewaynâ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.tsetsrc/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 sonttest:live:models-profilesettest:live:gateway-profiles. - Les exĂ©cuteurs live Docker conservent leurs propres plafonds pratiques si nĂ©cessaire :
test:docker:live-modelsutilise par dĂ©faut lâensemble organisĂ© et pris en charge Ă fort signal, ettest:docker:live-gatewayutilise par dĂ©fautOPENCLAW_LIVE_GATEWAY_SMOKE=1,OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8,OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000, etOPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000. DĂ©finissezOPENCLAW_LIVE_MAX_MODELSou les variables dâenvironnement du Gateway lorsque vous voulez explicitement un plafond plus petit ou une analyse plus large. test:docker:allconstruit lâimage Docker live une seule fois viatest:docker:live-build, empaquette OpenClaw une seule fois comme archive npm avecscripts/package-openclaw-for-docker.mjs, puis construit/rĂ©utilise deux imagesscripts/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/apppour les voies de fonctionnalitĂ© de lâapplication construite. Les dĂ©finitions des voies Docker se trouvent dansscripts/lib/docker-e2e-scenarios.mjs; la logique du planificateur se trouve dansscripts/lib/docker-e2e-plan.mjs;scripts/test-docker-all.mjsexĂ©cute le plan sĂ©lectionnĂ©. LâagrĂ©gat utilise un planificateur local pondĂ©rĂ© :OPENCLAW_DOCKER_ALL_PARALLELISMcontrĂŽ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, etOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7; ajustezOPENCLAW_DOCKER_ALL_WEIGHT_LIMITouOPENCLAW_DOCKER_ALL_DOCKER_LIMITuniquement 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. UtilisezOPENCLAW_DOCKER_ALL_DRY_RUN=1pour afficher le manifeste pondĂ©rĂ© des voies sans construire ni exĂ©cuter Docker, ounode scripts/test-docker-all.mjs --plan-jsonpour afficher le plan CI des voies sĂ©lectionnĂ©es, les besoins en paquet/image et les identifiants.Package Acceptanceest la barriĂšre de paquet native GitHub pour « cette archive installable fonctionne-t-elle comme un produit ? ». Elle rĂ©sout un paquet candidat depuissource=npm,source=ref,source=url, ousource=artifact, le tĂ©lĂ©verse commepackage-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, etfull. 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.mjsaprĂšs tsdown. Le garde parcourt le graphe construit statique depuisdist/entry.jsetdist/cli/run-main.jset Ă©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 --wrappermanquant, fichiers de correctifs manquants dans la fixture git dĂ©rivĂ©e de lâarchive,update.channelpersistant 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 pendantplugins update. Pour les paquets aprĂšs2026.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, ettest:docker:config-reloaddĂ©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.shplafonnentnpm installĂOPENCLAW_E2E_NPM_INSTALL_TIMEOUT(par dĂ©faut600s; dĂ©finissez0pour 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 viapnpm test:docker:live-acp-bind:droidetpnpm 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, etpnpm qa:observability:smokesont 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-agentinstalle 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 avecOPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz, ignorez la reconstruction hĂŽte avecOPENCLAW_NPM_ONBOARD_HOST_BUILD=0, ou changez de canal avecOPENCLAW_NPM_ONBOARD_CHANNEL=discordouOPENCLAW_NPM_ONBOARD_CHANNEL=slack. -
Smoke test du parcours utilisateur de release :
pnpm test:docker:release-user-journeyinstalle 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-onboardinginstalle le tarball empaquetĂ©, piloteopenclaw onboardvia 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-memoryinstalle 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-journeyinstalle 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 avecOPENCLAW_RELEASE_UPGRADE_BASELINE_SPEC=openclaw@<version>. -
Smoke test de la marketplace de plugins de release :
pnpm test:docker:release-plugin-marketplaceinstalle 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-installinstalle 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 avecopenclaw 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-switchinstalle globalement le tarball OpenClaw empaquetĂ© dans Docker, bascule du packagestablevers le gitdev, vĂ©rifie le canal persistĂ© et le fonctionnement post-mise Ă jour des plugins, puis rebascule vers le packagestableet vĂ©rifie lâĂ©tat de mise Ă jour. -
Smoke test de survie aprĂšs mise Ă niveau :
pnpm test:docker:upgrade-survivorinstalle 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-survivorinstalleopenclaw@latestpar 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 avecOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, demandez au planificateur agrĂ©gĂ© dâĂ©tendre les bases locales exactes avecOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS, par exempleopenclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15, et dâĂ©tendre les fixtures en forme dâissues avecOPENCLAW_UPGRADE_SURVIVOR_SCENARIOS, par exemplereported-issues; lâensemble reported-issues inclutconfigured-plugin-installspour la rĂ©paration automatique de lâinstallation de plugins OpenClaw externes. Package Acceptance expose ces Ă©lĂ©ments souspublished_upgrade_survivor_baseline,published_upgrade_survivor_baselines, etpublished_upgrade_survivor_scenarios, rĂ©sout les jetons de base mĂ©ta tels quelast-stable-4ouall-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.15plusreported-issues. -
Smoke test du contexte dâexĂ©cution de session :
pnpm test:docker:session-runtime-contextvĂ©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.shempaquette lâarbre courant, lâinstalle avecbun install -gdans un home isolĂ©, puis vĂ©rifie queopenclaw infer image providers --jsonrenvoie les providers dâimage groupĂ©s au lieu de rester bloquĂ©. RĂ©utilisez un tarball prĂ©construit avecOPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz, ignorez la construction hĂŽte avecOPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0, ou copiezdist/depuis une image Docker construite avecOPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local. -
Smoke test Docker de lâinstallateur :
bash scripts/test-install-sh-docker.shpartage un seul cache npm entre ses conteneurs root, update et direct-npm. Le smoke test de mise Ă jour utilise par dĂ©faut npmlatestcomme base stable avant la mise Ă niveau vers le tarball candidat. Remplacez localement avecOPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22, ou avec lâentrĂ©eupdate_baseline_versiondu 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Ă©finissezOPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cachepour 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 denpm install -gest 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Ă©cuteagents delete --json, puis vĂ©rifie un JSON valide et le comportement de conservation de lâespace de travail. RĂ©utilisez lâimage install-smoke avecOPENCLAW_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Ă©cutebrowser 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 queweb_searchaugmentereasoning.effortdeminimalĂ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éfinissezOPENCLAW_PLUGINS_E2E_CLAWHUB=0pour ignorer le bloc ClawHub, ou remplacez la paire package/runtime kitchen-sink par défaut avecOPENCLAW_PLUGINS_E2E_CLAWHUB_SPECetOPENCLAW_PLUGINS_E2E_CLAWHUB_ID. SansOPENCLAW_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-matrixinstalle 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:pluginscouvre 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-updatecouvre le comportement de mise Ă jour inchangĂ©e pour les plugins installĂ©s.pnpm test:docker:plugin-lifecycle-matrixcouvre 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 :
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-channelsLes 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/.openclawOPENCLAW_WORKSPACE_DIR=...(par dĂ©faut :~/.openclaw/workspace) montĂ© sur/home/node/.openclaw/workspaceOPENCLAW_PROFILE_FILE=...montĂ© et sourcĂ© avant dâexĂ©cuter les testsOPENCLAW_DOCKER_PROFILE_ENV_ONLY=1pour vĂ©rifier uniquement les variables dâenvironnement sourcĂ©es depuisOPENCLAW_PROFILE_FILE, en utilisant des rĂ©pertoires de configuration/espace de travail temporaires et aucun montage dâauthentification CLI externeOPENCLAW_DOCKER_CLI_TOOLS_DIR=...(par dĂ©faut :~/.cache/openclaw/docker-cli-tools) montĂ© sur/home/node/.npm-globalpour les installations CLI mises en cache dans Docker- Les rĂ©pertoires/fichiers dâauthentification CLI externes sous
$HOMEsont 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 commeOPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex
- Répertoires par défaut :
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=...pour restreindre lâexĂ©cutionOPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=...pour filtrer les fournisseurs dans le conteneurOPENCLAW_SKIP_DOCKER_BUILD=1pour rĂ©utiliser une imageopenclaw:local-liveexistante lors de rĂ©exĂ©cutions qui ne nĂ©cessitent pas de reconstructionOPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1pour 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 WebUIOPENCLAW_OPENWEBUI_PROMPT=...pour remplacer le prompt de vĂ©rification de nonce utilisĂ© par le smoke test Open WebUIOPENWEBUI_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.mdavant 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.tsdé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
includeInPlandanssrc/secrets/target-registry-data.ts, mettez Ă jourclassifyTargetClassdans 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.