# 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

- [Agent-First Mission Control](../../../AGENT_FIRST_MISSION_CONTROL.md)
- [OpenClaw Gateway connection contract](../../../OPENCLAW_GATEWAY_CONNECTION.md)
- [Mission Control Roadmap](../../../MISSION_CONTROL_ROADMAP.md)
- [Route and agent-first evaluation](ROUTE_AND_AGENT_FIRST_EVALUATION.md)
