From dcd20183353eb0024a9e2a3bff815642c6ad29b5 Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Mon, 14 Sep 2026 08:28:07 +0200 Subject: [PATCH] =?UTF-8?q?docs(progress):=20Spinner-Hang-Fix=20dokumentie?= =?UTF-8?q?rt=20=E2=80=94=20Zustands-Selector=20war=20Dashboard-loads-fore?= =?UTF-8?q?ver-Ursache=20(#381)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROGRESS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PROGRESS.md b/PROGRESS.md index f381de5..39e1e3a 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -88,7 +88,7 @@ Phase P Notizen-App oder UI-Backlog-Module 2-16. **OFFENE THREADS (alles Weitere hängt hier, nichts geht verloren):** 1. **UI-Backlog Module 10-16** (Reihenfolge nach Business-Nutzen): 10 Policies (4) → 11 Graph-RAG (4) → 12 Companies (9) → 13 Public-Share (3) → 14 Guests (3) → 15 External-Agent (3) → 16 Ownership-Transfer (1). Muster + Architektur-Regel: siehe Roadmap-Abschnitt "UI-Backlog" (Plugin-Module via Manifest, Core-Module statisch; Referenz: Marketplace=Plugin, Approvals=Core). 2. **Re-Audit ausstehend:** Externer Prüfer prueft leocrm-reaudit.zip (Stand b58c96f, liegt beim User). Bei neuen Findings: erst die fixen. Hinweis: ZIP enthaelt NICHT die UI-Module 2-8 — bei Bedarf frischen ZIP erstellen (git archive HEAD). -3. **Traefik no-cache-Header fuer index.html** (User-Angebot offen, prevents stale JS-Chunks nach Deploys — siehe Incident "Dashboard loads forever"). +3. **Traefik no-cache-Header fuer index.html** (User-Angebot offen, prevents stale JS-Chunks nach Deploys). HINWEIS: Der "Dashboard loads forever"-Incident wurde 2026-09-14 aufgeklaert — es war der Zustands-Selector-Bug (#381), kein Caching-Problem. Der no-cache-Header bleibt trotzdem sinnvoll gegen stale Chunks nach Deploys. 4. **Server-Entlastung** (User-Thema offen): Cron gegen alte Browser-Prozesse (Incident: 3 Zombie-Chromium, 500+ h CPU) und/oder VPS-Upgrade-Diskussion (22 Container auf 7,6 GB). 5. **Phase O UI-Overhaul:** offen 1.2 Kontakte-Drag-Drop in Ordner, 1.3 MoveDialog. 6. **Phase P Notizen-App** (P1-P5, user-abgestimmt, Roadmap-Details stehen). @@ -114,6 +114,7 @@ Phase P Notizen-App oder UI-Backlog-Module 2-16. | Bug | Issue | Fix | Verifikation (Live-Messung 2026-09-14) | |---|---|---|---| | Jeder Outbox-Event-Publish crashte im Webhook-Dispatcher mit `Neither 'AnnotatedColumn' nor 'Comparator' object has an attribute 'any'` → 158 failed Events (`file.deleted`, 2026-08-27) | [#380](https://forgejo.media-on.de/Leopoldadmin/leocrm/issues/380) | `Webhook.events` ist JSONB-Column (KEINE Relationship): `.any()` an 2 Stellen (webhook_dispatcher.py, webhook_service.py) ersetzt durch `cast(events, JSONB).contains([event])` (Commit 50d6733) | pytest test_webhooks.py 6/6 (SQL: `CAST(webhooks.events AS JSONB) @> ...`); Full Deploy Health 200; Live: `replay-all` → 158 replayed, danach stats `{published:158, failed:0}` (vorher `{failed:158}`) | +| Alle Core-Lazy-Routen im AppShell-Baum hingen ewig im Route-Suspense-Spinner ("Dashboard loads forever"-Incident) bei Direkt-Aufruf/Reload | [#381](https://forgejo.media-on.de/Leopoldadmin/leocrm/issues/381) | Root Cause via Bisekt: `useWorkspaceStore(s => s.moduleMenuOrder())` + `s.visibleModuleKeys()` erzeugten bei jedem getSnapshot NEUE Map/Set-Objekte → useSyncExternalStore-Render-Loop → Suspense-Commits landeten nie. Fix: stabile `context`-Referenz selektieren + useMemo-Ableitung (Commit 3fd0c69) | Bisekt-Beweis: Min-AppShell rendert alles, +Sidebar → Hang; Import-Bisect: Chunk resolved aber kein Commit. Live PROD: /dashboard frischer Kontext `h1='Dashboard', spinner=false` (vorher hängender Spinner); /outbox echter Login: h1='Event Outbox', Published 158, Failed 0, 35 Registry-Karten, mainTextLen 1699 | ## Produktions-Bugfixes (2026-08-27)