2026 OpenClaw, front-end terrain :
cycle de vie Service Worker, delta des clés de cache et résumé PR reproductible sur Mac loué
Les équipes PWA veulent une preuve rejouable quand caches.keys() bouge sans note de version. Chaîne OpenClaw sur Mac distant : cycle de vie, sw_cache_delta.json, NDJSON aligné sur les hooks Netlify, pr_sw_cache_summary.md vers la PR. Croiser Safari vs Chromium et métriques build → PR. « Sans artefact versionné, la release n’a pas de preuve ».
01 Pourquoi instrumenter depuis un Mac distant
WebKit sur Apple Silicon rapproche la CI du Safari des relecteurs. Un Mac loué alimente OpenClaw via navigator.serviceWorker sans saturer un portable perso.
Chaque passe écrit sous .openclaw/reports/ un JSON partagé par CI, chat et GitHub.
02 Trois douleurs que le runbook retire
- Workers en attente invisibles : la PR ne montre que l’actif alors que les clients gardent un cache ancien jusqu’au rechargement.
- Renommage de clés sans sémantique :
caches.keys()change à chaque build sans journal des préfixes sûrs à purger. - Debug uniquement dans le chat : les captures disparaissent ; il faut du NDJSON relié à
GIT_SHAet aux chemins d’artefacts.
03 Matrice : où placer l’automatisation
| Approche | Force | Limite | Quand la choisir |
|---|---|---|---|
| Web Inspector manuel | Points d’arrêt profonds | Non rejouable PR après PR | Exploration ponctuelle |
| Page sonde Playwright | Lecture scriptable des états | Exige des attentes disciplinées | Défaut OpenClaw |
| Balises RUM client | Couverture réelle | Granularité limitée par la vie privée | Surveillance post-merge |
Activez la page sonde si sw.js, le précache ou le routeur changent ; cadenassez skipWaiting et clients.claim avec la checklist liée.
04 Runbook reproductible en cinq étapes
- Réserver l’exécuteur : SSH sur le Mac,
cd ~/openclaw-runs/$PR_NUMBER, exporterBASE_URLvers l’aperçu et figerGIT_SHA. - Navigateurs figés :
npx playwright install webkitune fois pour réutiliser le même bundle WebKit. - Double chauffe : deux
curlsur$BASE_URLespacés de huit secondes puis Playwright pour enchaînerinstalletactivate. - Émettre le delta : écrire
.openclaw/reports/sw_cache_delta.jsonavecaddedKeysetremovedKeystriés face àbaseline/sw_cache_baseline.jsonissu demain. - Pousser le résumé : générer
pr_sw_cache_summary.mdpuis POST via la passerelle avecIdempotency-Key: $GIT_SHA:sw-cache:$PR_NUMBERpour éviter les doublons de commentaire.
05 Emplacement de script et sonde minimaliste
Fichier cible scripts/openclaw/sonde-cache-sw.mjs, invoqué par la tâche OpenClaw ; adaptez timeouts et URL.
// sonde-cache-sw.mjs (placeholder)
import { webkit } from 'playwright';
const b = await webkit.launch();
const page = await b.newPage();
await page.goto(process.env.BASE_URL, { waitUntil: 'networkidle' });
const s = await page.evaluate(async () => ({
r: await navigator.serviceWorker.getRegistrations(),
k: (await caches.keys()).sort()
}));
console.log(JSON.stringify(s));
await b.close();
Shell : exporter OPENCLAW_RUN_ID ; tee -a .openclaw/reports/sonde_sw.ndjson pour tracer même en échec.
06 Champs NDJSON, retries et notes d’exploitation
Émettez une ligne NDJSON par tentative en réutilisant les mêmes clés que vos runners de hook pour alimenter un seul tableau de bord.
- ▸
ts,level,openclaw_run_id,git_sha,pr_number,phaseparmiwarmup,probe,diff,callback. - ▸
attempt,duration_ms,browser(webkitouchromium),cache_key_count,waiting_worker_presentbooléen. - ▸
error_classparmitimeout,quota,assert,http, pluslast_http_statusettrace_pathpour les pièces Playwright.
Politique de retry : relancer les sondes lecture seule sur 502, 503, 429 ou reset TLS avec backoff exponentiel à partir de deux secondes, jitter vingt pour cent, plafond cinq tentatives. Ne renvoyez un POST de commentaire GitHub que si la clé d’idempotence prouve l’absence de livraison préalable.
07 JSON-LD et plan de maillage interne
L’en-tête embarque BlogPosting, BreadcrumbList, HowTo et FAQPage pour enrichir les résultats structurés.
- Entrantes : citez ce slug depuis le sommaire du blog et depuis les billets hooks lorsque la liste de précache change.
- Locales : conservez le même slug par langue ; n’exposez un couple
hreflangque lorsque le fichier traduit existe réellement. - Ancres : figez les identifiants de sections pour les audits récurrents et les liens depuis la console MacWww.
08 FAQ : quota de stockage et réponses opaques
| Symptôme | Cause probable | Mitigation |
|---|---|---|
QuotaExceededError sur cache.put |
Budget d’origine épuisé ou volume excessif d’entrées opaques lourdes. | Journaliser quotaEstimateMb, plafonner les versions de précache, purger les préfixes RELEASE_ID obsolètes avant la fin de activate. |
| Audit affichant zéro octet pour des polices CDN | Réponses no-cors opaques masquent la taille réelle. | Isoler opaqueEntryCountHint ; ne comparez jamais des mégaoctets opaques aux bundles JSON same-origin. |
| POST du résumé en échec répété | Jeton hors périmètre ou limite secondaire de débit. | Backoff avec jitter, rotation contrôlée de OPENCLAW_GATEWAY_TOKEN, corps de PR limité aux URL d’artefacts signées. |
Privilégiez les actifs same-origin ou CORS ouverts lorsque le volume opaque casse le budget.
Trois chiffres ou garde-fous à citer en revue : (1) cinq tentatives maximum pour les callbacks ; (2) huit secondes entre les deux chauffes réseau ; (3) tri lexicographique systématique des clés avant diff pour éviter les faux positifs d’ordre.
Louez le Mac qui héberge des preuves Service Worker honnêtes
Évitez les régressions de cache interprétées depuis un runner Linux seul. Gardez OpenClaw sur un Mac dédié, reliez les guides SSH et VNC, comparez les tarifs sans compte, puis louez ou achetez une capacité lorsque la fidélité WebKit devient un critère de merge.