Skip to content

Regressionspruefung Weser (Pro-Server) — 2026-04-27

Systematische Pruefung des Pro-Systems weser.prilog.team nach den umfangreichen Sessions vom 17.–27. April 2026 (Shared-Hosting, Kaskaden, Aufgaben-System, React Flow, Collab-Editor, GUEST-Permissions, PWA).


1. Zusammenfassung

KategorieStatusDetails
Nginx-Konfiguration✅ OKWebSocket-Proxy, SSE, API, Matrix — alles korrekt
Synapse (Matrix)✅ OKv1.12, responsive, Federation aktiv
n8n Workflow-Engine✅ OKErreichbar, SSO-Proxy aktiv
PWA / Service Worker⚠️ VeraltetNoch selfDestroying-SW vom 26.04. — wird beim naechsten Deploy gefixt
Web-Client Build⚠️ VeraltetBuild vom 26.04. — heutige Aenderungen noch nicht deployed
Backend-Code⚠️ VeraltetLetzte Commits vom 26.04. — heutige Fixes noch nicht deployed
Datenbank-Migrationen🔴 KRITISCH6 Migrationen nicht angewendet — Backend crasht bei neuen Features
Tenant-Isolation🔴 KRITISCH3 Stellen ohne Tenant-Filter — heute gefixt, noch nicht deployed
GUEST-Permissions⚠️ Noch nicht deployedFix im Code, Seed aktualisiert Backend on Restart

2. Code-Analyse — Gefundene Probleme

2.1 KRITISCH: Cross-Tenant Datenleck in /me/tasks

Datei: src/modules/project/activity.router.ts Zeile 246

Problem: Die Membership-Query hatte keinen tenantId-Filter. Ein User der in mehreren Tenants Mitglied ist, haette Aufgaben aus allen Tenants sehen koennen.

Fix (heute angewendet):

typescript
// VORHER (unsicher):
where: { userId: jwt.sub, status: { in: ['active', 'ACTIVE'] } }

// NACHHER (sicher):
where: { userId: jwt.sub, status: { in: ['active', 'ACTIVE'] }, space: { tenantId: jwt.tenantId } }

Status: Lokal gefixt, noch nicht deployed.

2.2 KRITISCH: Morgen-Briefing ohne Tenant-Scope

Datei: src/services/task-notifications.service.ts Zeile 31-34

Problem: Die innere Membership-Query im Morgen-Briefing filterte nicht nach Tenant. Ein User haette Aufgaben-Briefings mit Tasks aus fremden Tenants erhalten koennen.

Fix (heute angewendet):

typescript
// VORHER:
where: { userId: user.userId, status: { in: ['active', 'ACTIVE'] } }

// NACHHER:
where: { userId: user.userId, status: { in: ['active', 'ACTIVE'] }, space: { tenantId: tenant.id } }

Status: Lokal gefixt, noch nicht deployed.

2.3 MITTEL: sendDmToUser ohne Tenant-Scope

Datei: src/services/task-notifications.service.ts Zeile 169-173

Problem: Die Helper-Funktion suchte die Membership fuer die DM-Zustellung ohne Tenant-Filter. Haette den falschen Raum finden koennen.

Fix (heute angewendet):

typescript
// VORHER:
where: { userId, status: { in: ['active', 'ACTIVE'] } }

// NACHHER:
where: { userId, status: { in: ['active', 'ACTIVE'] }, space: { tenantId } }

Status: Lokal gefixt, noch nicht deployed.

2.4 MITTEL: checkOverdueTasks global statt per Tenant

Datei: src/services/task-notifications.service.ts Zeile 93-102

Problem: Holt ueberfaellige Aufgaben global (take: 50), nicht per Tenant gefiltert. Sendet DMs zwar an den richtigen Tenant (via task.space.tenantId), aber die Query ist ineffizient und koennte bei vielen Tenants nur Tasks eines Tenants liefern.

Bewertung: Kein Datenleck (DM geht an korrekten Synapse), aber suboptimal.

Status: Nicht gefixt — niedrige Prioritaet.


3. Konfigurationsvergleich Pro vs Shared

3.1 Nginx (weser.prilog.team)

BlockStatusBemerkung
Matrix Client/Federation✅ OK/_matrix → localhost:8008
API Proxy✅ OK/api/ → api.prilog.chat (zentral)
Collab WebSocket✅ OK/api/platform/v1/collab/ mit Upgrade-Headers, 24h Timeout
SSE Stream✅ OKEigener Block, no-buffering, 24h Timeout
MinIO S3✅ OK/s3/ und /prilog-files/ → localhost:9000
SPA Fallback✅ OKtry_files $uri $uri/ /index.html
n8n✅ OKEigener Server-Block mit SSO-Proxy
SSL✅ OKLet's Encrypt Zertifikate fuer alle 3 Domains

3.2 Web-Client Build

AspektWertStatus
Build-Datum26.04.2026, 23:51⚠️ Vor heutigen Aenderungen
VITE_PLATFORM_BASE_URL/api (relativ)✅ Korrekt — Nginx proxyt
Service WorkerselfDestroying (alt)⚠️ Wird beim naechsten Deploy gefixt
Manifestvorhanden (489 Bytes)✅ OK
AssetsHash-versioniert✅ OK

3.3 Backend (Zentralserver)

