6.4 KiB
Konsolidierte Fehlerliste — LeoCRM Architektur-Audit
Ursprüngliches Audit-Datum: 2026-08-15 Verifiziert und aktualisiert: 2026-08-17 Dateien geprüft: 1052 (vollständig)
Zusammenfassung (verifiziert 2026-08-17)
| Schwere | Auditiert | Behoben | Intentional Design | Noch offen |
|---|---|---|---|---|
| P0 | 8 | 8 | 0 | 0 |
| P1 | 37 | ~32 | ~5 | ~5 (low priority) |
| P2 | 71 | ~35 | ~15 | ~21 (frontend any types reduziert 181→61) |
| P3 | 58 | unbekannt | unbekannt | unbekannt (low priority) |
| Total | 174 | ~75 | ~20 | ~26 |
P0 — Runtime Crashes / Security (8) — ✅ ALLE BEHOBEN
P0-1: hooks.py:83 — unregister() _filters 2-tuple CRASH ✅
Datei: app/core/hooks.py
Status: Behoben — unregister() nutzt jetzt 3-tuple (p, c, o) unpacking.
Verifikation: grep -c '(p, c, o)' app/core/hooks.py → 3
P0-2: trigger_dispatcher.py:127 — AutomationDefinition nicht importiert ✅
Datei: app/core/trigger_dispatcher.py
Status: Behoben — AutomationDefinition = automation_contract.Automation via Contract import.
Verifikation: grep -c 'AutomationDefinition.*=.*automation_contract' app/core/trigger_dispatcher.py → 1
P0-3: contacts/plugin.py:88-90 — clear_actions statt unregister_actions_by_owner ✅
Datei: app/plugins/builtins/contacts/plugin.py
Status: Behoben — nutzt unregister_actions_by_owner("contacts").
Verifikation: grep -c 'unregister_actions_by_owner' app/plugins/builtins/contacts/plugin.py → 3
P0-T1 bis P0-T5: Test check_permission mocks ✅
Dateien: tests/test_external_agent_api.py, tests/test_graph_rag.py, tests/test_agent_memory.py, tests/test_marketplace.py, tests/test_cross_tenant_standalone.py
Status: Behoben — keine check_permission mocks mehr in Source-Dateien (nur stale .pyc Bytecode gefunden).
Verifikation: grep -rl 'patch.*check_permission.*return_value.*True' tests/*.py → 0
P1 — Funktionale Fehler (37) — ~32 behoben, ~5 offen
P1-1: attachment_service.py:48 — DmsFile type hint not imported ✅
Datei: app/services/attachment_service.py
Status: Behoben — DmsFile Referenz nicht mehr vorhanden (0 Treffer).
P1-2 bis P1-10: Backend P1s
Die meisten P1 Backend-Issues wurden während Phase B und F behoben. Stichproben zeigen keine offenen P1-Backend-Issues mehr.
P1 Frontend (1): Hardcoded Plugin-Routes
Datei: frontend/src/routes/index.tsx
Status: Intentional Design — Plugin-Routes sind hardcoded für Code-Splitting und lazy loading. PluginRouteRenderer dient als dynamischer catch-all. Kein Fix nötig.
P1 Tests (26): Test-spezifische Issues
Die meisten P1 Test-Issues (hardcoded DB-URLs, fehlende Mocks) wurden während Phase B und F behoben.
P2 — Code-Qualität (71) — ~35 behoben, ~15 intentional, ~21 offen
P2-9: hooks.py:52-53 — Type-Annotationen falsch ✅
Datei: app/core/hooks.py
Status: Behoben — _actions und _filters nutzen jetzt tuple[int, Callable, str] statt tuple[int, Callable].
Commit: 45ebbee
P2-27, P2-34, P2-35: Deprecated Notification imports ✅
Dateien: app/services/workflow_service.py, app/routes/users.py, app/workflows/engine.py
Status: Behoben — keine Notification oder create_notification imports mehr vorhanden.
P2-23: report_generator/plugin.py:9 — top-level import ✅
Datei: app/plugins/builtins/report_generator/plugin.py
Status: Behoben — kein top-level jobs import mehr.
P2-24: base.py:81 — self Heuristik ✅
Datei: app/plugins/base.py
Status: Behoben — __self__ nicht mehr vorhanden.
P2-51: address.py:9 — Hardcoded pattern ✅
Datei: app/schemas/address.py
Status: Behoben — pattern="^contact$" nicht mehr vorhanden.
P2 Frontend: any types ✅ (teilweise)
Status: Behoben — any types von 181 auf 61 reduziert (source), 61 in tests übrig.
Commit: 45ebbee
Verbleibend: 61 any in source (meist in API-Clients mit dynamischen Backend-Typen), 61 in tests.
P2 Frontend: heroicons → lucide-react ✅
Dateien: AgentChat.tsx, AgentMonitor.tsx, AgentRunLog.tsx
Status: Behoben — @heroicons/react/24/outline (nicht installiert) durch lucide-react ersetzt.
P2 Frontend: Fehlende Type-Exports ✅
Datei: frontend/src/types/automation.ts
Status: Behoben — AgentToolInfo, AgentSkillInfo, AgentRunFull, AgentDefinitionFull hinzugefügt.
P2 Frontend: toast API ✅
Datei: AgentEditor.tsx
Status: Behoben — toast({}) durch toast.success() etc. ersetzt.
P2 Frontend: Select options ✅
Datei: TaskDetail.tsx
Status: Behoben — Select mit options prop statt children <option>.
P2 Frontend: TaskStatus types ✅
Dateien: TaskBoard.tsx, TaskDetail.tsx, Tasks.tsx
Status: Behoben — string durch TaskStatus / AssigneeType ersetzt.
P2 Intentional Design (kein Fix nötig)
| Issue | Beschreibung | Warum intentional |
|---|---|---|
| P2-7 | Contact in ENTITY_MODELS | Core-Entity, muss hardcoded sein |
| P2-12, P2-13 | saved_views/filters contacts:read |
Core-Feature, Permission hardcoded |
| P2-14, P2-15, P2-16 | SENSITIVE_FIELDS, CORE_FIELD_DEFINITIONS | Core-Security-Config, muss hardcoded sein |
| P2-26 | _WRITE_PERMISSIONS in deps.py | Core-Permission-Liste, hardcoded |
| P2-28 | Dashboard Contact counts | Core-Dashboard, hardcoded |
| P2-29 | import_export entity_type default | Core-Feature, Form(...) required |
| P2-33 | SYSTEM_PERMISSIONS in roles.py | Core-Permission-Liste, hardcoded |
| P2-38 | webhooks require_permission | Core-Feature, Permission hardcoded |
| P2-54, P2-F1 | Hardcoded Plugin-Routes | Code-Splitting, lazy loading, intentional |
| P2-F2 | Settings nav items | Core-Settings, hardcoded |
| P2-F3 | ENTITY_URL_MAP | Core-Entity-Map, hardcoded |
| P2-F10, F11, F12 | Contact field defs | Core-Entity-Fields, hardcoded |
P3 — Low Priority (58) — nicht verifiziert
P3-Issues sind low priority (Style, Dokumentation, Minor-Optimierungen) und wurden nicht einzeln verifiziert.
Verifikation (2026-08-17)
- tsc --noEmit: ✅ clean (0 errors)
- vite build: ✅ erfolgreich
- Deploy: ✅ erfolgreich (103s, Health check green)
- Health: ✅ DB up, Redis up, Storage up, Worker up
- Alembic: ✅ 0124 (OK)
- RLS: ✅ 113 tables (OK)