Root cause: Dual-source architecture for owner password (Gitea secret ENV_OWNER_PASSWORD vs host .env OWNER_PASSWORD) caused drift when the DB was ever re-seeded or the volume recreated. Changes: - Add SeedAudit entity + migration to track one-time seed operations - EnsureDatabaseAsync checks SeedAudit BEFORE seeding — owner is never re-created even if the Users table is wiped - Deploy and rollback workflows now read OWNER_PASSWORD from the host's persistent .env (single source of truth) instead of Gitea secrets - compose.yaml documented: OWNER_PASSWORD only used during initial seed - Cleanup: .gitignore extended for core dumps, changelog/deployment.md updated with 2026-06-20 session notes After this fix the DB is the single source of truth for the owner password after initial seed. The host .env is the single reference for the initial value.
13 KiB
Changelog
Letzte Aktualisierung: 2026-06-20
-
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-Fix2d21885(Fix activity repository test double) war CI fuer Backend, Frontend und Security gruen. - Da
POST /actions/workflows/deploy.yaml/dispatchesserverseitigHTTP 500lieferte und fuer2d21885kein erfolgreicher Deploy-Run belegbar war, wurde der produktive Rollout manuell aus einem sauberen Snapshot von Commit2d21885durchgefuehrt statt aus dem schmutzigen lokalen Worktree. - Deploy-Pfad: Snapshot-Sync nach
/home/projekte_bao/openclaw/data/openclaw/workspace/nexusund danachdocker 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-1healthy;https://nexus.noveria.net/health/live=200;/dashboard=200;/api/v1/operations/snapshot=401ohne Auth;GET /api/dashboard/tasks/caab972a-c46c-4af5-b2c4-9d31be824da3liefert livelastActivityMessageundlastActivityAt. - Offener Betriebsblocker: Gitea-Deploy-Trigger /
workflow_dispatchfuerdeploy.yamlliefert weiterHTTP 500und muss separat repariert werden.
- Feature-Stand auf
-
2026-06-20: Live-Nexus nach Deploy-Stoerung verifiziert, Bao-Folgetasks angelegt und Agent-Workflow live gegengeprueft.
https://nexus.noveria.net/lieferte wieder200 OKmit SPA-TitelNexus | Noveria Operations./health/livelieferte200 Healthy.GET /api/dashboard/tasks/board,GET /api/dashboard/tasks/agent-overviewundGET /api/dashboard/agentslieferten mitX-Nexus-Api-Keywieder200 OK.- Neuer Task angelegt:
Restore agent progress visibility in Nexus(assignedTo=bao,priority=High, StateBacklog). - Neuer Task angelegt:
Review: Agenten-Progress mit letztem Status + Timestamp sichtbar machen(assignedTo=bao, StateBacklog). - Live-Artefakt-Pruefung bestaetigt Frontend-Strings fuer
nur Iris und Bao,researcher,executor,Worauf warte ich?,expectedFromundisAgentTask. - Reversible Live-Verifikation erfolgreich: temp. Agent-Task mit
expectedFrom=researchererschien korrekt inwaitingForOthers, erzeugte Activity und wurde direkt wieder geloescht (DELETE ... -> 204). - Reversible Notification-Verifikation erfolgreich: simulierte Bao-Aenderung (
X-Agent-Id: bao) erzeugte livetask_content_changedundtask_status_changedfuer Iris; simulierte Iris-Statusaenderung erzeugte livetask_reviewfuer Bao. - Live-Regel fuer Delete bestaetigt: Tasks lassen sich nur in
BacklogoderDoneloeschen; ein temp. Review-Task lieferte erwartungsgemaess403bis zum Ruecksetzen aufBacklog. - Geaenderte Dateien:
nexus.md,phases/changelog.md.
-
2026-06-20: Researcher und Executor in den Agent-Task-Workflow aufgenommen.
ValidAssigneesin 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-systembleibt 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.
- Wenn Bao eine Task inhaltlich ändert (Titel, Detail, Priorität, AssignedTo, DueDate), erhält Iris eine
- 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 jetztauthStore.isIris || authStore.isBao. Permission-Banner, State-Dropdown-Readonly-Tag und Tooltips aktualisiert. NeuerisBao-Getter im Auth-Store. - Tests:
CanChangeState_Bao_CannotChangeAnyTask→CanChangeState_Bao_CanChangeAnyTask. Neue Tests fürCanEditContent. - Geänderte Dateien: Backend
Entities.cs,TaskService.cs,DashboardController.cs,TasksController.cs; FrontendTaskBoardView.vue,auth.ts; TestsTaskBoardTests.cs; Docschangelog.md.
- Neue Autorisierungsregel (TaskStateHelper.CanChangeState):
-
2026-06-20: Agent-Task-Workflow implementiert.
- Neue Felder in WorkTask-Entity:
IsAgentTask(bool, Index) undExpectedFrom(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
irisdarf Status ändern oder Karten verschieben. - Sub-Agents (
programmer,reviewer,architekt) dürfen niemals Status ändern. baodarf Tasks inhaltlich bearbeiten, aber keinen Status ändern.- Der technische Fallback
nexus-systemdarf Status nur für interne Systempfade wie automatische Reset-/Cron-Operationen ändern. Caller wird viaX-Agent-Id-Header oder JWT-Claim aufgelöst; HTTP-Fallback ist nicht mehrbao, sondern leer und wird für Statusänderungen abgewiesen.
- Nur
- Neue API-Endpunkte:
POST /api/dashboard/tasks/agent– Agent-Task anlegen (mitexpectedFrom).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:
UpdateTaskStatusundMoveTaskprüfen jetzt viaResolveCallerAgent()+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; Frontendtasks.ts,TaskBoardView.vue.
- Neue Felder in WorkTask-Entity:
-
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,apiundwebperdocker:cli compose up -d --force-recreateneu erstellt, ohne das DB-Volume zu löschen. Ergebnis:/health/liveblieb healthy, der Passwort-Hash fürvmbao62@hotmail.deblieb 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.vueundfrontend/src/stores/tasks.tsangepasst. Verifiziert mitCOREPACK_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:
ImportFromIrisTodoAsyncin 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 inExtensions/ApplicationBuilderExtensions.cs, Helpers inHelpers/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
.envgesetzt; Backend synchronisiert das konfigurierte Passwort nun auch fuer bestehende Owner-Konten. -
2026-06-08:
nexus.mdin 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.templateerstellt (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