Files
AzuTear f5552218bc
CI - Build & Test / Backend (.NET) (push) Successful in 42s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 2m46s
CI - Build & Test / Security Check (push) Successful in 3s
CI - Build & Test / Deploy Nexus (push) Successful in 56s
feat: ship agent-first mission control v0.2.57
2026-07-31 22:39:47 +02:00

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.cs setzt 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.cs behandelt X-Agent-Id nur 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.cs sowie den fokussierten Controller-/MCP-Tests.

2. Reale Gateway-Verbindungsgrundlage

Status: Protokoll und Pairing-Zustand implementiert; Live-Pairing offen

  • backend/Services/OpenClawGatewayProtocol.cs und backend/Services/GatewayConnector.cs verwenden Protocol v4 und den bestätigten Stable-Release-Pin 2026.7.1. 2026.7.2-beta.1 ist als Vorabversion bewusst nicht der Default.
  • Nur 127.0.0.1, ::1 und localhost gelten als direkte Loopback-Topologie.
  • backend/Services/OpenClawDeviceIdentityStore.cs persistiert 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_REQUIRED samt 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.cs und backend-tests/OpenClawDeviceIdentityAndAuditTests.cs geprüft.

3. Zuverlässige Mutationen

Status: lokal abgenommen; Single-Writer-Grenze bleibt

  • Frontend-Mutationen erzeugen über frontend/src/services/mutationContext.ts einen 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.cs speichert 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_doubt und 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/events liefert authentifiziertes SSE.
  • Last-Event-ID und lastEventId unterstü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.ts und frontend/src/stores/openclaw.ts verwenden SSE zuerst, reconnecten mit begrenztem Backoff und fallen nur bei fehlender Live-Verbindung auf 60-Sekunden-Polling zurück.
  • Backend-Abdeckung: backend-tests/OpenClawEventProjectionTests.cs und backend-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.cs ergänzt dauerhafte Runs und Transition-Historie.
  • backend/Controllers/OpenClawRunsController.cs, backend/Services/OpenClawRunService.cs, backend/Services/OpenClawRunGateway.cs und backend/Repositories/OpenClawRunRepository.cs implementieren:
    • 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/:id zeigt Zustand, Korrelationen, Transitionen, Recovery-Aktionen und Sync-/Gap-Zustand. Resume ist deaktiviert und der Backend-Endpunkt antwortet unsupported, da der gepinnte Gateway-Vertrag keinen belegten Same-run-Resume-RPC bietet.
  • Abdeckung: backend-tests/OpenClawRunServiceTests.cs, backend-tests/OpenClawRunGatewayTests.cs und frontend/tests/openclaw-runs.test.ts.

6. Globaler Agent-first-Einstieg

Status: lokal abgenommen

  • Ctrl/Cmd+K öffnet frontend/src/components/mission-control/CommandPalette.vue auf 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.cs normalisiert 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.ts und backend-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

  1. Live-Gateway: Remote-Pairing mit realer Request-ID, Device-Token-Reuse, Reconnect und Versionsfehlermodus in der Zielumgebung beweisen.
  2. 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.
  3. Live-Events: SSE-Reconnect, Cursor-Replay, Gap-Recovery und Run-Reconciliation unter echtem Gateway-Verkehr und längerer Laufzeit testen.
  4. Multi-Replica: Den lokalen JSONL-Idempotency-Ledger vor horizontaler Skalierung durch einen geteilten transaktionalen Ledger mit eindeutigem Key-Claim ersetzen.
  5. 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.
  6. 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.

Kanonische Folgedokumente