Files
leocrm/docs/audit-consolidated-errors.md
T

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)