10 KiB
OpenClaw Agent-first Hardening — Acceptance Evidence
Datum: 2026-07-30 Scope: Security-Grenze, Gateway-Verbindung, Mutationssicherheit, Eventprojektion, durable Runs, globaler Agent-first-Einstieg und wahrheitsgetreue Telemetrie Ergebnis: Lokale Implementierungs- und Testabnahme bestanden; Live-Gateway-/Produktionsabnahme offen
Abnahmeurteil
Die sieben priorisierten Hardening-Punkte sind im aktuellen Working Tree implementiert und durch den unten dokumentierten automatisierten Baseline-Lauf abgesichert. Das ist kein Produktionsfreigabe-Nachweis: Es wurde in diesem Checkpoint weder ein reales Remote-Gerät gepaart noch ein vollständiger OpenClaw-/OpenAI-Lauf in der Zielumgebung ausgeführt.
1. Security boundary
Status: lokal abgenommen
backend/Extensions/ServiceCollectionExtensions.cssetzt eine authentifizierte Fallback-Policy.- Nur Authentifizierungs-/Session-Bootstrap und explizite Health-Probes sind anonym. Die OpenClaw-, Run-, Event-, Dashboard-, Task-, Agent- und Security-Flächen bleiben geschützt.
backend/Services/RequestAuthorizationHelper.csbehandeltX-Agent-Idnur nach bereits verifizierter Service- oder privilegierter User-Identität als allow-gelisteten Actor-Hinweis.- OpenClaw-Control- und Run-Mutationen sind owner-only. Das MCP- und
Bridge-Datenplane akzeptiert verifiziertes JWT oder
X-Nexus-Api-Key, aber keinen frei gesetzten Agent-Header als Credential. - Negative Auth-, Rollen- und Header-Eskalationsfälle liegen in
backend-tests/SecurityBoundaryTests.cssowie den fokussierten Controller-/MCP-Tests.
2. Reale Gateway-Verbindungsgrundlage
Status: Protokoll und Pairing-Zustand implementiert; Live-Pairing offen
backend/Services/OpenClawGatewayProtocol.csundbackend/Services/GatewayConnector.csverwenden Protocol v4 und den bestätigten Stable-Release-Pin2026.7.1.2026.7.2-beta.1ist als Vorabversion bewusst nicht der Default.- Nur
127.0.0.1,::1undlocalhostgelten als direkte Loopback-Topologie. backend/Services/OpenClawDeviceIdentityStore.cspersistiert die Ed25519-Geräteidentität und nach erfolgreichem Pairing den Device-Token.- Die Challenge-Signatur bindet die kanonische v3-Payload an den vom Gateway
gelieferten Nonce.
PAIRING_REQUIREDsamt konkreter Request-ID wird bis UI und Settings weitergegeben. - Die Compose-Konfiguration hält Device- und Audit-Dateien in
nexus-openclaw-deviceüber Container-Neustarts stabil. - Protokoll-, Versions-, Loopback-, Challenge-, Pairing- und
Persistenzverhalten wird durch
backend-tests/GatewayConnectorTests.cs,backend-tests/OpenClawGatewayProtocolTests.csundbackend-tests/OpenClawDeviceIdentityAndAuditTests.csgeprüft.
3. Zuverlässige Mutationen
Status: lokal abgenommen; Single-Writer-Grenze bleibt
- Frontend-Mutationen erzeugen über
frontend/src/services/mutationContext.tseinen Idempotency Key, eine Correlation ID und einen gültigen W3C-traceparent. - Der Backend-Rand leitet den Actor ausschließlich aus dem authentifizierten Principal ab. Die Invocation-Metadaten werden bis zum Gateway transportiert.
backend/Services/OpenClawOperationAuditStore.csspeichert einen append-only Metadaten-Ledger mit gehashten Idempotency Keys, nicht Prompts, Tool-Argumenten, Rohresultaten oder Credentials.- Ein gleicher Schlüssel und Intent liefert das vorhandene Ergebnis; ein
abweichender Intent wird abgelehnt. Ein nach Neustart nicht sicher
abgeschlossenes Ergebnis wird
in_doubtund nicht automatisch wiederholt. - Geschlossene OpenClaw-Control-Schemas erhalten kein erfundenes
params.idempotencyKey. Nexus dedupliziert sie lokal. Durable Run-Aktionen persistieren ihre Idempotency- und Transition-Daten zusätzlich in PostgreSQL.
4. Eventprojektion
Status: lokal abgenommen
GET /api/v1/openclaw/eventsliefert authentifiziertes SSE.Last-Event-IDundlastEventIdunterstützen Replay aus dem begrenzten Connector-Buffer.- Connection-, Heartbeat- und Gap-Events machen Verbindungs- und Replay-Zustand explizit. Run-, Session-, Tool-, Approval-, Artifact- und sonstige Gateway-Ereignisse werden klassifiziert, sequenziert und redigiert.
- Sequenzlücken und Resets bleiben sichtbar; ein veralteter Cursor löst einen autoritativen Refresh statt einer stillen Datenlücke aus.
frontend/src/services/openclawLive.tsundfrontend/src/stores/openclaw.tsverwenden SSE zuerst, reconnecten mit begrenztem Backoff und fallen nur bei fehlender Live-Verbindung auf 60-Sekunden-Polling zurück.- Backend-Abdeckung:
backend-tests/OpenClawEventProjectionTests.csundbackend-tests/OpenClawEventSubscriptionCoordinatorTests.cs. Frontend-Abdeckung:frontend/tests/openclaw-live.test.ts.
5. Durable Run
Status: Start, Stop, Retry, Historie und Reconnect-Projektion lokal abgenommen; Same-run-Resume bewusst nicht verfügbar
- Die Migration
backend/Data/Migrations/20260730130442_AddOpenClawRunProjection.csergänzt dauerhafte Runs und Transition-Historie. backend/Controllers/OpenClawRunsController.cs,backend/Services/OpenClawRunService.cs,backend/Services/OpenClawRunGateway.csundbackend/Repositories/OpenClawRunRepository.csimplementieren:- Liste und Detail;
- persist-before-dispatch Start;
- exakten Run-Stop ohne Session-weites Abbrechen;
- Retry als korrelierten neuen Run;
- Nexus-Transitionen plus redigierte Gateway-Historie;
- Task-, Projekt-, Session-, Actor-, Correlation- und Trace-Bezug;
- Event-Reconciliation einschließlich per-Run-Sequenzlücke.
/runs/:idzeigt Zustand, Korrelationen, Transitionen, Recovery-Aktionen und Sync-/Gap-Zustand. Resume ist deaktiviert und der Backend-Endpunkt antwortetunsupported, da der gepinnte Gateway-Vertrag keinen belegten Same-run-Resume-RPC bietet.- Abdeckung:
backend-tests/OpenClawRunServiceTests.cs,backend-tests/OpenClawRunGatewayTests.csundfrontend/tests/openclaw-runs.test.ts.
6. Globaler Agent-first-Einstieg
Status: lokal abgenommen
Ctrl/Cmd+Köffnetfrontend/src/components/mission-control/CommandPalette.vueauf allen authentifizierten Routen.- Die Palette navigiert zu Kernflächen und geladenen Projekten, Tasks, Agents und Sessions. Für Task, Projekt und Agent kann sie einen korrelierten Run vorausfüllen.
- Iris ist ein globales, standardmäßig geschlossenes Modal. Der gesendete Kontext ist auf Route, Surface, Entity-Typ und Entity-ID begrenzt.
backend/Services/MissionControlContextFormatter.csnormalisiert diesen Kontext und markiert ihn als nicht vertrauenswürdige Metadaten, bevor die eigentliche Nutzeranweisung folgt.- Keyboard-Auswahl, Escape, gegenseitiger Ausschluss der Dialoge und Fokus-Rückgabe sind in der UI implementiert.
- Abdeckung:
frontend/tests/mission-control.test.tsundbackend-tests/MissionControlContextFormatterTests.cs.
7. Wahrheitsgetreue Telemetrie
Status: lokal abgenommen
backend/Services/DashboardService.csübernimmt Fortschritt nur aus einem gemeldeten Nexus-Task und Tokens nur aus einer gemeldeten OpenClaw-Session.- Cost bleibt
null, solange die Runtime keinen autoritativen Wert liefert. - Dashboard- und Agentenkomponenten zeigen unbekannte Werte als „Nicht gemeldet“ und erzeugen keine synthetischen Thinking-Items, hartcodierten Fortschritte, Kosten, Laufzeiten oder nächsten Schritte.
- Reale Runtime-Status- oder Activity-Typen dürfen weiterhin „thinking“ enthalten; entfernt wurde die präsentativ erfundene Telemetrie, nicht ein autoritatives Ereignis.
Automatisierte Baseline
Ausgeführt am 2026-07-30 im Repository-Root beziehungsweise in frontend/:
| Gate | Ergebnis |
|---|---|
.tools\dotnet\dotnet.exe test backend-tests/Nexus.Api.Tests.csproj --configuration Release --no-restore |
bestanden: 271, fehlgeschlagen: 0, übersprungen: 0 |
pnpm typecheck |
bestanden |
pnpm test |
6 Dateien, 11 Tests bestanden |
pnpm build |
bestanden; 1.897 Module transformiert |
Operierte Browser-QA
Ausgeführt am 2026-07-30 gegen die sichtbar als QA SIMULATION markierte
Repository-Fixture scripts/qa/openclaw-ui-mock.mjs:
- alle 19 Seitenrouten bei 1440 px ohne Dokument-Overflow oder sichtbare
Alerts; die bereits authentifizierte
/login-Navigation leitete erwartbar zu/dashboard; - alle 18 authentifizierten Seiten bei 375 px ohne Dokument-Overflow;
- Dashboard, Run Control, Run Detail, Task Board, Calendar und Settings zusätzlich bei 768, 1024 und 1920 px ohne Dokument-Overflow;
- Command Palette per Button und
Ctrl/Cmd+K, Escape-Schließen, Fokus-Rückgabe und Objekt-Navigation; - Iris als standardmäßig geschlossenes Modal mit erhaltenem Run-/Task-Kontext;
- Task-korrelierter Run-Start, exakter Stop und Retry als neuer korrelierter Run mit unveränderter Quellhistorie;
- keine Browser-Warnungen oder -Fehler im finalen Konsolencheck.
Die Fixture führte keine reale OpenClaw- oder OpenAI-Aktion aus. Diese Browser-QA belegt ausschließlich UI-Verträge, Interaktion, responsive Geometrie und den simulierten Lifecycle.
Verbleibende Grenzen vor Produktionsfreigabe
- Live-Gateway: Remote-Pairing mit realer Request-ID, Device-Token-Reuse, Reconnect und Versionsfehlermodus in der Zielumgebung beweisen.
- End-to-end Provider: Einen vollständigen
Nexus -> OpenClaw -> OpenAI -> Nexus-Lauf ausführen und belegen, dass OpenAI in OpenClaw tatsächlich der primäre Provider ist. - Live-Events: SSE-Reconnect, Cursor-Replay, Gap-Recovery und Run-Reconciliation unter echtem Gateway-Verkehr und längerer Laufzeit testen.
- Multi-Replica: Den lokalen JSONL-Idempotency-Ledger vor horizontaler Skalierung durch einen geteilten transaktionalen Ledger mit eindeutigem Key-Claim ersetzen.
- Resume und weitere Control-Flächen: Same-run-Resume bleibt unsupported. Tool-/Policy-, Channel-, Node-, Connector-, Secret- und vollständige Schedule-Verwaltung sind weiterhin Produkt-Roadmap, nicht Teil dieses Hardening-Slices.
- Datenbank-/Deployment-Nachweis: Die neue EF-Migration muss in einer PostgreSQL-Zielumgebung angewendet und zurücklesbar geprüft werden. In diesem Checkpoint gab es keinen Commit, Push oder Deployment.