feat: Bao/Iris-Statusrechte + Bao→Iris-Notifications + Agent-Workflow-Übersicht
- Bao darf jetzt Status ändern (neben Iris), Sub-Agents weiterhin nicht - CanEditContent für Inhaltsbearbeitung durch alle bekannten Caller - Bao-Content-Änderungen triggern task_content_changed-Notification an Iris - Bao-Status-Änderungen triggern task_status_changed-Notification an Iris - Iris-Status-Änderungen triggern task_status_changed-Notification an Bao - Neue WorkTask-Felder: IsAgentTask (bool), ExpectedFrom (string) - Agent-Workflow-API: CreateAgentTask, WaitingTasks, AgentOverview - Frontend: Agent-Task-Badge, Iris-Overview-Panel, isBao-Getter - Login-Rate-Limiter mit strukturiertem JSON-Fehlermeldungs-Body - Volume-Name: nexus-postgres → postgres-data (Standardisierung)
This commit is contained in:
@@ -2,6 +2,55 @@
|
||||
|
||||
> Letzte Aktualisierung: 2026-06-20
|
||||
|
||||
- 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.
|
||||
|
||||
Reference in New Issue
Block a user