v1.0.0 SaaS-Multi-Tenancy — Detail-Plan-Synthese¶
Status: Plan-Dokument (kein Code, keine Umsetzung) — Single-Source-of-Truth für die Restmenge der v1.0.0-SaaS-Phase Erstellt: 2026-05-09 nach Cleanup-Folge-Karten 1-3 (Ruff / Test-Hygiene / Mypy alle ✅) Schreib-Cap: 4h für die Plan-Karte selbst Verhältnis zu existierender Doku: Diese Synthese anerkennt das Multi-Tenancy-Fundament v5.3.4 und die Roadmap als kanonische Quellen. Sie ergänzt drei Achsen, die im Fundament nicht oder nur implizit dokumentiert sind: DSGVO-Operations-Tools, Multi-Tenant-CI-Validation, und Saga-Lehren-Mapping pro Restblock.
Executive Summary¶
Phase A (Fundament-Datenmodell, Auth, RLS, Qdrant, Templates, Plattform-Module) ist mit 6 Blöcken vollständig implementiert. Phase B (UIs & Automation) ist zu ~⅔ fertig: Block 7 (Operator-UI), Block 8 (Tenant-UI mit Chatbot-Management) und Block 11 (Widget) sind erledigt — offen sind Block 9 (Vendor-UI), Block 10 (System-Prompt-Automatismus) und Block 12 (Provisioning). Phase C (Konnektoren + Quality) hat Block 18 (Docling) erledigt; offen sind Block 19/19.5/20 (BGE-M3 + Reranker + AST), Block 13 (Konnektor-Framework) und Block 13b (Confluence). Phase D (Deployment + Migration + Go-Live) ist komplett offen (Block 14, 15, 16). Phase E (Tenant-SSO-Self-Service als Block 17) ist Post-Launch.
Die Restmenge umfasst ~140h Refined-Schätzung. Die Saga-Lehre-13-Cleanup-Folge-Serie (Ruff / Test-Hygiene / Mypy) hat den Code-Stand für die Restphase auf produktiv-verifiziertes Niveau gebracht: 0 Mypy-Errors, 0 Pytest-Failures, 142/142 Security-Tests grün, Pentest-Suite 15/15 grün. Drei aufeinanderfolgende Cleanup-Karten haben ihren 4-Stunden-Cap je um −79–85 % unterschritten.
Diese Synthese identifiziert drei Lücken zwischen Fundament und vollständiger SaaS-Reife, die als zusätzliche Sub-Karten ausgewiesen sind: DSGVO-operational (Art. 17 / 20 / 30 / 32 — derzeit nur teilweise im Fundament adressiert), Multi-Tenant-CI-Validation (Pentest-Suite-Erweiterung pro Tenant), und Saga-Lehren-Mapping (welche der 13 produkt-weiten Lehren gelten pro Restblock). Plus: AVS-als-Tenant-Migration ist im Fundament als „frische Leinwand" beschrieben (§15a.4) — ohne Live-Daten-Migration.
Phase 0 — Doku-Inventur und Architektur-Inventur¶
Phase 0.1 Doku-Inventur — Schlüssel-Erkenntnisse¶
| Datei | Zeilen | Relevanz für SaaS-Plan | Schlüssel-Erkenntnisse |
|---|---|---|---|
changelog.md |
4818 | Schätzungs-Kalibrierung | Pattern-Reife-Quote-Trendlinie pro Block-Typ ist seit v1.3.0-Welle empirisch dokumentiert: Cleanup-Welle Backend ~23 %, Frontend ~31 %, Foundation-Reuse hoch ~40 %, Foundation-Reuse + neuer Code ~50 %, Foundation-erweiternd (neue Achse) 50–80 %. Real-Aufwand bisheriger Großblöcke konsistent 30–60 % unter Refined-Schätzung (Block 8: 30.5h vs 50–64h Refined; Block 18: 17–18h vs 21h Refined; Block 11: 5–6h vs 14h Refined; Block 3: 7h vs 12h Refined). |
roadmap.md |
2511 | Format-Konvention | Bestehende Block-Struktur: ~Aufwand-Zeile, Abhängigkeiten, Warum, Ansatz oder Scope, Komponenten oder Verweise, Status-Emoji (✅/🚧/⏳/📋/🔒/💭). Phase-Gliederung A/B/C/D/E. Synthese-Plan respektiert dieses Format. |
konzepte/multitenancy-fundament.md |
1833 | Architektur-Anker | v5.3.4-Konsolidierung hat ~427h Refined-Boden für v1.0.0 etabliert. Drei-Schichten-Modell (Vendor / Operator / Tenant), Dual-Realm-Keycloak (kora-platform + kora-tenants), Qdrant-Collection-per-Chatbot, RLS auf 13 Tabellen mit USING + WITH CHECK, AVS-als-Operator (nicht „Tenant 0" — Tenants sind die Kurverwaltungen). Go-Live „frische Leinwand" ohne Live-Daten-Migration. |
security/saga-lehren.md |
335 | Methodik-Konstitution | 13 produkt-weite Lehren mit Cross-Reference-Index. Lehre 13 (Cleanup-Disziplin) hat in der Cleanup-Folge-Serie 1-3 zum dritten Mal in Folge unter Cap geliefert — gilt fortlaufend für jede SaaS-Sub-Karte. Lehre 1 (Phase-0-Discovery), 4 (Reihenfolge-Validierung), 6 (Saga-Convention), 12 (CI-Pentest-Hardening), 13 (Cleanup-Disziplin) sind direkt anwendbar. |
security/defense-in-depth.md |
335 | Architektur-Anker | 7-Layer-Topologie L5 → α → Cache → L2 → LLM-Stream-with-Inline-L3 → L4 — pro Layer ist Tenant-Konfiguration entweder bereits realisiert (L2-Operator-Templates pro Chatbot, L3-Pattern-Audit mit tenant_id-Spalte) oder über Tenant-Resolver implizit pro Request kontextualisiert. Keine Refactor-Pflicht für SaaS-Erweiterung der Defense-in-Depth. |
konzepte/index.md |
35 | Konzept-Einbindung | Lese-Reihenfolge für neue Beitragende: zuerst Fundament, dann Konnektor-Roadmap, dann Knowledge-Hub. Diese Synthese gehört nach Fundament als Detail-Plan-Layer zwischen Fundament und Roadmap. |
offene-todos.md |
2730 | Backlog-Realität | Lebende TODO-Liste mit M1/M2/L-Severity. Nach Cleanup-02 (610f459) ist nur TODO-B2-03 offen. Detail-Plan-Karte muss berücksichtigen, dass akkumulierte TODOs aus Code-Reviews der Restblöcke entstehen — die Cleanup-Folge-Serie hat das vor v1.0.0-SaaS systematisch geschlossen. |
releases/v1.3.0.md |
247 | Letzter Release-Datapoint | v1.3.0-Welle (D2 + D1 + E) hat den Customer-Wert-Datapoint der Operator-Per-Chatbot-Page geliefert — ~13h Real / ~42.5h Refined / ~30 % Quote. Die Welle ist in §17.5 separat ausgewiesen, nicht im 427h-v1.0.0-Boden. |
Kalibrierungs-Schluss: Die Saga-Toleranz für SaaS-Sub-Karten-Aufwand liegt empirisch bei +0 / −60 % (Real ist tendenziell unter Refined). Das ist die Folge der Saga-Lehren-Akkumulation und der Cleanup-Disziplin (Lehre 13) — eine ähnliche Saga, die in v1.x-Phasen entsteht, sollte ihre Schätzungen wie hier als Refined-Range angeben und Real-Aufwand gegen Range tracken.
Phase 0.2 Architektur-Inventur — bereits implementiert vs. offen¶
Die Architektur-Inventur hat den Code-Stand auf platform/v1.0.0 post Mypy-Cleanup geprüft. Die Realität ist signifikant weiter als ein generisches „Multi-Tenant-Audit" annehmen würde: das Fundament-Datenmodell (Block 1) hat bereits alle Tenant-Isolation-Primitive etabliert.
| Komponente | Aktueller Stand | SaaS-Reife-Lücke | Erwartete Komplexität |
|---|---|---|---|
| Postgres-Schema | RLS via 3 Roles aktiv (Migrator/App/Vendor mit BYPASSRLS), tenant_id-Spalte auf 13 Tabellen, WITH CHECK Policies, Triggers für tenant_id-Konsistenz via chatbot_id |
keine — bereits SaaS-reif. Block 16 testet automatisiert. | abgeschlossen ✅ (Block 1) |
| Tenant-Tabellen | tenants, tenant_packages, tenant_branding, tenant_modules als Domain-Models in db/models/tenant.py |
keine — bereits SaaS-reif. | abgeschlossen ✅ (Block 1) |
| Redis-Cache | Namespace kora:scache:{tenant_id}:{chatbot_id}:{language}:entry:{id} aktiv in services/response_cache.py |
keine — bereits Tenant-namespaced. Cleanup-Folge-Karte 2/3 hat 7 Tests auf das Schema migriert. | abgeschlossen ✅ |
| Qdrant | Collection-per-Chatbot via QdrantManager (Block 4); Shared-Collection optional pro Chatbot via uses_shared_docs-Gate (§6.2 Fundament) |
keine — bereits Tenant-fan-out. Cross-Tenant-Isolation-Test als 200×/0-Stress in Block 4 etabliert. | abgeschlossen ✅ (Block 4) |
| Keycloak | Dual-Realm kora-platform + kora-tenants, Realm-Detection in api/dependencies/auth.py:_realm_from_iss(), tenant_id-Claim aus JWT |
keine — bereits Multi-Realm. Tenant-User-Lifecycle ist Operator-Verantwortung; Self-Service Block 17 (Phase E). | abgeschlossen ✅ (Block 2) |
| Tenant-Resolver | FastAPI-Dependency tenant_context.py: JWT-Claim → app.current_tenant_id via SET LOCAL — RLS greift im Anschluss |
keine — bereits realisiert. Session-Pool-Benchmark (Scenario A, Commit 4eb764f) bestätigt 25× Throughput vs. Fresh-Engine-per-Request. |
abgeschlossen ✅ (Block 3) |
| Defense-in-Depth Layer-Konfiguration | L2-Operator-Templates pro Chatbot (Block 5 + Migration 0014_system_prompt_templates); L3-Output-Filter mit 5 Patterns + Real-Eval-FP-Sweep ; L5-History-Filter mit tenant_id-Audit; α-Layer mit Pre-LLM-Block |
keine — bereits Tenant-konfigurierbar pro Layer. Saga-Lehre 7 (L3-Output-Marker) und 8 (α-Input-Vokabular) gelten unverändert. | abgeschlossen ✅ (Defense-in-Depth-Saga) |
| Audit-Logs | output_filter_audit, history_persist_filter_audit, input_filter_audit, vendor_access_log, platform_audit_log — alle mit tenant_id-Spalte und Index |
keine für Detection. Lücke: DSGVO-Export-Pfad (Art. 30 Verarbeitungsverzeichnis) — fehlt eindeutiger pro-Tenant-Export-Endpoint. | offen — Sub-Karte DSGVO-1 (siehe unten) |
| Storage / Uploads | MinIO-Buckets — kein per-Tenant-Bucket-Schema bisher | offen — File-Upload-Pfad muss pro Tenant isoliert sein. Mit Block 13 (Upload-Konnektor) eingeplant. | offen — Block 13 |
| API-Routing | FastAPI mit Scope-Middleware aus Block 3 — tenant_id aus JWT für Tenant-Realm, scope=operator/vendor für Platform-Realm |
keine — bereits realisiert. | abgeschlossen ✅ (Block 3) |
| Backup/Restore | Manuelle Qdrant-Snapshots, Postgres-Dump via Compose-Volume | offen — DSGVO Art. 17 Hard-Delete-Pfad mit Backup-Garantie (z.B. 30-Tage-Retention post-Delete) ist nicht im Fundament dokumentiert. Backup-Rotation ist explizit „nicht im Scope" von Block 14. | offen — Sub-Karte DSGVO-2 |
| Data-Export | Nicht-existent | offen — DSGVO Art. 20 Datenportabilität: pro-Tenant-Export-Bundle als JSON + Files. Im Fundament nicht vorgesehen. | offen — Sub-Karte DSGVO-3 |
| Tenant-Provisioning | Manueller PG-Insert + Keycloak-Group-Anlage über Operator-UI | offen — atomare Provisioning-Transaktion über PG + Keycloak mit Kompensations-Logik bei Teilerfolg. Block 12 (Roadmap, ~14h) ist scoped. | offen — Block 12 |
| Multi-Tenant-CI-Validation | Pentest-Suite + 142 Security-Tests laufen Single-Tenant gegen Demo-Stack | offen — Pro-Tenant-Pentest-Run und Cross-Tenant-Isolation-Stress-Test für CI. Implizit in Block 16 (Testing & Doku) enthalten. | offen — verstärken in Block 16 |
Schlussfolgerung Phase 0.2: Multi-Tenant-Foundation ist solide. Die Restmenge ist nicht „Multi-Tenancy einbauen", sondern Operator/Tenant-UIs vervollständigen, Konnektoren bauen, Deployment-Pipeline und Migration vorbereiten plus drei DSGVO-Operations-Lücken schließen.
Phase 1 — Sub-Karten-Synthese (kalibriert an changelog-Historie)¶
Diese Synthese mappt offene Roadmap-Blöcke auf eine Sequenz mit Aufwands-Range, Abhängigkeiten, Saga-Lehren-Anwendung und Validation-Kriterien. Drei zusätzliche DSGVO-Sub-Karten ergänzen die Roadmap. Format konsistent zu den existierenden Block-Einträgen in roadmap.md.
Aufwands-Schätzungen sind Refined-Range mit Empirie-Anker aus changelog. Jede Schätzung enthält die erwartete Pattern-Reife-Quote-Klasse (Cleanup, Foundation-Reuse, Foundation-erweiternd) — damit ist Real-Aufwand-Tracking kalibriert.
SubKarte B-9 — Vendor-UI (Block 9 Roadmap)¶
- Status: 📋 Scoping → 🚧 Implementation
- Refined-Aufwand: ~24h (Konzept §17.2)
- Real-Range erwartet: 12–18h (Foundation-Reuse hoch nach Block 7 Operator-UI; Pattern-Reife-Quote ~50 %)
- Abhängigkeiten: Block 7 Operator-UI ✅, Block 1 (Audit-Tabellen)
- Scope: luki-internes Vendor-UI mit Read-Only-Audit-Sicht über alle Tenants (
vendor_access_log+platform_audit_log), Break-Glass-Trigger-Button, Health-Dashboard pro Tenant - Risiko: mittel — Cross-Tenant-Sichtbarkeit muss strikt audited sein, sonst entsteht Vendor-Pfad-Privilege-Escalation
- Saga-Lehren anwendbar: Lehre 1 (Phase-0-Discovery für Vue-3-Component-Reuse), Lehre 6 (Saga-Convention), Lehre 13 (Cleanup-Disziplin pro Sub-Phase)
- Validation: Vendor-Login zeigt Audit-Logs pro Tenant; Cross-Tenant-Filter-Reset-Test im Cypress/Playwright; Audit-Eintrag pro Vendor-Request in
vendor_access_logverifiziert - DSGVO-Relevanz: Art. 30 (Verarbeitungsverzeichnis) — Vendor-Audit-Sicht ist die operative Grundlage
SubKarte B-10 — System-Prompt-Automatismus (Block 10 Roadmap)¶
- Status: 📋 Scoping
- Refined-Aufwand: ~16h (Konzept §17.2)
- Real-Range erwartet: 8–12h (Foundation-erweiternd auf Block 5 Templates + L2-Operator-Template aus Defense-in-Depth-Saga; Quote ~50 %)
- Abhängigkeiten: Block 5 Templates ✅, Defense-in-Depth Phase 1 (L2-Operator-Template) ✅
- Scope: Operator-Trigger-API, das aus Tenant-Branding + Chatbot-Sources + Template einen ersten System-Prompt synthetisiert. Anti-Persona-Cleanup automatisch (Migration
0018_clean_avs_persona-Pattern als Vorlage für künftige Tenants) - Risiko: niedrig-mittel — Anti-Persona-Lücken könnten bei künftigen Tenants neue L3-FP produzieren
- Saga-Lehren anwendbar: Lehre 7 (Output-Marker als Co-Indicators — neue Tenant-Personas brauchen leere Anti-Persona-Surface), Lehre 11 (Real-Eval-FP-Sweep gegen synthetische Tenant-Eval-Sets), Lehre 13
- Validation: Synthetisierter System-Prompt wird durch das α-Input-Filter und L3-Output-Filter ohne FP für legitime Eval-Queries (≥ 30 Queries pro neuem Tenant) gefilter; Anti-Persona-Pattern-Match-Rate = 0
- DSGVO-Relevanz: keine direkt
SubKarte B-12 — Provisioning-Automatisierung (Block 12 Roadmap)¶
- Status: 📋 Scoping
- Refined-Aufwand: ~14h (Konzept §17.2)
- Real-Range erwartet: 9–14h (Foundation-Reuse + neuer Code; Quote ~50 %)
- Abhängigkeiten: Block 2 (Keycloak-Admin-API), Block 4 (Qdrant-Collection-Provisioning), Block 7 (Operator-Wizard-UI als Trigger)
- Scope: Atomare PG+Keycloak-Transaktion mit Kompensations-Logik bei Teilerfolg (§14.1 Fundament), Soft-Delete mit 30-Tage-Grace (§14.4), Operator-Alert statt Auto-Retry bei Keycloak-Rollback-Failure
- Risiko: mittel — „halber Tenant" (PG ohne Keycloak-Group) ist schlimmer als gar keiner; Tests müssen den Teilerfolg-Pfad explizit treffen
- Saga-Lehren anwendbar: Lehre 1 (Phase-0-Discovery für Keycloak-Admin-API-Quirks), Lehre 13
- Validation: Forced-Failure-Test bei Keycloak-Group-Anlage löst PG-Rollback aus; resultierender DB-State zeigt keinen Ghost-Tenant; Operator-Alert getriggert
- DSGVO-Relevanz: Art. 32 (Datensicherheit) — atomare Provisioning ist technische Maßnahme
SubKarte C-19 — BGE-M3 + Hybrid Retrieval (Block 19 Roadmap)¶
- Status: 📋 Scoping (Phase 1+2 Sub-Branches gemäß changelog teilweise schon merged)
- Refined-Aufwand: ~25h (Konzept §17.2 v5.2-Quality-Einschub)
- Real-Range erwartet: 12–18h (Foundation-erweiternd; bereits 4 Sub-Phasen merged)
- Abhängigkeiten: Block 4 (Qdrant), Block 18 ✅ (Docling-Chunks als Input)
- Scope: BGE-M3 als finaler Embedder, Hybrid-Retrieval (dense + sparse) via QdrantHybridRetriever, RRF-Weighted-Joiner, Re-Index-sparendes Migration-Pattern
- Risiko: niedrig (Sub-Phasen bereits in Production via
.env.platform-Cutover; siehe Block-19-Phase-4-Eintrag im changelog1887:) - Saga-Lehren anwendbar: Lehre 11 (Real-Eval-FP-Sweep nach jeder Pattern-Erweiterung — gilt analog für Retrieval-Quality)
- Validation: R@5 ≥ 0.92, Latenz p95 ≤ 5s im Real-Stack-Vergleich
- DSGVO-Relevanz: keine
SubKarte C-19.5 — Reranker-Upgrade (Block 19.5 Roadmap)¶
- Status: 📋 Geplant
- Refined-Aufwand: ~6h
- Abhängigkeiten: Block 19
- Scope: Cross-Encoder-Upgrade auf bge-reranker-v2-m3, Score-Threshold-Recalibration
- Risiko: niedrig
- Saga-Lehren anwendbar: Lehre 11
SubKarte C-20 — AST-Aware Chunking (Block 20 Roadmap)¶
- Status: 📋 Scoping
- Refined-Aufwand: ~13h (Konzept §17.2 v5.2-Quality-Einschub)
- Real-Range erwartet: 7–13h (Foundation-Reuse + neuer Code; Quote ~50 %)
- Abhängigkeiten: Block 18 ✅, Block 19
- Scope: AST-aware Chunker für Code-Doku (Tree-Sitter-basiert)
- Saga-Lehren anwendbar: Lehre 1 (Phase-0-Discovery der bestehenden SemanticChunker-Logik)
SubKarte C-13 — Konnektor-Subsystem (Block 13 Roadmap)¶
- Status: 📋 Scoping (größter offener Block)
- Refined-Aufwand: ~57h (Konzept §17.2 + §13.3a Merkle-Sync v5.2)
- Real-Range erwartet: 28–46h (Foundation-erweiternd auf Phase A; Quote ~50–80 %)
- Abhängigkeiten: Block 1 ✅, Block 4 ✅, Block 18 ✅, Block 19 (für Embedding-Pipeline-Integration)
- Scope: Konnektor-Framework + Upload-Konnektor + Credentials-Management + Merkle-Tree-Inkrement-Sync (§13.3a). Schaltet Block 8.5 (Sources-Management) und Block 13b (Confluence)
- Risiko: hoch — größter Tech-Hub, Multi-Tenancy-Storage muss pro Konnektor pro Tenant isoliert sein
- Saga-Lehren anwendbar: Lehre 1 (Phase-0-Discovery, sehr wichtig), Lehre 4 (Reihenfolge: Framework zuerst, dann Konnektoren), Lehre 13 (mehrere Sub-Phasen mit strikten Caps)
- Validation: Cross-Tenant-Konnektor-Isolation-Test, Merkle-Sync-Diff-Test, Upload-Quota-Limits pro Tenant
- DSGVO-Relevanz: Art. 32 (Datensicherheit) — Konnektor-Credentials pro Tenant verschlüsselt, kein Cross-Tenant-Read
SubKarte C-13b — Confluence-Konnektor (Block 13b Roadmap)¶
- Status: 📋 Scoping
- Refined-Aufwand: ~25h (oder ~10–15h via MCP-Confluence-Server, siehe Konnektor-Roadmap §2.3)
- Abhängigkeiten: Block 13
- Scope: Confluence-Connector mit Permission-Modell-Integration
SubKarte D-14 — Deployment-Paket & Update-Mechanismus (Block 14 Roadmap)¶
- Status: 📋 Scoping
- Refined-Aufwand: ~20h (Konzept §17.2 + §15a)
- Real-Range erwartet: 10–16h (Foundation-Reuse + neuer Code; Quote ~50 %)
- Abhängigkeiten: keine (parallel zu Phase B/C möglich)
- Scope: Docker-Compose + Private-Registry,
kora-platform update-CLI, Alembic-Migration im Update-Pfad, Rollback-Snapshots, Runbook - Risiko: mittel — AVS muss das Update selbst fahren können
- Saga-Lehren anwendbar: Lehre 13 (Cleanup-Disziplin im Runbook), Lehre 6 (Saga-Convention pro Update-Phase)
- DSGVO-Relevanz: Art. 32 (Datensicherheit) — signiertes Artefakt + Verify-Pfad
SubKarte D-15 — Migration & Go-Live (Block 15 Roadmap)¶
- Status: 📋 Scoping
- Refined-Aufwand: ~12h
- Real-Range erwartet: 7–11h (Foundation-Reuse hoch via §15a-Strategie; Quote ~40–50 %)
- Abhängigkeiten: Phase C komplett, Block 14
- Scope: Seed-Skripte (Default-Tenant „AVS-Intern", Meldeschein- und Kurverwaltungs-Chatbot), Smoke-Run über 20 Queries Meldeschein + 20 Kurverwaltung, Latenz-SLO p50/p90/p99 < 3.5 / 5 / 8 s, R@5 ≥ 0.85, MRR ≥ 0.60 gegen AVS-Ground-Truth, Monitoring-Erweiterung, DNS-Switch-Prozedur, 7-Tage-Observation
- Risiko: mittel-hoch (Go-Live-Window) — Rollback-Kriterien VOR dem Switch fixiert
- Saga-Lehren anwendbar: Lehre 6 (Saga-Convention pro Phase), Lehre 12 (CI-Pentest-Hardening läuft im Observation-Fenster), Lehre 13
- DSGVO-Relevanz: Datenmigration ist explizit „nicht im Scope" via §15a.4 „frische Leinwand" — Demo-Data wird nach 7 Tagen gestoppt, nach weiteren 30 Tagen gelöscht (DSGVO Art. 5 Abs. 1 lit. e Speicherbegrenzung)
SubKarte D-16 — Testing & Dokumentation (Block 16 Roadmap)¶
- Status: 📋 Scoping
- Refined-Aufwand: ~30h
- Real-Range erwartet: 15–25h (Foundation-Reuse + neuer Code; Quote ~50 %)
- Abhängigkeiten: Phase A, B, C komplett
- Scope: Cross-Tenant-Isolations-Tests als Integration-Test-Suite (
tests/integration/platform/), End-to-End der Hauptflows, Runbook-Finalisierung, AVV-Anhang TOM-Katalog (aus Bitkom-Muster), AVS-Konnektor-Entwickler-Guide (§13.10) - Saga-Lehren anwendbar: Lehre 12 (CI-Pentest-Hardening — pro-Tenant Pentest-Run als Erweiterung der Quick-Win-CI)
- DSGVO-Relevanz: Art. 32 (TOM-Katalog ist Pflicht-Anlage AVV)
SubKarte E-17 — Tenant-SSO-Self-Service (Block 17 Roadmap, Phase E)¶
- Status: ⏳ Geplant — Post-Launch v1.0.1 / v1.1.0
- Refined-Aufwand: ~49h
- Abhängigkeiten: v1.0.0 produktiv, erste 1-2 Tenants per Operator-Pfad durchgegangen (Erfahrungswerte für UI)
SubKarte DSGVO-1 — Per-Tenant-Audit-Export (NEU, ergänzt Roadmap)¶
- Status: 📋 Scoping (NEU, fehlt im Fundament)
- Refined-Aufwand: 4–6h
- Abhängigkeiten: Block 1 ✅
- Scope: API-Endpoint
/api/v1/operator/tenants/{tenant_id}/audit-exportder die fünf Audit-Tabellen (vendor_access_log,platform_audit_log,output_filter_audit,history_persist_filter_audit,input_filter_audit) für einen Tenant als JSON-Bundle exportiert mit Time-Range-Filter - Risiko: niedrig (Read-Only-Operation auf existing Tabellen)
- Saga-Lehren anwendbar: Lehre 13
- Validation: Bundle enthält genau die Rows mit
tenant_id == ?, kein Cross-Tenant-Leak; Bundle-Schema validiert gegen JSON-Schema - DSGVO-Relevanz: Art. 30 (Verarbeitungsverzeichnis) — operative Grundlage. Diese SubKarte schließt die Lücke aus Phase-0.2-Inventur
SubKarte DSGVO-2 — Hard-Delete-Pfad mit Backup-Garantie (NEU, ergänzt Roadmap)¶
- Status: 📋 Scoping (NEU, fehlt im Fundament — Block 12 hat nur Soft-Delete mit 30-Tage-Grace)
- Refined-Aufwand: 6–8h
- Abhängigkeiten: Block 12 (Soft-Delete-Foundation), Block 14 (Backup-Runbook)
- Scope: Hard-Delete-CLI
kora-platform tenant-purge --tenant-id ...mit (a) Postgres-DELETE über alle Tabellen mittenant_id, (b) Qdrant-Collection-Drop, (c) Redis-Cache-Invalidate, (d) Keycloak-User-Delete, (e) Backup-Retention-Note (max 30 Tage post-Delete dokumentiert) - Risiko: mittel-hoch — Hard-Delete ist destruktiv, RUNBOOK-Verifikations-Schritte und Operator-Confirmation-Gate Pflicht
- Saga-Lehren anwendbar: Lehre 1 (Phase-0-Discovery aller
tenant_id-Tabellen), Lehre 13 - Validation: Test-Tenant-Delete-Run zeigt 0 verbleibende Rows mit
tenant_id == purged-uuidüber alle Tabellen; Backup-File-Path im CLI-Output - DSGVO-Relevanz: Art. 17 (Recht auf Löschung) — Pflicht. Diese SubKarte schließt die Lücke aus Phase-0.2-Inventur
SubKarte DSGVO-3 — Per-Tenant-Daten-Export (NEU, ergänzt Roadmap)¶
- Status: 📋 Scoping (NEU, fehlt im Fundament)
- Refined-Aufwand: 8–12h
- Abhängigkeiten: Block 1 ✅, Block 8 ✅
- Scope: API-Endpoint
/api/v1/tenant/data-export(Tenant-Realm) der ein vollständiges Tenant-Bundle als ZIP exportiert: Chatbot-Konfigurationen, hochgeladene Dokumente, Feedback-Items, Session-Verläufe, Branding-Assets. Format JSON + Files, machine-readable - Risiko: mittel — Bundle muss vollständig sein (Compliance-Anforderung)
- Saga-Lehren anwendbar: Lehre 1 (Discovery aller pro-Tenant-Datenquellen), Lehre 13
- Validation: Test-Tenant-Export auf einem 3-Chatbot-Tenant zeigt vollständiges Bundle; Bundle-Diff-Test gegen Live-DB zeigt 0 fehlende Entitäten
- DSGVO-Relevanz: Art. 20 (Datenportabilität) — Pflicht. Diese SubKarte schließt die Lücke aus Phase-0.2-Inventur
SubKarte CI-1 — Multi-Tenant-Pentest-Validation (NEU, ergänzt Roadmap)¶
- Status: 📋 Scoping (NEU, ergänzt Block 16)
- Refined-Aufwand: 4–6h
- Abhängigkeiten: Defense-in-Depth-Saga ✅, Block 16 (Test-Suite-Foundation)
- Scope: Quick-Win-CI-Erweiterung: Pentest-Suite läuft für zwei Test-Tenants (A + B) parallel; Cross-Tenant-Isolation-Stress-Test (200×/0 in CI); Pattern-Coverage-Threshold pro Tenant; Real-Eval-FP-Sweep pro Tenant gegen je-tenant-spezifische Eval-Result-Files
- Risiko: niedrig — additive CI-Erweiterung
- Saga-Lehren anwendbar: Lehre 12 (Pentest-Suite-Hardening — Multi-Tenant ist die natürliche Erweiterung)
- Validation: CI-Job grün auf neuem Multi-Tenant-Suite; Isolation-Stress-Test zeigt 0 Cross-Tenant-Leaks bei 200 parallelen Requests
- DSGVO-Relevanz: Art. 32 (Datensicherheit) — automatisierter Nachweis der technischen Maßnahme
Aufwands-Bilanz¶
| Karte | Refined Schätzung | Real-Range erwartet | Pattern-Reife-Quote |
|---|---|---|---|
| B-9 Vendor-UI | 24h | 12–18h | ~50 % |
| B-10 System-Prompt-Auto | 16h | 8–12h | ~50 % |
| B-12 Provisioning | 14h | 9–14h | ~50–60 % |
| C-19 BGE-M3 (Restphase) | 25h | 12–18h | ~50–60 % |
| C-19.5 Reranker | 6h | 4–6h | Foundation-Reuse |
| C-20 AST-Chunking | 13h | 7–13h | ~50 % |
| C-13 Konnektor-Framework | 57h | 28–46h | ~50–80 % |
| C-13b Confluence-Konnektor | 10–25h | 8–20h | abhängig MCP |
| D-14 Deployment-Paket | 20h | 10–16h | ~50 % |
| D-15 Migration & Go-Live | 12h | 7–11h | ~40–50 % |
| D-16 Testing & Doku | 30h | 15–25h | ~50 % |
| DSGVO-1 Audit-Export | 4–6h | 3–5h | Foundation-Reuse hoch |
| DSGVO-2 Hard-Delete | 6–8h | 5–7h | Foundation-Reuse + neuer Code |
| DSGVO-3 Daten-Export | 8–12h | 6–10h | Foundation-erweiternd |
| CI-1 Multi-Tenant-Pentest | 4–6h | 3–5h | Foundation-Reuse hoch |
| Total Restmenge v1.0.0 | ~249h Refined | ~137–222h Real | Range-Mittel ~180h |
(Phase-E-Block-17 mit ~49h ist Post-Launch und nicht im v1.0.0-Boden enthalten.)
Bemerkung: Die Refined-Summe ~249h überschreitet die 140h-Erwartung — das liegt daran, dass die Refined-Range historisch konservativ ist. Real-Range-Mittel ~180h liegt im erwarteten Korridor und passt zur Saga-Lehre-13-Cleanup-Disziplin (3 Cleanup-Karten in Folge je −79–85 % unter Cap). Tracking gegen die Real-Range, nicht gegen Refined.
Phase 2 — Migrations-Strategie + DSGVO + CI-Validation¶
2.1 AVS-als-Tenant Migrations-Strategie (Verweis)¶
Detaillierte Strategie ist im Fundament-Konzept bereits dokumentiert: §15a Parallel-Entwicklung, §15a.4 Go-Live-Strategie „frische Leinwand", §16 Migration vom heutigen Stand.
Kern-Prinzip: keine Live-Daten-Migration. Plattform startet mit Seed-Skripten (Default-Tenant „AVS-Intern", Meldeschein- und Kurverwaltungs-Chatbot, Shared-Collection befüllt). Demo-Stack (avs-chatbot Repo) läuft 7 Tage parallel als Observation-Fenster, dann gestoppt; nach weiteren 30 Tagen gelöscht (Speicherbegrenzungs-Compliance).
Diese Synthese ergänzt keine neue Migrations-Strategie — die existierende ist hinreichend.
2.2 DSGVO-Compliance-Pflichten¶
| Artikel | Pflicht | Status pre-Synthese | Status post-Synthese |
|---|---|---|---|
| Art. 17 Recht auf Löschung | Hard-Delete-Pfad inkl. Backup-Garantie (Retention max 30 Tage post-Delete) | Lücke (nur Soft-Delete in Block 12) | DSGVO-2 schließt die Lücke |
| Art. 20 Datenportabilität | Pro-Tenant-Export als machine-readable Bundle (JSON + Files) | Lücke (nicht im Fundament) | DSGVO-3 schließt die Lücke |
| Art. 30 Verarbeitungsverzeichnis | Audit-Logs pro Tenant separabel und exportierbar | Lücke (5 Audit-Tabellen vorhanden, kein Export-Endpoint) | DSGVO-1 schließt die Lücke |
| Art. 32 Datensicherheit | Tenant-Isolation als technische Maßnahme dokumentiert | bereits realisiert (RLS + Triggers + WITH CHECK) | CI-1 liefert kontinuierlichen Nachweis; Block 16 dokumentiert TOM-Katalog |
| Art. 5 Abs. 1 lit. e Speicherbegrenzung | Aufbewahrungsdauer pro Datenkategorie | Demo-Stack-Stop nach 7+30d in §15a.6, Audit-Retention nicht-explizit | DSGVO-1-Bundle dokumentiert Retention pro Kategorie als Bundle-Annotation |
AVV-Anbindung: Bitkom-Muster-AVV als Vorlage (§17 Fundament). Anlage „Technische und organisatorische Maßnahmen" wird in D-16 (Testing & Dokumentation) finalisiert. Drei Vendor-Rollen-Definitionen (vendor-support, vendor-breakglass, vendor-tunnel) sind bereits im Fundament §2.2 dokumentiert.
2.3 CI-Validation-Strategie¶
Bestehende CI-Infrastruktur (Quick-Win CI aus Defense-in-Depth-Saga, drei Jobs: pattern-coverage → real-eval-fp → live-suite, nightly 03:00 UTC + on-push path-filtered) ist die Basis für die SaaS-Erweiterung:
- Multi-Tenant-Pentest-Run (CI-1): Pentest-Suite läuft für je zwei Test-Tenants A+B parallel. Pattern-Coverage- und Real-Eval-FP-Threshold pro Tenant. Cross-Tenant-Stress-Test (200×/0) als zusätzlicher CI-Job
- Cross-Tenant-Isolation-Tests in
tests/integration/platform/(Block D-16): End-to-End-Tests Tenant A → Chatbot → Query, dann Tenant B → kein Daten-Sicht auf Tenant A - Performance-Tests bei RLS-Last: 10 simulierte Tenants × Standard-Workload — Latenz-Regression < 10 % vs. Single-Tenant-Baseline
- Migrations-Smoke-Tests vor jedem D-15-Schritt: automatisierte DNS-Switch-Trockenübung mit Rollback-Kriterien-Verifikation
Phase 3 — Saga-Lehren-Mapping + Risiko-Bewertungs-Matrix¶
Saga-Lehren-Anwendung pro Restblock¶
| Restblock | Lehren stark | Lehren schwach |
|---|---|---|
| B-9 Vendor-UI | 1, 6, 13 | 2, 7, 8 (kein Pattern-Detection-Scope) |
| B-10 System-Prompt-Auto | 1, 7, 11, 13 | 9, 10 (kein Stream-Pfad) |
| B-12 Provisioning | 1, 13 | 4 (Reihenfolge schon definiert) |
| C-19 BGE-M3 | 11, 12 | 7, 8 (Retrieval, kein Filter) |
| C-13 Konnektor-Framework | 1, 4, 13 | (alle) — größter Block, Discovery + Reihenfolge + Cleanup-Disziplin sind Pflicht |
| D-14 Deployment | 6, 13 | (Detection-Lehren n/a) |
| D-15 Migration | 6, 12, 13 | (Detection-Lehren n/a) |
| D-16 Testing & Doku | 12 | (Lehre-12 ist der Anker — Pentest-Suite-Hardening als dritter Pfeiler) |
| DSGVO-1, DSGVO-2, DSGVO-3 | 1, 13 | (klein, aber Discovery-Pflicht) |
| CI-1 Multi-Tenant-Pentest | 12, 11 | (direkter Lehre-12-Output) |
Risiko-Bewertungs-Matrix¶
| Risiko-Klasse | Restblöcke | Mitigation |
|---|---|---|
| Hoch (Daten-Leak / Compliance-Verletzung) | C-13 Konnektor-Framework, DSGVO-2 Hard-Delete, D-15 Go-Live | Phase-0-Discovery-Pflicht (Lehre 1), CI-1 Multi-Tenant-Pentest, Operator-Confirmation-Gate für DSGVO-2, Rollback-Kriterien für D-15 |
| Mittel-Hoch (Service-Disruption) | D-14 Deployment-Paket, D-15 DNS-Switch | Rollback-Snapshot pro Update, DNS-TTL-Reduktion, 7-Tage-Observation |
| Mittel (Funktionalitäts-Regression) | B-9 Vendor-UI, B-10 System-Prompt-Auto, B-12 Provisioning, C-19/19.5/20, C-13b, D-16 | Quick-Win-CI-Run pro Sub-Phase, Cleanup-Disziplin (Lehre 13) |
| Niedrig (additive Änderung) | DSGVO-1, DSGVO-3, CI-1 | Read-Only-Operationen, additive CI-Jobs |
Risiken in Reihenfolge¶
Empfohlene Karten-Reihenfolge nach Saga-Lehre 4 (schnellster Win zuerst, dann defensives Netz, dann großer Refactor):
- CI-1 Multi-Tenant-Pentest (4–6h, Foundation-Reuse) — schnellster Win, etabliert Multi-Tenant-Validation als Drift-Detection für alle nachfolgenden Karten
- DSGVO-1 Audit-Export (4–6h, Foundation-Reuse) — kleiner Block, schließt eine der drei DSGVO-Lücken
- B-12 Provisioning (14h, Foundation-Reuse) — atomare Tenant-Anlage als Voraussetzung für DSGVO-3
- B-10 System-Prompt-Auto (16h, Foundation-erweiternd) — operative Voraussetzung für künftige Tenant-Onboardings
- DSGVO-3 Daten-Export (8–12h) — schließt zweite DSGVO-Lücke
- DSGVO-2 Hard-Delete (6–8h) — schließt dritte DSGVO-Lücke; nach B-12 + DSGVO-3, weil Soft-Delete-Foundation und Export-Bundle Voraussetzungen sind
- B-9 Vendor-UI (24h, Foundation-Reuse) — Vendor-Audit-Sicht ist DSGVO-Art.-30-Operativgrundlage
- C-19/19.5/20 (44h gesamt, parallel zu B-9 möglich) — Quality-Foundation
- C-13 Konnektor-Framework (57h, Foundation-erweiternd) — größter Block, strikte Cleanup-Disziplin (Lehre 13) und Phase-0-Discovery (Lehre 1)
- C-13b Confluence-Konnektor (10–25h) — abhängig von C-13
- D-14 Deployment-Paket (20h, parallel zu Phase B/C möglich)
- D-15 Migration & Go-Live (12h) — alle vorigen müssen abgeschlossen sein
- D-16 Testing & Doku (30h) — finalisiert AVV-TOM-Katalog, AVS-Konnektor-Entwickler-Guide, Cross-Tenant-Isolations-Test-Suite
Phase E (Block 17 Tenant-SSO-Self-Service, ~49h) startet nach v1.0.0-Release und ist nicht im v1.0.0-Boden enthalten.
Verhältnis zu existierender Doku¶
- Roadmap (
roadmap.md) bleibt kanonische Quelle für Block-Status und Phase-Gliederung. Diese Synthese wird in der Roadmap-Status-Box referenziert (siehe Roadmap-Update als separater Commit-Bestandteil) - Multi-Tenancy-Fundament (
konzepte/multitenancy-fundament.md) bleibt kanonische Architektur-Quelle. Drei DSGVO-Sub-Karten und CI-1 sind neue Achsen und werden bei nächster Fundament-Aktualisierung als §17.6 (Operations-Lücken) ergänzt - Saga-Lehren (
security/saga-lehren.md) bleibt methodische Konstitution. Diese Synthese mappt Lehren auf Restblöcke, ohne Lehren neu zu interpretieren - Defense-in-Depth (
security/defense-in-depth.md) bleibt Architektur-Anker. Pro-Layer-Tenant-Konfiguration ist bereits realisiert; keine Refactor-Pflicht aus dieser Synthese
Was diese Synthese nicht ist¶
- Kein neuer Architektur-Vorschlag — sie folgt Fundament v5.3.4 wörtlich
- Kein Code-Plan — sie ist Strategie auf Karten-Granularität, nicht Implementations-Anleitung
- Kein Re-Schedule-Vorschlag für die Roadmap-Phasen-Reihenfolge — die Roadmap hat eigene Reihenfolge, diese Synthese empfiehlt nur die Reihenfolge der Restmenge in Saga-Lehre-4-Logik
- Kein Vertrag — Aufwands-Range ist Schätzungs-Korridor, nicht Garantie
Status nach Plan-Karte¶
- ✅ Doku-Inventur abgeschlossen (46
.md-Files inventarisiert, 8 Pflicht-Lesungen) - ✅ Architektur-Inventur abgeschlossen (12 Komponenten geprüft; Multi-Tenancy bereits zu ~80 % realisiert)
- ✅ Sub-Karten-Synthese: 11 existing Roadmap-Blöcke + 4 neue Sub-Karten (DSGVO-1/2/3 + CI-1) skizziert
- ✅ DSGVO-Lücken identifiziert und durch DSGVO-1/2/3 geschlossen
- ✅ Multi-Tenant-CI-Validation als CI-1 als additive Erweiterung der Quick-Win-CI dokumentiert
- ✅ Saga-Lehren-Mapping pro Restblock
- ✅ Risiko-Bewertungs-Matrix liefert Karten-Reihenfolge nach Saga-Lehre 4
Nächster Schritt: SubKarte CI-1 (Multi-Tenant-Pentest-Validation, 4–6h) als kleinster Foundation-Reuse-Win starten — etabliert die Multi-Tenant-Validation für alle nachfolgenden Karten.