2026 OpenClaw Frontend-Praxis:
Playwright HTML-Reporter auf Remote Mac aggregieren — Anhang-Megabyte-Grenzen und stderr-Fingerprint für einen einzigen PR-Gate-Digest
Zielgruppe: Frontend-CI-Maintainer auf Remote Mac mit Node 24, die im PR einen HTML-Digest neben JUnit brauchen — abgegrenzt von JUnit-XML und Trace-Wänden. Themen: Pfade, Zip-Schwellen, stderr-Fingerprint, Gateway-Template, Tokens, FAQ. Mehr: JUnit-HowTo, Trace/HAR, Blog. Der Digest ergänzt menschliche Lesbarkeit für Reviewer und Release-Manager, ersetzt aber keine Required Checks.
Gates bleiben auf JUnit; der HTML-Reporter liefert visuelle Evidenz — anders als im JUnit-HowTo, wo XML und Trace-Index im Mittelpunkt stehen. Hier dominieren Bundles, Megabyte-Caps und ein stderr-Fingerprint.
Schmerzpunkte: (1) Shards brechen relative Pfade im PR. (2) Zips sprengen Mail-Limits. (3) stderr leckt Pfade oder Tokens. (4) Ohne Fingerprint kein Flake-Signal. (5) Retries ohne Marker duplizieren Kommentare.
00 Entscheidungsmatrix: JUnit und Trace versus HTML-Digest
| Signalquelle | Gate-tauglich | Reviewer-UX | Schwellenrisiko |
|---|---|---|---|
| JUnit-XML aggregiert | Sehr hoch | Niedrig ohne HTML | Gering solange XML klein bleibt |
| Trace-Zips mit Rohindex | Mittel | Hoch bei Download | Sehr hoch ohne Megabyte-Caps |
| HTML-Reporter plus Zip-Limits und stderr-Fingerprint | Mittel bis hoch mit Policy | Sehr hoch | Mittel wenn Caps durchgesetzt werden |
01 Artefaktverzeichnis und Reporter-Pfade
Kanone: .openclaw/reports/$GIT_SHA/html/ für den gemergten HTML-Reporter; attachments/ nur referenziert; index.html nur relative URLs. Nach merge-reports ein Ordner zum Packen oder presigned GET — keine Runner-Pfade im Markdown. Optional manifest.json neben dem Index listen alle Dateien mit Bytegröße; so validiert das Gateway Caps ohne erneutes Traversieren des DOM.
| Pfadsegment | Inhalt | Integrität | Retention | Notiz |
|---|---|---|---|---|
html/index.html |
Reporter-UI | SHA256 optional | 7 bis 14 Tage | Keine absoluten file-URLs |
html/data/ |
JSON für Steps | neben index bündeln | gleich wie oben | Parser im Gateway lesen |
attachments/*.zip |
Traces oder Medien | Größe vor Upload | kürzer wenn groß | Schwellen siehe unten |
meta/fingerprint.txt |
stderr-Normalform | sha256 über normalisierte Zeilen | 30 Tage | Vergleich über Builds |
02 Schwellenparameter für HTML und Anhänge
Hier zählen MB und Medienanzahl — vor dem Gateway-POST hart prüfen; oversized Zip durch Link-Hinweis ersetzen. Wenn html_bundle_max_mb greift, exportieren Sie zusätzlich eine ASCII-Kurzfassung der Top-Fehler, damit Reviewer ohne Download entscheiden können.
| Parameter | Startwert | Stabilitätshinweis | Sicherheit | Review-Hinweis |
|---|---|---|---|---|
max_attachment_mb |
35 | über 50 MB oft flaky Upload | kleinere Fläche | Mobile PR-Clients |
max_screenshots_embedded |
8 | GPU last | weniger PII | nur failing Spec |
stderr_max_lines |
48 | feste Breite | Redact vor Hash | Stackkopf |
stderr_normalize_paths |
true | stabile Hashes | maskiert Home | Flake-Trend |
html_bundle_max_mb |
18 | kein Blob-Wuchs | kein Roh-Trace | Text first |
// Node 24 Kurz: crypto.createHash("sha256").update(normalizeStderr(stderr)).digest("hex").slice(0,12)
03 Merge-Template für den PR-Kommentar
Template: Kurz-URL zum HTML, Top-3-Anhänge mit MB, fingerprint monospaced, Marker <!-- openclaw:html-report-digest --> für Upsert. openclaw per Skript: stdin JSON mit Pfaden und Verletzungen, stdout Markdown. Node 24: fetch plus AbortSignal.timeout gegen hängende Uploads. Variablen wie {{ runner_os }} und {{ node_version }} helfen Support, ohne Logs anzreichern.
04 Berechtigungen und Token-Minimierung
Token nur pull_requests:write scoped; kein breites repo. Secrets im Keystore, nicht in playwright.config. Keine Rohtokens in data/ — Reports redigieren oder Profil trennen.
| Geheimnis | Scope | Gültigkeit | Rotation | Beobachtbarkeit |
|---|---|---|---|---|
GITHUB_TOKEN |
ein Repo | Joblauf | automatisch | Audit im Workflow-Log |
| Presigned GET | Objektpfad | 15 Minuten | pro Build | Access-Logs im Bucket |
| OpenClaw API-Key | nur render | 90 Tage | quartalsweise | ohne stdout echo |
| npm-Token für private Feeds | read-only | 30 Tage | monatlich | nicht im HTML-Dump |
05 Reproduzierbare Ablaufschritte
- Toolchain. Remote Mac: Node 24 plus Playwright wie CI; PM pinnen;
corepackaktivieren falls nötig. - Reporter.
npx playwright test --reporter=html,github→ vereinbarte Pfade; Shards vor Merge normalisieren. - Caps.
manifest.jsonlesen, Verletzungen melden, Exitcode setzen; Diagnosezeile für Digest mitschreiben. - Fingerprint. stderr normalisieren, hashen,
meta/fingerprint.txt; optional Diff zur letzten grünen Pipeline. - openclaw. JSON → Template → Markdown; PR mit Marker upserten; Bundle und Zips mit dokumentierter TTL publizieren.
06 Fehlersuche und FAQ
Bilder fehlen im PR? Absolute Runner-Pfade in index.html — Base-URL und Merge prüfen.
Fingerprint driftet? Timestamps in stderr — Normalisierung und Zeilenlimit.
Playwright driftet zwischen Shards? Lockfile strikt; Runner-Cache leeren.
429 vom Gateway? Backoff, kleinere Chunks, kein paralleler PR-POST ohne Lock.
Zitierfähige Kennzahlen
Presign-TTL 15–30 Minuten bei großen HTML-Bundles.
Ein Digest-Marker pro PR verhindert doppelte Threads.
Fingerprint zwölf Zeichen nur Trend, kein Crypto-Beweis — vorher redigieren.
Mac-Knoten für reproduzierbare Playwright-Läufe
Apple-Silicon-Runner mieten, Node 24 stabil halten und Digests sauber posten. Öffentliche Einstiege: Technik-Einblicke, Hilfe, Kaufen — ergänzend Preise und Startseite.