comcoach and teamsbot redesign started

This commit is contained in:
ValueOn AG 2026-05-03 22:58:29 +02:00
parent c2ab5d976c
commit 4f4c1c25be
3 changed files with 30 additions and 4 deletions

View file

@ -1,5 +1,6 @@
<!-- status: plan -->
<!-- status: build -->
<!-- started: 2026-04-29 -->
<!-- verified: 2026-05-03 -->
<!-- component: gateway, frontend-nyla -->
# ComCoach Greenfield-IA: TrainingModule + Sessions
@ -41,6 +42,16 @@ ComCoach erst zum vermarktbaren Produkt.
(`frontend_nyla/src/pages/views/commcoach/CommcoachKeepAlive.tsx`)
beibehalten -- die Voice-Session darf nicht gekillt werden bei
Sidebar-Wechsel.
- **Bestehendes `goals`-Feld**: `CoachingContext.goals` existiert bereits
als `Optional[str]` (JSON-Array `[{id, text, status, createdAt}]`).
Beim Rename wird es zu Freitext umgewidmet; bestehende JSON-Werte per
Migration zu Plain-Text konvertieren (Ziel-Texte extrahieren).
- **Bestehendes `category`-Feld**: `CoachingContext.category` ist ein Enum
(`leadership`, `conflict`, `negotiation`, ..., `custom`). Beim Rename
wird `category` durch `moduleType` ersetzt. Migration:
alle bestehenden `category`-Werte -> `moduleType="coaching"`, altes
Feld `category` wird deprecated/entfernt.
- **Bestehendes `description`-Feld**: Bleibt erhalten, ergaenzt `goals`.
## Ziel und Nicht-Ziele
@ -110,7 +121,8 @@ flowchart LR
| `title` | text | "Konfliktgespraeche", "JS-Grundkurs" |
| `moduleType` | enum | `coaching` \| `training` \| `exam` \| `elearning` |
| `personaId` | UUID? | Default-Persona fuer Sessions |
| `goals` | text | freie Zielbeschreibung |
| `description` | text | Kurzbeschreibung (besteht bereits) |
| `goals` | text | freie Zielbeschreibung (existiert als JSON, wird zu Freitext migriert) |
| `kpiTargets` | jsonb | strukturierte Ziel-KPIs |
| `status` | enum | `active` \| `archived` \| `completed` |
| `createdAt` / `updatedAt` | timestamp | -- |
@ -144,6 +156,9 @@ flowchart LR
| 2026-04-29 | Sidebar 5 Tabs (statt 4 mit Doppelung) | Use-Cases brauchen klare Trennung Assistent vs. Liste |
| 2026-04-29 | Statistik im Settings-Tab raus, nur Dashboard | Doppelung weg |
| 2026-04-29 | KeepAlive bleibt nur fuer Session-Tab (nicht Module/Dashboard) | Voice-Session muss persistieren, Listen koennen unmounten |
| 2026-05-03 | `goals`-Feld wird von JSON-Array zu Freitext migriert | Vereinfachung, JSON-Struktur war overengineered |
| 2026-05-03 | `category`-Enum entfaellt zugunsten von `moduleType` | Keine zwei Klassifizierungs-Dimensionen noetig |
| 2026-05-03 | Alle Zeilennummern gegen Codebase verifiziert, alle korrekt | Pre-Build-Audit |
## Umsetzungs-Checkliste
@ -152,7 +167,12 @@ flowchart LR
- [ ] `datamodelCommcoach.py`:
- Klasse `CoachingContext` -> `TrainingModule` (Rename, alle
FKs in Childs `contextId` -> `moduleId`).
- Neue Felder `kpiTargets jsonb`, `moduleType enum`, `goals text`.
- Neues Feld `kpiTargets jsonb`, neues Feld `moduleType enum`.
- Bestehendes `goals` (JSON-Array) -> Freitext migrieren.
- Bestehendes `category` (Enum) -> entfernen (ersetzt durch
`moduleType`). Bestehende Werte per Migration alle auf
`moduleType="coaching"`.
- `description` bleibt unveraendert.
- [ ] DB-Migration: `script_db_rename_coaching_context_to_training_module.py`.
Tabellenname Postgres-Rename, FK-Spalte `contextId` -> `moduleId`
auf allen abhaengigen Tabellen (`CoachingSession`,

View file

@ -1,5 +1,6 @@
<!-- status: plan -->
<!-- status: build -->
<!-- started: 2026-04-29 -->
<!-- verified: 2026-05-03 -->
<!-- component: gateway, frontend-nyla, teams-bot -->
# TeamsBot Greenfield-IA: MeetingModule + Live-Update-Fixes
@ -38,6 +39,9 @@ TeamsBot zum verlaesslichen Meeting-Tool.
- Backend `stats`-Payload bereits vorhanden, nur nicht gebunden.
- `MeetingModule` ist additiv -- alte `TeamsbotSession`-Eintraege
bekommen `moduleId` per Migration (Default-Modul "Adhoc").
- **Namenskonvention**: `TeamsbotSession` hat `startedByUserId` (nicht
`userId`/`ownerUserId`). `MeetingModule.ownerUserId` ist konsistent
mit dem bestehenden Pattern.
## Ziel und Nicht-Ziele
@ -177,6 +181,7 @@ flowchart LR
| 2026-04-29 | 5 Tabs (statt 3) | Use-Cases brauchen klare Trennung Assistent/Module/Live |
| 2026-04-29 | SSE bleibt (kein WS) | Architektur stabil, Browser-Bot nutzt WS, Frontend nicht |
| 2026-04-29 | Dashboard-Counts: Adaptive Polling jetzt, SSE-Channel als Follow-up | Pragmatisch, schnell sichtbar |
| 2026-05-03 | Alle Zeilennummern gegen Codebase verifiziert, alle korrekt | Pre-Build-Audit |
## Umsetzungs-Checkliste

View file

@ -14,6 +14,7 @@ Skip: reine Refactors, Formatting, Lint, Dep-Bumps, Test-only, Wiki-Tippfehler.
## 2026-05-03
- 2026-05-03 | docs | wiki | **ComCoach + TeamsBot Greenfield-IA: Plaene verifiziert und in `2-build/` verschoben.** Alle Zeilennummern und Code-Referenzen gegen aktuelle Codebase geprueft (alle korrekt). ComCoach-Plan ergaenzt: `goals`-Feld existiert bereits (JSON->Freitext-Migration), `category`-Enum wird durch `moduleType` ersetzt, `description`-Feld bleibt. TeamsBot-Plan ergaenzt: Namenskonvention `startedByUserId` dokumentiert. Beide Plaene: `<!-- status: build -->`, `<!-- verified: 2026-05-03 -->`. (c-work: `2-build/2026-04-comcoach-greenfield-ia.md`, `2-build/2026-04-teamsbot-greenfield-ia-and-live-update.md`)
- 2026-05-03 | fix | gateway | **AI Step Output: `context` Feld zeigte Prompt statt Input-Context.** `actionNodeExecutor.py` baute `out["context"]` falsch aus `promptText + extractedContext` zusammen. Wenn AI ein Binary-Dokument erzeugte (z.B. Excel), war `extractedContext` leer und `context` wurde identisch mit `prompt`. Jetzt wird der tatsaechliche aufgeloeste `context`-Input-Parameter gespeichert.
- 2026-05-03 | fix | frontend-nyla | **FormGeneratorTree: Auto-Scroll bei Expand am unteren Bildschirmrand.** Wenn ein Gruppenobjekt in der unteren Haelfte des sichtbaren Bereichs expanded wird, scrollt der Container den Parent-Node zur Mitte, damit Kinder ohne manuelles Scrollen sichtbar sind.
- 2026-05-03 | fix | frontend-nyla | **Automation > Workspace Tab: Polling fuer laufende Runs.** `_WorkspaceTab` pollt `fetchWorkspaceRunDetail` alle 3s solange Run-Status nicht terminal. Stoppt automatisch bei completed/failed/cancelled.