126 lines
14 KiB
Markdown
126 lines
14 KiB
Markdown
# 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_CannotChangeAnyTask` → `CanChangeState_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
|