diff --git a/PLATFORM_ROADMAP.md b/PLATFORM_ROADMAP.md index 66c1e1e..eb09d58 100644 --- a/PLATFORM_ROADMAP.md +++ b/PLATFORM_ROADMAP.md @@ -1786,7 +1786,12 @@ Der AI Assistent ist ein paralleles System das die Kommunikation-Plattform dupli **Abhängigkeiten:** P4 benötigt M1 (Universal-Registry). P1-P3, P5 unabhängig startbar. -## Phase Q — Frontend-Plugin-Architektur vollenden (geplant, 2026-09-13 aus externem Audit abgeleitet) +## Phase Q — Frontend-Plugin-Architektur ✓ ABGESCHLOSSEN (2026-09-13, Commits 895f85d + b666fe5, deployed, Health healthy) + +> **Umgesetzt am selben Tag wie geplant.** Q3 (Generator + PluginLoader) + Q4 (MiniAppHost) +> in 895f85d; Q1 (statische Plugin-Routen entfernt) + Q2 (Settings-Routen + Renderer-Variante) +> in b666fe5. Details und Live-Beweise: PROGRESS.md Phase-Q-Section. + **Ziel:** Die letzten verbliebenen Plugin-Grenzverletzungen im Frontend beseitigen — ein Plugin soll sein Backend, Manifest UND React-Seite liefern können, ohne dass zentrale Frontend-Dateien angefasst werden müssen. Basis: externes Architektur-Audit (2026-09-13), dessen Backend-Punkte bereits gefixt sind (siehe PROGRESS.md „Externer Architektur-Audit"); die vier Frontend-Punkte sind bewusst als eigene Phase geplant, weil sie ein durchdachtes Build-Time-Discovery-Konzept erfordern (Vite kann dynamische Imports zur Laufzeit im Production-Bundle nicht zuverlässig auflösen). @@ -1807,4 +1812,4 @@ Der AI Assistent ist ein paralleles System das die Kommunikation-Plattform dupli - Status quo: 11 Widget-Komponenten sind zentral hardcodiert (RecentContactsWidget, TasksSummaryWidget, ...). - Ziel: Q3-Mechanismus deckt auch dashboard_widgets/miniapps component-Pfade ab; MiniAppHost nutzt dieselbe generierte Import-Map. -**Reihenfolge:** Q3 zuerst (löst den Mechanismus), dann Q1/Q2 (Routen auf generierte Map umstellen), dann Q4. Jeder Schritt mit Vitest-Sicherung der betroffenen Seiten und Production-Build-Verifikation (Chunk-Existenz prüfen). +**Reihenfolge (wie umgesetzt):** Q3 → Q1/Q2 → Q4 (Q4 fiel mit Q3 mit, da MiniAppHost dieselbe generierte Map nutzt). Jeder Schritt mit Vitest-Sicherung der betroffenen Seiten und Production-Build-Verifikation (Chunk-Existenz prüfen). diff --git a/PROGRESS.md b/PROGRESS.md index 1db047f..a00b17c 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -35,11 +35,55 @@ - GET /roles/permissions: 141 Keys, 12/12 neue Keys sichtbar (erste Deploy-Runde nur 11/12 — system:read fehlte, weil der ursprüngliche Patch die permissions-Liste versehentlich in PluginRouteDef-kwargs platziert hatte; in 1b80090 korrekt auf Manifest-Ebene, Test f9 prüft jetzt echte Manifeste statt manueller Registrierung — Live-Check ist DoD-Pflicht) - field_definitions: contacts=39 (Plugin), users=4 (Core) — Ownership-Verschiebung live bestätigt +## Phase Q — Frontend-Plugin-Architektur vollendet (2026-09-13) ✅ — PHASE Q KOMPLETT + +**Ausgangslage:** Die 4 Frontend-Findings des externen Audits (Doppel-Architektur +Routen/Settings, STATIC_COMPONENT_MAP, widgetRegistry) wurden als Phase Q geplant +und jetzt vollständig umgesetzt. Ein Plugin meldet ab sofort Backend, Manifest +UND React-Komponenten über sein Manifest — keine zentrale Frontend-Datei muss +mehr angefasst werden. + +**Q3+Q4 (Commit 895f85d) — Build-Time-Discovery statt Zentral-Listen:** +- `scripts/generate_component_map.py`: scannt alle builtin-Manifeste + + system_miniapps.py, generiert `frontend/src/generated/pluginComponents.generated.ts` + (37 Komponenten). Fail-Hard bei Ghost-Komponenten (bewiesen: exit 1), erkennt + default- vs. named-exports, deterministisch, `--check`-Modus für CI. +- PluginLoader.tsx: STATIC_COMPONENT_MAP (26 Einträge) GELÖSCHT → generierte Map. +- MiniAppHost.tsx: widgetRegistry (11 Einträge) GELÖSCHT → generierte Map (löst Q4 mit). +- Contacts-Manifest: DedupMergePage-Pfad-Alias auf echte Datei korrigiert. + +**Q1+Q2 (Commit b666fe5) — Manifeste = einzige Routen-Quelle:** +- routes/index.tsx: 14 statische AppShell-Plugin-Routen + 9 statische + Settings-Routen + 20 tote Lazy-Imports entfernt. Nur noch Core-Routen + die + StartLayout-Hub-Bäume (/agents, /automation, /logs, /help — verschachtelte + Sub-Navigation) bleiben statisch (bewusste Entscheidung: Layout-Routen mit + Sub-Navigation werden von flachen Manifest-Einträgen nicht abgebildet). +- PluginRouteRenderer: neue `variant`-Prop — 'pages' (absolute Pfade, AppShell- + Catch-all) vs. 'settings' (bare Sub-Segmente, Descendant-Matching im + /settings-Subtree). Getrennte Entry-Listen verhindern Pfad-Kollisionen. +- Manifeste ergänzt: Calendar +/calendar/kanban, Tags +/tags (+ Menü-Item), + Automation: /workflows auf workflows:read (Parität zur ersetzten statischen + Route), tote flache /agents-+/automation-Einträge entfernt. + +**Verifikation (jeder Schritt live gemessen):** +- tsc --noEmit exit 0 (nach Q3 und nach Q1/Q2) · production build exit 0 (2×) +- Ghost-Fail-Hard: Generator exit 1 mit Fehlermeldung bei eingepflanzter Ghost-Komponente +- Vitest: Dashboard + MiniAppWindow 17/17, pluginStore 18/18, kombiniert 35/35 +- Backend-Regressionen: Route-Order, M5-MiniApps, N4-Scope, N3-Filtering 49/49 +- compileall sauber · Cross-Plugin-Checker 497/0 · ruff clean +- Full Deploy SUCCESS · Health healthy · Live-Manifest-Checks: /calendar/kanban, + /tags, workflows:read, keine toten Einträge — alle OK · SPA-Routen 200 + +**Nächster Schritt (Roadmap):** Re-Audit durch den externen Prüfer — alle 17 +Audit-Findings sind behoben (13 Backend + 4 Frontend). Danach Phase O UI-Overhaul, +Phase P Notizen-App oder UI-Backlog-Module 2-16. + + ## Weitermachen (2026-08-30, für das nächste Modell) **Produktion läuft stabil auf dem Phase-L-Deploy** (Commits b311ab7 + 559bba6, Health healthy, Alembic 0143, RLS 112 Tabellen). Alle Forgejo-Issues #351–#358 geschlossen. Forgejo ist komplett aktuell (HEAD = origin/main, 0 ungepushte Commits). -**Kürzlich abgeschlossen:** Externer Architektur-Audit verifiziert + 13 Backend-Fixes (2026-09-13, siehe Audit-Section oben). Phase L vollständig (L1-L5). UI-Backlog Modul 1 (Approvals) erledigt, Module 2-16 offen. +**Kürzlich abgeschlossen:** PHASE Q KOMPLETT — Frontend-Plugin-Architektur (2026-09-13, Commits 895f85d + b666fe5): generierte Komponenten-Map statt STATIC_COMPONENT_MAP/widgetRegistry, Plugin-Routen nur noch aus Manifesten. Externer Architektur-Audit verifiziert + 13 Backend-Fixes (2026-09-13). UI-Backlog Modul 1 (Approvals) erledigt, Module 2-16 offen. **Offene Roadmap-Phasen (user-abgestimmt, startklar):** - **Phase M** — MiniApp-Plattform & Dashboard-Builder (M1-M6). **M1 ✓** (Universal-Registry, `/api/v1/miniapps`), **M2 ✓** (persönliche Dashboards: Tabelle, CRUD, Seed, RLS), **M3 ✓** (Dashboard-Builder: Edit-Modus, Drag&Drop, Palette, Tabs), **M4 ✓** (System-Rückbau, Core = reiner Host), **M5 ✓** (Plugin-MiniApps), **M6 ✓ erledigt — PHASE M KOMPLETT** (Windows-Host + AI-Agenten-Tool send_miniapp — siehe Phase-M6-Section).