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

This commit is contained in:
Agent Zero
2026-08-22 22:39:22 +02:00
parent a0477ddac0
commit e5c8b7beba
+66
View File
@@ -1370,3 +1370,69 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te
- **Problem:** `unregister()` entfernt Contract und _loaded. get_contract() sieht plugin_name nicht in _loaded → ruft _try_lazy_load() auf → Contract wird neu geladen. Deaktivierte Plugins werden wieder sichtbar. (Bestätigung von ARCH-014) - **Problem:** `unregister()` entfernt Contract und _loaded. get_contract() sieht plugin_name nicht in _loaded → ruft _try_lazy_load() auf → Contract wird neu geladen. Deaktivierte Plugins werden wieder sichtbar. (Bestätigung von ARCH-014)
- **Schweregrad:** High - **Schweregrad:** High
- **Status:** ⏳ Nicht gefixt - **Status:** ⏳ Nicht gefixt
### ARCH-094: StartPage.tsx — hardcoded deutsche Strings ohne i18n
- **Datei:** frontend/src/pages/StartPage.tsx:24-25
- **Problem:** 'Haupt-Workspace', 'Kontakte, Kalender, Mail und mehr' — hardcoded deutsche Strings ohne t().
- **Schweregrad:** Low
- **Status:** ⏳ Nicht gefixt
### ARCH-095: Contacts.tsx, DMS.tsx, NoAccess.tsx — leere Dateien
- **Datei:** frontend/src/pages/Contacts.tsx, DMS.tsx, NoAccess.tsx
- **Problem:** Dateien existieren aber sind leer (0 Zeilen). Entweder tot oder unvollständig.
- **Schweregrad:** Medium
- **Status:** ⏳ Nicht gefixt
### ARCH-096: main.tsx — window.__AUTH_STORE__ in Dev Mode
- **Datei:** frontend/src/main.tsx:16-18
- **Problem:** `(window as any).__AUTH_STORE__ = useAuthStore` — exponiert Auth-Store global im Dev Mode. Kann in Production leaken wenn DEV-Flag nicht korrekt gesetzt ist.
- **Schweregrad:** Low
- **Status:** ⏳ Nicht gefixt
### ARCH-097: schemas/contact.py — ContactPersonCreate hat keine Pflichtfelder
- **Datei:** app/schemas/contact.py:12-26
- **Problem:** Alle Felder sind Optional (None). Ein ContactPerson ohne Name/E-Mail wird akzeptiert.
- **Schweregrad:** Medium
- **Status:** ⏳ Nicht gefixt
### ARCH-098: schemas/role.py — RoleCreate.permissions ist dict[str, Any]
- **Datei:** app/schemas/role.py:11
- **Problem:** `permissions: dict[str, Any]` — keine Validierung der Permission-Keys. Jeder Key wird akzeptiert, auch ungültige.
- **Schweregrad:** Medium
- **Status:** ⏳ Nicht gefixt
### ARCH-099: ErrorBoundary.tsx — hardcoded deutsche Strings ohne i18n
- **Datei:** frontend/src/components/common/ErrorBoundary.tsx:60-75
- **Problem:** 'Etwas ist schiefgelaufen', 'Ein unerwarteter Fehler ist aufgetreten', 'Erneut versuchen', 'Neu laden', 'Fehlerdetails' — ohne t().
- **Schweregrad:** Low
- **Status:** ⏳ Nicht gefixt
### ARCH-100: SavedFilterBar.tsx — hardcoded deutsche Strings ohne i18n
- **Datei:** frontend/src/components/common/SavedFilterBar.tsx:10
- **Problem:** 'Speichern' und andere Strings im Docstring — hardcoded deutsch.
- **Schweregrad:** Low
- **Status:** ⏳ Nicht gefixt
### ARCH-101: windowStore.ts — globale windowIdCounter Variable
- **Datei:** frontend/src/store/windowStore.ts:30
- **Problem:** `let windowIdCounter = 0` — globale Variable außerhalb des Stores. Bei Hot-Module-Replacement kann es zu doppelten IDs kommen.
- **Schweregrad:** Low
- **Status:** ⏳ Nicht gefixt
### ARCH-102: themeStore.ts — DEFAULT_THEME hardcoded
- **Datei:** frontend/src/store/themeStore.ts:22-28
- **Problem:** DEFAULT_THEME hat hardcoded Werte (#2563eb, #d946ef, Inter, 0.5rem) die nicht aus Settings kommen.
- **Schweregrad:** Low
- **Status:** ⏳ Nicht gefixt
### ARCH-103: calendarStore.ts — Set<string> nicht serialisierbar
- **Datei:** frontend/src/store/calendarStore.ts
- **Problem:** `visibleCalendarIds: Set<string>` — Set ist nicht JSON-serialisierbar. Persistierung mit zustand persist() funktioniert nicht.
- **Schweregrad:** Medium
- **Status:** ⏳ Nicht gefixt
### ARCH-104: pluginToolbarStore.ts — registerItems überschreibt activePlugin
- **Datei:** frontend/src/store/pluginToolbarStore.ts:25
- **Problem:** `registerItems` setzt `activePlugin: plugin` automatisch. Wenn mehrere Plugins gleichzeitig registrieren, gewinnt das letzte. Sollte separaten setActivePlugin Call erfordern.
- **Schweregrad:** Low
- **Status:** ⏳ Nicht gefixt