docs: 137 Architektur-Fehler (ARCH-001 bis ARCH-137) durch systematisches Code-Review dokumentiert
This commit is contained in:
@@ -1574,3 +1574,63 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te
|
||||
- **Problem:** AI_PARTICIPANT_TYPES ist statisch. Neue AI-Participant-Types können nicht dynamisch hinzugefügt werden.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-128: services/dedup_service.py — DUPLICATE_FIELDS statisch
|
||||
- **Datei:** app/services/dedup_service.py:18
|
||||
- **Problem:** DUPLICATE_FIELDS ist statisch. Neue Felder können nicht dynamisch hinzugefügt werden.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-129: services/import_export_service.py — COMPANY_COLUMNS/CONTACT_COLUMNS statisch
|
||||
- **Datei:** app/services/import_export_service.py:24-26
|
||||
- **Problem:** COMPANY_COLUMNS und CONTACT_COLUMNS sind statisch. Neue Felder (z.B. Custom Fields) werden nicht berücksichtigt.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-130: models/webhook.py — Webhook.secret als Plaintext
|
||||
- **Datei:** app/models/webhook.py:28
|
||||
- **Problem:** `secret: Mapped[str | None] = mapped_column(String(255), nullable=True, default=None)` — HMAC Secret als Plaintext in DB. Sollte verschlüsselt sein.
|
||||
- **Schweregrad:** Medium
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-131: services/webhook_service.py — _validate_webhook_url macht DNS-Auflösung
|
||||
- **Datei:** app/services/webhook_service.py:30
|
||||
- **Problem:** _validate_webhook_url macht socket.getaddrinfo() für DNS-Auflösung. Das ist ein synchroner Call in einer async Service-Funktion — kann den Event Loop blockieren.
|
||||
- **Schweregrad:** Medium
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-132: services/user_service.py — _UNSET Sentinel nicht serialisierbar
|
||||
- **Datei:** app/services/user_service.py:15
|
||||
- **Problem:** `_UNSET: Any = object()` — Sentinel-Objekt. Nicht serialisierbar, kann bei Logging/Debugging Probleme verursachen.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-133: models/workspace.py — 4 Tabellen überdimensioniert
|
||||
- **Datei:** app/models/workspace.py:7
|
||||
- **Problem:** Kommentar: '4 Workspace-Tabellen sind überdimensioniert für ein Mini-CRM'. Workspace, WorkspaceModule, WorkspaceUser, WorkspaceWidget — 4 Tabellen für UI-Navigation.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-134: services/bulk_permission_service.py — _rank() dupliziert
|
||||
- **Datei:** app/services/bulk_permission_service.py:18, app/core/visibility.py:30, app/services/permission_resolver.py:14
|
||||
- **Problem:** _rank() Funktion ist in 3 Dateien definiert. Sollte zentralisiert werden.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-135: services/entity_permission_service.py — post_system_message (Core→Plugin Kette)
|
||||
- **Datei:** app/services/entity_permission_service.py:25
|
||||
- **Problem:** `from app.core.notifications import post_system_message` — notifications.py importiert wiederum von plugins.builtins.contracts. Indirekte Core→Plugin Abhängigkeit.
|
||||
- **Schweregrad:** Medium
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-136: models/entity_history.py — keine deleted_at Spalte
|
||||
- **Datei:** app/models/entity_history.py
|
||||
- **Problem:** EntityHistory hat keine deleted_at Spalte. History-Einträge können nicht soft-deleted werden. Bei GDPR-Requests müssen sie manuell gelöscht werden.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
### ARCH-137: models/audit.py — search_tsv vor __table_args__
|
||||
- **Datei:** app/models/audit.py:25
|
||||
- **Problem:** search_tsv Spalte wird vor __table_args__ definiert. Gleicher Anti-Pattern wie ARCH-078.
|
||||
- **Schweregrad:** Low
|
||||
- **Status:** ⏳ Nicht gefixt
|
||||
|
||||
Reference in New Issue
Block a user