Passer au contenu principal
La voie QA Matrix exécute le plugin @openclaw/matrix groupé avec un homeserver Tuwunel jetable dans Docker, avec des comptes temporaires de pilote, de SUT et d’observateur, ainsi que des salons préremplis. C’est la couverture en direct avec transport réel pour Matrix. Cet outillage est réservé aux mainteneurs. Les versions empaquetées d’OpenClaw omettent intentionnellement qa-lab, donc openclaw qa n’est disponible qu’à partir d’un checkout source. Les checkouts source chargent directement le runner groupé - aucune étape d’installation de plugin n’est nécessaire. Pour un contexte plus large sur le framework QA, consultez la vue d’ensemble QA.

Démarrage rapide

pnpm openclaw qa matrix --profile fast --fail-fast
Un 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 porte de validation de release ; partitionnez 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

  1. Provisionne un homeserver Tuwunel jetable dans Docker (image par défaut ghcr.io/matrix-construct/tuwunel:v1.5.1, nom de serveur matrix-qa.test, port 28008) derrière un enregistreur borné et expurgateur des requêtes/réponses.
  2. Enregistre trois utilisateurs temporaires - driver (envoie le trafic entrant), sut (le compte Matrix OpenClaw testé), observer (capture de trafic tiers).
  3. Préremplit les salons requis par les scénarios sélectionnés (principal, fils de discussion, médias, redémarrage, secondaire, liste d’autorisation, E2EE, DM de vérification, etc.).
  4. Exécute la sonde de protocole matrix-qa-v1, neutre vis-à-vis du substrat, contre la frontière Tuwunel enregistrée. Les tests unitaires prouvent le contrat de la sonde avec le fixture du protocole Matrix ; l’hôte canonique de l’adaptateur de transport QA réel dans #99707 possède le câblage réel de la cible Crabline.
  5. Démarre un Gateway OpenClaw enfant avec le vrai plugin Matrix limité au compte SUT ; qa-channel n’est pas chargé dans l’enfant.
  6. Exécute les scénarios en séquence, observe les événements via les clients Matrix driver/observer et déduit les attentes de routage/état à partir du trafic enregistré.
  7. Arrête le homeserver, écrit le rapport et les artefacts de preuve, puis quitte.

CLI

pnpm openclaw qa matrix [options]

Indicateurs courants

IndicateurValeur par défautDescription
--profile <profile>allProfil de scénario. Voir Profils.
--fail-fastdé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. Voir Scénarios.
--output-dir <path><repo>/.artifacts/qa-e2e/matrix-<timestamp>Emplacement où sont écrits les rapports, le résumé, l’inventaire de routage/état, les événements observés et le journal de sortie. Les chemins relatifs sont résolus par rapport à --repo-root.
--repo-root <path>process.cwd()Racine du dépôt lors de l’appel depuis un répertoire de travail neutre.
--sut-account <id>sutIdentifiant du compte Matrix dans la configuration du Gateway QA.

Indicateurs de fournisseur

La voie utilise un vrai transport Matrix, mais le fournisseur de modèle est configurable :
IndicateurValeur par défautDescription
--provider-mode <mode>live-frontiermock-openai pour un routage mock déterministe ou live-frontier pour les fournisseurs frontier en direct. L’ancien alias live-openai fonctionne encore.
--model <ref>valeur par défaut du fournisseurRéférence principale provider/model.
--alt-model <ref>valeur par défaut du fournisseurRéférence alternative provider/model lorsque les scénarios changent de modèle en cours d’exécution.
--fastdésactivéActiver le mode rapide du fournisseur lorsque pris en charge.
Matrix QA n’accepte pas --credential-source ni --credential-role. La voie provisionne localement des utilisateurs jetables ; il n’existe pas de pool d’identifiants partagé à louer.

Profils

