2026 OpenClaw, pratique QA front :
shards Playwright sur Mac distant, fusion des rapports, seuils flake et digest PR lisible
Public : QA front sous Playwright avec plusieurs rapports HTML, un junit partiel et des flakes qui épuisent les relances. Ce HowTo lie Mac distant et OpenClaw pour une « preuve unique » : blob fusionné, politique flake chiffrée, synthèse PR Markdown — angle distinct des boucles auto-fix. Suite : tokens et auth, traces HAR. Slug 2026-openclaw-playwright-shard-report-remote-mac.html.
Friction : (1) chaque shard publie son propre HTML sans merge-reports, donc personne ne compare les écarts de durée entre workers ; (2) la protection de branche ne lit qu’un junit.xml partiel ; (3) les cas flake relancés à l’infini masquent une vraie régression produit ; (4) OpenClaw reçoit des journaux bruts au lieu d’un digest structuré pour la revue.
01 Table des paramètres de fragmentation
| Paramètre | Valeur type | Note Mac distant |
|---|---|---|
PLAYWRIGHT_SHARD / PLAYWRIGHT_TOTAL |
3 sur 8 |
Index stable ; total = nombre de jobs parallèles réellement provisionnés. |
--shard=courant/total |
Miroir CLI | Alignez la même paire dans les logs NDJSON OpenClaw. |
--workers |
1 par shard |
Sur Apple Silicon, limitez la contention GPU WebKit en évitant plusieurs flottes lourdes par processus. |
| Répertoire blob | blob-report/shard-3 |
Un seul writer par chemin avant fusion ; jamais deux shards sur le même dossier. |
| Approche | Horloge murale | Expérience relecture | Visibilité flake |
|---|---|---|---|
| Runner monolithique | La plus lente | Un seul rapport, confortable | Les relances s’empilent sur une timeline bruyante |
| Shards sans fusion | Brute rapide | Onglets fragmentés | Les taux de flake deviennent incomparables |
| Shards + fusion fan-in | Rapide avec une étape agrégée | Un HTML et un junit unifiés | flake_stats.json centralisé |
À retenir : reporter blob → merge-reports ; premier WebKit froid + dizaines de secondes ; calibrez sur le même Mac loué que la prod de tests.
02 Convention des répertoires de rapports
Traitez .openclaw/reports/$GIT_SHA/ comme racine contractuelle sur le Mac distant : chaque shard écrit sous raw/shard-$i/blob/, puis l’hôte fan-in exécute merge-reports vers merged/html et merged/junit.xml. Placez flake_stats.json à côté afin que les gabarits OpenClaw lisent des chemins déterministes sans parcourir l’arbre au hasard.
mkdir -p ".openclaw/reports/${GIT_SHA}/raw/shard-${SHARD}/blob"
PLAYWRIGHT_SHARD=${SHARD} PLAYWRIGHT_TOTAL=${TOTAL} npx playwright test --reporter=blob
# hôte fan-in :
npx playwright merge-reports ".openclaw/reports/${GIT_SHA}/raw/shard-"*"/blob" \
--reporter=html,junit
03 Frontière d’appel OpenClaw
Gardez navigateurs et Playwright entièrement sur le Mac loué. Laissez la passerelle OpenClaw ingérer uniquement des artefacts structurés : totaux junit fusionnés, titres des cas en échec, écart de durée entre shards, URL d’artefacts signées. Ne poussez pas les traces brutes dans le modèle sauf triage ciblé ; préférez des liens sortants comme dans le playbook traces et HAR. Postez avec Idempotency-Key: ${GIT_SHA}:${CI_PIPELINE_ID}:pw et ancrez les commentaires <!-- openclaw-pw:${GIT_SHA} --> pour des mises à jour sans doublons.
- La passerelle valide un schéma
pw_summary/v1avant toute écriture Git. - Les secrets restent sur le runner ; OpenClaw ne reçoit que des URL présignées à TTL court.
- Si l’auth casse en milieu de run, réutilisez les champs décrits dans tokens et auth modèle plutôt que d’inférer depuis des captures partielles.
04 Exemples de formule de seuil de relance flake
Avec p probabilité d’échec par tentative et ε risque résiduel cible, p^(r+1) ≤ ε donne r_max = min(3, ceil(ln(ε)/ln(p) - 1)). Exemple p = 0,2, ε = 0,01 ⇒ deux relances après le premier essai. Budget global : flake_budget = floor(0.15 × total_tests). Marquez les flake, projet quarantaine, colonnes « premier essai / après relance » dans le HTML fusionné.
05 Dépannage des expirations courantes
- Fixture WebKit : augmentez
actionTimeoutavant d’inflater aveuglément lesexpect; vérifiez que plusieurs shards ne thermiquent pas la machine. - Navigation vers prévisualisation : synchronisez la sonde HTTP avec le rythme décrit dans hook Vercel et fumée en-têtes pour ne lancer les tests qu’après un
200stable sur l’URL publique. - Étape de fusion bloquée : un blob partiel suffit à figer merge-reports ; calculez un checksum par dossier shard avant le fan-in.
- Suite lecture : triage E2E, matrice WebKit (complément, pas doublon shard).
06 Étapes HowTo reproductibles
- Exporter
GIT_SHA,TOTALetSHARDpar job ; refuser le démarrage si le tuple est incomplet. - Installer les navigateurs une fois par image ; externaliser
PLAYWRIGHT_BROWSERS_PATHhors du workspace éphémère. - Exécuter les tests avec reporter blob sous
.openclaw/reports/$GIT_SHA/raw/shard-$SHARD/blob. - Sur l’hôte fan-in, fusionner les blobs, produire HTML et junit, puis calculer les deltas flake à partir des horodatages junit.
- Rédiger
pr_playwright_summary.md: échecs, flakes, skew inter-shards, liens d’artefacts. - Poster via OpenClaw avec la clé d’idempotence et mettre à jour le commentaire existant lorsque le SHA est inchangé.
Shards pour l’horloge, fusion pour le signal, flake borné, OpenClaw en Markdown ; Mac distant pour WebKit continu crédible.
Louez du matériel Apple Silicon pour pools de shards et digest OpenClaw
Colocalisez exécuteurs Playwright et hôte fan-in sur la même classe de Mac distant que vos recettes WebKit. Tarifs, aide SSH/VNC, achat ou location pour industrialiser la fusion des rapports et les synthèses PR.