feat: ship agent-first mission control v0.2.57
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

This commit is contained in:
AzuTear
2026-07-31 22:39:47 +02:00
parent 3bc7622977
commit f5552218bc
535 changed files with 95242 additions and 8791 deletions
@@ -0,0 +1,222 @@
# 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)