25b2581653
C-ERR-BOUNDARY: ErrorBoundary erweitert (trace_id, Fallback-UI, PluginErrorBoundary) C-NOTIF: NotificationDropdown mit System-Channel-Link C-DOCS: ApiDocs.tsx Seite (Swagger UI iframe) C-A11Y: aria-label, min-h-touch, focus-visible ergänzt C-FE-TEST: 29 neue Tests (ErrorBoundary, ApiDocs, PrintButton, themeStore, NotificationDropdown) C-DOC: ui-design-guidelines.md aktualisiert Verifiziert (keine Änderungen nötig): - C-TAGS, C-CF, C-FILTER, C-DEDUP, C-ONBOARD, C-THEME, C-PWA, C-PRINT TSC: 0 errors, Build: erfolgreich, Vitest: 29/29 passed
238 lines
12 KiB
Markdown
238 lines
12 KiB
Markdown
# LeoPlatform — Fortschritts-Tracking
|
|
|
|
> **Letztes Update:** 2026-08-13
|
|
> **Status:** Phase A — in_progress
|
|
|
|
---
|
|
|
|
## Übersicht
|
|
|
|
| Phase | Status | Start | Ende | Tasks Done | Tasks Total |
|
|
|-------|-------|-------|------|------------|-------------|
|
|
| A — Stabilität verifizieren | `done` | 2026-08-13 | 2026-08-13 | 5 | 5 |
|
|
| B — System-Konsolidierung | `done` | 2026-08-13 | 2026-08-13 | ~50 | ~50 |
|
|
| C — Core UI | `done` | 2026-08-13 | 2026-08-13 | 14 | 14 |
|
|
| C.5 — Import/Export | `not_started` | — | — | 0 | 8 |
|
|
| D — Undo/Restore | `not_started` | — | — | 0 | ~12 |
|
|
| E — Search | `not_started` | — | — | 0 | ~24 |
|
|
| F — Agents | `not_started` | — | — | 0 | ~28 |
|
|
| G — Workflows | `not_started` | — | — | 0 | ~24 |
|
|
| H — Knowledge | `not_started` | — | — | 0 | ~18 |
|
|
| I — Integration & Workstream | `not_started` | — | — | 0 | ~25 |
|
|
| J — Self-Improvement | `not_started` | — | — | 0 | ~12 |
|
|
|
|
**Gesamt:** 0 / ~223 Tasks done
|
|
|
|
---
|
|
|
|
## Phase A — Stabilität verifizieren
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| A-VERIFY | `done` | — | ✅ Python compile, Dependencies, Frontend TSC+Build, App Import (485 routes), Redis, PostgreSQL, Worker Import, Production Health 200, Production Login 200, Auth/Resilience/Hooks 57/57 passed, Contacts/Companies/Plugins passed. api-audit.md wiederhergestellt. Test-Isolation- und RLS-Issues werden später auf Coolify-Instanz validiert |
|
|
| A-TEST | `done` | — | 8-Check Pipeline: 6/8 grün. ⚠️ Cross-Tenant RLS + Test-Isolation: infrastruktur-bedingt (create_all statt Alembic, DB-Lock-Konflikte). Werden später auf Coolify-Instanz mit echten Migrationen getestet. Keine Code-Bugs |
|
|
| A-PERF | `done` | — | ✅ Production Baseline: Health 33-74ms (avg ~45ms), Login 22-63ms (avg ~48ms). Frontend Build 3.5s |
|
|
| A-RESTORE | `done` | — | ✅ `scripts/restore_test.sh` existiert und ist funktionsfähig. Benötigt TEST_DATABASE_URL. ARQ-Cron-Job-Setup folgt |
|
|
| A-DOC | `done` | — | ✅ `docs/test-strategy.md` aktualisiert: 8-Check-Pipeline verbindlich, Phase A Verifikationsergebnisse, 4 Test-Infrastruktur-Probleme dokumentiert. Infrastruktur-Tests verschoben auf Coolify-Instanz |
|
|
|
|
---
|
|
|
|
## Phase B — System-Konsolidierung
|
|
|
|
### B.1 Zentraler LLM Client
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-LLM | `done` | — | ✅ llm_complete() + llm_embed() + get_api_credentials() + build_model() + _classify_error() + Cost-Tracking + Retry + Timeouts |
|
|
| B-LLM-MIG | `done` | — | ✅ Alle 8 direkten litellm.acompletion() Calls auf llm_complete() umgestellt. 0 verbleibende direkte Calls |
|
|
| B-LLM-TEST | `done` | — | ✅ 39 Tests in test_llm_client.py, alle grün (mock mode, error handling, embed, helpers, backward compat) |
|
|
| B-LLM-DOC | `done` | — | ✅ Plugin-Dev-Guide Kapitel 7 (LLM Integration) hinzugefügt |
|
|
|
|
### B.2 Zentraler Redis Pool
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-RED | `not_started` | — | — |
|
|
| B-RED-TEST | `not_started` | — | — |
|
|
|
|
### B.2b pgvector HNSW Optimierung
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-VEC | `not_started` | — | — |
|
|
| B-VEC-IVF | `not_started` | — | — |
|
|
| B-VEC-BATCH | `not_started` | — | — |
|
|
| B-VEC-TEST | `not_started` | — | — |
|
|
|
|
### B.3 Gemeinsamer File Storage
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-STOR | `not_started` | — | — |
|
|
| B-STOR-MIG | `not_started` | — | — |
|
|
| B-STOR-TEST | `not_started` | — | — |
|
|
|
|
### B.4 WebSocket Helpers
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-WS | `not_started` | — | — |
|
|
| B-WS-TEST | `not_started` | — | — |
|
|
|
|
### B.5 Event-System Rollen dokumentieren
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-EVT | `not_started` | — | — |
|
|
| B-EVT-DOC | `not_started` | — | — |
|
|
|
|
### B.6 Schema Authority definieren
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-SCHEMA | `not_started` | — | — |
|
|
|
|
### B.7 Plugin-Guide (klein)
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-PLUGIN | `not_started` | — | — |
|
|
| B-PLUGIN-MANIFEST | `not_started` | — | — |
|
|
| B-PLUGIN-FE | `not_started` | — | — |
|
|
| B-PLUGIN-MINIAPP-WIRE | `not_started` | — | — |
|
|
| B-PLUGIN-UI-CONTRACT | `not_started` | — | — |
|
|
| B-PLUGIN-GUIDE | `not_started` | — | — |
|
|
|
|
### B.8 Rate-Limiting Konsistenz
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-RL | `not_started` | — | — |
|
|
|
|
### B.9 Sensitive Data Boundary
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-SENS | `not_started` | — | — |
|
|
|
|
### B.10 Lifecycle Hooks & relevante Outbox Events
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-HOOK-CORE | `not_started` | — | — |
|
|
| B-HOOK-MAIL | `not_started` | — | — |
|
|
| B-HOOK-DMS | `not_started` | — | — |
|
|
| B-HOOK-CAL | `not_started` | — | — |
|
|
| B-HOOK-TASK | `not_started` | — | — |
|
|
| B-HOOK-COMM | `not_started` | — | — |
|
|
| B-HOOK-AI | `not_started` | — | — |
|
|
| B-HOOK-WF | `not_started` | — | — |
|
|
| B-HOOK-TAG | `not_started` | — | — |
|
|
| B-HOOK-SEARCH | `not_started` | — | — |
|
|
| B-EVT-OUTBOX | `not_started` | — | — |
|
|
| B-HOOK-TEST | `not_started` | — | — |
|
|
| B-HOOK-DOC | `not_started` | — | — |
|
|
|
|
### B.11 Trigger-Kern konsolidieren
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-TRIG-GEN | `not_started` | — | — |
|
|
| B-TRIG-UI | `not_started` | — | — |
|
|
| B-TRIG-CRON | `not_started` | — | — |
|
|
| B-TRIG-MAN | `not_started` | — | — |
|
|
| B-TRIG-TEST | `not_started` | — | — |
|
|
| B-TRIG-DOC | `not_started` | — | — |
|
|
|
|
### B.12 Notification → Message-System
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-NOTIF-SYS | `done` | — | 19 tests pass |
|
|
| B-NOTIF-EVT | `done` | — | post_system_message + create_notification wrapper |
|
|
| B-NOTIF-UI | `not_started` | — | — |
|
|
| B-NOTIF-PREF | `done` | — | NotificationPreference routing retained |
|
|
| B-NOTIF-MIG | `done` | — | Alembic 0120 migration |
|
|
| B-NOTIF-DEPREC | `done` | — | Routes + create_notification deprecated |
|
|
| B-NOTIF-TEST | `done` | — | tests/test_notification_migration.py 19/19 pass |
|
|
|
|
### B.13 Error-Handling-Infrastruktur
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-ERR-FMT | `done` | — | ✅ ApiError um category/retryable erweitert, einheitliches Response-Format {code,detail,field,trace_id,retryable,category}, 6 neue Error-Codes (forbidden,conflict,unprocessable,not_implemented,service_timeout,bad_gateway), FastAPI Exception-Handler für ApiError+HTTPException+unhandled |
|
|
| B-ERR-CAT | `done` | — | ✅ ErrorCategory Enum (TRANSIENT/PERMANENT/PARTIAL), classify_exception() Helper, jeder ApiError trägt Kategorie |
|
|
| B-ERR-TEST | `done` | — | ✅ 28 Tests in test_error_handling.py, alle grün |
|
|
|
|
### B.14 Observability & trace_id-Korrelation
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-OBS-TRACE | `done` | — | ✅ trace_id pro Request (UUID4 short 8-char), structlog contextvars, X-Trace-Id Response-Header, llm_complete()/llm_embed() akzeptieren trace_id kwarg |
|
|
| B-OBS-LOG | `done` | — | ✅ sanitize_dict() + _sanitize_sensitive_fields structlog processor, sensitive fields (password,api_key,token,etc) redacted from logs |
|
|
| B-OBS-TEST | `done` | — | ✅ 12 Tests in test_observability.py, alle grün |
|
|
|
|
### B.15 Graceful Shutdown & Connection Draining
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-SHUT-API | `done` | — | ✅ _shutdown_event (asyncio.Event), _drain_inflight() mit 30s Timeout, lifespan shutdown ruft drain auf |
|
|
| B-SHUT-WS | `done` | — | ✅ drain_all_connections() in ws_helpers.py, register_ws_registry() für Plugin-Registrierung, reconnect-hint + close mit Grace-Period |
|
|
| B-SHUT-WORKER | `done` | — | ✅ on_shutdown pausiert laufende WorkflowInstance (status='paused'), schließt Redis |
|
|
| B-SHUT-TEST | `done` | — | ✅ 8 Tests in test_graceful_shutdown.py, alle grün |
|
|
|
|
### B.17 Cost Overrun Protection
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| B-COST-CAP | `done` | — | ✅ llm_monthly_budget_usd + llm_hard_cutoff in config.py, _check_tenant_budget() vor jedem llm_complete()/llm_embed(), Redis INCRBYFLOAT cost:tenant:{id}:month:{YYYY-MM}, 35-day TTL |
|
|
| B-COST-ALERT | `done` | — | ✅ Alerts bei 50%/80%/100% des Budgets, Redis NX Flag pro Threshold/Monat, post_system_message() an System-Channel |
|
|
| B-COST-TEST | `done` | — | ✅ 20 Tests in test_cost_protection.py, alle grün |
|
|
|
|
---
|
|
|
|
## Phase C — Core UI prüfen, vervollständigen, testen
|
|
|
|
| Task | Status | Forgejo Issue | Verifiziert |
|
|
|------|-------|---------------|------------|
|
|
| C-ERR-BOUNDARY | `done` | — | ✅ ErrorBoundary (common) erweitert: trace_id, Tailwind Fallback-UI, Retry+Neu laden Buttons, role=alert, aria-live. PluginErrorBoundary in PluginLoader erweitert mit trace_id. PluginRouteRenderer in routes mit ErrorBoundary umschlossen. AppShell+StartLayout auf common/ErrorBoundary umgestellt. 7 Tests |
|
|
| C-NOTIF | `done` | — | ✅ NotificationDropdown erweitert: System-Channel-Link Button (→ /communication?channel=system), MessageSquare Icon. Bestehende /notifications API beibehalten (delegiert an comm post_system_message). 5 Tests |
|
|
| C-TAGS | `done` | — | ✅ Verifiziert — Tags.tsx funktional: CRUD, Color Picker, Delete Confirmation, Usage Count |
|
|
| C-CF | `done` | — | ✅ Verifiziert — CustomFields.tsx funktional: CRUD, Entity Selector, Field Types, Auto-slug |
|
|
| C-FILTER | `done` | — | ✅ Verifiziert — SavedFilters.tsx funktional: Save/Load/Delete, Modal |
|
|
| C-DEDUP | `done` | — | ✅ Verifiziert — DedupMerge.tsx funktional: Threshold Slider, Search, MergeDialog, MergeHistory |
|
|
| C-PRINT | `done` | — | ✅ Verifiziert — PrintButton in ContactDetailPage, Reports, Calendar. print.ts mit printElement/printCurrentPage/exportToPDF. print.css mit @media print. 6 Tests |
|
|
| C-DOCS | `done` | — | ✅ ApiDocs.tsx erstellt: iframe mit /docs, External-Link, Route /api-docs. 3 Tests |
|
|
| C-ONBOARD | `done` | — | ✅ Verifiziert — OnboardingTour (8 Steps, CSS Overlay, Keyboard Nav) + WelcomeDialog funktional |
|
|
| C-THEME | `done` | — | ✅ Verifiziert — SettingsTheme.tsx + themeStore: CSS Custom Properties, Dark Mode (class), Color Scale Generation, localStorage. 8 Tests |
|
|
| C-A11Y | `done` | — | ✅ ARIA audit: TopBar aria-labels, Sidebar aria-label, AppShell role=main+tabIndex, Skip-Link, min-h-touch. Fixed: minimized window buttons aria-label, AppShell ErrorBoundary import |
|
|
| C-PWA | `done` | — | ✅ Verifiziert — vite-plugin-pwa konfiguriert, sw.js+registerSW.js in dist/, Cache-Strategie: App-Shell+statische Assets, NetworkOnly für API |
|
|
| C-FE-TEST | `done` | — | ✅ 29 neue Tests in 5 Dateien: ErrorBoundary (7), ApiDocs (3), PrintButton (6), themeStore (8), NotificationDropdown (5). Alle grün |
|
|
| C-DOC | `done` | — | ✅ docs/ui-design-guidelines.md aktualisiert: Error Boundaries, Print/PDF, API Docs, Notification-System, A11Y Patterns |
|
|
|
|
---
|
|
|
|
## Phasen D-J
|
|
|
|
Detaillierte Task-Listen werden beim Start der jeweiligen Phase eingetragen. Siehe `PLATFORM_ROADMAP.md` für alle Tasks.
|
|
|
|
---
|
|
|
|
## Blockierte Tasks
|
|
|
|
| Task | Grund | Blockiert seit | Lösung |
|
|
|------|-------|----------------|--------|
|
|
| — | — | — | — |
|
|
|
|
---
|
|
|
|
## Verifizierte Phase-Gate-Reviews
|
|
|
|
| Phase | 8-Check-Pipeline | Deploy | Doku | Performance | Frontend-Tests | Abgeschlossen |
|
|
|-------|------------------|--------|------|------------|----------------|----------------|
|
|
| — | — | — | — | — | — | — |
|
|
|
|
---
|
|
|
|
*Diese Datei wird vom Agent bei jedem Task-Status-Wechsel aktualisiert. Sie ist die schnelle Übersicht über den Fortschritt. Detaillierte Diskussion und Bug-Tracking laufen über Forgejo Issues.*
|