Le profil sélectionné décide quels scénarios s’exécutent.
ProfilÀ utiliser pour
all (par défaut)Catalogue complet. Lent mais exhaustif.
fastSous-ensemble de porte de validation de release qui exerce le contrat de transport en direct : canary, filtrage des mentions, blocage par liste d’autorisation, forme de réponse, reprise après redémarrage, suivi de fil, isolation de fil, observation des réactions et livraison des métadonnées d’approbation exec.
transportScénarios de niveau transport pour les fils de discussion, DM, salons, autojoin, mentions/listes d’autorisation, approbations et réactions.
mediaCouverture des pièces jointes image, audio, vidéo, PDF et EPUB.
e2ee-smokeCouverture E2EE minimale - réponse chiffrée de base, suivi de fil, réussite du bootstrap.
e2ee-deepScénarios exhaustifs E2EE de perte d’état, sauvegarde, clés et récupération.
e2ee-cliScénarios CLI openclaw matrix encryption setup et verify * pilotés via le harnais 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 et routage target: "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 listes d’autorisation - 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 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, expurgation des artefacts)
  • CLI E2EE - matrix-e2ee-cli-* (configuration du chiffrement, configuration idempotente, échec du bootstrap, cycle de vie de 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

VariablePar défautEffet
OPENCLAW_QA_MATRIX_TIMEOUT_MS1800000 (30 min)Limite supérieure stricte pour toute l’exécution.
OPENCLAW_QA_MATRIX_CANARY_TIMEOUT_MS45000Limite pour la réponse canary initiale. La CI de publication l’augmente sur les runners partagés afin qu’un premier tour Gateway lent n’échoue pas avant le début de la couverture des scénarios.
OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS8000Fenêtre silencieuse pour les assertions négatives d’absence de réponse. Plafonnée à le délai d’expiration de l’exécution.
OPENCLAW_QA_MATRIX_CLEANUP_TIMEOUT_MS90000Limite pour le démontage Docker. Les surfaces d’échec incluent la commande de récupération docker compose ... down --remove-orphans.
OPENCLAW_QA_MATRIX_TUWUNEL_IMAGEghcr.io/matrix-construct/tuwunel:v1.5.1Remplace l’image du serveur d’accueil lors de la validation avec une autre version de Tuwunel.
OPENCLAW_QA_MATRIX_PROGRESSactivé0 masque les lignes de progression [matrix-qa] ... sur stderr. 1 les force.
OPENCLAW_QA_MATRIX_CAPTURE_CONTENTexpurgé1 conserve le corps du message et formatted_body dans matrix-qa-observed-events.json. Par défaut, ils sont expurgés pour garder les artefacts de CI sûrs.
OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXITdésactivé1 ignore le process.exit déterministe après l’écriture des artefacts. Par défaut, la sortie est forcée, car les handles crypto natifs de matrix-js-sdk peuvent garder la boucle d’événements active après la fin des artefacts.
OPENCLAW_RUN_NODE_OUTPUT_LOGnon définiLorsqu’il est défini par un lanceur externe (par exemple scripts/run-node.mjs), la QA Matrix 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-route-state-manifest.json - inventaire dynamique matrix-qa-v1 indexé par identifiant de scénario. Il enregistre les formes de route/corps expurgées, l’ordre des requêtes, les nouvelles tentatives observées, les erreurs, la continuité des sync-token, ainsi que les familles d’état d’appareil/clé/média/sauvegarde observées pendant cette exécution. C’est une preuve exécutable, pas une référence enregistrée dans le dépôt.
  • matrix-qa-observed-events.json - événements Matrix observés depuis les clients pilote et observateur. Les corps sont expurgés sauf si OPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1 ; les métadonnées d’approbation sont résumées avec certains champs sûrs et un aperçu tronqué de la commande.
  • matrix-qa-output.log - stdout/stderr combinés de l’exécution. Si OPENCLAW_RUN_NODE_OUTPUT_LOG est 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 près de la fin : les handles crypto natifs de matrix-js-sdk peuvent survivre au harness. Par défaut, un process.exit propre est forcé après l’écriture des artefacts ; si vous avez désactivé OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT=1, attendez-vous à ce que le processus reste actif.
  • Erreur de nettoyage : cherchez la commande de récupération affichée (une invocation docker compose ... down --remove-orphans) et exécutez-la manuellement pour libérer le port du serveur d’accueil.
  • Fenêtres d’assertion négative instables en CI : réduisez OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS (8 s par défaut) lorsque la CI est rapide ; augmentez-le sur les runners partagés lents.
  • Besoin de corps expurgés pour un rapport de bug : relancez avec OPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1 et joignez matrix-qa-observed-events.json. Traitez l’artefact obtenu comme sensible.
  • Version différente de Tuwunel : faites pointer OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE vers la version testée. La lane vérifie uniquement l’image par défaut épinglée.

Contrat de transport en direct

Matrix est l’une des trois lanes de transport en direct (Matrix, Telegram, Discord) qui partagent une checklist de contrat unique définie dans Vue d’ensemble QA → Couverture du transport en direct. qa-channel reste la suite synthétique large et ne fait volontairement pas partie de cette matrice.

Liens connexes

  • Vue d’ensemble QA - pile QA globale et contrat de transport en direct
  • Canal QA - adaptateur de canal synthétique pour les scénarios adossés au dépôt
  • Tests - exécuter les tests et ajouter une couverture QA
  • Matrix - le Plugin de canal testé