Typische Brüche, wenn Flag-Webhooks direkt in CI-Skripte feuern
Ohne Zwischenschicht interpretieren Runner JSON.parse vor der Signaturprüfung, verlieren damit Byte-Identität zum LaunchDarkly-Secret und liefern falsche Positiv- oder Negativtests. Auf Remote-Macs verschärft sich das durch geteilte HOME-Caches, nvm-Shims in launchd und parallele npm-Globalpfade.
- Asynchronität: Preflight zieht Registry-Artefakte; überschreitet die Webhook-Antwortfrist, meldet LaunchDarkly 408 obwohl der Job später grün wäre.
- Token-Scope: Ein breit gefasstes REST-API-Token im selben Secret-Store wie das Signing Secret erzeugt hohen Blast-Radius, sobald Logs oder Core-Dumps aus dem Handler leakieren.
- Observability: getrennte Logs für openclaw doctor und Preflight erschweren PR-Bot-Kommentare; ohne gemeinsames JSON bleiben Merge-Entscheider blind.
Umgebungsvorbereitung und Versionspinnung (Node 24, OpenClaw v2026.5.x)
Richten Sie Node 24 LTS systemweit oder per festem Pfad ein, den launchd-Plist referenziert. Installieren Sie openclaw per npm install -g openclaw@^2026.5.0, protokollieren Sie node -v und openclaw --version im Job-Header und setzen Sie OPENCLAW_HOME je Runner isoliert. Führen Sie openclaw onboard sowie openclaw onboard --install-daemon aus und wiederholen Sie openclaw doctor, bis keine harten Warnungen zu Ports nahe 18789, fehlenden Binaries oder Token-Dateirechten mehr erscheinen — konsistent zur offiziellen Dokumentation unter docs.openclaw.ai für die 2026.5.x-Linie.
| Komponente | Empfohlene Policy | Stabilitätsmetrik | Rollback-Hebel |
|---|---|---|---|
| Node-Runtime | 24.x LTS, kein wechselndes nvm-Default im Daemon | Deterministische ABI | Checkliste + vorherige PKG-Sicherung |
| OpenClaw-CLI | Semver-Pin 2026.5.x, CI spiegelt dieselbe Range |
doctor grün vor Webhook-Aktivierung | npm -g uninstall + bekannte Tarball-Version |
| Gateway-Daemon | onboard --install-daemon, Health via gateway status |
JSON-Felder stabil innerhalb SLA | launchctl unload + Logs unter OPENCLAW_HOME |
| Secrets | Signing Secret und API-Token getrennt, chmod 600 | Keine Klartext-Ausgabe in stdout | Rotation im Secret-Store, Handler liest atomar |
| Preflight-Arbeitsdir | Tmpfs oder SSD-Pfad pro deliveryId |
Keine Quer-Kontamination zwischen Events | Verzeichnis nach Run löschen |
Gateway-Loopback mit TLS-Terminierung versus SSH-Tunnel — Expositionsmatrix
LaunchDarkly benötigt ein öffentlich erreichbares HTTPS-Ziel. Auf einem Remote-Mac bleibt der OpenClaw-Listener typischerweise auf 127.0.0.1; die Frage ist nur, wo TLS endet und wie eingehende Verbindungen zum Prozess gelangen.
| Modus | Vorteil | Risiko / Kosten | Operativer Hinweis |
|---|---|---|---|
| Loopback + Reverse-Proxy | Zentrales mTLS, Rate-Limits, saubere Audit-Logs | Zusätzlicher Hop, Zertifikatsrotation | Upstream-Header strikt filtern; Bearer OPENCLAW_GATEWAY_TOKEN siehe Token-HowTo |
| SSH-RemoteForward | Kein öffentlicher Port auf dem Mac selbst | Tunnel-Flaps ⇒ 408 beim Webhook | ServerAliveInterval setzen; Keepalive messen |
| Split: nur Status intern | Webhook trifft Edge-Node, Preflight delegiert per interner Queue | Höhere Architekturkomplexität | Idempotenz über deliveryId zwingend |
Webhook-Routing, LaunchDarkly-Änderungs-Signatur und least-privilege-API-Token
Mappen Sie einen dedizierten HTTP-Pfad, der ausschließlich LaunchDarkly-Quell-IPs oder Ihren Proxy akzeptiert. Lesen Sie den Roh-Body als Buffer, berechnen Sie HMAC-SHA256 mit dem Signing Secret und vergleichen Sie konstantzeitig mit dem von LaunchDarkly dokumentierten Signatur-Header — niemals zuerst JSON.parse. Bei Fehlschlag 401 zurückgeben und nur eine Correlation-ID loggen.
Für optionale Metadaten jenseits des Webhook-Payloads verwenden Sie ein read-only-API-Token mit minimalem Scope (Lesen der betroffenen Flags/Umgebungen), getrennt vom Signing Secret und mit kurzer Lebensdauer. Schreibende Operationen gehören nicht in denselben Prozess, der Roh-Webhooks exponiert.
Gesundheits-Sonden fusionieren: openclaw gateway status, Preflight-Exit und eine PR-Summary
Nach erfolgreicher Signatur führen Sie zuerst openclaw gateway status mit den in --help dokumentierten JSON- bzw. headless-Flags aus und parsen die Felder, die Ihr Gate benötigt (Listener, Version, letzte Fehler). Anschließend starten Sie den Dependency-Preflight in einem frischen Klon, dessen Branch oder Commit aus dem Webhook-Kontext stammt — typischerweise npm ci --dry-run, pnpm install --frozen-lockfile oder ein firmeninternes Wrapper-Skript.
Schreiben Sie ein JSON-Objekt mit Unterknoten gateway und preflight, jeweils mit Exit-Code, gekürzter stderr und Zeitstempel. Ihr PR-Bot liest nur dieses Artefakt; so bleibt die Merge-Entscheidung nachvollziehbar und entspricht dem Muster aus dem Artikel Status-JSON & doctor als CI-Gate, erweitert um flag-getriebene Trigger.
Begrenzte Backoff-Stufen für ausgehende Summary-Posts
Wenn Ihr Handler Status an eine interne Checks-API oder einen PR-Kommentar-Endpunkt sendet, kapseln Sie maximal drei Versuche mit Pausen 2 s, 4 s und 8 s zwischen aufeinanderfolgenden Fehlversuchen und setzen Sie ein HTTP-Client-Timeout nahe 25 s pro Versuch. Ordnen Sie jedem Versuch dieselbe Idempotency-Key aus der LaunchDarkly-deliveryId zu, damit doppelte Webhook-Lieferungen keine doppelten Kommentare erzeugen.
Drei harte Kennzahlen für Runbooks (zitierfähig)
- Backoff-Stufen: 2 / 4 / 8 Sekunden zwischen Retries, maximal drei Zyklen bei 5xx oder Netzreset — kein exponentielles Unendlich-Wachstum.
- Client-Timeout pro Summary-Versuch: typisch 22–28 Sekunden, abgestimmt auf LaunchDarkly-Lieferfenster und Proxy-
read_timeout. - Secret-Datei: Dateimodus 600, Besitzer gleich dem Daemon-User; Rotation mindestens vierteljährlich oder bei Personalfluktuation.
Sieben Arbeitsschritte vom leeren Runner bis zur produktiven Webhook-Kette
- Baseline: Node 24 installieren,
npm -g-Pfad mitwhich openclawverifizieren,openclaw doctorbis grün. - Daemon:
openclaw onboard --install-daemonausführen,launchctl printprüfen, Logs auf erste Fehler scannen. - Expose: Loopback+TLS oder SSH-Tunnel wählen, Health extern mit
curlgegen den öffentlichen Host testen. - LaunchDarkly: Webhook anlegen, Signing Secret in geschützte Datei, optionales read-only API-Token separat speichern.
- Handler: Roh-Body-Signatur, dann Preflight-Skript mit isoliertem Workdir;
openclaw gateway statusJSON einlesen. - Merge: gemeinsames Summary-JSON erzeugen, an PR-Pipeline senden, Retries 2/4/8 s mit Idempotency-Key.
- Abnahme: Simulierte Flag-Änderung, erwarteter PR-Kommentar, Alarm wenn Latenz p95 den SLA-Rand erreicht.
FAQ: HTTP 401 beim Signaturpfad und HTTP 408 bei LaunchDarkly-Zustellung
- 401 unmittelbar nach Secret-Rotation
- Prüfen Sie, ob der Handler noch die alte Datei cached oder ob ein zweiter Prozess mit altem Environment läuft. Vergleichen Sie die Byte-Länge des Roh-Bodies mit den LaunchDarkly-Logs; Abweichungen deuten auf Middleware-Kompression hin, die vor dem HMAC deaktiviert werden muss.
- 408 oder client timeout trotz korrekter Signatur
- Preflight überschreitet das synchrone Antwortfenster — verschieben Sie schwere Schritte in eine Queue und antworten Sie LaunchDarkly zuerst mit 202, sofern Ihre Policy asynchrone Verarbeitung erlaubt, oder verkürzen Sie Clone- und Tar-Schritte aggressiv.
- Warum bleibt openclaw doctor rot, obwohl der Webhook trifft?
- Der Webhook erreicht nur den Proxy; der Gateway-Daemon auf dem Mac kann weiterhin fehlerhafte
PATH-Einträge oder Portkollisionen haben. Beheben Sie doctor zuerst, sonst liefertgateway statusirreführende Teilinformationen in Ihrer Summary.
Fazit: Flag-getriebene Gates ohne Pflicht-Login weiterverfolgen
Mit Node 24, gepinnter OpenClaw-2026.5.x-Zeile, sauberem doctor, verifiziertem LaunchDarkly-HMAC und einem fusionierten JSON aus gateway status und Preflight wird Ihr Remote-Mac-CI auditierbar. Die öffentlichen Einstiege bleiben ohne Kontozwang zugänglich.
Weiter ohne Login: Technik-Blog, Pakete kaufen, Hilfezentrum, Preise und Startseite — ergänzt um die verlinkten OpenClaw-Deepdives.
Apple-Silicon-Knoten wählen, dann Webhook-Gates stabil betreiben
Region und Paket an RTT und Registry-Standort koppeln; SSH-Hilfe und Runner-Kontext im Hilfezentrum nachlesen.