AspektWertStatus
Letzter Commit804c158 (Phase 3 Notifications)⚠️ Vor heutigen Fixes
PM2 StatusOnline (7h Uptime, 285 Restarts)⚠️ Viele Restarts
Migrationen6 ausstehend🔴 KRITISCH

4. API-Endpoint-Tests (Live)

EndpointHTTPBewertung
GET / (SPA)200✅ Web-Client wird ausgeliefert
GET /manifest.webmanifest200✅ PWA-Manifest vorhanden
GET /sw.js200✅ Service Worker vorhanden (noch selfDestroying)
GET /api/platform/v1/bootstrap401✅ Erwartet (braucht JWT)
GET /_matrix/client/versions200✅ Synapse laeuft, v1.12
GET /.well-known/matrix/client (prilog.chat)200✅ Korrekt: {"m.homeserver":{"base_url":"https://weser.prilog.team"}}
GET /.well-known/matrix/client (prilog.team)200 (HTML)⚠️ SPA-Fallback statt JSON — harmlos, Client nutzt .chat Domain
GET /api/platform/v1/workflow/events/stream401✅ Erwartet (braucht JWT)
GET /api/platform/v1/collab/test/ws404✅ Erwartet (ungueltige docId)
GET https://n8n.weser.prilog.team/200✅ n8n laeuft

5. Datenbank-Migrationen (BLOCKER)

6 ausstehende Migrationen:

MigrationInhaltRisiko
0002_add_auto_forward_to_cascade_edgeautoForward Boolean auf CascadeEdgeNiedrig — neue Spalte, Default false
0003_add_collab_documentsCollabDocument TabelleNiedrig — neue Tabelle
0004_collab_doc_optional_spacespaceId optional in CollabDocumentNiedrig — Spalten-Aenderung
0005_add_node_types_and_conditionsnodeType, nodeConfig, nodeState auf CascadeColumnMittel — bestehende Spalten erweitert
0006_add_cascade_flow_logsCascadeFlowLog TabelleNiedrig — neue Tabelle
0007_add_board_groupsBoardGroup Tabelle + groupId auf WorkItemMittel — FK auf bestehende Tabelle

Auswirkung: Jeder Request der die neuen Tabellen/Spalten nutzt, verursacht einen Prisma-Fehler → Backend-Crash → PM2 Restart. Das erklaert die 285 Restarts.

Loesung:

bash
ssh lee@91.99.30.243
cd /var/www/backend-api
git pull
npm ci
npx prisma migrate deploy
pm2 restart backend-api

6. Deployment-Plan (Reihenfolge)

Schritt 1: Backend deployen (Zentralserver)

bash
# Auf api.prilog.chat
cd /var/www/backend-api
git pull origin main
npm ci
npx prisma migrate deploy  # 6 Migrationen anwenden
pm2 restart backend-api
pm2 logs backend-api --lines 20  # Pruefen ob Seed laeuft

Erwartete Ausgabe im Log:

  • RoleDefault Seed: System-Rollen synchronisiert (GUEST-Permissions Update)
  • Keine Prisma-Fehler mehr
  • Restarts sollten aufhoeren

Schritt 2: Web-Client deployen (Weser)

Entweder via GitHub Push + Agent-Deploy, oder manuell:

bash
# Lokal
cd prilog-web-client
npm run build
scp -r dist/* root@100.83.170.39:/var/www/prilog-web-client/

Das deployed:

  • Neuen Service Worker (nicht mehr selfDestroying)
  • GUEST/MEMBER Permission-Fallback Fix
  • React Flow, Aufgaben-Gruppen, Kaskaden-Elemente, Meine-Aufgaben-Hub

Schritt 3: Verifizierung

  1. Browser: https://weser.prilog.team/ oeffnen, DevTools → Console pruefen
  2. Login testen (als Mitarbeiter)
  3. Chat pruefen (Nachrichten senden/empfangen)
  4. Kaskaden-Hub oeffnen (neues Feature)
  5. Aufgaben im Space pruefen (Gruppen, Drag & Drop)
  6. Meine-Aufgaben-Hub pruefen (Sidebar-Icon)
  7. Collab-Editor testen (+ → Gemeinsamer Text)

7. Offene Punkte nach Deployment

PunktPrioritaetAufwand
checkOverdueTasks() per Tenant filternNiedrig15 Min
getPersonalCalendar() Tenant-Filter ergaenzenNiedrig10 Min
Membership-Status normalisieren (ACTIVE vs active)NiedrigMigration
.well-known auf .team Domain konfigurierenNiedrig5 Min Nginx
Web-Client-Build automatisieren (GitHub Actions → Weser)Mittel1h

8. Fazit

Das Pro-System ist funktional stabil — Synapse, Nginx, n8n und die SPA laufen fehlerfrei. Die kritischen Probleme sind:

  1. 6 fehlende Migrationen auf dem Zentralserver → verursachen Backend-Crashes bei neuen Features
  2. 3 fehlende Tenant-Filter → heute im Code gefixt, noch nicht deployed
  3. Veralteter Web-Client Build → heutige Fixes (GUEST, PWA, Kaskaden) fehlen

Alle drei Punkte werden durch ein Standard-Deployment geloest (git pull + migrate + build). Kein manueller Eingriff in die Datenbank noetig, keine Config-Aenderungen auf dem Weser-Server.