Fundamentals
QA de Matrix
La voie de QA Matrix exécute le Plugin @openclaw/matrix fourni avec OpenClaw contre un homeserver Tuwunel jetable dans Docker, avec des comptes temporaires pour le pilote, le SUT et l’observateur, ainsi que des salons préremplis. Elle fournit la couverture réelle, avec transport réel, pour Matrix.
Cet outillage est réservé aux mainteneurs. Les versions packagées d’OpenClaw omettent intentionnellement qa-lab, donc openclaw qa n’est disponible que depuis un checkout source. Les checkouts source chargent directement le runner fourni - aucune étape d’installation de Plugin n’est nécessaire.
Pour le contexte plus large du framework de QA, consultez la vue d’ensemble de la QA.
Démarrage rapide
pnpm openclaw qa matrix --profile fast --fail-fast
La commande simple pnpm openclaw qa matrix exécute --profile all et ne s’arrête pas au premier échec. Utilisez --profile fast --fail-fast pour une barrière de validation de release ; fragmentez le catalogue avec --profile transport|media|e2ee-smoke|e2ee-deep|e2ee-cli lors de l’exécution de l’inventaire complet en parallèle.
Ce que fait la voie
- Provisionne un homeserver Tuwunel jetable dans Docker (image par défaut
ghcr.io/matrix-construct/tuwunel:v1.5.1, nom de serveurmatrix-qa.test, port28008). - Enregistre trois utilisateurs temporaires -
driver(envoie le trafic entrant),sut(le compte OpenClaw Matrix testé),observer(capture du trafic tiers). - Préremplit les salons requis par les scénarios sélectionnés (principal, fils de discussion, média, redémarrage, secondaire, allowlist, E2EE, DM de vérification, etc.).
- Démarre un Gateway enfant OpenClaw avec le vrai Plugin Matrix limité au compte SUT ;
qa-channeln’est pas chargé dans l’enfant. - Exécute les scénarios en séquence, en observant les événements via les clients Matrix du pilote/de l’observateur.
- Arrête le homeserver, écrit les artefacts de rapport et de résumé, puis quitte.
CLI
pnpm openclaw qa matrix [options]
Options courantes
| Option | Valeur par défaut | Description |
|---|---|---|
--profile <profile> |
all |
Profil de scénario. Consultez Profils. |
--fail-fast |
désactivé | S’arrêter après le premier contrôle ou scénario en échec. |
--scenario <id> |
- | Exécuter uniquement ce scénario. Répétable. Consultez Scénarios. |
--output-dir <path> |
<repo>/.artifacts/qa-e2e/matrix-<timestamp> |
Emplacement où les rapports, le résumé, les événements observés et le journal de sortie sont écrits. Les chemins relatifs sont résolus par rapport à --repo-root. |
--repo-root <path> |
process.cwd() |
Racine du dépôt lors d’un appel depuis un répertoire de travail neutre. |
--sut-account <id> |
sut |
Identifiant du compte Matrix dans la configuration du Gateway de QA. |
Options du fournisseur
La voie utilise un vrai transport Matrix, mais le fournisseur de modèle est configurable :
| Option | Valeur par défaut | Description |
|---|---|---|
--provider-mode <mode> |
live-frontier |
mock-openai pour un dispatch mock déterministe ou live-frontier pour des fournisseurs frontier en direct. L’ancien alias live-openai fonctionne encore. |
--model <ref> |
défaut du fournisseur | Référence provider/model principale. |
--alt-model <ref> |
défaut du fournisseur | Référence provider/model alternative lorsque les scénarios changent en cours d’exécution. |
--fast |
désactivé | Activer le mode rapide du fournisseur lorsque c’est pris en charge. |
La QA Matrix n’accepte pas --credential-source ni --credential-role. La voie provisionne localement des utilisateurs jetables ; il n’existe aucun pool d’identifiants partagé auprès duquel réserver.
Profils
Le profil sélectionné décide quels scénarios s’exécutent.
| Profil | Utilisation |
|---|---|
all (par défaut) |
Catalogue complet. Lent, mais exhaustif. |
fast |
Sous-ensemble de barrière de release qui exerce le contrat de transport réel : canari, filtrage des mentions, blocage par allowlist, forme des réponses, reprise après redémarrage, suivi de fil, isolation des fils, observation des réactions et livraison des métadonnées d’approbation exec. |
transport |
Scénarios de niveau transport pour fils de discussion, DM, salon, autojoin, mention/allowlist, approbation et réactions. |
media |
Couverture des pièces jointes image, audio, vidéo, PDF et EPUB. |
e2ee-smoke |
Couverture E2EE minimale - réponse chiffrée de base, suivi de fil, réussite du bootstrap. |
e2ee-deep |
Scénarios E2EE exhaustifs de perte d’état, sauvegarde, clé et récupération. |
e2ee-cli |
Scénarios CLI openclaw matrix encryption setup et verify * pilotés via le harnais de QA. |
La correspondance exacte se trouve dans extensions/qa-matrix/src/runners/contract/scenario-catalog.ts.
Scénarios
La liste complète des identifiants de scénario est l’union MatrixQaScenarioId dans extensions/qa-matrix/src/runners/contract/scenario-catalog.ts:15. Les catégories incluent :
- fils de discussion -
matrix-thread-*,matrix-subagent-thread-spawn - niveau supérieur / DM / salon -
matrix-top-level-reply-shape,matrix-room-*,matrix-dm-* - streaming et progression des outils -
matrix-room-partial-streaming-preview,matrix-room-quiet-streaming-preview,matrix-room-tool-progress-*,matrix-room-block-streaming - médias -
matrix-media-type-coverage,matrix-room-image-understanding-attachment,matrix-attachment-only-ignored,matrix-unsupported-media-safe - routage -
matrix-room-autojoin-invite,matrix-secondary-room-* - réactions -
matrix-reaction-* - approbations -
matrix-approval-*(métadonnées exec/Plugin, fallback fragmenté, réactions de refus, fils de discussion et routagetarget: "both") - redémarrage et rejeu -
matrix-restart-*,matrix-stale-sync-replay-dedupe,matrix-room-membership-loss,matrix-homeserver-restart-resume,matrix-initial-catchup-then-incremental - filtrage des mentions, bot à bot et allowlists -
matrix-mention-*,matrix-allowbots-*,matrix-allowlist-*,matrix-multi-actor-ordering,matrix-inbound-edit-*,matrix-mxid-prefixed-command-block,matrix-observer-allowlist-override - E2EE -
matrix-e2ee-*(réponse de base, suivi de fil, bootstrap, cycle de vie de la clé de récupération, variantes de perte d’état, comportement de sauvegarde serveur, hygiène des appareils, vérification SAS / QR / DM, redémarrage, masquage des artefacts) - CLI E2EE -
matrix-e2ee-cli-*(configuration du chiffrement, configuration idempotente, échec du bootstrap, cycle de vie de la clé de récupération, multi-compte, aller-retour de réponse Gateway, auto-vérification)
Passez --scenario <id> (répétable) pour exécuter un ensemble choisi manuellement ; combinez avec --profile all pour ignorer le filtrage par profil.
Variables d’environnement
| Variable | Valeur par défaut | Effet |
|---|---|---|
OPENCLAW_QA_MATRIX_TIMEOUT_MS |
1800000 (30 min) |
Limite supérieure stricte pour l’ensemble de l’exécution. |
OPENCLAW_QA_MATRIX_CANARY_TIMEOUT_MS |
45000 |
Limite pour la réponse canari initiale. La CI de release augmente cette valeur sur les exécuteurs partagés afin qu’un premier tour Gateway lent n’échoue pas avant le début de la couverture du scénario. |
OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS |
8000 |
Fenêtre silencieuse pour les assertions négatives d’absence de réponse. Limitée à ≤ le délai d’expiration de l’exécution. |
OPENCLAW_QA_MATRIX_CLEANUP_TIMEOUT_MS |
90000 |
Limite pour le nettoyage Docker. Les surfaces d’échec incluent la commande de récupération docker compose ... down --remove-orphans. |
OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE |
ghcr.io/matrix-construct/tuwunel:v1.5.1 |
Remplace l’image du homeserver lors de la validation avec une autre version de Tuwunel. |
OPENCLAW_QA_MATRIX_PROGRESS |
activé | 0 masque les lignes de progression [matrix-qa] ... sur stderr. 1 les force à s’afficher. |
OPENCLAW_QA_MATRIX_CAPTURE_CONTENT |
expurgé | 1 conserve le corps du message et formatted_body dans matrix-qa-observed-events.json. Par défaut, ils sont expurgés pour préserver la sécurité des artefacts de CI. |
OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT |
désactivé | 1 ignore le process.exit déterministe après l’écriture de l’artefact. Par défaut, la sortie est forcée, car les handles de chiffrement natifs de matrix-js-sdk peuvent garder la boucle d’événements active après la fin de l’artefact. |
OPENCLAW_RUN_NODE_OUTPUT_LOG |
non défini | Lorsqu’il est défini par un lanceur externe (par exemple scripts/run-node.mjs), Matrix QA réutilise ce chemin de journal au lieu de démarrer son propre tee. |
Artefacts de sortie
Écrits dans --output-dir :
matrix-qa-report.md- Rapport de protocole Markdown (ce qui a réussi, échoué, été ignoré, et pourquoi).matrix-qa-summary.json- Résumé structuré adapté à l’analyse par la CI et aux tableaux de bord.matrix-qa-observed-events.json- Événements Matrix observés depuis les clients pilote et observateur. Les corps sont expurgés sauf siOPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1; les métadonnées d’approbation sont résumées avec des champs sûrs sélectionnés et un aperçu de commande tronqué.matrix-qa-output.log- stdout/stderr combinés de l’exécution. SiOPENCLAW_RUN_NODE_OUTPUT_LOGest défini, le journal du lanceur externe est réutilisé à la place.
Le répertoire de sortie par défaut est <repo>/.artifacts/qa-e2e/matrix-<timestamp> afin que les exécutions successives ne s’écrasent pas mutuellement.
Conseils de triage
- L’exécution se bloque vers la fin : les handles de chiffrement natifs de
matrix-js-sdkpeuvent survivre au harnais. Par défaut, unprocess.exitpropre est forcé après l’écriture de l’artefact ; si vous avez désactivéOPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT=1, attendez-vous à ce que le processus persiste. - Erreur de nettoyage : recherchez la commande de récupération imprimée (un appel
docker compose ... down --remove-orphans) et exécutez-la manuellement pour libérer le port du homeserver. - Fenêtres d’assertion négative instables en CI : abaissez
OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS(8 s par défaut) quand la CI est rapide ; augmentez-le sur les exécuteurs partagés lents. - Besoin de corps expurgés pour un rapport de bug : relancez avec
OPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1et joignezmatrix-qa-observed-events.json. Traitez l’artefact résultant comme sensible. - Autre version de Tuwunel : faites pointer
OPENCLAW_QA_MATRIX_TUWUNEL_IMAGEvers la version testée. La voie ne vérifie que l’image par défaut épinglée.
Contrat de transport en direct
Matrix est l’une des trois voies de transport en direct (Matrix, Telegram, Discord) qui partagent une liste de contrôle de contrat unique définie dans vue d’ensemble QA → Couverture du transport en direct. qa-channel reste la vaste suite synthétique et ne fait intentionnellement pas partie de cette matrice.
Connexe
- Vue d’ensemble QA - pile QA globale et contrat de transport en direct
- QA Channel - adaptateur de canal synthétique pour les scénarios basés sur le dépôt
- Tests - exécuter les tests et ajouter une couverture QA
- Matrix - le Plugin de canal testé