diff --git a/TOPICS.md b/TOPICS.md index 11e82d4..50f3416 100644 --- a/TOPICS.md +++ b/TOPICS.md @@ -1,5 +1,5 @@  - + # Themen-Index für AI-Kontext @@ -25,7 +25,7 @@ Lade immer zuerst diese Datei. Dann gezielt die passende(n) Referenz-Datei(en). | Billing & Subscriptions | b-reference/gateway/billing.md | Abrechnung, Prepaid, State Machine | | Frontend Nyla | b-reference/frontend-nyla/architecture.md | UI-Seiten, Komponenten, Hooks, Routing | | Private LLM | b-reference/private-llm/architecture.md | Internes LLM, Neutralisierung | -| Teams Bot | b-reference/teams-bot/architecture.md | Meeting-Bot, WebSocket | +| Teams Bot | b-reference/teams-bot/architecture.md | Meeting-Bot, WebSocket, Director Prompts (Hybrid Agent-Routing) | ## Cross-Cutting (repo-übergreifend) @@ -52,9 +52,12 @@ Lade immer zuerst diese Datei. Dann gezielt die passende(n) Referenz-Datei(en). | Gateway i18n Phase 7 (done) | c-work/3-validate/2026-04-gateway-i18n-phase-7-implementation.md | RBAC-Keys (rbac.*) im xx-Set, `translate-field` API, FormGenerator KI-Button | | Gateway Duplicate Class Names (done) | c-work/3-validate/2026-04-gateway-duplicate-class-names.md | TaskResult, AiResponse, TableData, Token Umbenennungen | | Generic Graph Editor (Typed Nodes, done) | c-work/3-validate/2026-04-generic-graph-editor.md | Port-Typen, Extraktoren, FrontendType-Renderer, System-Variablen | +| Typed Generic Handover (Pick-not-Push, done) | c-work/4-done/2026-04-typed-generic-handover.md | DataRef-only runtime, `validateGraph` Port-Hard-Fail, upstream-paths API, `bindNodeParameter` / `listUpstreamPaths` Tools, graph-defined FormPayload, Migrationsskript | | Unified Document Model (UDM) & Workflows (done) | z-archive/2026-04-unified-document-model.md, b-reference/gateway/workflow.md (Abschnitt UDM) | UDM-Baum, Extract-Node, Loop/Consolidate, Agent-UDM-Tools | | i18n Static Text Elimination (Ph. 1–2 done) | c-work/2-build/2026-04-i18n-static-text-elimination.md | Gateway Feature+Nodes: Dicts → de-Keys; Ph. 3–5 offen | | Database Health & Data Cleanup (done) | z-archive/2026-04-database-health-and-data-cleanup.md | DB-Registry, FK-Discovery, Orphan-Scanner, Admin-Seite | +| Teamsbot Director Prompts (done) | c-work/4-done/2026-04-teamsbot-director-prompts.md | Private Operator-Prompts (One-Shot/Persistent), Hybrid SPEECH_TEAMS+Agent (`needsAgent`), `_activeServices`-Registry, Reconnect-Persistenz, 26 Backend-Tests | +| **Typed Action Architecture** (canonical) | b-reference/gateway/architecture.md (Abschnitt 4-Schichten), b-reference/gateway/workflow.md (Abschnitt Typed Action Architecture), b-reference/gateway/ai-agent.md (Tool-Generierung aus Catalog), b-reference/gateway/features/trustee.md, b-reference/frontend-nyla/architecture.md (FlowEditor), c-work/3-validate/2026-04-typed-action-architecture.md, c-work/1-plan/2026-04-typed-action-followups.md | Catalog → Methods → Adapter → Runtime; FeatureInstanceRef-Envelope; Pick-not-Push; `*`-Wildcard; Save-with-errors (AC-9); DB-CLI `script_migrate_feature_instance_refs.py`; Vitest+RTL FE-Tests | ## Prozess & Betrieb diff --git a/b-reference/frontend-nyla/architecture.md b/b-reference/frontend-nyla/architecture.md index 15c08d3..4518f2f 100644 --- a/b-reference/frontend-nyla/architecture.md +++ b/b-reference/frontend-nyla/architecture.md @@ -1,6 +1,6 @@ - - + + # Frontend Nyla -- Architektur @@ -102,6 +102,45 @@ Wenn eine Feature-Seite N verwandte Modelle in eigenen Tabs zeigen soll (Beispie 5. **Tab-Bar** im Stil bestehender Trustee-Tab-Seiten (`TrusteeAbschlussView`, `TrusteeAccountingSettingsView`); Gruppierung per `TabGroupDef` (z.B. "Stammdaten", "Lokale Daten", "Konfiguration", "Buchhaltungs-Daten") erhoeht Lesbarkeit bei vielen Tabs. 6. **Spalten-Definitionen** kommen aus `getModelAttributeDefinitions(...)` (Backend) -- nie hardcodiert. So bleibt das UI automatisch synchron mit Pydantic-Modellaenderungen. +## FlowEditor -- Typed Action Architecture (Phasen 1-5) + +Seit April 2026 stuetzt sich der FlowEditor (Graphical Editor) auf eine typisierte Action-Architektur. Quellen: `wiki/c-work/3-validate/2026-04-typed-action-architecture.md`, Tests in `frontend_nyla/src/components/FlowEditor/**/*.test.tsx`. + +### Picker-Komponenten + +| Komponente | Datei | Zweck | +|------------|-------|-------| +| `RequiredAttributePicker` | `nodes/shared/RequiredAttributePicker.tsx` | Auflistung + Auswahl von 0/1/N Pflicht-Attributen (`featureInstanceId`, `connection`, ...). Bei genau einer Quelle: Auto-Bind mit Override-Knopf; bei N: explizite Auswahl; bei 0: Hint "Iterieren-Vorschlag" oder Ressource fehlt. | +| `DataPicker` | `nodes/shared/DataPicker.tsx` | Strict-Type-Filter (`expectedParamType`) + Object-Drill-Down + `*`-Wildcard fuer List-Iteration. Default ist Strict-Mode (`Nur kompatible`-Toggle). Hard-Mismatches werden ausgeblendet, Coerce-Faelle (z.B. `int -> str`) bleiben sichtbar. | +| `paramValidation.ts` | `nodes/shared/paramValidation.ts` | Single source of truth fuer Pflicht-Feld-Pruefung. Liefert `nodeErrors: List[NodeError]` (genutzt von Save-Toast, Run-Block, Node-Highlighting). | + +### Save / Run Gating (AC-9) + +- **Save** ist immer erlaubt (auch mit Pflicht-Fehlern). `CanvasHeader.tsx` zeigt nach Save bei Fehlern einen amber-Banner ("Gespeichert mit X Pflicht-Fehlern in Y Nodes"). +- **Run** wird per `executeBlockedReason` blockiert; der Button wechselt auf "Pflicht-Felder fehlen", behaelt `aria-disabled` und triggert `onExecuteBlockedClick` (markiert die First-Error-Node). +- Hintergrund: `executeGraph` validiert serverseitig zusaetzlich (Port-Mismatch, fehlende Pflicht-Bindings) und liefert klare Fehlermeldungen falls jemand den Editor-Block umgeht. + +### FeatureInstanceRef im Frontend + +- `featureInstanceId`-Bindings werden als typisierter Envelope `{$type: "FeatureInstanceRef", id, featureCode}` ans Backend geschickt; das Backend persistiert sie 1:1 (Phase 5). +- Der Picker zeigt `[]