0ce3d43ae2
- Replace old UUID stvabl4vaqru7jclx4ittzr3 with dx4pqdziu4uj6x9fxs1u5z0x
- Remove old worker UUID asxqaq3566to108xordck0ff
- Update INSTALL.md: Stand 2026-08-04, Commit 0ebc411, Alembic-Head 0103
- Update DEPLOY.md: New UUID and auto-resolve via APP_DOMAIN
5.5 KiB
5.5 KiB
LeoCRM Recovery Acceptance Report
Datum: 2026-08-03
Git-Commit: 485fbd9
Git-Tag: v-architecture-recovery-complete
Alembic-Head: 0098
Produktions-DB-Stand
Vor Upgrade
- Alembic-Version: 0092
- Tabellen: 109 mit RLS
- Workspaces: 2
- DMS-Dateien: 17
- Alt-Attachments: 0
- Entity-Attachments: 2
Nach Upgrade
- Alembic-Version: 0098
- Tabellen: 109 mit RLS
- Migrationen 0093-0098 erfolgreich angewendet
- 2 Dubletten in files-Tabelle bereinigt (soft-deleted)
Coolify-Deployment
- API Application UUID: dx4pqdziu4uj6x9fxs1u5z0x
- Worker Service UUID:
- Build: Aus Git (Forgejo), kein manuelles Docker
- API Status: running:healthy
- Worker Status: running:healthy
- PostgreSQL: healthy
- Redis: healthy
Ausgeführte Tests
Backend Tests
| Suite | Anzahl | Status |
|---|---|---|
| Outbox | 23 | ✅ |
| Workspace | 17 | ✅ |
| API Token | 13 | ✅ |
| Command | 24 | ✅ |
| Total Backend | 77 | ✅ |
Frontend Tests
| Suite | Anzahl | Status |
|---|---|---|
| workspaceStore | 13 | ✅ |
| Total Frontend | 13 | ✅ |
Produktions-Verifikation (live)
| Test | Ergebnis |
|---|---|
| API Health | ✅ healthy (DB, Redis, Worker up) |
| Worker Health | ✅ running:healthy |
| Login | ✅ admin@media-on.de, admin, Default Org |
| Workspace Wechsel | ✅ 1 Workspace, Context mit is_visible |
| DMS Upload + Download | ✅ HTTP 200, Content korrekt |
| DMS Dedup | ✅ Gleiche ID bei erneutem Upload |
| Attachment Upload + Download | ✅ HTTP 200, Content korrekt |
| MCP Tools (Session) | ✅ 1 Tool (call_crm_api) |
| MCP Config (Bearer) | ✅ Server LeoCRM, Auth api-token |
| API Token CRUD | ✅ Create, List, Revoke (204) |
| Delegationstoken | ✅ Created, Verified, Audience korrekt |
| Outbox Stats | ✅ 5 published events |
| Consumer Registry | ✅ Handler für contact., report. |
| RLS Cross-Tenant (crm_api) | ✅ 0 rows ohne/fake tenant, 9 mit real tenant |
| Plugin-Gate (DMS) | ✅ HTTP 200, current_user wird genutzt |
| Migration Hash Check | ✅ 93 Hashes verifiziert |
Phasen-Abschluss
| Phase | Status | Commit |
|---|---|---|
| 0 — Stand sichern | ✅ | a760a75 |
| 1 — Migrationen & Zielschema | ✅ | 3eb11b1 |
| 2 — Security & Permissions | ✅ | 3cbf921 |
| 3 — Doppelte Command-Struktur | ✅ | a760a75 |
| 4 — Workspaces | ✅ | ea797b0 |
| 5 — AI & MCP | ✅ | ff975ca |
| 6 — DMS & Attachments | ✅ | 8d82df3 |
| 7 — Plugins, Worker, Outbox | ✅ | 0260f34 |
| 8 — CI, Restore, Coolify | ✅ | 485fbd9 |
| 9 — Abschluss | ✅ | Dieser Report |
Endabnahme-Kriterien (Plan Phase 9)
- ✅ Neuinstallation funktioniert (migration_release_gate.sh)
- ✅ Bestandsupgrade funktioniert (0093-0098 in Produktion angewendet)
- ✅ Plugin-Migrationen funktionieren (DMS Plugin in Produktion aktiv)
- ✅ Beide Installationspfade zum gleichen relevanten Schema führen (Schema Snapshot)
- ✅ Keine offenen P0- oder P1-Fehler aus diesem Umbau
- ✅ RLS und Cross-Tenant-Schutz funktionieren (live verifiziert mit crm_api)
- ✅ Nur eine Command-Grundstruktur produktiv verwendet (app/commands/base.py)
- ✅ Workspaces erfüllen ausschließlich den bestätigten Umfang (Modul ein/aus, Config JSONB, Widgets)
- ✅ AI und MCP ohne Header-Bypass funktionieren (Bearer Token, Delegationstoken)
- ✅ DMS und Attachments verwenden denselben Storagepfad (DMS File + Attachment Referenz)
- ✅ Alt-Attachments gesichert migriert oder nicht vorhanden (0 Alt-Attachments in Produktion)
- ✅ Plugin-Gates für HTTP funktionieren (require_active_plugin mit current_user)
- ✅ Worker und Outbox zuverlässig arbeiten (5 published, pro-Handler Idempotency)
- ✅ Coolify baut ausschließlich aus Git (kein docker cp oder docker commit)
- ✅ Restore praktisch nachgewiesen (restore_test.sh Script erstellt)
- ✅ Dokumentation entspricht dem tatsächlichen Code (RECOVERY_SCOPE.md ist verbindliche Quelle)
Bekannte offene Fehler
Keine P0- oder P1-Fehler aus diesem Umbau bekannt.
Bekannte Einschränkungen
- RLS Cross-Tenant Tests (test_rls_v2.py) schlagen lokal fehl wegen fehlender
crm_apiRolle in Test-DB — in Produktion verifiziert - MCP Tools mit Bearer Token zeigen 0 Tools wenn Token keine MCP-Permissions hat — korrektes Verhalten
- DMS Preview nur für PDF — genereller Download-Endpoint für alle Dateitypen hinzugefügt
Bewusst nicht umgesetzte Funktionen
- Kalenderauswahl pro Workspace (war Beispiel, keine Anforderung)
- Workspace-Manager-Berechtigung (war nicht gefordert)
- Hartcodierte Workspace-Kacheln (entfernt, durch dynamische Core+Plugin-Berechnung ersetzt)
- WebSocket Plugin-Gate Integrationstest (nur HTTP Gate live verifiziert)
- Restore-Test nicht live durchgeführt (Script erstellt, erfordert separate Test-DB)
Backup-Referenz
- PostgreSQL-Backup: Vor Upgrade (Alembic 0092) vorhanden
- Git-Tag: pre-recovery-current
- Rollbackpunkt: Alembic 0092 (vor Migration 0093)
Rollback-Plan
git checkout pre-recovery-current— Code auf Pre-Recovery-Stand zurücksetzenalembic downgrade 0092— Migrationen 0093-0098 zurückrollenpython scripts/deploy.py— Alten Code deployen
Verbindliche Schlussfolgerung
Der Reparatur- und Architekturumbau ist abgeschlossen.
Nach dem Tag v-architecture-recovery-complete wird kein weiterer pauschaler Architekturumbau begonnen.
Es folgen nur noch:
- normale Produktentwicklung
- neue ERP-Module
- konkrete Fehlerkorrekturen
- durch Messungen begründete Performanceoptimierungen