From 5640da8b9176b6d4f304a87bcb29c02b21372ab4 Mon Sep 17 00:00:00 2001 From: AzuTear Date: Fri, 31 Jul 2026 23:20:46 +0200 Subject: [PATCH] docs: record v0.2.59 production acceptance [skip ci] --- README.md | 6 + docs/AGENT_FIRST_MISSION_CONTROL.md | 4 +- docs/MISSION_CONTROL_ROADMAP.md | 28 ++- .../PRODUCTION_VALIDATION_AND_NEXT_PLAN.md | 183 ++++++++++++++++++ 4 files changed, 212 insertions(+), 9 deletions(-) create mode 100644 docs/audits/2026-07-31/production-release-v0.2.59/PRODUCTION_VALIDATION_AND_NEXT_PLAN.md diff --git a/README.md b/README.md index 399cf63..3084572 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,12 @@ isolated from the frontend and the Nexus domain model. > > **Structured operation results checkpoint (2026-07-31):** > [implementation and acceptance](docs/audits/2026-07-31/operation-results-deep-links/IMPLEMENTATION_AND_ACCEPTANCE.md). +> +> **Production release v0.2.59 (2026-07-31):** +> [production validation, route matrix and next plan](docs/audits/2026-07-31/production-release-v0.2.59/PRODUCTION_VALIDATION_AND_NEXT_PLAN.md). +> Gitea run 362 deployed commit `144edf58fe5928a3e04816f4435ea574d64211a1`; +> PostgreSQL and the OpenClaw HTTP runtime are healthy. Productive Protocol-v4 +> management remains intentionally blocked by the external Client-ID gate. > 📋 **Architektur-Review** (2026-06-22): Board-first Orchestrierung, sichere > Backend-Brücke und Gateway-Integration geprüft. Siehe diff --git a/docs/AGENT_FIRST_MISSION_CONTROL.md b/docs/AGENT_FIRST_MISSION_CONTROL.md index ff56430..60993e4 100644 --- a/docs/AGENT_FIRST_MISSION_CONTROL.md +++ b/docs/AGENT_FIRST_MISSION_CONTROL.md @@ -1,7 +1,7 @@ # Nexus Agent-First Mission Control -**Status:** Zielvertrag mit lokal umgesetztem Agent-first-/Performance-V2-Slice; Produktionswrites und Live-Lastnachweis offen -**Stand:** 2026-07-30 +**Status:** Zielvertrag mit produktiv ausgeliefertem v0.2.59-Control-Plane-Slice; Gateway-Writes, credentialed Live-Abnahme und Lastnachweis offen +**Stand:** 2026-07-31 **Geltungsbereich:** Produkt, Frontend, Backend, Runtime-Adapter und Agenten-Schnittstellen ## Produktauftrag diff --git a/docs/MISSION_CONTROL_ROADMAP.md b/docs/MISSION_CONTROL_ROADMAP.md index e83d17d..f1270b5 100644 --- a/docs/MISSION_CONTROL_ROADMAP.md +++ b/docs/MISSION_CONTROL_ROADMAP.md @@ -1,7 +1,7 @@ # Nexus Mission Control Roadmap **Status:** Kanonische Produkt- und Umsetzungsroadmap -**Stand:** 2026-07-30 +**Stand:** 2026-07-31 **Priorisierung:** Abhängigkeiten und Risikoreduktion statt willkürlicher Kalendertermine **Ziel:** Nexus ersetzt die OpenClaw-Oberfläche im täglichen Betrieb, nicht die @@ -65,7 +65,8 @@ bei Konflikten bleibt OpenClaw für Runtimezustand autoritativ. Bereits vorhanden und weiterzuverwenden: -- Vue-/Pinia-Frontend mit 18 registrierten Routen und einheitlicher +- Vue-/Pinia-Frontend mit 21 benannten Seiten (Login plus 20 authentifizierte + Views) und einheitlicher Mission-Control-Designsprache - ASP.NET-Core-API, PostgreSQL, JWT-/Refresh-Session-Grundlage - `IAgentRuntime` mit `OpenClawRuntime` als einzig registriertem Runtime-Adapter @@ -110,10 +111,23 @@ Noch nicht ausreichend: - Security-, Audit-, E2E- und Eval-Gates reichen für eine produktive Agenten-Control-Plane noch nicht aus. -Die exakten Werte der Abschlussprüfung dieses Checkpoints werden erst nach dem -vollständigen finalen Backend-, Frontend- und Browserlauf in -[Attach & Adopt — Implementation and Acceptance](audits/2026-07-30/openclaw-attach-adopt/IMPLEMENTATION_AND_ACCEPTANCE.md) -eingetragen. +Produktionscheckpoint v0.2.59 vom 2026-07-31: + +- Gitea Run 362 hat Commit + `144edf58fe5928a3e04816f4435ea574d64211a1` mit grünen Backend-, Frontend-, + Security- und Deploymentjobs ausgeliefert. +- PostgreSQL und die HTTP-Runtime zu Baos OpenClaw sind auf Produktion stabil + gesund. Docker-DNS verwendet `openclaw-gateway:18789`; der Release-Gate + akzeptiert keinen `Degraded`-Healthstatus mehr. +- 363 Backendtests und 25 Browsertests bestehen in CI. Fünf explizite + Docker-/Toxiproxy-Integrationsfälle bleiben ohne CI-Opt-in sichtbar + übersprungen. +- Auth-Grenzen, SPA-Routing, Security-Header und der korrigierte Loginfehler + sind live geprüft. Credentialed Owner-Flows, Gateway-Pairing, + OpenClaw-Schreibvorgänge und der OpenAI-End-to-End-Run bleiben offen. + +Die vollständige Evidenz und der daraus abgeleitete Plan stehen in +[Production release v0.2.59](audits/2026-07-31/production-release-v0.2.59/PRODUCTION_VALIDATION_AND_NEXT_PLAN.md). ## 4. Prioritätsdefinition @@ -455,7 +469,7 @@ Operationssystem. - Agentenqualitäts-SLOs, automatische Regressionserkennung und modellabhängige Routingoptimierung. -## 6. Auswirkungen auf die 18 bestehenden Seiten +## 6. Auswirkungen auf die 18 bestehenden Seitenfamilien | Route | Zielrolle | Verbindliche Verbesserungen | Meilenstein | |---|---|---|---| diff --git a/docs/audits/2026-07-31/production-release-v0.2.59/PRODUCTION_VALIDATION_AND_NEXT_PLAN.md b/docs/audits/2026-07-31/production-release-v0.2.59/PRODUCTION_VALIDATION_AND_NEXT_PLAN.md new file mode 100644 index 0000000..e3ddae8 --- /dev/null +++ b/docs/audits/2026-07-31/production-release-v0.2.59/PRODUCTION_VALIDATION_AND_NEXT_PLAN.md @@ -0,0 +1,183 @@ +# Nexus v0.2.59 — Produktionsabnahme und nächster Plan + +**Datum:** 2026-07-31 +**Produktions-URL:** `https://nexus.noveria.net` +**Release-Commit:** `144edf58fe5928a3e04816f4435ea574d64211a1` +**Gitea-CI/CD:** `https://git.noveria.net/bao/nexus/actions/runs/362` +**Scope:** Repository, Gitea-Pipeline, Nexus-Produktion und ausschließlich Baos +OpenClaw-Topologie; keine Ressource von Maxi wurde aufgelistet oder geöffnet. + +## Kurzurteil + +Nexus v0.2.59 ist als Web-Anwendung und Nexus-Control-Plane sauber ausgeliefert: +Commit- und Image-Provenienz stimmen überein, PostgreSQL und die HTTP-Runtime zu +Baos OpenClaw sind stabil gesund, die Auth-Grenzen greifen und die kontrollierte +Browser-Suite ist grün. + +Nexus ist damit **noch nicht** als vollständiger Ersatz für OpenClaws UI +abgenommen. Der entscheidende produktive Protocol-v4-Gateway-Pfad bleibt +absichtlich gesperrt, solange OpenClaw keine offiziell unterstützte externe +`nexus`- oder generische Operator-Client-ID anbietet. Echte Owner-Flows, +Pairing, OpenClaw-Schreibvorgänge und ein vollständiger +`Nexus -> OpenClaw -> OpenAI -> Nexus`-Run wurden ohne eine vom Owner +bereitgestellte Sitzung beziehungsweise ohne erfülltes Identity-Gate nicht +simuliert oder umgangen. + +## Release- und Fehlerbehebung + +| Commit | Ergebnis | +|---|---| +| `f5552218bc992a79cdd0e32dd30a57a785163f18` | Agent-first-/Performance-V2-Gesamtstand als v0.2.57 ausgeliefert | +| `6f21d9ba97cac58f082bf422e3c81ef3f2aac9c6` | Login-Rate-Limit-Darstellung und SPA-Security-Header als v0.2.58 gehärtet | +| `144edf58fe5928a3e04816f4435ea574d64211a1` | Produktions-Docker-DNS, Token-Fallback und semantisches Health-Gate als v0.2.59 korrigiert | + +Die Live-Prüfung fand und behob drei reale Releaseprobleme: + +1. Ein normaler ungültiger Login zeigte fälschlich einen Sperr-Countdown, + obwohl noch vier Versuche übrig waren. Die UI zeigt den Countdown jetzt nur + bei einer echten Sperre; ein Playwright-Regressionsfall deckt dies ab. +2. Nginx vererbte Security-Header wegen eigener `add_header`-Direktiven nicht + an `index.html`. HTML-Antworten liefern jetzt HSTS, CSP, + `X-Content-Type-Options`, `X-Frame-Options`, Referrer- und + Permissions-Policy. +3. Nexus verwendete in Produktion `host.docker.internal:18789`, obwohl Baos + OpenClaw im gemeinsamen Docker-Netz unter `openclaw-gateway:18789` + erreichbar ist. Zusätzlich wertete das Deployment jedes HTTP 200 von + `/health` als Erfolg, auch ein `Degraded`-Payload. Produktion verwendet nun + Docker-DNS; Deployment und Rollback akzeptieren nur den obersten Status + `Healthy`. + +## Verifizierte Evidenz + +| Ebene | Ergebnis | +|---|---| +| Lokales Backend | 368 Tests: 363 bestanden, 5 explizit Docker-gesteuert übersprungen | +| Lokales Frontend | Typecheck grün; 12 Vitest-Dateien und 30 Tests grün; Produktions-Build mit 1.988 Modulen grün | +| Lokales Playwright | 25/25 Tests grün, einschließlich Login-Regression, Deep Links, Owner-/Non-Owner-Grenzen, Query-Deduplizierung, SSE-Resync, Task-Board-Drag-and-drop, Done-Pagination und fünf Viewportbreiten | +| Gitea Run 362 | Backend 40 s, Frontend 2:47 min, Security 3 s, Deployment 34 s; alle Jobs erfolgreich | +| CI-Backend | 363 bestanden, 5 Docker-/Toxiproxy-Fälle mangels explizitem CI-Opt-in übersprungen; Build ohne Warnung oder Fehler | +| CI-Browser | 25/25 bestanden in 1,3 min | +| Provenienz | API- und Web-Image melden v0.2.59 und exakt `144edf58fe5928a3e04816f4435ea574d64211a1` | +| Produktion Health | Drei aufeinanderfolgende Abrufe: Gesamt `Healthy`, PostgreSQL `Healthy`, Runtime `Online`, Detail `HTTP 200` | +| Produktion Routing | `/`, `/login` und 15 geprüfte authentifizierte SPA-Pfade liefern HTTP 200; warme Antworten lagen im Einzelprobe-Fenster bei 49–67 ms | +| Auth-Grenzen | Unauthentifizierte Operations-, OpenClaw-Overview- und Chat-Aufrufe liefern 401 mit `application/problem+json` | +| Login live | Ungültige Dummy-Anmeldung liefert verständlichen Fehler, vier verbleibende Versuche, keinen falschen Countdown und einen weiterhin aktiven Login-Button | +| Kleine Breite live | Login bei 693 px: `scrollWidth == clientWidth`, kein horizontaler Seiten-Overflow | + +Die 5 Docker-/Toxiproxy-Integrationsfälle sind sowohl lokal als auch in Run 362 +sichtbar übersprungen. Sie werden nicht als bestanden gezählt. Die CI-Variable +für den separaten Docker-Integrationstestjob war nicht aktiviert. + +## Seiten- und Funktionsmatrix + +`Live` bedeutet auf Produktion direkt belegt. `E2E` bedeutet mit kontrollierten, +typisierten Repository-Fixtures im Browser belegt. Ein grüner E2E-Fall ist kein +Ersatz für einen echten OpenClaw-Schreibtest. + +| Seite/Familie | Was belegt ist | Was noch nicht live belegt oder fehlt | +|---|---|---| +| `/login` | Live: Auslieferung, Semantik, ungültiger Login, Versuche, kein falscher Lock, Security-Header, kein Overflow | Gültige Owner-Anmeldung, Session-Refresh, Logout und Recovery live; 2FA/Passkeys fehlen | +| `/dashboard` | E2E: Orchestrierungsansicht, Task-Deep-Link, ein deduplizierter Overview-Request, owner-only Iris | Credentialed Live-Daten, echter Iris-Chat, Queue/Usage/Recovery gegen OpenClaw | +| `/agents` und `/agents/:id` | E2E/Contracts: Live-Query-Modell, Detail, Standarddateien, Workspace-Provenienz | Echte Gateway-Inventur, Datei-Read-back und Lifecycle-Aktionen live | +| `/agents/new` und Proposal-Detail | E2E: manueller/Iris-Proposal-Flow, Owner-Freigabe, Non-Owner-Denial, Zustandsmaschine | Produktive Provisionierung bleibt am External-Client-ID-Gate blockiert; kein Live-Testagent erzeugt | +| `/projects` und `/projects/:id` | E2E: Project-Deep-Link sowie verknüpfte Tasks, Agenten und Runs | Live-Delegation, Budgets, KPIs, Automationen und Artifact-Flow | +| `/tasks` und `/tasks/:id` | E2E: ein Initialquery, sichtbare Daten beim Refresh, SSE-Lücke mit genau einem Resync, DnD-Persistenz, Done-Cursor, fünf Breiten | Kein produktiver Owner-Datensatz und kein 1.000/10.000-Lastnachweis; Bulk/Dependencies/Run-Recovery unvollständig | +| `/runs` und `/runs/:id` | E2E/Backend: persist-before-dispatch, Detail, exakter Stop, korrelierter Retry, Transitionen und Links | Echter OpenClaw-/OpenAI-Run, Tools, Usage, Artifacts, Hierarchie und sichere Resume-Strategie | +| `/calendar` | Backend/E2E: typisierte Cron-Verträge und geroutete Oberfläche | Kein Live-CRUD an benanntem Wegwerfjob; Templates, Missed-run-/Retry-Policy und Delivery-Härtung offen | +| `/memory`, `/docs`, `/incidents` | E2E/Contracts: confined Read-Pfade, Quellagent-/Pfadprovenienz und Detaildarstellung | Credentialed Live-Inhalt; sichere Write-/Ingestion-/Versionierungs- und Incident-Aktionsflows fehlen | +| `/models` | E2E/Contracts: bereinigter `models.authStatus` und ehrliche Unknown-Zustände | OpenAI-Primärprovider, Allowlist/Fallback/Budget und echter Modelltest über OpenClaw nicht belegt | +| `/activity` und `/notifications` | E2E: Ergebnisnavigation direkt zum betroffenen Task und globale Entity-Refs | Operative Ack/Snooze-/Approval-/Incident-Aktionen, Export und Retention unvollständig | +| `/security` | E2E/Contracts: Identity-, Scope-, Capability- und Trust-Grenzen als Oberfläche | Reales Pairing, Scope-Upgrade, Remediation, Rotation und Session-Audit live | +| `/settings` | E2E/Backend: Attach-&-Adopt-Zustandsmodell, Setup-/Config-/Wizard-Verträge | Credentialed First-run gegen Bao, offizielle externe Client-ID und produktives Management-Gate | + +Der Router enthält aktuell 21 benannte Seiten: Login und 20 authentifizierte +Views einschließlich Agent-Proposal-, Project-, Task- und Run-Details. Die +CI-Suite öffnet alle 20 authentifizierten Core-Deep-Links und prüft die +Seitenhülle zusätzlich bei 375, 768, 1024, 1440 und 1920 px. + +## Was jetzt funktioniert + +- reproduzierbares Gitea-CI/CD mit Commit-/Versions-Provenienz; +- TLS-Auslieferung, SPA-Routing, Security-Header und Auth-by-default-Grenzen; +- PostgreSQL und OpenClaw-HTTP-Erreichbarkeit über die reale + Produktions-Docker-Topologie; +- ein gemeinsamer OpenAPI-Vertrag, Query-Cache, Domain-Event-/SSE-Modell und + strukturierte Ergebnisnavigation; +- kontrollierte Browserflows für Agent-Proposals, Projekte, Tasks, Runs, + Result-Deep-Links, Rollenbegrenzung und Task-Board-Live-Deltas; +- ein Deployment-Gate, das eine degradierte Runtime nicht mehr als erfolgreichen + Release akzeptiert. + +## Was nicht funktioniert oder nicht bewiesen ist + +- Der produktive Protocol-v4-Gateway-Connector darf noch nicht verbinden oder + schreiben, weil OpenClaw 2026.7.1 keine offiziell unterstützte externe + Nexus-Identität besitzt. Dies ist eine bewusste Sicherheitsgrenze. +- Ohne eine vom Owner hergestellte Browser-Sitzung wurden die authentifizierten + Produktionsseiten nicht mit realen Daten bedient. +- Kein realer Agent wurde aus Nexus oder durch Iris provisioniert; kein + Agent-Markdown, Configwert oder Cronjob wurde produktiv verändert. +- Der Pfad `Nexus -> OpenClaw -> OpenAI -> Nexus` ist noch nicht als + wiederholbarer, auditierter Produktionslauf bewiesen. +- Die fünf PostgreSQL-/Toxiproxy-Integrationsfälle und die geplanten k6-, + SQL-Plan- und Promptfoo-Gates liefen in diesem Release nicht. +- Die CI-Browserlogs enthalten erwartbare Vite-Proxy-Fehler für + `/api/v1/telemetry/browser`, weil der Fixture-Webserver keinen echten API-Port + 8080 startet. Die Tests sind grün; das Rauschen sollte separat entfernt + werden, damit echte Browserfehler wieder auffallen. + +## Priorisierter nächster Plan + +### P0 — echter agent-first Primärpfad + +1. Eine offiziell unterstützte externe `nexus`- oder generische + Operator-Client-ID upstream erhalten, die erste unterstützende stabile + OpenClaw-Version pinnen und den Compatibility-Contract ausführen. +2. Mit Bao als Owner read-only pairen; erwartete 9 Agenten und 7 Cronjobs über + RPC inventarisieren und die UI auf Dashboard, Agents, Calendar, Models, + Security und Settings credentialed-live prüfen. +3. Den separaten `operator.admin`-Upgrade mit Endpoint-/Device-/Scope-/ + Capability-Nachweis durchführen. Keine reservierte interne Identity + imitieren. +4. Einen klar benannten Wegwerfagenten über manuellen und Iris-Proposal-Pfad + abnehmen: Approval, genau ein `agents.create`, Datei-Read-back, `partial`/ + `in_doubt`-Negativfall und Audit. Maxis Bereiche bleiben ausgeschlossen. +5. Einen benannten Wegwerf-Cron vollständig Create -> Edit -> Run -> History -> + Disable -> Delete prüfen und danach einen korrelierten + `Nexus -> OpenClaw -> OpenAI -> Nexus`-Run mit Reload-Recovery, Stop/Retry + und Audit beweisen. + +### P1 — Performance und tägliche Bedienparität + +1. Die fünf Docker-/Toxiproxy-Tests in einem isolierten, rücksetzbaren CI-Profil + aktivieren und als eigenen Pflichtnachweis archivieren. +2. Das Task Board mit 1.000 Tasks und 10.000 Activities messen: k6-p95, + SQL-Anzahl, `EXPLAIN (ANALYZE, BUFFERS)`, Payloadgröße und wiederholtes + Navigation-bis-Karten-sichtbar. Erst danach Virtualisierung entscheiden. +3. Run Explorer um Hierarchie, Tools, Approvals, Artifacts, Usage/Kosten und + belastbare Resume-/Replacement-Semantik erweitern. +4. Agent-, Tool-, Model- und Approval-Lifecycle sowie actionable Incidents und + Notifications schließen; Memory/Docs nur mit Provenienz, Versionierung, + Retention und Retrieval-Evals schreibbar machen. +5. Eine echte `/health/ready`-Semantik mit HTTP 503 für degradierte Pflichtteile + ergänzen; `/health/live` bleibt reiner Prozess-Livenesscheck. + +### P2 — Release- und Testhygiene + +1. Browsertelemetrie im Fixture-Profil explizit deaktivieren oder mocken, damit + CI keine erwartbaren `ECONNREFUSED`-Zeilen erzeugt. +2. `.NET 10` per `global.json` pinnen und `VERSION`, Frontend-Paketversion und + Release-/Tag-Strategie vereinheitlichen. +3. Docker-Compose-/Rollback-Topologie als sanitisiertes Betriebsrunbook + dokumentieren und einen Restore-/Game-day-Nachweis ausführen. +4. Vollständige Keyboard-/Accessibility-Gates sowie operative + Browser-Abnahmen mit einem eigenen nicht-produktiven Owner-Testkonto + automatisieren. + +## Freigabegrenze + +v0.2.59 ist der belegte Produktionsstand für Auslieferung, Auth-Grenzen, +Nexus-Domänenlogik und OpenClaw-HTTP-Reachability. Das Produktversprechen +„kein täglicher Wechsel zu OpenClaw nötig“ bleibt offen, bis die P0-Schritte mit +einer offiziell unterstützten Gateway-Identität und echten, klar begrenzten +Liveobjekten abgeschlossen sind.