docs: 137 Architektur-Fehler (ARCH-001 bis ARCH-137) durch systematisches Code-Review dokumentiert

This commit is contained in:
Agent Zero
2026-08-22 22:40:59 +02:00
parent 880dd6408c
commit daaa88a53d
+60
View File
@@ -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