Files
nexus/phases/changelog.md
T
devops b89289989a
CI - Build & Test / Backend (.NET) (push) Successful in 32s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 17s
CI - Build & Test / Security Check (push) Successful in 3s
docs: document owner password persistence fix in deployment.md and changelog
2026-06-21 10:28:53 +02:00

14 KiB
Raw Blame History

Changelog

Letzte Aktualisierung: 2026-06-21

  • 2026-06-21: Permanenter Owner-Passwort-Persistenz-Fix (SeedAudit + Single Source of Truth).

    • Root Cause: Dual-Source-Architektur (Gitea-Secret vs Host-.env) verursachte Passwort-Drift nach DB-Reseed.
    • Code-Fix: SeedAudit-Entity + Migration (20260621081500_AddSeedAudit) eingebaut. EnsureDatabaseAsync prueft jetzt SeedAudit VOR dem Seeden. Key owner_created blockiert erneutes Seeden permanent.
    • Workflow-Fix: Deploy- und Rollback-Workflows lesen OWNER_PASSWORD aus dem Host-.env (Single Source of Truth), nicht mehr aus Gitea-Secret.
    • compose.yaml: Kommentar hinzugefuegt dass OWNER_PASSWORD nur beim initialen Seed verwendet wird.
    • Verifikation: Login funktioniert nach docker compose down && up, --force-recreate, und restart.
    • Git: Commit f95463e, manuell ausgerollt.
    • Betroffene Dateien: ApplicationBuilderExtensions.cs, Identity.cs, NexusDbContext.cs, 20260621081500_AddSeedAudit.cs, NexusDbContextModelSnapshot.cs, deploy.yaml, rollback.yaml, compose.yaml, nexus.md, phases/deployment.md.
  • 2026-06-20: Agent-Progress-Visibility live ausgerollt; normaler Gitea-Deploy-Trigger weiter defekt.

    • Feature-Stand auf main: adae7ba (feat: ship agent progress visibility); nach CI-Blocker-Fix 2d21885 (Fix activity repository test double) war CI fuer Backend, Frontend und Security gruen.
    • Da POST /actions/workflows/deploy.yaml/dispatches serverseitig HTTP 500 lieferte und fuer 2d21885 kein erfolgreicher Deploy-Run belegbar war, wurde der produktive Rollout manuell aus einem sauberen Snapshot von Commit 2d21885 durchgefuehrt statt aus dem schmutzigen lokalen Worktree.
    • Deploy-Pfad: Snapshot-Sync nach /home/projekte_bao/openclaw/data/openclaw/workspace/nexus und danach docker compose --env-file .env up -d --build --force-recreate --wait.
    • Verifikation: Host-Deploy-Pfad auf Git-HEAD 2d218853a5d198fa8521dadbb4c6ea9be19e191c; nexus-postgres-1, nexus-api-1, nexus-web-1 healthy; https://nexus.noveria.net/health/live = 200; /dashboard = 200; /api/v1/operations/snapshot = 401 ohne Auth; GET /api/dashboard/tasks/caab972a-c46c-4af5-b2c4-9d31be824da3 liefert live lastActivityMessage und lastActivityAt.
    • Offener Betriebsblocker: Gitea-Deploy-Trigger / workflow_dispatch fuer deploy.yaml liefert weiter HTTP 500 und muss separat repariert werden.
  • 2026-06-20: Live-Nexus nach Deploy-Stoerung verifiziert, Bao-Folgetasks angelegt und Agent-Workflow live gegengeprueft.

    • https://nexus.noveria.net/ lieferte wieder 200 OK mit SPA-Titel Nexus | Noveria Operations.
    • /health/live lieferte 200 Healthy.
    • GET /api/dashboard/tasks/board, GET /api/dashboard/tasks/agent-overview und GET /api/dashboard/agents lieferten mit X-Nexus-Api-Key wieder 200 OK.
    • Neuer Task angelegt: Restore agent progress visibility in Nexus (assignedTo=bao, priority=High, State Backlog).
    • Neuer Task angelegt: Review: Agenten-Progress mit letztem Status + Timestamp sichtbar machen (assignedTo=bao, State Backlog).
    • Live-Artefakt-Pruefung bestaetigt Frontend-Strings fuer nur Iris und Bao, researcher, executor, Worauf warte ich?, expectedFrom und isAgentTask.
    • Reversible Live-Verifikation erfolgreich: temp. Agent-Task mit expectedFrom=researcher erschien korrekt in waitingForOthers, erzeugte Activity und wurde direkt wieder geloescht (DELETE ... -> 204).
    • Reversible Notification-Verifikation erfolgreich: simulierte Bao-Aenderung (X-Agent-Id: bao) erzeugte live task_content_changed und task_status_changed fuer Iris; simulierte Iris-Statusaenderung erzeugte live task_review fuer Bao.
    • Live-Regel fuer Delete bestaetigt: Tasks lassen sich nur in Backlog oder Done loeschen; ein temp. Review-Task lieferte erwartungsgemaess 403 bis zum Ruecksetzen auf Backlog.
    • Geaenderte Dateien: nexus.md, phases/changelog.md.
  • 2026-06-20: Researcher und Executor in den Agent-Task-Workflow aufgenommen.

    • ValidAssignees in TaskService.cs um "researcher" und "executor" erweitert.
    • Frontend expectedFromLabel-Mapping, Create-Task- und Detail-Dropdowns um Researcher (🔬) und Executor () ergänzt.
    • Researcher/Executor bleiben als Sub-Agenten vom Status-Change ausgeschlossen (nur Bao/Iris dürfen).
    • Geänderte Dateien: backend/Services/TaskService.cs, frontend/src/views/TaskBoardView.vue, phases/changelog.md.
  • 2026-06-20: Bao-Status-Change + Content-Change-Benachrichtigung aktiviert.

    • Neue Autorisierungsregel (TaskStateHelper.CanChangeState):
      • Iris + Bao dürfen jetzt Status ändern / verschieben.
      • Sub-Agents (programmer, reviewer, architekt) dürfen weiterhin NIEMALS Status ändern.
      • nexus-system bleibt als technischer Fallback erlaubt.
    • Neue Methode CanEditContent: Bestätigt, dass alle bekannten Caller (bao, iris, sub-agents, nexus-system) Inhalt bearbeiten dürfen.
    • Benachrichtigungen bei Bao-Änderungen:
      • Wenn Bao eine Task inhaltlich ändert (Titel, Detail, Priorität, AssignedTo, DueDate), erhält Iris eine task_content_changed-Notification mit Detailangabe, WAS geändert wurde.
      • Wenn Bao den Status ändert, erhält Iris eine task_status_changed-Notification.
      • Wenn Iris den Status ändert, erhält Bao eine task_status_changed-Notification.
    • Verbesserte Activity-Einträge: Zeigen jetzt detailliert, was sich geändert hat (statt nur "Task updated").
    • Geänderte Fehlermeldungen: DashboardController und TasksController zeigen jetzt "nur Iris und Bao" statt "nur Iris".
    • Frontend: canChangeState-Computed prüft jetzt authStore.isIris || authStore.isBao. Permission-Banner, State-Dropdown-Readonly-Tag und Tooltips aktualisiert. Neuer isBao-Getter im Auth-Store.
    • Tests: CanChangeState_Bao_CannotChangeAnyTaskCanChangeState_Bao_CanChangeAnyTask. Neue Tests für CanEditContent.
    • Geänderte Dateien: Backend Entities.cs, TaskService.cs, DashboardController.cs, TasksController.cs; Frontend TaskBoardView.vue, auth.ts; Tests TaskBoardTests.cs; Docs changelog.md.
  • 2026-06-20: Agent-Task-Workflow implementiert.

    • Neue Felder in WorkTask-Entity: IsAgentTask (bool, Index) und ExpectedFrom (string? MaxLength 60, Index). Agent-Tasks sind als solche im Board erkennbar (🤖 Badge) und unterliegen einem strikt von Iris geführten Statusfluss.
    • Status-Change-Autorisierung: TaskStateHelper.CanChangeState() prüft jetzt strikt:
      • Nur iris darf Status ändern oder Karten verschieben.
      • Sub-Agents (programmer, reviewer, architekt) dürfen niemals Status ändern.
      • bao darf Tasks inhaltlich bearbeiten, aber keinen Status ändern.
      • Der technische Fallback nexus-system darf Status nur für interne Systempfade wie automatische Reset-/Cron-Operationen ändern. Caller wird via X-Agent-Id-Header oder JWT-Claim aufgelöst; HTTP-Fallback ist nicht mehr bao, sondern leer und wird für Statusänderungen abgewiesen.
    • Neue API-Endpunkte:
      • POST /api/dashboard/tasks/agent Agent-Task anlegen (mit expectedFrom).
      • GET /api/dashboard/tasks/agent-waiting Offene Agent-Tasks nach Erwartung.
      • GET /api/dashboard/tasks/agent-overview?staleHours=2 Komplette Iris-Übersicht: waitingForBao, waitingForIris, waitingForOthers, staleTasks.
    • Neue Service-Methoden: CreateAgentTaskAsync, GetWaitingTasksAsync, GetAgentWorkflowOverviewAsync.
    • DashboardController-Sicherheit: UpdateTaskStatus und MoveTask prüfen jetzt via ResolveCallerAgent() + TaskStateHelper.CanChangeState(). Bei Verstoß: 403 mit klarer Iris-only-Fehlermeldung.
    • Frontend:
      • TaskBoardView: Agent-Task-Badge (🤖), ExpectedFrom-Label (), Stale-Banner, kollabierbares Iris-Overview-Panel („Iris Worauf warte ich?“) mit 4 Sektionen: Warte auf Iris / Bao / Andere / Stale Tasks.
      • Für Nicht-Iris: Permission-Banner, kein wirksames Drag&Drop, Status-Dropdown deaktiviert.
      • tasks.ts-Store: fetchAgentOverview(), createAgentTask(), Getter für Iris-Ansicht.
      • Detail-Panel: zeigt Agent-Task-Status und ExpectedFrom im Snapshot.
    • Tests: TaskStateHelper-Coverage erweitert um CanChangeState.
    • Dokumentation: Changelog aktualisiert.
    • Geänderte Dateien: siehe Backend Entities.cs, TaskService.cs, ITaskService.cs, DashboardController.cs, Dashboard.cs (Models), NexusDbContext.cs; Frontend tasks.ts, TaskBoardView.vue.
  • 2026-06-20: Nexus-Auth-Persistenz live verifiziert.

  • 2026-06-20: Nexus-Auth-Persistenz live verifiziert. Owner-Passwort in der produktiven Postgres-DB geprüft, Stack vollständig neu gestartet und anschließend postgres, api und web per docker:cli compose up -d --force-recreate neu erstellt, ohne das DB-Volume zu löschen. Ergebnis: /health/live blieb healthy, der Passwort-Hash für vmbao62@hotmail.de blieb vor und nach Restart/Recreate identisch. Wichtiges Learning: temporäre Passwörter oder Auth-Fixes niemals an Bao weitergeben, bevor der echte Live-Login oder mindestens der persistierte DB-Hash auf dem Zielstack verifiziert ist.

  • 2026-06-20: Task Board um klickbare Linear-inspirierte Detailansicht erweitert: Board-Karten öffnen jetzt ein strukturiertes Side/Overlay-Detailpanel mit editierbarem Titel, Beschreibung, Status, Priorität, Zuständigkeit und Fälligkeitsdatum sowie geladener Aktivität und Unteraufgaben. frontend/src/views/TaskBoardView.vue und frontend/src/stores/tasks.ts angepasst. Verifiziert mit COREPACK_HOME=$PWD/.corepack-home PNPM_HOME=$PWD/.pnpm-home pnpm build.

  • 2026-06-19: Task-Board-Doku-Drift behoben: Header-Kommentar in TaskBoardView.vue von "4 columns" auf "6 columns" (Offen, InBearbeitung, Delegiert, Review, Blockiert, Erledigt) korrigiert. tasks.ts-Store-Kopfkommentar um delegated ergänzt.

  • 2026-06-19: Veralteter TODO.md-Import entfernt: ImportFromIrisTodoAsync in TaskService.cs, ITaskService.cs und der import-from-iris-todo-API-Endpoint in DashboardController.cs gelöscht. ImportResultDto aus Models/Dashboard.cs entfernt. TODO.md ist abgeschafft, Task Board alleinige Quelle.

  • 2026-06-19: Backend-Tests erweitert: TaskBoardTests.cs (69 Tests total, +13 neue) decken TaskStateHelper-BoardGroupKey/ToState/BoardGroupToState/DisplayString/AllStates/IsValidState/IsInProgressOrBlocked/IsDoneOrBacklog ab. Backend-Build 0 Errors, Frontend vue-tsc 0 Errors.

  • 2026-06-16: Program.cs refactored: DI extrahiert in Extensions/ServiceCollectionExtensions.cs, Middleware in Extensions/ApplicationBuilderExtensions.cs, Helpers in Helpers/PasswordHelper.cs. Program.cs von ~200 auf 26 Zeilen reduziert.

  • 2026-06-16: Nexus auf Netcup (mission-control) redeployed. Neuer Stack unter /home/projekte_bao/nexus/. Traefik reverse-proxy mit Let's Encrypt TLS. Volume und Netzwerk-Namen bereinigt (postgres-data, internal). Compose-Pfade von Ionos auf Netcup migriert.

  • 2026-06-16: Ollama-Modelle (2.4 GB) und alle ungenutzten Runtime-Dateien entfernt. Codex-Logs bereinigt (~342 MB). Workspace-Aufräumung (~3.1 GB gesamt).

  • 2026-06-16: Modell-Healthcheck nach Migration: Alle 7 aktiven Modelle laufen (DeepSeek Flash/Pro, GPT-5.4/5.5, Claude Sonnet/Opus via CLI-Backend). Ollama und NVIDIA endgültig deaktiviert.

  • 2026-06-14: Server-Migration von Ionos (85.214.180.137) nach Netcup (178.105.105.106). Hostname: mission-control. Migration: OpenClaw, Gitea, Nexus-Volume.

  • 2026-06-12: Agent-Workspaces finalisiert. Iris als Chief of Staff mit Approval-Autonomie. Bidirektionale Kommunikation etabliert.

  • 2026-06-11: Gitea CI/CD-Pipeline aktiv. Agent-Repo-Permissions mit API-Tokens (statt Passwort-Auth). DevOps-Token für Deploy-Trigger.

  • 2026-06-09: Phase 2 Backend + Frontend implementiert: Memory-Browser (Liste, Detail, Volltextsuche), Docs-Browser (Kategorien, Filter), Team-Org-Map (Karten + Kommunikationsmatrix), Security-Center (Auth, Tokens, Rate-Limit, Cookies). Backend-Build 0 Errors, Frontend-Build (vue-tsc + vite) 0 Errors.

  • 2026-06-09: Researcher-Agent zum Team hinzugefügt (DeepSeek V4 Pro, Nur-Lese-Rechte, YouTube-Vision-Skill). Kommunikationsmatrix erweitert (Researcher↔Iris only).

  • 2026-06-09: Phase 1 komplettiert: Live-Agentinventar, Dashboard-Metriken, Approval-Workflow, Healthchecks (PostgreSQL + Runtime), Tests (Backend 3/3 + Frontend 2/2).

  • 2026-06-09: Nexus produktiv auf VPS deployed: Docker-Stack laeuft, Nginx mit Let's Encrypt SSL fuer nexus.noveria.net konfiguriert.

  • 2026-06-09: Nexus-Owner-Passwort lokal in .env gesetzt; Backend synchronisiert das konfigurierte Passwort nun auch fuer bestehende Owner-Konten.

  • 2026-06-08: nexus.md in schlanke Indexdatei und Phase-Dateien aufgeteilt.

  • 2026-06-08: Review-Workflows werden auf kurze, tokenarme Ausgabe ausgerichtet.

  • 2026-06-08: Programmer hat Phase-1-Reste implementiert:

    • ProjectDetailView (CRUD, Archiv, Tasks)
    • SettingsView (Profil-Edit, Passwort-Änderung)
    • Task-Edit (Inline-Titel, Priorität, Projekt-Zuweisung)
    • Activity-Feed (Filter, Sort, Paginierung)
    • Router auf echte Komponenten umgestellt
    • Backend: Ollama/NVIDIA entfernt, nur OpenClaw aktiv
    • Compose bereinigt
  • 2026-06-08: Iris zum Chief of Staff mit Approval-Matrix aufgewertet

  • 2026-06-08: Programmer hat volle Dateirechte (workspaceOnly: false, ask: off)

  • 2026-06-08: Phase-1-Reste abgeschlossen:

    • shadcn-vue bewusst aus dem Zielstack entfernt (reines CSS) und im Roadmap markiert
    • .env.template erstellt (PostgreSQL, JWT, Owner, OpenClaw)
    • DELETE /api/v1/tasks/{id} implementiert (nur Done/Backlog erlaubt, 403 bei anderen States)
    • Task-Delete-Button mit Trash2-Icon und Confirmation-Dialog in ModuleView.vue (Teleport-Modal)
    • deleteTask-Action im Operations-Store (mit Metrik-Neuberechnung)
    • Phase-1-MVP-Status aktualisiert (Tasklöschung, Produktionswerte, Deployment-Entry)
    • Deployment-Dokumentation überarbeitet (Build-Anleitung, Deployment-Plan, Offene-Arbeit-Liste)
    • Changelog aktualisiert