OpenClaw 2026 · Service Worker · Cache Storage · Mac distant

2026 OpenClaw, front-end terrain :
cycle de vie Service Worker, delta des clés de cache et résumé PR reproductible sur Mac loué

15 avril 2026 Livraison front & PWA 10 min de lecture

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

  1. Workers en attente invisibles : la PR ne montre que l’actif alors que les clients gardent un cache ancien jusqu’au rechargement.
  2. Renommage de clés sans sémantique : caches.keys() change à chaque build sans journal des préfixes sûrs à purger.
  3. Debug uniquement dans le chat : les captures disparaissent ; il faut du NDJSON relié à GIT_SHA et 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

  1. Réserver l’exécuteur : SSH sur le Mac, cd ~/openclaw-runs/$PR_NUMBER, exporter BASE_URL vers l’aperçu et figer GIT_SHA.
  2. Navigateurs figés : npx playwright install webkit une fois pour réutiliser le même bundle WebKit.
  3. Double chauffe : deux curl sur $BASE_URL espacés de huit secondes puis Playwright pour enchaîner install et activate.
  4. Émettre le delta : écrire .openclaw/reports/sw_cache_delta.json avec addedKeys et removedKeys triés face à baseline/sw_cache_baseline.json issu de main.
  5. Pousser le résumé : générer pr_sw_cache_summary.md puis POST via la passerelle avec Idempotency-Key: $GIT_SHA:sw-cache:$PR_NUMBER pour é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, phase parmi warmup, probe, diff, callback.
  • attempt, duration_ms, browser (webkit ou chromium), cache_key_count, waiting_worker_present booléen.
  • error_class parmi timeout, quota, assert, http, plus last_http_status et trace_path pour 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 hreflang que 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.

Mac distant · WebKit · preuves de cache versionnées

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.

Sondes WebKit Diffs de caches Résumés PR
Mac distant — SW / caches