From a83de8103178a4e16220c3b87545a4195f0a0eee Mon Sep 17 00:00:00 2001 From: AzuTear Date: Sat, 1 Aug 2026 02:24:37 +0200 Subject: [PATCH] docs: record v0.2.60 production acceptance [skip ci] --- README.md | 11 ++- docs/AGENT_FIRST_MISSION_CONTROL.md | 2 +- docs/MISSION_CONTROL_ROADMAP.md | 63 +++++++------- docs/QA_AUTOMATION.md | 10 +++ .../IMPLEMENTATION_AND_ACCEPTANCE.md | 84 ++++++++++++------- 5 files changed, 105 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index ded6c21..bd84439 100644 --- a/README.md +++ b/README.md @@ -39,18 +39,21 @@ 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):** +> **Previous production checkpoint 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. > -> **Stability and recovery v0.2.60 candidate (2026-07-31):** +> **Production release v0.2.60 — stability and recovery (2026-07-31):** > [implementation and acceptance](docs/audits/2026-07-31/stability-v0.2.60/IMPLEMENTATION_AND_ACCEPTANCE.md). > Readiness, browser-origin protection, generated ProblemDetails metadata, > shared UI recovery states, version provenance and mandatory container-backed -> CI are implemented. The audit separates locally proven behavior from the -> Linux/Docker, deployment, credentialed-production and OpenClaw-write gates. +> CI are deployed from commit `f87b9ef298f8a13ed7e044f9850024aa50fbbed0` +> through Gitea run 372. All 386 regular backend tests, all five PostgreSQL/ +> Toxiproxy tests, 42 frontend tests, 26 Playwright tests and the pinned +> full-history Gitleaks scan passed. Credentialed production, Task Board load +> evidence and productive OpenClaw writes remain separate acceptance gates. > 📋 **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 7100b77..d543f64 100644 --- a/docs/AGENT_FIRST_MISSION_CONTROL.md +++ b/docs/AGENT_FIRST_MISSION_CONTROL.md @@ -1,6 +1,6 @@ # Nexus Agent-First Mission Control -**Status:** Zielvertrag mit produktivem v0.2.59-Control-Plane-Stand und implementiertem v0.2.60-StabilitĂ€tskandidaten; Linux-/Docker-Releasegate, Gateway-Writes, credentialed Live-Abnahme und Lastnachweis offen +**Status:** Zielvertrag mit produktiv deploytem v0.2.60-StabilitĂ€tsfundament; Gateway-Writes, credentialed Live-Abnahme und Lastnachweis offen **Stand:** 2026-07-31 **Geltungsbereich:** Produkt, Frontend, Backend, Runtime-Adapter und Agenten-Schnittstellen diff --git a/docs/MISSION_CONTROL_ROADMAP.md b/docs/MISSION_CONTROL_ROADMAP.md index 10f1e53..ce49145 100644 --- a/docs/MISSION_CONTROL_ROADMAP.md +++ b/docs/MISSION_CONTROL_ROADMAP.md @@ -129,7 +129,7 @@ Produktionscheckpoint v0.2.59 vom 2026-07-31: 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). -StabilitĂ€tscheckpoint v0.2.60 (Release Candidate) vom 2026-07-31: +Produktionscheckpoint v0.2.60 vom 2026-07-31: - `/health/live`, `/health/ready` und `/health` trennen Prozesszustand, PostgreSQL-Readiness und vollstĂ€ndige OpenClaw-Diagnose. Deploy und Rollback @@ -145,11 +145,16 @@ StabilitĂ€tscheckpoint v0.2.60 (Release Candidate) vom 2026-07-31: - `global.json`, `VERSION`-ParitĂ€t, OCI-Provenienz, Browsertelemetrie-Schalter, High/Critical-AbhĂ€ngigkeitsgates, checksum-verifiziertes Gitleaks und ein verpflichtender PostgreSQL-/Toxiproxy-CI-Job bilden den neuen Releasevertrag. -- Lokal bestehen 384 nicht-containerisierte Backendtests, 42 Frontendtests, - Typecheck, Produktionsbuild und 26 kontrollierte Playwright-Tests. Die fĂŒnf - ContainerfĂ€lle sind lokal mangels Docker ĂŒbersprungen und mĂŒssen im Linux-CI - mit null Skips bestehen. Credentialed Produktion, Task-Board-Last und echte - OpenClaw-Schreibpfade bleiben eigene Gates. +- Gitea Run 372 hat Commit + `f87b9ef298f8a13ed7e044f9850024aa50fbbed0` nach 386 regulĂ€ren Backendtests, + fĂŒnf bestandenen PostgreSQL-/Toxiproxy-Tests ohne Skip, 42 Frontendtests, + Typecheck, Produktionsbuild, 26 Playwright-Tests sowie Dependency- und + Gitleaks-Gates deployt. Der OpenAPI-Build hinterließ keinen persistierten + Data-Protection-Key. +- Die Container und öffentlichen Health-Gates sind gesund; Login, + Security-Header, strukturierte 401/403-Antworten und die Cross-Site-Sperre + fĂŒr Refresh/Logout sind live geprĂŒft. Credentialed Produktion, + Task-Board-Last und echte OpenClaw-Schreibpfade bleiben eigene Gates. Die genaue Implementierungs- und Evidenzgrenze steht in [Stability v0.2.60](audits/2026-07-31/stability-v0.2.60/IMPLEMENTATION_AND_ACCEPTANCE.md). @@ -475,11 +480,12 @@ regressionsfest. - Last-, Reconnect-, Timeout-, Queue-, Recovery- und Chaos-Szenarien prĂŒfen. - Runbooks, Backup/Restore und Rollback regelmĂ€ĂŸig als Game Day testen. -**Checkpoint 2026-07-31:** Das v0.2.60-StabilitĂ€tsfundament implementiert +**Checkpoint 2026-07-31:** Das produktive v0.2.60-StabilitĂ€tsfundament enthĂ€lt separate Readiness, einen generierten Fehlervertrag, gemeinsame UI-Recovery, ein SDK-/Versionsgate, Supply-Chain-Scans und verpflichtende ContainervertrĂ€ge. Der kontrollierte Browserlauf deckt alle 20 authentifizierten Views und fĂŒnf -Breiten ab. Offen bleiben der grĂŒne Linux-/Docker-Run, credentialed +Breiten ab. Gitea Run 372 hat die Linux-/Docker-, Security-, Frontend- und +Deployment-Gates vollstĂ€ndig bestanden. Offen bleiben die credentialed ProduktionsprĂŒfung, der 1.000/10.000-Task-Board-Lastnachweis sowie reale OpenClaw-/OpenAI-End-to-End-Evidenz. @@ -584,29 +590,28 @@ nicht die M1-/M2-Vertrauensgrenze umgehen. ## 9. NĂ€chster empfohlener Implementierungsslice -**Slice: „Official external identity and controlled live acceptance“** +**Slice: „Credentialed read-only production acceptance“** -1. Upstream eine offiziell unterstĂŒtzte externe `nexus`- oder generische - Operator-Client-ID verwenden und Nexus auf die erste unterstĂŒtzende - OpenClaw-Version pinnen; keine reservierte interne IdentitĂ€t imitieren. -2. Auf Baos ausdrĂŒcklich freigegebener OpenClaw-Instanz read-only verbinden, - die konkrete Pairing-Request-ID freigeben lassen und Agent-/Cron-Inventar - gegen den erwarteten Bestand abgleichen, ohne Runtime-Daten zu kopieren. -3. Den bewussten Admin-Scope-Upgrade separat pairen und Endpoint-, Device-, - TLS-, Scope- und Capability-Bindung im Security Center belegen. -4. Ausschließlich an eindeutig benannten Testobjekten je einen - Hashkonflikt-/Read-back-Test fĂŒr Agent-Datei und Config sowie Create/Edit/ - Run/History/Delete fĂŒr Cron durchfĂŒhren. Andere Ressourcen bleiben - unangetastet. -5. OpenAI ausschließlich in OpenClaw als PrimĂ€rprovider fĂŒr Iris konfigurieren - und einen echten, dauerhaft korrelierten - `Nexus -> OpenClaw -> OpenAI -> Nexus`-Run ausfĂŒhren. -6. Provider-/Modellreferenz, Events, Stop/Retry, Reload-Recovery, Audit und - NegativfĂ€lle ohne Prompt-, Delivery- oder Secret-Leak belegen. +1. Bao stellt im In-App-Browser eine Owner-Sitzung bereit; Zugangsdaten werden + weder ausgelesen noch dokumentiert. +2. Alle 20 authentifizierten Produktionsviews werden ohne Mutation auf + Navigation, Deep Links, Requests, Konsole, reale Daten, SSE-Freshness, + TastaturfĂŒhrung und Overflow geprĂŒft. +3. Reload, Token-Refresh, Logout und erneute Anmeldung werden einschließlich + RĂŒckkehrziel und genau einer Redirectentscheidung belegt. Der noch offene + Refresh-Nachweis ĂŒber einen kontrollierten API-Containerneustart wird in + diesem Slice abgeschlossen. +4. Jeder Fund erhĂ€lt Route, API, Reproduktion, Trace-ID, Schweregrad und einen + Regressionstest. P0/P1 blockieren den nĂ€chsten Release-Slice. +5. Dashboard und Iris bleiben dabei read-only; es findet kein produktiver + OpenClaw-Schreibtest statt. -Dieser Slice löst den externen IdentitĂ€tsblocker und liefert den ersten -vollstĂ€ndigen Beweis, dass Attach & Adopt sowie ein normaler agent-first -Arbeitsablauf ohne Wechsel in die OpenClaw-OberflĂ€che sicher funktionieren. +Direkt danach folgt der isolierte Task-Board-Performance-Slice mit 1.000 Tasks, +10.000 Activities, k6, SQL-ZĂ€hler, Queryplan und Browsermessung. Das externe +OpenClaw-Identity-Gate lĂ€uft parallel weiter: Erst eine offiziell unterstĂŒtzte +`nexus`- oder generische Operator-Client-ID erlaubt Pairing, Scope-Upgrade und +die separat freizugebenden Live-Schreibtests. Reservierte interne IdentitĂ€ten +werden nicht imitiert. ## 10. Definition of Done fĂŒr „kein OpenClaw-Wechsel mehr“ diff --git a/docs/QA_AUTOMATION.md b/docs/QA_AUTOMATION.md index 51753cc..b61f33f 100644 --- a/docs/QA_AUTOMATION.md +++ b/docs/QA_AUTOMATION.md @@ -35,6 +35,16 @@ The repository SDK contract is `global.json`: .NET `10.0.100` with `latestFeature` roll-forward. `VERSION` is the release source of truth; frontend package version and OCI image labels are checked against it. +Accepted release evidence from 2026-07-31 is Gitea run 372 at commit +`f87b9ef298f8a13ed7e044f9850024aa50fbbed0`: 386 regular backend tests, all +five PostgreSQL/Toxiproxy tests with zero skips, 42 frontend unit tests, 26 +Playwright tests, the dependency gates and the pinned full-history Gitleaks +scan passed before deployment. OpenAPI extraction also proved that neither +.NET build added a persistent Data Protection key. This is release evidence +for the fixture and container contracts; it is not a substitute for the still +pending credentialed production audit, Task Board load run, or live OpenClaw +write acceptance. + ## Browser route and recovery gate The fixture Playwright profile sets `VITE_BROWSER_TELEMETRY_ENABLED=false`, so diff --git a/docs/audits/2026-07-31/stability-v0.2.60/IMPLEMENTATION_AND_ACCEPTANCE.md b/docs/audits/2026-07-31/stability-v0.2.60/IMPLEMENTATION_AND_ACCEPTANCE.md index ed2ea6b..6a1e704 100644 --- a/docs/audits/2026-07-31/stability-v0.2.60/IMPLEMENTATION_AND_ACCEPTANCE.md +++ b/docs/audits/2026-07-31/stability-v0.2.60/IMPLEMENTATION_AND_ACCEPTANCE.md @@ -2,8 +2,8 @@ **Stand:** 2026-07-31 -**Status:** Release Candidate; lokale VertrĂ€ge grĂŒn, Linux-/Docker-CI und -Produktionsdeployment noch auszufĂŒhren +**Status:** In Produktion deployt; technische Releasegates grĂŒn, credentialed +Owner-Abnahme, Lastnachweis und produktive OpenClaw-Writes separat offen **Scope:** Nexus-Repository und kontrollierte Browser-Fixtures. Keine produktive OpenClaw-Mutation; Maxis Ressourcen lagen vollstĂ€ndig außerhalb des @@ -11,16 +11,17 @@ PrĂŒfbereichs. ## Ergebnis -Der erste StabilitĂ€ts- und Fehlerabbau-Slice ist implementiert. Nexus trennt -jetzt Prozess-Liveness, Datenbank-Readiness und vollstĂ€ndige Runtime-Diagnose, +Der erste StabilitĂ€ts- und Fehlerabbau-Slice ist implementiert und deployt. +Nexus trennt jetzt Prozess-Liveness, Datenbank-Readiness und vollstĂ€ndige +Runtime-Diagnose, liefert einen generierten gemeinsamen Fehlervertrag und zeigt auf allen 20 authentifizierten Views einheitliche Loading-, Empty-, Error-, Offline-, Stale- und Partial-ZustĂ€nde. Releaseversion, Containerprovenienz, Dependency- und Secret-Scans sowie die echten PostgreSQL-/Toxiproxy-VertrĂ€ge sind Teil der CI-Freigabe. -Das ist noch keine vollstĂ€ndige Produktions- oder OpenClaw-Abnahme. Der -credentialed Owner-Audit, Task-Board-Lastnachweis und jeder produktive +Das ist noch keine vollstĂ€ndige authentifizierte Produktions- oder +OpenClaw-Abnahme. Der Owner-Audit, Task-Board-Lastnachweis und jeder produktive OpenClaw-Schreibvorgang bleiben getrennte Gates. ## Implementierter Vertrag @@ -124,7 +125,7 @@ PrimĂ€ransicht nicht lĂ€nger wegen einer fehlerhaften SekundĂ€rabfrage. | GeschĂŒtzte Routen | alle 20 in kontrollierten Fixtures geprĂŒft | | Viewports | 375, 768, 1024, 1440 und 1920 px ohne Seitenoverflow | | BrowservertrĂ€ge | Deep Links, Query-Deduplizierung, ein SSE-Resync, Task-Board-Refresh, Done-Pagination, Drag-and-drop und 503-Recovery grĂŒn | -| Backend | 384 bestanden; fĂŒnf ContainerfĂ€lle mangels lokalem Docker explizit ĂŒbersprungen | +| Backend | 386 bestanden; fĂŒnf ContainerfĂ€lle mangels lokalem Docker explizit ĂŒbersprungen | | PostgreSQL-Ausfall | echter Npgsql-Healthcheck gegen einen nicht erreichbaren Endpoint liefert im Readiness-Vertrag 503 | | Version | `VERSION` und Frontendpaket beide `0.2.60`; .NET-Pin wird als 10.0.101 aus dem erlaubten Feature-Band aufgelöst | | AbhĂ€ngigkeiten | keine bekannten pnpm-ProduktionslĂŒcken; keine High/Critical-NuGet-Funde | @@ -135,30 +136,50 @@ Playwright arbeitet mit kontrollierten API-Fixtures. Diese Ergebnisse beweisen die UI- und TransportvertrĂ€ge, nicht die echte ProduktionsdatenqualitĂ€t oder OpenClaw-/OpenAI-AusfĂŒhrung. +## CI- und Produktionsevidenz + +Die verpflichtenden Gates haben vor der Freigabe mehrere reale Fehler gefunden: + +- Run 363 blockierte einen fehlerhaft geordneten EF-Core-Modellsnapshot fĂŒr + `AgentProposal.ProvisionRequests`. +- Anschließende LĂ€ufe zeigten, dass drei historische Taskmigrationen ohne + EF-Metadaten nicht entdeckt wurden. Alle 13 Migrationen sind jetzt + registriert; der Snapshot weist keinen ausstehenden Modellunterschied auf. +- Der Toxiproxy-Reconcile-Fall deckte zuerst einen leeren serialisierten + `agents.create`-Payload und danach fehlendes Read-back-Inventar im Testadapter + auf. Beide Grenzen besitzen Regressionstests. +- Der OpenAPI-Build erzeugte anfangs einen flĂŒchtigen Data-Protection-Key. Die + Extraktion arbeitet jetzt ohne persistente SchlĂŒssel; CI prĂŒft den + Key-Repository-DateizĂ€hler vor und nach beiden .NET-Builds. + +Der finale Gitea Run 372 deployte Commit +`f87b9ef298f8a13ed7e044f9850024aa50fbbed0` mit folgender Evidenz: + +| Gate | Produktionsergebnis | +|---|---| +| Backend, Job 818 | 386 Tests bestanden | +| PostgreSQL/Toxiproxy, Job 819 | 5/5 bestanden, null ĂŒbersprungen | +| Frontend, Job 820 | 13 Dateien/42 Tests, Build und 26/26 Playwright bestanden | +| Security, Job 821 | gepinntes Gitleaks 8.30.1 ohne Leak; Dependency-Gates grĂŒn | +| Deployment, Job 822 | alle Container gesund; lokale und öffentliche Readiness sowie vollstĂ€ndige Diagnose grĂŒn | + +Der öffentliche Smoke-Test bestĂ€tigte anschließend: + +- `/health/live` und `/health/ready`: HTTP 200 `Healthy`; +- `/health`: HTTP 200 mit PostgreSQL `Healthy` und OpenClaw-HTTP-Runtime + `Online`; +- `/login`: HTTP 200, CSP, HSTS, `DENY`, `no-referrer` und eingeschrĂ€nkte + Browserberechtigungen; +- geschĂŒtzte OpenClaw-API: HTTP 401 als `application/problem+json` mit + `unauthenticated` und Trace-ID; +- Cross-Site-Refresh und -Logout: HTTP 403 als strukturierter `forbidden`- + Fehler. + +Im In-App-Browser blieb die Loginseite ohne Console-Fehler bedienbar. Es wurden +keine Zugangsdaten eingegeben oder ausgelesen. + ## Offene Abnahmegates -Der erste verpflichtende Containerlauf (Gitea Run 363) erfĂŒllte seinen Zweck -und blockierte das Deployment: Alle fĂŒnf FĂ€lle fanden einen fehlerhaft -geordneten EF-Core-Modellsnapshot fĂŒr -`AgentProposal.ProvisionRequests`. Die Snapshotbeziehung ist korrigiert und ein -nicht-Docker-Regressionstest baut beide Navigationen jetzt bereits im normalen -Backendjob auf. Ein neuer grĂŒner Containerlauf bleibt vor Deployment zwingend. - -### Vor Deployment - -1. Der neue Gitea-Linuxjob muss alle fĂŒnf vorhandenen PostgreSQL-/Toxiproxy- - ContainerfĂ€lle bestehen, null ĂŒberspringen und Docker als erreichbar melden. -2. Der Gitleaks-Vollhistorienjob, OpenAPI-Diff, Dependency-Gates und die ĂŒbrigen - Backend-/Frontendjobs mĂŒssen grĂŒn sein. -3. Das versionierte Image muss mit SHA-Provenienz gebaut und durch dieselben - Readiness-/Diagnosegates deployt werden. - -### Nach Deployment, ohne Owner-Sitzung - -- `/health/live`, `/health/ready`, `/health`, `/login`, Security-Header und ein - unauthentifizierter geschĂŒtzter API-Aufruf werden öffentlich geprĂŒft. -- Die Produktion muss `v0.2.60` und den ausgelieferten Git-SHA melden. - ### Mit separater Owner-Sitzung - Alle 20 authentifizierten Produktionsviews werden read-only auf Navigation, @@ -183,10 +204,11 @@ Backendjob auf. Ein neuer grĂŒner Containerlauf bleibt vor Deployment zwingend. ## NĂ€chste Reihenfolge -1. Linux-/Docker-CI und Deployment-Smoke fĂŒr v0.2.60 abschließen. -2. Bao meldet sich im In-App-Browser als Owner an; danach 20 Seiten read-only +1. Bao meldet sich im In-App-Browser als Owner an; danach 20 Seiten read-only auditieren und jeden Fund mit Route, API, Trace-ID und Regressionstest erfassen. +2. Den Refresh-Vertrag ĂŒber einen kontrollierten API-Containerneustart mit + echter Owner-Sitzung belegen. 3. Task-Board-Datensatz und Last-/SQL-/Browserbudgets isoliert beweisen; nur gemessene EngpĂ€sse optimieren. 4. OpenClaw-Client-ID auf dem ersten kompatiblen Stable-Tag erneut prĂŒfen und